2026年9月12日 · 基于110张工程图扩容实验的工程记录
在一张机械工程图上,同一个孔可能在主视图中表现为圆,在侧视图中表现为两条虚线,在剖视图中表现为贯穿或不贯穿的腔体。识别这些局部图形只是第一步;真正需要回答的是:它们是否属于同一个物理特征?
我们最近搭建并训练了一套区域视觉模型。它复用Qwen3.5-27B的视觉编码器,把图纸中的候选区域转换为视觉向量,再学习区域类别和跨视图关系。扩容后,融合模型在固定开发集上的区域类别正确率从59.5%提高到70.3%,加入实例对比损失的版本达到72.1%。
这篇文章介绍当前实际运行的代码与实验。当前页面中的代表性输出来自融合模型;它已经能给出有用的类别和关联,但还没有实现从整张原图自动找框、读取全部尺寸、恢复完整制造语义的最终系统。
从“图形相似”走向“物理身份相同”
工程图的困难在于,视觉外观与物理身份并不一一对应。两个同样大小的圆可能是不同位置的孔;同一个孔在不同视图中也可能完全不像。一个投影还可能叠加多个实例,例如前后排列的两个孔在侧视图中共享两条边线。
因此,我们把数据分成三个层次:物理实例、视图证据和标注要求。一个物理实例拥有稳定ID,可以对应多个视图证据;一个证据也可以属于多个实例,或者保留几种尚未确认的归属。尺寸、公差和工艺要求则单独保存,与适用对象建立关系。
当前训练聚焦其中两个问题:给定一个候选区域,它属于什么类别;给定不同视图中的两个候选区域,它们是否对应同一个物理实例。 类别包括孔、槽、轴段、法兰、凸台、圆角等。孔的通盲属性、复合孔各段尺寸和技术要求绑定,虽然保存在数据中,本轮还没有进入属性预测训练。
当前架构:冻结视觉主干,训练约311万参数的小模型
这轮没有重新微调整个27B语言模型,也没有让语言模型逐字生成坐标和关系JSON。实际流程如下:
原始工程图 + 已有视图划分 + 候选区域框
↓
Qwen视觉编码器(冻结参数)
↓
区域局部特征 + 视图上下文 + 原图细节
↓
可训练区域适配层 + 坐标编码
↓
区域间Transformer交互(可选)
↙ ↘
区域类别预测 两两同实例关系分数
↓
原图叠加与跨视图连线视觉编码器取自Qwen3.5-27B的固定权重版本,约4.607亿参数,提取特征时保持冻结。后续独立区域头约205万参数;增加两层Transformer后的融合模型约311万参数。当前代表图使用的就是后者。
这里的“微调后模型”,准确说是预训练视觉主干加上训练后的区域与关系模块。原语言模型的权重没有在这一轮更新。

