4. 模型选型:两阶段检测器(Faster R-CNN)、单阶段检测器(YOLO、SSD)、Transformer检测器(DETR)
选模型这事儿,说实话,没有绝对的「最好」。
我经常被学生问:「老师,到底该用哪个?」我的回答永远是——看你的场景。你是在做自动驾驶,还是工业质检?是追求实时性,还是精度优先?不同的任务,答案完全不同。
这一节,我把三类主流检测器掰开揉碎讲清楚。你听完就能自己判断了。
核心观点:没有万能模型,只有最适合你场景的模型。两阶段检测器精度高但慢,单阶段检测器快但精度略低,Transformer检测器正在崛起但还在成长期。
4.1 两阶段检测器:Faster R-CNN
两阶段检测器,说白了就是「先找候选框,再分类」。第一阶段生成可能包含物体的区域(Region Proposal),第二阶段对这些区域做精细分类和回归。
Faster R-CNN 的核心流程:
- 特征提取:用 backbone(如 ResNet、VGG)提取整张图的特征图。
- RPN(Region Proposal Network):在特征图上滑动窗口,生成候选框(anchors),并判断哪些框可能包含物体。
- ROI Pooling:将候选框映射回特征图,并统一尺寸。
- 分类+回归:对每个候选框做分类和边框微调。
我个人习惯用 Faster R-CNN 做高精度场景,比如医疗影像、卫星图像。这些场景对速度要求不高,但漏检一个病灶或目标,代价很大。
我的经验:我在做工业缺陷检测时,用过 Faster R-CNN。当时产品表面缺陷非常小,YOLO 经常漏掉。换成 Faster R-CNN 后,召回率从 82% 提升到了 94%。代价是推理速度从 30fps 降到了 8fps。但产线对速度要求不高,所以完全能接受。
优点:
- 精度高,尤其对小目标友好
- 两阶段设计,误检率低
- 适合复杂场景(遮挡、密集目标)
缺点:
- 推理速度慢,难以实时
- 训练流程复杂,需要调参的地方多
- 部署成本高,对硬件要求高
4.2 单阶段检测器:YOLO 和 SSD
单阶段检测器,就是「一步到位」。没有候选框生成阶段,直接在特征图上预测类别和位置。
YOLO(You Only Look Once)
YOLO 的思想很暴力——把图像分成网格,每个网格负责预测中心点落在该网格内的物体。YOLO 系列从 v1 发展到 v8,每一代都有明显提升。
我最早用 YOLOv3 做行人检测,那时候觉得已经很快了。后来 YOLOv5 出来,精度和速度又上了一个台阶。现在 YOLOv8 已经支持实例分割和姿态估计了。
YOLO 的核心优势:速度快,结构简单,容易部署。适合实时场景,比如视频监控、自动驾驶、无人机巡检。
SSD(Single Shot MultiBox Detector)
SSD 和 YOLO 类似,但多了一个技巧——多尺度特征图。SSD 在不同尺度的特征图上做预测,小特征图检测大物体,大特征图检测小物体。这个设计让 SSD 对小目标的检测能力优于 YOLOv1/v2。
不过说实话,YOLO 系列后来也吸收了多尺度思想(比如 YOLOv3 的 FPN 结构),现在 SSD 用得越来越少了。我个人觉得,如果你刚入门,直接学 YOLO 系列就够了。
避坑指南:我曾经在移动端部署 YOLOv5,发现模型太大跑不动。后来换成 YOLOv5-nano(n 版本),参数量只有原来的 1/10,速度提升了 3 倍,精度只掉了 5 个点。所以,选模型时一定要考虑部署平台。
单阶段检测器对比:
| 模型 | 速度 | 精度 | 小目标 | 部署难度 |
|---|---|---|---|---|
| YOLOv5 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| YOLOv8 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| SSD | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
4.3 Transformer 检测器:DETR
DETR(Detection Transformer)是 2020 年 Facebook AI 提出的。它把目标检测当成一个集合预测问题,用 Transformer 的 encoder-decoder 结构直接输出检测结果。
你想想看,传统检测器需要 anchor、NMS 这些手工设计的组件。DETR 把这些全扔了,端到端训练,简洁得让人拍大腿。
DETR 的核心流程:
- CNN backbone:提取图像特征。
- Transformer encoder:对特征图做全局注意力建模。
- Transformer decoder:用一组可学习的 object queries 与 encoder 输出做交叉注意力,直接预测类别和边框。
- 二分图匹配:用匈牙利算法匹配预测结果和真实标签,计算损失。
DETR 的革命性:不需要 anchor、不需要 NMS、不需要手工设计候选框。整个流程干净得像数学公式。
但 DETR 也有明显缺点:
- 训练收敛慢:需要 500 个 epoch 才能达到较好效果,而 YOLO 可能 100 个 epoch 就够了。
- 小目标检测差:Transformer 的全局注意力对小目标不敏感。
- 推理速度慢:比 YOLO 慢一个数量级。
后来有了改进版本,比如 Deformable DETR,用可变形注意力代替全局注意力,收敛速度提升了 10 倍,小目标检测也好了很多。但说实话,目前工业界用得还不多,更多是学术研究。
我的建议:如果你做学术研究,或者对精度有极致要求且不 care 速度,可以试试 DETR。但如果是工业落地,我建议还是优先考虑 YOLO 或 Faster R-CNN。Transformer 检测器还在成长期,等它再成熟两年,可能会成为主流。
4.4 三类检测器对比总结
| 维度 | Faster R-CNN | YOLO / SSD | DETR |
|---|---|---|---|
| 检测方式 | 两阶段 | 单阶段 | 端到端集合预测 |
| 速度 | 慢(5-15fps) | 快(30-100fps) | 慢(10-20fps) |
| 精度 | 高 | 中高 | 高(但收敛慢) |
| 小目标 | 优秀 | 一般 | 差(改进后中等) |
| 部署难度 | 中等 | 简单 | 困难 |
| 适用场景 | 高精度、慢速 | 实时、轻量 | 学术、极致精度 |
4.5 知识体系图:检测器选型决策流程
上面这张图是我自己总结的选型决策流程。你从「你的检测任务是什么」出发,一路回答几个关键问题,就能找到最适合你的模型。
嗯,模型选型就讲到这里。记住一句话:没有最好的模型,只有最合适的模型。下一节我们开始讲数据准备,那才是真正决定模型上限的关键环节。
一句话总结:追求速度选 YOLO,追求精度选 Faster R-CNN,追求前沿选 DETR。但无论选哪个,数据质量永远是第一位的。