PAPER READING · SIGGRAPH ASIA 2020 · ACM TOG 39(6)

Sketch2CAD

在几何上下文中把手绘翻译为可执行 CAD 操作
神经分割、参数拟合、布尔执行与交互纠错

Changjian Li · Hao Pan · Adrien Bousseau · Niloy J. Mitra
14 页正文与 10 页补充材料完整阅读 · 2026-09-30

01 · 核心结论

Sketch2CAD 把一次局部手绘操作翻译成可执行 CAD 指令。用户决定建模意图和步骤顺序,网络在当前几何上下文中识别操作与笔画角色,几何拟合恢复参数,布尔运算真正改变模型。

论文已验证 它的贡献是“感知 → 结构化中间表示 → 参数求解 → 几何执行”的混合系统,而不是从一张完整草图自动生成所有 CAD 历史。上下文对于选中正确基础面尤其重要;无上下文的 Bevel face IoU 只有 3.23%,完整模型达到 91.73%。但操作分类本来就容易,no-context 的 99.80% 甚至略高于完整模型 99.79%。

关键边界 支持四类有限操作、平面基础面、已知正交投影视角。实现使用三角网格布尔运算并保存程序历史,不能据“CAD”名称推断输出是原生 NURBS/B-rep、STEP 文件或可制造性已获保证。原文 §3–5

原 Fig. 1:从设计草图到分步输入、CAD 指令和最终模型;含 Eissen/Steur 原素材
原 Fig. 1 · 从设计草图到分步输入、CAD 指令和最终模型;含 Eissen/Steur 原素材 · Li, Pan, Bousseau & Mitra, 2020 · PDF p.1

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 指令需要确定的面、参数和合法几何。若等整幅图画完再求所有三维结构,二维深度歧义、遮挡与笔画角色会纠缠。分步交互将歧义限制到当前模型附近,已有面法线与深度成为可用约束。

原 Fig. 2:草图与 CAD 建模工作流的对应
原 Fig. 2 · 草图与 CAD 建模工作流的对应 · Li, Pan, Bousseau & Mitra, 2020 · PDF p.2

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

原 Fig. 3:分类、分割、参数拟合与几何执行的推理管线
原 Fig. 3 · 分类、分割、参数拟合与几何执行的推理管线 · Li, Pan, Bousseau & Mitra, 2020 · PDF p.4

04 · 几何状态、笔画与程序表示