图1:已实现的方法流程。冻结视觉主干,训练区域表示、类别头与关系头。
一个区域,为什么同时看三种信息?
仅看一个很小的框,模型可能分不清它是孔口还是轴端;只看整幅视图,小孔和窄槽的细节又可能被弱化。我们的区域表示由三部分拼接而成。
第一部分来自视图特征图中的区域采样。代码先把Qwen视觉patch按实际空间排列还原成二维网格,然后在候选框内部取2×2个采样位置,保留粗略的局部空间结构。每个位置1152维,共4608维。这是双线性区域采样,不是像素级分割。
第二部分是该视图全部视觉patch的均值,共1152维。它提供当前区域所处视图的整体上下文。
第三部分来自原图独立裁取的局部细节。候选框向外扩展约10%,从原始图像裁图,再经过同一个视觉编码器,得到1152维局部均值特征。视图裁图最长边不超过1536像素;局部细节通过处理器限制像素预算,保留宽高比,并非全部拉伸成正方形。
三者拼接后,每个区域得到6912维向量。区域名称、类别答案、物理实例ID和参考关系均不进入视觉编码器。ID只用于记录和对齐样本。
随后,小型MLP把视觉向量映射为256维表示,并加入归一化候选框的坐标编码。融合版本再让同一张图中的区域通过两层、每层四个注意力头的Transformer交换信息。它有机会利用其他视图提供的线索,但是否真的学会这种利用,需要由对照实验验证。
连线是如何预测出来的?
对任意两个区域,关系头组合它们表示的绝对差、逐元素乘积、归一化框坐标差,以及是否来自同一视图的指示量,输出一个分数。经过sigmoid后,分数达到0.5就预测为同一实例关系。
这个关系头是对称的:交换两个区域,不应改变它们是否属于同一实例的判断。视图编号也不作为具有大小意义的数值输入,避免模型因为V1、V2的编号顺序产生人为差异。
当前输出仍然是两两关系分数,尚未进一步保证所有预测组成一个全局一致的实体图。例如,模型可能预测A与B相同、B与C相同,却没有连上A与C。也不能直接把所有相连节点合并,因为工程图中还存在共享投影和组成层级。
因此,页面上的一条线表达的是一次模型关系判断,不等于已经重建出完整、无冲突的物理实体。
监督信号:类别交叉熵、关系二分类与实例对比
训练分成两个阶段。前20轮只训练区域类别;后80轮加入关系监督。对比版本在联合阶段额外加入实例一致性目标。
普通融合版本的目标是:
总损失 = 类别交叉熵 + 关系二分类损失对比版本的目标是:
总损失 = 类别交叉熵 + 关系二分类损失 + 0.1 × 实例对比损失类别交叉熵仍然是有效的监督工具。此前自由生成任务中的错误,不能简单归结为“交叉熵不适合工程图”。当前变化主要在于输出表示和任务拆分:类别直接对应类别标签,关联直接对应关系分数,不再让所有目标都通过一长串文本间接表达。
关系正对来自不同视图中、原标注明确属于同一个实例的单成员证据。负对只使用保守类别范围内的同类不同实例,例如两个已经明确区分身份的孔。未标定的关系不自动算负对。
每张图内部,正对与负对分别平均损失后再平衡组合,避免孔阵列产生大量负对,推动模型一律预测“不同实例”。
实例对比损失进一步拉近明确正对的表示,并区分已标定负对。共同投影、候选归属、裁图截断等不可靠监督被排除。这些“明确关系”沿用数据原有判读状态,并不表示本轮又完成了独立人工确认。
扩容到110张后,数据如何使用?
合并数据包含2483个物理条目、4262条视图证据、5668条尺寸及制造标注、5647条绑定关系。图纸数量、区域数量、关系数量是不同口径:一张图可以产生许多监督样本,但这些样本仍共享同一零件、图面与标注来源。
本轮使用95张训练图,保留原来的10张开发图。另外5张新增图因WF系列家族重叠或轴承座家族关联风险,暂不加入训练。这个划分是保守措施,并不意味着所有隐含家族关系都已经核准。
可用跨视图训练正对由563增加到1853,保守负对由2686增加到23473。训练集覆盖的形状和区域显著增加,但新增标签中的不确定关系仍然保留,不为增加样本量强行确定归属。
为了与上一轮比较,四组实验固定原来的16类输出词表。新增词表外的53个训练区域没有参与类别损失,但其原始标签仍完整保存在数据包中,没有被随意映射成某个旧类别。
四组实验分别检验什么?
| 实验 | 可使用的信息 | 作用 |
|---|---|---|
| 独立区域头 | 区域视觉特征、坐标;有两两关系头 | 检查基本区域表示是否已经足够 |
| 跨视图融合 | 同上,加区域间Transformer | 检查区域交互带来的变化 |
| 融合+实例对比 | 同上,加实例对比损失 | 检查一致性监督的增益 |
| 仅坐标 | 屏蔽视觉特征,保留融合结构和坐标 | 检查几何布局是否足以获得较高分数 |
所有实验使用seed=42、AdamW、学习率0.0003和100轮训练。扩容前每轮50张图,扩容后每轮95张图,因此更新次数从5000增加到9500。这个结果回答的是“按相同轮数扩容训练,效果如何变化”,不能单独分离数据增加、训练更新增加和类别权重变化各自的贡献。
模型在开发集上选择最佳检查点。开发图已经被项目反复检查,不能作为新的盲测集;目前也只有单个随机种子的结果,不报告统计显著性。
实际结果:类别识别改善,关联仍有关键疑问
| 方法 | 类别正确率:扩容前→后 | 关联F1:扩容前→后 |
|---|---|---|
| 独立区域头 | 69.4% → 66.2% | 68.9% → 69.3% |
| 跨视图融合 | 59.5% → 70.3% | 68.1% → 72.6% |
| 融合+实例对比 | 60.8% → 72.1% | 67.1% → 71.6% |
| 仅坐标 | 50.5% → 50.9% | 67.8% → 72.2% |
类别正确率的分母是222个具有有效参考且被训练词表支持的开发区域,另4个panel区域未计入。关联分数基于642个已标定跨视图对,其中155个正对、487个负对;其他关系不参与评分。
融合和对比版本的类别识别都有明显提升,但独立区域头没有同步提升,说明扩容收益与模型结构有关。对比损失版本的类别分数最高,关联F1却低于普通融合,不能简单说“加对比学习一定更好”。
更值得关注的是,仅坐标模型的关联F1达到72.2%,接近融合模型的72.6%。这说明当前候选框位置和数据布局本身包含很强的关系线索。它尚不能证明融合模型内部完全依赖坐标,但足以说明:仅凭当前关联分数,无法证明模型已经掌握稳定的跨视图视觉身份理解。
同时,融合模型的关联精确率从66.1%提高到81.0%,召回率从70.3%下降到65.8%。模型减少了错连,也漏掉了更多真实关联。这个取舍在总F1之外必须单独观察。

