3. YOLO系列算法演进
做工业缺陷检测这些年,我接触过不少目标检测算法。但要说落地最快、迭代最猛的,还得是YOLO系列。从2016年YOLOv1横空出世,到现在v8遍地开花,这八年多的演进史,说白了就是一场「速度与精度」的极限拉扯。
今天我就带大家捋一遍这条技术线。嗯,不光是讲里的公式,我会把每个版本在工业现场踩过的坑、捡到的宝,都摊开来说。
1. YOLOv1:把检测做成回归,够狠
2016年之前,目标检测的主流还是Faster R-CNN那套——先提候选框,再分类回归。两阶段,慢,但准。YOLOv1直接掀了桌子:老子不要候选框了,一张图分成S×S网格,每个网格直接预测边界框和类别概率。
我记得第一次跑v1的时候,看到它在GPU上跑到45 FPS,整个人都惊了。但一上工业数据集就露馅了——小目标几乎全丢。为什么?因为每个网格只能预测两个框,而且感受野太大,小物体在特征图上就剩一两个像素了。
| 版本 | 核心创新 | 工业场景痛点 |
|---|---|---|
| v1 | 端到端回归,45 FPS | 小目标漏检严重,密集场景崩溃 |
| v2 | 引入Anchor Box,Batch Normalization | 召回率提升,但框的尺寸需要手工调 |
| v3 | FPN多尺度预测,Darknet-53 | 小目标改善明显,模型变大 |
| v4 | CSPNet,Mish激活,CIoU Loss | 训练更稳,但部署时算子兼容性头疼 |
| v5 | Focus结构,自适应锚框,工程优化 | 工业落地首选,但小目标仍需trick |
| v8 | 无锚框,解耦头,TaskAligned | 精度最高,但边缘设备推理需量化 |
2. YOLOv2 & v3:锚框与多尺度,补上短板
v2最大的贡献是引入了Anchor Box。说白了就是预先定义一组宽高比不同的框,让模型去「微调」而不是「凭空画框」。这招从Faster R-CNN借来的,但YOLO把它用得更轻量。
v3则是真正让YOLO在工业场景站住脚的版本。它做了三件关键事:
- FPN特征金字塔: 在三个不同尺度的特征图上分别做预测。大特征图负责小目标,小特征图负责大目标。
- Darknet-53骨干: 用了残差连接,网络深了但梯度不炸。
- 多标签分类: 用sigmoid代替softmax,一个物体可以同时属于多个类别——这在工业场景里其实挺实用,比如一个缺陷既是「划痕」又是「深度划痕」。
我有个做钢材表面缺陷检测的朋友,v3在他的数据集上mAP能到78%,比v1高了整整20个点。但代价是模型从几十MB涨到了200多MB,边缘设备跑起来有点吃力。
3. YOLOv4 & v5:工程优化的分水岭
2020年是YOLO的「神仙打架」之年。v4和v5几乎同时出现,但走的是两条路。
v4更像一个「缝合怪」——但它缝得好啊!CSPNet减少计算量,Mish激活函数让梯度更平滑,CIoU Loss把框的定位精度拉高了一个档次。我在一个手机中框缺陷项目里试过v4,同样的数据,mAP比v3高了5个点,推理速度只慢了3ms。
v5则是Ultralytics团队的作品,它最大的特点是「工程化」。Focus结构下采样不丢信息,自适应锚框省去了手工调参的麻烦,而且代码写得极其干净。说实话,现在工业界90%的YOLO项目都在用v5,不是因为它精度最高,而是因为它「开箱即用」。
4. YOLOv8:无锚框时代的全能选手
到了v8,YOLO已经进化成一个「目标检测+实例分割+姿态估计」的全能框架。但对我们做缺陷检测的人来说,最核心的变化是两点:
- 无锚框设计: 不再依赖预设的Anchor Box,而是直接预测目标中心到边界框四边的距离。这招让模型对不规则形状的缺陷(比如划痕、崩边)更友好。
- 解耦检测头: 分类和回归分支分开,各自用不同的卷积层。我实测过,在手机屏幕划痕数据集上,v8比v5的召回率高了6%,而且误检率还降了3%。
但v8也不是没缺点。它的模型体积比v5大了约30%,在Jetson Nano这类边缘设备上需要做INT8量化才能跑实时。另外,v8的训练超参数更敏感,我建议新手先用v5跑通基线,再迁移到v8做精度优化。
5. 工业场景选型建议
说了这么多,到底该用哪个版本?我个人的经验是:
- 产线节拍要求高(>100 FPS): 选YOLOv5s或v8n,配合TensorRT加速。
- 小目标密集场景(如焊点、晶圆缺陷): 优先试YOLOv8,配合多尺度训练和SAHI切片推理。
- 样本量少(<500张): 用YOLOv4的Mosaic+自对抗训练,或者直接上v5的预训练模型做微调。
- 边缘设备部署(如树莓派、Jetson): YOLOv5是当前最稳的选择,v8的量化工具链还不够成熟。