01 · 核心结论
Sketch2CAD 把一次局部手绘操作翻译成可执行 CAD 指令。用户决定建模意图和步骤顺序,网络在当前几何上下文中识别操作与笔画角色,几何拟合恢复参数,布尔运算真正改变模型。
论文已验证 它的贡献是“感知 → 结构化中间表示 → 参数求解 → 几何执行”的混合系统,而不是从一张完整草图自动生成所有 CAD 历史。上下文对于选中正确基础面尤其重要;无上下文的 Bevel face IoU 只有 3.23%,完整模型达到 91.73%。但操作分类本来就容易,no-context 的 99.80% 甚至略高于完整模型 99.79%。
关键边界 支持四类有限操作、平面基础面、已知正交投影视角。实现使用三角网格布尔运算并保存程序历史,不能据“CAD”名称推断输出是原生 NURBS/B-rep、STEP 文件或可制造性已获保证。原文 §3–5

02 · 论文身份与资料完整性
Changjian Li、Hao Pan、Adrien Bousseau、Niloy J. Mitra,ACM Transactions on Graphics 39(6),Article 164,SIGGRAPH Asia 2020,DOI 10.1145/3414685.3417807。第一作者机构为 University College London;其他署名包括 Microsoft Research Asia、Inria/Université Côte d’Azur、Adobe Research。
原始 14 页 PDF 与 UCL 官方论文下载字节哈希完全一致。另完整读取官方 10 页补充文档:网络结构、六位参与者全部记录、12 个示例的全部协议序列。arXiv 为 2009.04927v1,2020-09-10 提交;不是 2026 年的 SelfSketch2CAD,也不是文本到 CAD 的后续模型。
论文 PDF 与项目页没有明确 correspondence 标记;原笔记把末位作者 Niloy J. Mitra 设为未核实候选,继续保留此状态。仓库提供 Changjian Li/Hao Pan 的咨询联系方式不能单独证明通讯作者身份。UCL 项目页 · arXiv · 补充文档
原笔记 modalities=text 不符合方法输入;建议后续审核为 image、3d,可把可执行操作历史作为 code 模态候选。保留现有 CNN、geometric optimization、CAD modeling 等分类;本次只追加精读,不覆写原 YAML、正文或用户文件。
03 · 设计草图为什么适合分步翻译
工业设计草图常先画盒体与圆柱,再切角、倒圆、加减局部零件;CAD 也以类似操作构成形状。区别在于草图允许近似,CAD 指令需要确定的面、参数和合法几何。若等整幅图画完再求所有三维结构,二维深度歧义、遮挡与笔画角色会纠缠。分步交互将歧义限制到当前模型附近,已有面法线与深度成为可用约束。

本文不采用固定“楼体 → 屋顶 → 窗户”的模板顺序,而识别可交错使用的局部算子。但任意顺序并不等于任意建模语言:算子集合及参数化由人设计,用户仍负责选择视角、规划长序列并处理系统无法判定的加减歧义。

