做工业视觉这几年,选型会上被问得最多的问题就是:"现在都用 Transformer 了,我们还要用 CNN 吗?"我的答案是:看场景。这两种路线各有各的脾气,分享一下实战中的取舍经验。

## 两条路线的特点

**CNN**:卷积的归纳偏置(平移不变性、局部感受野)让它在小数据上很"省"。工业场景动不动只有几百张缺陷样本,CNN 从随机初始化训练都能收敛得不错。推理速度快,在普通工业相机+边缘盒子的组合上跑实时无压力。

**Vision Transformer (ViT)**:靠自注意力建模全局关系,数据量足够大时上限更高,对复杂纹理、遮挡、形变的鲁棒性通常更好。但它"吃数据",小样本下容易过拟合;计算量也大,实时性要求高的产线要仔细评估。

## 小数据场景的取舍

工业质检的常态是:正常样本一堆,缺陷样本寥寥无几。这种场景下我的经验是:

- 纯 ViT 从零训练基本不用考虑,样本量撑不起来
- 两条路走得通:一是用在工业数据上预训练过的 CNN 微调;二是用 ViT 做特征提取器(冻结 backbone,只训分类头),把 ViT 当"更好的特征"
- 样本实在太少(每类缺陷不到 50 张)时,老老实实 CNN+数据增强+难例挖掘,别追新架构

## 实时性要求的取舍

产线节拍是硬指标。比如每 200ms 要出一张图的判定结果,留给模型的时间可能不到 100ms。这时候:

- CNN 的轻量变体通常是首选,配合推理优化后延迟可控
- ViT 想上产线,一般要走蒸馏(用 ViT 当教师、蒸馏出小 CNN 学生)或结构剪枝,直接把大 ViT 部署到边缘设备大概率翻车
- 先定延迟预算,再选模型,最后做优化,三步顺序别反

## 实战建议清单

- 小样本+实时性强:CNN 优先,别被论文里的 SOTA 带偏
- 数据量上万且缺陷类型复杂:可以试 ViT 路线,记得用预训练权重
- 实时性不够时先考虑蒸馏/剪枝/量化,别一上来就换硬件
- 选型前先跑通数据 pipeline,很多项目死在数据上而不是模型上
- 保留两种路线的 baseline,用业务指标(漏检率/过杀率)说话,不唯论文

## 结尾讨论

你们产线上现在主流用哪条路线?ViT 落地时实时性是怎么搞定的?欢迎交流。