记当前实体为 \(M\subset\mathbb R^3\),边界在实现中用三角网格表示;用户当前步笔画集合为 \(S=\{s_i\}\),视角为已知六维参数 \(v\)。一个操作 \(O(\theta,\cdot)\) 将几何状态更新为 \(M'=O(\theta,M)\)。论文要求映射:

\[\Phi(M,S,v)=O(\theta,\cdot),\qquad \pi_v\bigl(O(\theta,M)\bigr)\ \text{应与用户当前笔画相匹配}.\]

这里投影匹配是任务目标描述,实际优化不是一个统一端到端可微损失,而是不同操作采用不同的曲线拟合、投票和线搜索。完整历史可以写成 \(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 · 四类操作的完整参数化

原 Fig. 4:四类操作的完整参数、动作和草图图例
原 Fig. 4 · 四类操作的完整参数、动作和草图图例 · Li, Pan, Bousseau & Mitra, 2020 · PDF p.5
操作参数输入笔画与执行限制
Extrude基础面 f、法线方向偏移 d画移动后面边缘和延展侧边;沿面法线推拉d 可为负,允许向内推入
Bevel基础面 f、角点 c、对侧角点 c′、面上轮廓曲线 ll 及沿 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。

补充 Figure 1:操作分类器完整结构
补充 Figure 1 · 操作分类器完整结构 · 补充文档 p.1
补充 Figure 2:每个操作的编码器与双解码分割网络
补充 Figure 2 · 每个操作的编码器与双解码分割网络 · 补充文档 p.2
模块配置输出
操作分类 CNN5 次 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.01logits 名称叫 output_prob,但源码没有在这个节点加 softmax
每个 U-Net 编码器rootFt=32;每尺度两次 3×3 Conv,通道 32、64、128、256、512;四次 max pooling16×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 为逆频率加权交叉熵,避免复杂操作样本更多造成分类先验偏置:

\[\mathcal L_{\mathrm{cls}}=-w_O\log P_O,\qquad w_O=\frac{1/N_O}{\sum_{O'}1/N_{O'}}.\]

按论文 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 上计算:

\[\mathcal L_{\mathrm{reg}}=\frac1{256^2}\|F-\widetilde F\|_2^2+\frac1{|\widetilde M|}\|\widetilde M\odot(C-\widetilde C)\|_2^2.\]

第一项让网络找到基础面区域,第二项把笔画分成操作相关角色。非笔画像素不贡献曲线损失,避免背景数量压倒稀疏线条。最终参数并不是该损失直接监督的连续向量。

实现里 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^{\ast}=\arg\max_{f_i}\sum_{\mathrm{Id}(x,y)=f_i}F(x,y).\]

论文文字提到二值化而紧随公式仍写 F;应保留这个记号简略,不能编造完整 GUI 源码的 tie-breaking。挤出曲线 C 将 offset 边标成 1,其余侧边标 0。对基础面边界按弧长均匀采样,再沿法线寻找投影到 offset 笔画的最小单向最近距离:

\[d^{\ast}=\arg\min_{d\in[-1.5,1.5]}\sum_{p\in\partial f}\min_{q:C_o(q)=1}\|\pi_v(p+d\,n_f)-q\|_2.\]

初始形状包围盒对角线为 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 相交,选减法;都不相交则报告无法匹配,若两者都可相交则允许用户切换布尔选项。最后反投影底面并线搜索长度。

原 Fig. 5:加减操作中基础端与偏移端的歧义
原 Fig. 5 · 加减操作中基础端与偏移端的歧义 · Li, Pan, Bousseau & Mitra, 2020 · PDF p.7

扫掠

两端笔画拟合椭圆,再沿已知基础面反投影为圆。线搜索圆心间偏移;两个圆心加轮廓与圆的交点确定轮廓所在三维平面,在平面内拟合三次 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 · 合成数据如何覆盖组合上下文

原 Fig. 6:合成协议、视角采样和监督图生成
原 Fig. 6 · 合成协议、视角采样和监督图生成 · Li, Pan, Bousseau & Mitra, 2020 · PDF p.8
原 Fig. 7:短组合操作构造的训练几何与下一步笔画
原 Fig. 7 · 短组合操作构造的训练几何与下一步笔画 · Li, Pan, Bousseau & Mitra, 2020 · PDF p.8

从单位对角线的盒体开始,随机执行若干操作,再把最后一步作为识别目标。正文明确对长度 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。组合长度只有最多四步,却已能产生复杂局部上下文;这让训练不必枚举所有长程序。实际用户会创建更长序列,但这属于局部结构泛化,不代表网络学习了长期序列规划。

发布 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 上限每卡 batchrootFt验证/保存间隔
train_addSub_reg.py63000016323000
train_bevel_reg.py16000016321500
train_extrusion_reg.py16000016321500
train_opt_cls.py50000016固定分类器4000
train_sweep_reg.py31000016323000

所有训练入口调用无参数 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 · 推理、纠错和规则化交互

原 Fig. 8:原型界面,含参数编辑、绘制画布和历史协议
原 Fig. 8 · 原型界面,含参数编辑、绘制画布和历史协议 · Li, Pan, Bousseau & Mitra, 2020 · PDF p.8
  1. 用户选择视角并画一个局部操作的若干 strokes
  2. 按当前视角渲染 sketch、depth、normal 五通道;分类并预测 face/curve maps
  3. 阈值化与投票选面和笔画角色,执行该操作专用拟合
  4. 对参数及原语施加可关闭的 snapping/rectification,执行网格布尔并更新显示
  5. 将操作加入协议;用户可修改参数、切换加减、回放或继续下一步

论文运行机器为 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% 内可等长。还可利用基础模型有向包围盒截面的对称面反射原语,省去重复绘制。这是几何启发式,不是学习到的自动补全策略。

原 Fig. 9:吸附、规则化与对称补全
原 Fig. 9 · 吸附、规则化与对称补全 · Li, Pan, Bousseau & Mitra, 2020 · PDF p.9
原 Fig. 10:参数调整与初始基本体变更
原 Fig. 10 · 参数调整与初始基本体变更 · Li, Pan, Bousseau & Mitra, 2020 · PDF p.9

系统既允许修正加减歧义,也允许编辑圆半径、偏移长度,并按比例调整 Bézier 控制点维持形状。没有 LLM prompt、beam search、温度采样、自动重试代理或学习式 reward;这些字段在本文不适用。

13 · 两张完整定量表与消融解释

Table 1 上下文与组合训练

两项分割指标越高越好;primitive 消融同样使用 40K 训练形状,但只含长度 1,在相同 10K 多长度测试集上评价。所有行与数值如下:

OperatorConfigFace IoU (%) ↑Curve Accuracy (%) ↑
Extrudeno context59.3198.20
Extrudeprimitive70.2787.78
Extrudeours91.7898.04
Bevelno context3.2350.24
Bevelprimitive73.2793.88
Bevelours91.7398.12
Add/Subno context10.2766.21
Add/Subprimitive63.8187.32
Add/Subours78.2693.54
Sweepno context7.3448.90
Sweepprimitive68.7290.10
Sweepours78.3495.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。

原 Fig. 14:无上下文、primitive 与完整模型的分割对照
原 Fig. 14 · 无上下文、primitive 与完整模型的分割对照 · Li, Pan, Bousseau & Mitra, 2020 · PDF p.11

操作分类另有文本结果:no context 99.80%,primitive 93.68%,ours 99.79%。这些与分割表是不同任务;99.79% 不代表整条 CAD 程序成功率、几何精度或自由手绘交互成功率。

Table 2 超出训练噪声的鲁棒性

OperatorConfigFace IoU (%) ↑Curve Accuracy (%) ↑
Extrudelevel1 (ours)91.7898.04
Extrudelevel289.5996.28
Extrudelevel382.5891.69
Bevellevel1 (ours)91.7398.12
Bevellevel285.9094.89
Bevellevel375.7690.27
Add/Sublevel1 (ours)78.2693.54
Add/Sublevel277.0992.02
Add/Sublevel373.8886.08
Sweeplevel1 (ours)78.3495.57
Sweeplevel277.3194.44
Sweeplevel375.4792.78

噪声级别是图像对角线 1.4%、2.8%、4.1%。分类准确率分别为 99.79%、85.06%、53.20%,最高噪声比训练级别下降 46.59 个百分点。分割网络的指标下降较缓,不代表完整链路同样稳定,因为前置分类错误会选择错误的参数拟合器。

原 Fig. 15:全部三级噪声、分割图与拟合结果
原 Fig. 15 · 全部三级噪声、分割图与拟合结果 · Li, Pan, Bousseau & Mitra, 2020 · PDF p.12

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 问题,最后访谈。

补充 Figure 3:用户研究的三个目标模型
补充 Figure 3 · 用户研究的三个目标模型 · 补充文档 p.3
原 Fig. 11:全部六位参与者、三个参考对象和完成时间
原 Fig. 11 · 全部六位参与者、三个参考对象和完成时间 · Li, Pan, Bousseau & Mitra, 2020 · PDF p.9
原 Fig. 13:真实用户采用的不同建模步骤
原 Fig. 13 · 真实用户采用的不同建模步骤 · Li, Pan, Bousseau & Mitra, 2020 · PDF p.11

以下以补充材料逐人记录为准,时间单位为分钟。Q1 是建模顺序容易构思,Q2 是草图能否直观地转成所需操作/参数,Q3 是结果是否达到 CAD 水平,Q4 是总体评价。补充材料写评分 0–5,正文称 5-point Likert,本页不悄悄统一量表措辞。

参与者教学 min任务1 min任务2 min任务3 minQ1Q2Q3Q4
P1301012205554.5
P2408142354.554.8
P3201410155555
P4301010105454.5
P5258610554.54.8
P62010845544.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 结果序列
原 Fig. 12 · 全部 a–l 结果序列 · Li, Pan, Bousseau & Mitra, 2020 · PDF p.10

补充材料给出 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 控制点,不能仅凭这些短句重建完全相同的网格。

原 Fig. 16:CAD 编辑后重新进行 NPR 草图渲染
原 Fig. 16 · CAD 编辑后重新进行 NPR 草图渲染 · Li, Pan, Bousseau & Mitra, 2020 · PDF p.13

图 16 展示后续三维细分/平滑与 NPR 回到草图的可能流程;这不是本文网络新增的编辑算子或经过独立评价的双向生成模型。官方 演示视频 与 报告视频 已定位,本次未观看,也没有运行原型程序。

16 · 公开实现的可复现性审计

固定官方仓库提交 9702c24,2023-01-11;对比 2020-08-19 发布提交,所有实际源码保持不变,后续仅改 3 个 README。当前树只有 29 个文件,提供网络训练/测试、解码器和 C++ TensorFlow 部署封装;没有完整 GUI、参数拟合、布尔求解、CAD 合成器与渲染器源码。

论文或文档说法源码核实与复现影响
草图像素 1loss 使用 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,而不仅分类修改意图。

\[(O^{\ast},\theta^{\ast})=\arg\min_{O,\theta}\mathcal D\!\left(\mathcal R\bigl(O(\theta,G)\bigr),I^{\ast}\right)+\lambda\mathcal C\bigl(O(\theta,G)\bigr).\]

\(\mathcal R\) 是真实图执行/渲染器;\(\mathcal C\) 包括端口类型、图无环、参数域与资源预算。这个目标是研究设计,不是论文原式。要避免渲染相似却图无效或严重依赖 bitmap 的结果。

组合数据比孤立节点预览更接近工作状态

primitive 消融提示:在单个节点上训练,可能学会类别却不会在组合上下文中正确定位。可随机执行短材质程序,记录每步前后渲染、节点状态和合法操作,独立划分整个 protocol,而不是把同一图的不同视图分到训练和测试。训练应进一步控制功能性、可平铺性和多光照一致性。

神经识别与约束优化各负其责

网络提供操作/节点候选,编译器排除非法结构,局部优化拟合连续参数,真实 renderer 给反馈。代理的 action 是修改图,observation 是编译日志、渲染和误差,retry 是有限预算下更换节点或回退;这些步骤应有可追溯状态,不能把 CNN 分割本身称为工具推理。

最小可验证方案

  1. 固定同一编辑操作语言,比较直接参数回归与“节点定位 → 参数拟合”,保持 renderer 调用数一致
  2. 比较 isolated primitive 和短组合程序数据,并报告未知组合的端到端合法成功率
  3. 将面吸附思想迁移为端口类型和参数单位约束;分别消融硬约束与视觉正则,检查是否牺牲用户自由度
  4. 只在低置信或多解情形请求一次用户决策,比较自动默认与交互澄清的成本,而不是无上限搜索

最重要的迁移点是:输出必须能执行,而且每一步应利用现有可验证状态。Sketch2CAD 的程序化结构为这一点提供了清楚范例,但它没有解决开放词汇材质节点图的通用生成。

19 · 一手来源与验收范围

  1. UCL 官方论文 PDF:14 页,与用户原 PDF 完全相同;全部正文、两表、16 图、参考文献均读取
  2. 官方 10 页补充文档:网络图、逐人数据和全部 12 组协议
  3. 官方项目页、arXiv v1、UCL 机构记录:身份、venue、资料入口互证
  4. 固定官方源码:5 个训练/测试入口、网络结构、数据解码、部署封装与历史差异
  5. TensorFlow 1.3 官方 Adam 源码:仅用于确认发布代码调用的默认超参数

原图版权归论文作者及图中注明的原素材权利人,包含 Fig.1 的 Eissen/Steur 图例。本次完成资源下载/解码、数值行列、公式源码、导航、文件体积和原笔记前缀的静态验证;浏览器布局与 MathJax 运行验证按要求暂缓。没有运行外部模型、CAD 原型、Docker 或写入用户知识库。