04 · 几何状态、笔画与程序表示
记当前实体为 \(M\subset\mathbb R^3\),边界在实现中用三角网格表示;用户当前步笔画集合为 \(S=\{s_i\}\),视角为已知六维参数 \(v\)。一个操作 \(O(\theta,\cdot)\) 将几何状态更新为 \(M'=O(\theta,M)\)。论文要求映射:
这里投影匹配是任务目标描述,实际优化不是一个统一端到端可微损失,而是不同操作采用不同的曲线拟合、投票和线搜索。完整历史可以写成 \(M_T=O_T(\theta_T,\cdot)\circ\cdots\circ O_1(\theta_1,M_0)\)。每步都执行并更新面标识,再进入下一轮。
| 对象 | 作用 | 容易误读之处 |
|---|---|---|
| 当前 CAD 状态 | 提供基础面、法线、深度与待编辑几何 | 不是隐藏的语言模型记忆;也不是只输入前一步文本 token |
| 当前笔画 | 描述本次编辑的轮廓与侧边 | 不要求网络恢复整幅草图的所有语义 |
| 操作类型 | 四类离散选择 | Add/Sub 是同一分类类别,正负布尔选项后续判定 |
| 参数 | 面索引、角点、曲线、距离、半径、布尔选项 | 维数随操作及多边形边数改变,所以不直接用统一向量回归 |
| 协议 | 可保存、回放、调整的操作序列 | 论文打印的简短命令未列全曲线控制点,不是完整序列化 schema |
网格中相邻三角形若二面角小于 1°,通过区域扩展组成平面多边形面。CGAL 执行实体布尔;倒角通过构造待减去的棱柱实现。对曲面基础面或 NURBS 的支持属于未来工作,不能用通用 CAD 软件能力替本文补齐。
05 · 四类操作的完整参数化

| 操作 | 参数 | 输入笔画与执行 | 限制 |
|---|---|---|---|
| Extrude | 基础面 f、法线方向偏移 d | 画移动后面边缘和延展侧边;沿面法线推拉 | d 可为负,允许向内推入 |
| Bevel | 基础面 f、角点 c、对侧角点 c′、面上轮廓曲线 l | l 及沿 cc′ 平移的另一条曲线;切除对应棱柱形成圆角 | 依赖成对角点、可识别边与单笔轮廓 |
| Add/Subtract | 基础面 f、3–6 边形底面、法线方向长度 d、并/差选项 | 画棱柱的两端和侧边,求与当前网格的 union/difference | 不是任意多面体或任意非平面扫掠 |
| Sweep | 基础面 f、两个圆截面、轮廓曲线、并/差选项 | 投影中拟合两个椭圆,提升成圆;拟合三次 Bézier 轮廓,构造旋转扫掠形 | 截面限制为圆,不是沿任意空间路径扫掠任意截面 |
每个算子有专门的可学习中间标签和几何求解器。这种设计增强可解释性、降低参数回归歧义,却也意味着增加新算子需要设计标签、数据生成、拟合和合法执行接口,不能仅在分类器末尾增加一个类别。
06 · 五通道输入与上下文裁切
每个网络输入 256×256 的草图 S、深度 D 和三通道法线 N,总计 5 通道。推理 frustum 为草图包围盒的两倍,把当前编辑附近的几何作为上下文;训练用 1.6–2.4 倍随机缩放。论文文字定义草图笔画为 1、背景为 0。
深度前景线性归一化到 0…1,最远为 0、最近为 1,背景也置 0;法线先转到相机坐标系,再加 \((1,1,1)\),前景各分量在 0…2,背景为零。未知视角不是模型输出:已知相机投影在后面的反投影与参数搜索中起决定作用。
代码差异 发布损失使用 \(M_s=1-S_{\mathrm{code}}\) 作为笔画像素 mask,说明存储草图是黑线 0、白底 1,与论文符号极性相反。原始数据块为 17 通道,C++ decoder 产生 6 输入通道和 15 标签通道;其中 scaffold 线被读取但没有拼进这五通道网络。不能把 17 通道 raw record 或 6 通道 decoder 输出误认为模型输入。decoder
07 · 一个分类器与四个双解码 U-Net
补充材料明确:5 个网络分别训练,推理时合并到同一计算图以避免切换开销。分类输出选择对应回归结果,而不是让一个大模型自回归地产生操作 token。


| 模块 | 配置 | 输出 |
|---|---|---|
| 操作分类 CNN | 5 次 3×3 Conv + 2×2 MaxPool,通道 32→64→128→256→512;256² 逐级降到 8² | 8×8 Conv 输出 256;1×1 Conv 输出 128;1×1 Conv 输出 4 logits |
| 分类正则化 | ReLU、BatchNorm decay 0.95;两次 dropout keep_prob=0.5;卷积核 truncated normal stddev=0.01 | logits 名称叫 output_prob,但源码没有在这个节点加 softmax |
| 每个 U-Net 编码器 | rootFt=32;每尺度两次 3×3 Conv,通道 32、64、128、256、512;四次 max pooling | 16×16 瓶颈 |
| 两个解码器 | 各四次 2×2 stride-2 transposed Conv,与对应 encoder skip concat,后接两次 3×3 Conv | 分别输出 256×256×1 的基础面 F 和曲线标签 C |
| 输出激活 | 面分支 sigmoid;Extrude/Bevel 曲线 sigmoid;Add/Sub/Sweep 曲线无输出激活 | 后两者要表示 0、1、2 的有序回归标签,不能用二值 sigmoid 限制 |
代码没有预训练视觉 backbone、VLM、LLM 或 diffusion。rootFt 可调但论文没有 base/large 模型对照。精确模型总参数量未在论文中报告;静态架构推算为分类器 9,990,048、每个双解码 U-Net 10,803,680、5 网合计 53,204,768 个卷积核权重,明确排除偏置和 BatchNorm 状态,不能当作已加载 checkpoint 的参数统计。完整网络定义
08 · 分类与分割损失
原式 1 为逆频率加权交叉熵,避免复杂操作样本更多造成分类先验偏置:
按论文 Extrude、Bevel、Add/Sub、Sweep 的 1:1:4:2 频率,权重应为 \(4/11,4/11,1/11,2/11\)。代码类别顺序改为 Extrude、Add/Sub、Bevel、Sweep,常量为 [0.3636,0.0909,0.3636,0.1819];最后一项四舍五入与精确 2/11 略有差别,不宜重新排列后仍使用旧索引。
基础面 F 和笔画标签 C 用 L2 回归,曲线损失只在真实笔画像素 mask 上计算:
第一项让网络找到基础面区域,第二项把笔画分成操作相关角色。非笔画像素不贡献曲线损失,避免背景数量压倒稀疏线条。最终参数并不是该损失直接监督的连续向量。
实现里 Extrude/Bevel 先对每张图按笔画数量归一,再取 batch 平均;Add/Sub/Sweep 使用 TensorFlow 的加权 mean_squared_error,在 batch 的非零权重元素上归约。笔画数量差异较大时,两种平均方式不完全相同。网络声明 L2 regularizer,但训练入口传给 Adam 的是显式分类损失或两项回归损失,未显式加入 REGULARIZATION_LOSSES;不能直接把声明系数写成实际优化的 weight decay。
09 · 从概率图恢复真正可执行的参数
基础面投票与挤出线搜索
F 以 0.5 阈值筛选后,渲染当前模型的 face-ID map,并在各面内累积支持,选出最高分基础面:
论文文字提到二值化而紧随公式仍写 F;应保留这个记号简略,不能编造完整 GUI 源码的 tie-breaking。挤出曲线 C 将 offset 边标成 1,其余侧边标 0。对基础面边界按弧长均匀采样,再沿法线寻找投影到 offset 笔画的最小单向最近距离:
初始形状包围盒对角线为 1;步长 σ=0.0075,含两端时约 401 个候选。负值允许内推。这是离散一维搜索,不是梯度下降;距离不是双向 Chamfer,也未给出按线长度归一化项。
倒角
用 C>0.5 的像素沿原始 stroke 累积投票,选择面上的轮廓笔画;将它反投影到基础面,拟合三次 Bézier 曲线。曲线与面的两条边相交,据此得到共享角点 c,并找到对侧 c′。构造由角点和曲线界定的棱柱并做差。单笔轮廓假设及可交边几何是求解条件,碎笔/over-sketching 不是天然支持。
加减棱柱
为消除“哪一端是底面”的歧义,论文先按面法线排序为 start、end,再分离侧向 profile。逐 stroke 投票角色,侧边 stroke 数量决定 3–6 边形的边数;用端点分组初始化,ICP 分别拟合两端 N-gon。若 start polygon 与基础面相交,默认加法;否则若 end 相交,选减法;都不相交则报告无法匹配,若两者都可相交则允许用户切换布尔选项。最后反投影底面并线搜索长度。

扫掠
两端笔画拟合椭圆,再沿已知基础面反投影为圆。线搜索圆心间偏移;两个圆心加轮廓与圆的交点确定轮廓所在三维平面,在平面内拟合三次 Bézier。若轮廓近似直线、两端半径近似相等,则规整为圆柱。论文没有给出所有近似判断的数值阈值,仓库也未含完整几何求解器实现。
关键代码审计 论文 Add/Sub/Sweep 定义 start/profile/end=0/1/2;C++ decoder 直接构造的 line_reg_label 是 base/offset/profile=0/1/2,且交叉像素优先 base、其次 offset、最后 profile。训练脚本消费这个标签,测试脚本按 0.5/1.5 阈值离散化。标签 1 和 2 的角色对应不能只照论文照抄;是否在独立 GUI 拟合器中再次映射,没有公开源码可验证。
10 · 合成数据如何覆盖组合上下文


从单位对角线的盒体开始,随机执行若干操作,再把最后一步作为识别目标。正文明确对长度 1、2、3、4 各生成 10K protocols,共 40K 训练形状,另生成 10K 测试 protocols;Fig.6 caption 简写“10k protocols … 40k shapes”不够准确,本页以 §6 的逐长度计数为准。
每个长度的末操作比例是 Extrude:Bevel:Add/Sub:Sweep=1:1:4:2。组合长度只有最多四步,却已能产生复杂局部上下文;这让训练不必枚举所有长程序。实际用户会创建更长序列,但这属于局部结构泛化,不代表网络学习了长期序列规划。
- 随机选可用平面基础面、偏移、底面中心和轮廓参数,避免退化、自交;没有语义功能检查
- 相机方向与面法线夹角 20°–80°;局部 frustum 以笔画为中心,再随机放大 1.6–2.4 倍
- Extrude 的 offset curve 或其他操作的 base curve 被遮挡超过 20% 时舍弃该视角
- 投影曲线端点加入高斯扰动,再轻微平滑;训练噪声对应图像对角线约 1.4%,鲁棒性测试另增至 2.8% 和 4.1%
发布 README 进一步说明约 400K training items、100K testing items,约 21GB 与 4.3GB;这是增强后的图像样本,与 40K/10K 几何协议不是矛盾。分类脚本注释具体列出 Extrude 50K、Add/Sub 200K、Bevel 50K、Sweep 100K。没有独立验证集来源、同一 protocol 的多视角划分 manifest 或完整合成器代码可核实,不能假定不存在数据泄漏。
11 · 发布训练配置与复现条件
官方 README 描述 Linux、4 张 NVIDIA GeForce GTX TITAN、TensorFlow 1.3.0、Python 3.6、CUDA 8.0、cuDNN 6。训练从随机初始化开始;rootFt 默认 32。发布脚本默认单卡,每 GPU batch=16,回归网络多卡时拆分数据并平均 tower gradients。分类脚本只扩大 batch,没有实现相同的显式多 tower 结构。
| 发布入口 | maxIter 上限 | 每卡 batch | rootFt | 验证/保存间隔 |
|---|---|---|---|---|
| train_addSub_reg.py | 630000 | 16 | 32 | 3000 |
| train_bevel_reg.py | 160000 | 16 | 32 | 1500 |
| train_extrusion_reg.py | 160000 | 16 | 32 | 1500 |
| train_opt_cls.py | 500000 | 16 | 固定分类器 | 4000 |
| train_sweep_reg.py | 310000 | 16 | 32 | 3000 |
所有训练入口调用无参数 AdamOptimizer;核对官方 TensorFlow 1.3 源码,默认学习率 0.001、β₁=0.9、β₂=0.999、ε=1e−8。源码未设置学习率退火、warmup、AMP、梯度累积或统一随机种子。这些是发布脚本设置,不等于已验证每个论文 checkpoint 的实际运行日志。
README 对 Add/Sub 称约 10 epochs 收敛,但脚本最大 630K iterations。按其 200K 样本与单卡 batch16 换算,跑满上限约 50.4 epochs;四卡约 201.6 epochs。最大步数不是实际停止位置,不能用它给论文补造训练耗时。论文及补充材料没有报告完整训练 wall time。
tf.contrib、custom C++ op 和旧 CUDA ABI 是现实复现成本。build.sh 输出 custom_graphics.so,Python loader 也载入该名;README 所写 custom_dataDecoder.so 已不一致。源文件导入 Sketch2CADNet 包名,路径设置仍需匹配。仓库后续提交只改 README/下载链接,核心代码与 2020-08-19 发布版本一致。
12 · 推理、纠错和规则化交互

- 用户选择视角并画一个局部操作的若干 strokes
- 按当前视角渲染 sketch、depth、normal 五通道;分类并预测 face/curve maps
- 阈值化与投票选面和笔画角色,执行该操作专用拟合
- 对参数及原语施加可关闭的 snapping/rectification,执行网格布尔并更新显示
- 将操作加入协议;用户可修改参数、切换加减、回放或继续下一步
论文运行机器为 i9-9900 3.1GHz 与 RTX 2070 Super:网络约 0.07 秒,线搜索 0.01–2 秒,布尔操作约 0.02 秒。相加约 0.10–2.09 秒只是分项估算,不含全部 UI 和渲染开销。部署 README 另外报告 1080Ti 初次约 2 秒、warmup 后约 70ms,应保留两组硬件语境。
规则化并非可忽略的后处理:关键点距离在基础面直径的 10% 内可吸附;边方向近似平行或角度接近规则 N-gon 内角,容差 20°;边长差在均值的 20% 内可等长。还可利用基础模型有向包围盒截面的对称面反射原语,省去重复绘制。这是几何启发式,不是学习到的自动补全策略。


系统既允许修正加减歧义,也允许编辑圆半径、偏移长度,并按比例调整 Bézier 控制点维持形状。没有 LLM prompt、beam search、温度采样、自动重试代理或学习式 reward;这些字段在本文不适用。
13 · 两张完整定量表与消融解释
Table 1 上下文与组合训练
两项分割指标越高越好;primitive 消融同样使用 40K 训练形状,但只含长度 1,在相同 10K 多长度测试集上评价。所有行与数值如下:
| Operator | Config | Face IoU (%) ↑ | Curve Accuracy (%) ↑ |
|---|---|---|---|
| Extrude | no context | 59.31 | 98.20 |
| Extrude | primitive | 70.27 | 87.78 |
| Extrude | ours | 91.78 | 98.04 |
| Bevel | no context | 3.23 | 50.24 |
| Bevel | primitive | 73.27 | 93.88 |
| Bevel | ours | 91.73 | 98.12 |
| Add/Sub | no context | 10.27 | 66.21 |
| Add/Sub | primitive | 63.81 | 87.32 |
| Add/Sub | ours | 78.26 | 93.54 |
| Sweep | no context | 7.34 | 48.90 |
| Sweep | primitive | 68.72 | 90.10 |
| Sweep | ours | 78.34 | 95.57 |
完整方法相对 primitive 的 face IoU 提升依次为 21.51、18.46、14.45、9.62 个百分点。对 Bevel、Add/Sub、Sweep,去掉上下文的 face IoU 接近失效;Extrude 仍保留 59.31%。上下文主要帮助“在哪里做”,不只是“做哪种操作”。
原表 caption 的“所有分割任务最佳”存在例外:Extrude curve accuracy 的 no context 为 98.20%,高于完整模型 98.04%,差 0.16 个百分点;原文所谓 primitive face IoU 都低“超过 10%”也不能严格套用为百分点,因为 Sweep 差为 9.62。结果应按实际表值解释,不能机械复述 caption。

操作分类另有文本结果:no context 99.80%,primitive 93.68%,ours 99.79%。这些与分割表是不同任务;99.79% 不代表整条 CAD 程序成功率、几何精度或自由手绘交互成功率。
Table 2 超出训练噪声的鲁棒性
| Operator | Config | Face IoU (%) ↑ | Curve Accuracy (%) ↑ |
|---|---|---|---|
| Extrude | level1 (ours) | 91.78 | 98.04 |
| Extrude | level2 | 89.59 | 96.28 |
| Extrude | level3 | 82.58 | 91.69 |
| Bevel | level1 (ours) | 91.73 | 98.12 |
| Bevel | level2 | 85.90 | 94.89 |
| Bevel | level3 | 75.76 | 90.27 |
| Add/Sub | level1 (ours) | 78.26 | 93.54 |
| Add/Sub | level2 | 77.09 | 92.02 |
| Add/Sub | level3 | 73.88 | 86.08 |
| Sweep | level1 (ours) | 78.34 | 95.57 |
| Sweep | level2 | 77.31 | 94.44 |
| Sweep | level3 | 75.47 | 92.78 |
噪声级别是图像对角线 1.4%、2.8%、4.1%。分类准确率分别为 99.79%、85.06%、53.20%,最高噪声比训练级别下降 46.59 个百分点。分割网络的指标下降较缓,不代表完整链路同样稳定,因为前置分类错误会选择错误的参数拟合器。

Face IoU 比较预测面 mask 与真实 mask;曲线准确率只在笔画像素比较离散标签,代码测试最后对样本取平均。空 ground-truth face 在实现中被记为 IoU=1,即使预测存在假阳性,这是一项评价边界条件。论文未提供置信区间、多 seed 或几何参数误差,不能把表格数值当作完整 CAD 可用性的充分证明。
14 · 六位用户的全部时间与评分
参与者均来自计算机科学背景:4 位 postgraduate students、1 位 master student、1 位工业实验室研究人员;多无草图/CAD 经验,P1 知道基础绘画概念,P5 略用过 Blender。使用鼠标完成三个参考目标,没有传统 CAD 软件对照组。先教学及自由练习,任务中研究者只回答 UI 问题,最后访谈。



以下以补充材料逐人记录为准,时间单位为分钟。Q1 是建模顺序容易构思,Q2 是草图能否直观地转成所需操作/参数,Q3 是结果是否达到 CAD 水平,Q4 是总体评价。补充材料写评分 0–5,正文称 5-point Likert,本页不悄悄统一量表措辞。
| 参与者 | 教学 min | 任务1 min | 任务2 min | 任务3 min | Q1 | Q2 | Q3 | Q4 |
|---|---|---|---|---|---|---|---|---|
| P1 | 30 | 10 | 12 | 20 | 5 | 5 | 5 | 4.5 |
| P2 | 40 | 8 | 14 | 23 | 5 | 4.5 | 5 | 4.8 |
| P3 | 20 | 14 | 10 | 15 | 5 | 5 | 5 | 5 |
| P4 | 30 | 10 | 10 | 10 | 5 | 4 | 5 | 4.5 |
| P5 | 25 | 8 | 6 | 10 | 5 | 5 | 4.5 | 4.8 |
| P6 | 20 | 10 | 8 | 4 | 5 | 5 | 4 | 4.5 |
按补充记录计算:教学均值 27.5 分钟;任务 1/2/3 均值为 10.00/10.00/13.67 分钟;18 次任务整体均值 11.22 分钟,范围 4–23 分钟。Q1–Q4 均值为 5.00、4.75、4.75、4.683。全体都没有关闭 regularizer,这意味着评价支持的是完整交互系统,而不是裸网络。
源内差异 正文 Fig.11 caption 称任务耗时 5–20 分钟,但图中与补充数据包含 4 和 23 分钟。P6 的任务 1/2 在补充记录为 10/8,正文图中两个对应对象显示为 8/10;本页保留原图并报告差异,不任选一个数假装没有冲突。
用户反馈集中在:缺少尺规和明确尺寸、希望椭圆辅助与笔画预处理、鼠标不如笔输入、不能在曲面上画、必须理解视角投影、需要 over-sketching 与细尺度参数微调。正面评价是近似笔画可以得到规则形状、顺序建模容易理解。六位样本和主观评分不足以宣称优于专业 CAD 操作者或减少工业生产成本。
15 · 全部示例与可回放协议

补充材料给出 Fig.12 的 a–l 共 12 组协议。下面逐条保留其命令、顺序、面/角索引与数值;DRAW 是文档中的初始构建说明。重复命令可能作用于更新后的拓扑或对称对象,因此不去重、不擅改索引。
a · Mechanical piece 1 · 3 条文档记录
DRAW: a cylinder on the ground
AddSweepShape: <plane 1, length 0.59>
SubtractPolyhedron: <plane 0, length 0.04>b · Mechanical piece 2 · 2 条文档记录
DRAW: a cylinder on the ground
SubtractSweepShape: <plane 1, length 0.17>c · Lamp 1 · 3 条文档记录
DRAW: a cylinder on the ground
AddSweepShape: <plane 1, length 0.67>
AddSweepShape: <plane 2, length 0.39>d · Lamp 2 · 2 条文档记录
AddSweepShape: <plane 1, length 0.69>
AddSweepShape: <plane 6, length 0.49>e · Hammer · 3 条文档记录
DRAW: a cylinder on the ground
SubtractPolyhedron: <plane 1, length 0.48>
AddSweepShape: <plane 2, length 1.02>f · RadioBox · 8 条文档记录
SubtractPolyhedron: <plane 3, length 0.36>
SubtractPolyhedron: <plane 3, length 0.36>
SubtractSweepShape: <plane 1, length 0.04>
SubtractSweepShape: <plane 1, length 0.04>
SubtractPolyhedron: <plane 1, length 0.40>
SubtractPolyhedron: <plane 1, length 0.40>
BevelCorner: <plane 1, corner 11>
BevelCorner: <plane 1, corner 4>g · Camera · 5 条文档记录
AddSweepShape: <plane 3, length 0.40>
SubtractPolyhedron: <plane 0, length 0.40>
SubtractSweepShape: <plane 6, length 0.03>
AddSweepShape: <plane 7, length 0.03>
SubtractSweepShape: <plane 7, length 0.52>h · Kettle 1 · 9 条文档记录
BevelCorner: <plane 3, corner 0>
BevelCorner: <plane 3, corner 1>
AddPolyhedron: <plane 4, length 0.24>
AddPolyhedron: <plane 2, length 0.13>
AddSweepShape: <plane 1, length 0.02>
BevelCorner: <plane 3, corner 24>
BevelCorner: <plane 3, corner 23>
SubtractPolyhedron: <plane 5, length 0.13>
SubtractPolyhedron: <plane 16, length 0.16>i · Kettle 2 · 9 条文档记录
SubtractPolyhedron: <plane 3, length 0.18>
BevelCorner: <plane 5, corner 2>
AddSweepShape: <plane 6, length 0.07>
SubtractPolyhedron: <plane 0, length 0.57>
SubtractPolyhedron: <plane 0, length 0.57>
AddSweepShape: <plane 20, length 0.36>
AddSweepShape: <plane 20, length 0.36>
BevelCorner: <plane 0, corner 3>
BevelCorner: <plane 0, corner 2>j · Mixer · 9 条文档记录
AddPolyhedron: <plane 1, length 0.37>
BevelCorner: <plane 3, corner 2>
BevelCorner: <plane 3, corner 2>
AddPolyhedron: <plane 2, length 0.22>
AddSweepShape: <plane 1, length 0.22>
ExtrudePlane: <plane 7, offset 0.46>
BevelCorner: <plane 11, corner 2>
BevelCorner: <plane 11, corner 1>
AddSweepShape: <plane 6, length 0.10>k · Mechanical piece 3 · 10 条文档记录
AddSweepShape: <plane 3, length 0.23>
SubtractSweepShape: <plane 6, length 0.50>
SubtractSweepShape: <plane 4, length 0.34>
SubtractSweepShape: <plane 4, length 0.34>
SubtractSweepShape: <plane 4, length 0.34>
SubtractSweepShape: <plane 4, length 0.34>
BevelCorner: <plane 4, corner 3>
BevelCorner: <plane 4, corner 2>
BevelCorner: <plane 4, corner 0>
BevelCorner: <plane 4, corner 1>l · Guitar · 15 条文档记录
BevelCorner: <plane 3, corner 1>
BevelCorner: <plane 3, corner 2>
BevelCorner: <plane 5, corner 8>
BevelCorner: <plane 5, corner 9>
SubtractSweepShape: <plane 5, length 0.27>
SubtractSweepShape: <plane 5, length 0.27>
SubtractSweepShape: <plane 5, length 0.08>
AddPolyhedron: <plane 5, length 0.06>
ExtrudePlane: <plane 10, offset 0.69>
AddPolyhedron: <plane 13, length 0.25>
BevelCorner: <plane 21, corner 0>
BevelCorner: <plane 21, corner 1>
AddSweepShape: <plane 21, length 0.05>
AddSweepShape: <plane 21, length 0.05>
AddSweepShape: <plane 23, length 0.05>正文称示例操作序列 2–11 步,但补充 Guitar 实际列出 15 条操作,Mechanical piece 3 为 10 条;“步数”可能与 UI 宏、初始化或对称生成的计数口径不同,文档没有完整说明。也应注意打印协议省略了底面曲线和 Bézier 控制点,不能仅凭这些短句重建完全相同的网格。

图 16 展示后续三维细分/平滑与 NPR 回到草图的可能流程;这不是本文网络新增的编辑算子或经过独立评价的双向生成模型。官方 演示视频 与 报告视频 已定位,本次未观看,也没有运行原型程序。
16 · 公开实现的可复现性审计
固定官方仓库提交 9702c24,2023-01-11;对比 2020-08-19 发布提交,所有实际源码保持不变,后续仅改 3 个 README。当前树只有 29 个文件,提供网络训练/测试、解码器和 C++ TensorFlow 部署封装;没有完整 GUI、参数拟合、布尔求解、CAD 合成器与渲染器源码。
| 论文或文档说法 | 源码核实与复现影响 |
|---|---|
| 草图像素 1 | loss 使用 1−user_stroke,实际数据为黑线 0;输入前处理必须核对 |
| start/profile/end 标签 | 发布 decoder 为 base/offset/profile=0/1/2;交点有优先级,后端拟合映射未公开 |
| 分类概率 | output_prob 是 logits;argmax 不变,但要显示概率或置信阈值需显式 softmax |
| weight decay | 网络注册 L2 regularizer,训练梯度目标未显式包含该 collection;不把声明值当作有效正则 |
| 多 GPU | 回归有 tower 梯度平均;分类没有相同 tower 逻辑,nb_gpus 主要增大输入 batch |
| 验证集统计 | 训练脚本只统计 val_records[0] 的记录数确定验证迭代,reader 却读全部匹配文件;多 shard 时可能只覆盖部分验证样本 |
| 训练轮数 | 无限 queue reader 加 maxIter;README 的约 10 epochs 与脚本最大步数不是同一事实,实际 checkpoint 停止时刻未知 |
| 构建与命令 | README 自定义 .so 文件名及示例 --cktDir 与实际 --ckpt 不一致;build.sh 含固定旧 TensorFlow 安装路径 |
| 数据与模型 | 21GB/4.3GB 数据及 checkpoint、frozen graph 链接在 README,可定位;本次没有下载这些大包、安装 Docker 或反序列化模型 |
| 端到端复现 | 网络部分足以审计结构和监督;几何拟合/交互后端缺失,所以不能声称已验证整套 CAD 系统复现 |
仓库代码标注 MIT,原型与数据页面描述研究用途;不同资产使用条件需按其实际发布文件核对,不把代码许可证扩展解释为所有素材的无限授权。本次只进行静态读取,以上潜在问题未通过模型运行确认。
17 · Reviewer 的技术判断
强项
将变长、异构参数恢复改为分割加几何拟合,充分利用已知相机、面法线和可执行 CAD 结构;合成短程序覆盖组合上下文,降低真实操作标注成本;能够回放、修改参数的协议,比仅输出网格更适合设计迭代。分割表清楚支持上下文和组合训练的实际作用,补充材料提供了完整逐人评价而非只有平均分。
局限与因果边界
算子语言狭窄,基础面必须平面,细小旋钮/螺纹与任意截面难处理;训练过滤明显遮挡和极端视角,实用性可能依赖用户学会选择好视角。合成数据仅保证几何可行,不保证部件有功能意义。近乎满分分类主要反映四种模式在合成分布上可分,并非证明一般设计意图被理解。
参数精度、几何自交/布尔失败率、长程序成功率、操作纠错次数、对照软件任务耗时没有系统报告。用户自由偏离参考可能体现创作体验,也削弱形状复现准确度的严格比较。吸附阈值、规则化和手工切换在最终成功中占比多少,没有相应消融。
应补的实验
按操作、视角遮挡、绘画经验、笔画断裂和长度分层,联合报告分类、面选择、参数误差、合法网格率以及整条程序完成率;固定任务与质量标准,对比菜单 CAD、手势系统及当前混合系统;分别消融 regularizer 和对称补全。发布完整生成器、拟合器、相机/标签约定和数据 split manifest,比单纯扩大 CNN 更能降低复现障碍。
18 · 对程序化材质生成与代理的启发
以下是研究设想,尚未由 Sketch2CAD 实验验证
把材质修改拆成可执行的局部操作
对现有材质图 G,与其让模型一次输出完整节点图,可以给定当前渲染、用户局部标记和目标参考,先预测“插入纹理、调粗糙度、替换 blend、连接 mask”等受限操作,再定位节点及端口,最后拟合连续参数。对应 Sketch2CAD 的 face map,可以学习当前图中“应修改哪一部分”的 grounding,而不仅分类修改意图。
\(\mathcal R\) 是真实图执行/渲染器;\(\mathcal C\) 包括端口类型、图无环、参数域与资源预算。这个目标是研究设计,不是论文原式。要避免渲染相似却图无效或严重依赖 bitmap 的结果。
组合数据比孤立节点预览更接近工作状态
primitive 消融提示:在单个节点上训练,可能学会类别却不会在组合上下文中正确定位。可随机执行短材质程序,记录每步前后渲染、节点状态和合法操作,独立划分整个 protocol,而不是把同一图的不同视图分到训练和测试。训练应进一步控制功能性、可平铺性和多光照一致性。
神经识别与约束优化各负其责
网络提供操作/节点候选,编译器排除非法结构,局部优化拟合连续参数,真实 renderer 给反馈。代理的 action 是修改图,observation 是编译日志、渲染和误差,retry 是有限预算下更换节点或回退;这些步骤应有可追溯状态,不能把 CNN 分割本身称为工具推理。
最小可验证方案
- 固定同一编辑操作语言,比较直接参数回归与“节点定位 → 参数拟合”,保持 renderer 调用数一致
- 比较 isolated primitive 和短组合程序数据,并报告未知组合的端到端合法成功率
- 将面吸附思想迁移为端口类型和参数单位约束;分别消融硬约束与视觉正则,检查是否牺牲用户自由度
- 只在低置信或多解情形请求一次用户决策,比较自动默认与交互澄清的成本,而不是无上限搜索
最重要的迁移点是:输出必须能执行,而且每一步应利用现有可验证状态。Sketch2CAD 的程序化结构为这一点提供了清楚范例,但它没有解决开放词汇材质节点图的通用生成。
19 · 一手来源与验收范围
- UCL 官方论文 PDF:14 页,与用户原 PDF 完全相同;全部正文、两表、16 图、参考文献均读取
- 官方 10 页补充文档:网络图、逐人数据和全部 12 组协议
- 官方项目页、arXiv v1、UCL 机构记录:身份、venue、资料入口互证
- 固定官方源码:5 个训练/测试入口、网络结构、数据解码、部署封装与历史差异
- TensorFlow 1.3 官方 Adam 源码:仅用于确认发布代码调用的默认超参数
原图版权归论文作者及图中注明的原素材权利人,包含 Fig.1 的 Eissen/Steur 图例。本次完成资源下载/解码、数值行列、公式源码、导航、文件体积和原笔记前缀的静态验证;浏览器布局与 MathJax 运行验证按要求暂缓。没有运行外部模型、CAD 原型、Docker 或写入用户知识库。