图2:扩容前后使用同一开发集。视觉融合的类别表现改善,但关系F1仍接近仅坐标对照。
看一张真实输出:D039从动轴
我们从开发集中选取D039。选择方式是:在有足够类别和正关系样本的图纸中,选择类别正确率与关联F1最接近全体汇总水平的一张,而非挑选最高分案例。
这张图使用扩容后的融合模型,第72轮检查点,得到:
- 20个计分类别区域中,15个正确,正确率75.0%;另4个区域未计分类别。
- 17条参考正关联中恢复10条,漏掉7条;在已标定关系范围内有1条错误正关联。
- 关联精确率90.9%,召回率58.8%,F1为71.4%。
模型能够识别部分孔、槽和轴段,但仍将一些轴段误判为槽、缺口或本体,也将一个孔区域误判为槽。默认选中的区域2,与区域20之间存在错误关联。
可视化中的实线都是模型预测的正关联:蓝色表示参考支持,红色表示参考否定,橙色表示参考尚未确定。红色虚线则是额外绘制的漏连提示,表示参考存在关系而模型没有预测。
图中的框来自已有参考候选。它们用于定义模型要判断的区域,没有经过当前模型的位置回归。因此,框看上去贴合图形,不能被当作模型自动定位准确的证据。当前结果展示的是“给定区域后的理解与关联”。

图3(公开版省略图签信息):D039实际输出,选中区域2的连线。红色实线是模型错连,橙线表示参考未知;框为提供给模型的候选。

图4:同一张图的局部放大。第一个槽正确,其他案例展示轴段、孔与槽的混淆。
为什么这轮训练只需要几分钟?
主要原因是把固定视觉提取和可训练部分分开。视觉特征计算后可以缓存;四组对照复用相同特征,只训练约205万或311万参数的小模型。本轮在两张A100上分组运行,各组训练阶段约182至300秒,视觉提取峰值PyTorch allocated约1.30 GiB。
这些数字不包含完整的数据标注、上传和准备成本,也不是27B语言模型端到端微调的耗时或显存。它们说明,这种结构适合快速检验区域表示、融合和监督设计,无须每次都重新训练整个大模型。
下一步,让视觉证据真正决定关联
接下来最需要的是受控验证:移除坐标、保持坐标但错配视觉特征、改变图面布局,并比较结果如何变化。这样才能进一步判断模型使用了哪些信息。
与此同时,需要将“区域类别”推进到有证据支持的物理属性,例如通孔与盲孔、直孔与阶梯孔。关键剖视缺失时,模型应保留不确定性;不能因为训练标签有答案,就要求不可辨认的局部图形给出确定属性。
随后再接入自动候选检测和坐标回归,分别测量候选覆盖、区域分类、跨视图关联及尺寸绑定。现有制造要求数据可以支撑后续语言语义模块,但它们没有在本轮区域小头实验中被训练出来。
当前成果已经把区域识别与跨视图关联变成了可训练、可检查、可快速对照的模块。下一阶段的关键,是让这种可视化上的进步在候选不完美、布局变化和未见零件上同样成立。