目标检测
目标检测(Object Detection)在图像分类的基础上更进一步:不仅要判断图像中有什么,还要精确定位每个目标的位置。这使其成为自动驾驶、安防监控、工业质检等众多实际场景的核心技术。
任务定义
目标检测的输出是一个列表,每个元素包含:
- 边界框(Bounding Box):用
(x_min, y_min, x_max, y_max)或(center_x, center_y, width, height)表示目标的矩形区域 - 类别标签:该目标属于哪个类别(如"人"、"车"、"狗")
- 置信度分数:模型对该检测结果的确定性
与图像分类不同,检测任务需要同时优化定位精度和分类准确性,且一张图中可能存在数量不定的目标(包括零个),极大地增加了问题难度。
两阶段检测器
两阶段方法将检测分解为"先找候选区域,再精细分类"两步,精度高但速度较慢。
R-CNN(2014)
R-CNN(Region-based CNN)是深度学习检测的开山之作:
- 选择搜索(Selective Search):启发式方法提取约 2000 个候选区域(Region Proposals)
- CNN 特征提取:将每个候选区域 resize 后独立送入 CNN 提取特征
- SVM 分类 + 边界框回归:对每个区域分类并修正边界框
缺点:每张图需对 2000 个候选区域各做一次 CNN 前向传播,速度极慢(~50 秒/张)。
Fast R-CNN(2015)
Fast R-CNN 的核心改进是共享卷积计算:先对整图提取一次特征图,再用 RoI Pooling 从特征图上提取各候选区域的特征,避免了重复计算,速度提升约 25 倍。
Faster R-CNN(2015)
Faster R-CNN 用一个轻量级的**区域提议网络(Region Proposal Network,RPN)**替代了 Selective Search。RPN 与检测主干网络共享特征,可在极低额外计算开销下生成高质量候选框,实现了真正的端到端训练,速度达到近实时(~5fps)。
输入图像
→ 共享特征提取(如 ResNet)
→ RPN(生成候选框)
→ RoI Pooling(提取候选区特征)
→ 分类头 + 回归头
→ 最终检测结果
单阶段检测器
单阶段方法直接在特征图上密集预测,省去候选框生成步骤,大幅提速,适合实时场景。
YOLO 系列(You Only Look Once)
YOLO 是单阶段检测中最具影响力的系列,从 2015 年至今不断迭代:
- YOLOv1(2015):将图像划分为 S×S 网格,每个格子直接预测边界框和类别,速度达 45fps,但定位精度不足
- YOLOv2(2016):引入锚框机制、Batch Normalization,精度显著提升
- YOLOv3(2018):多尺度预测(3 个不同大小的特征图),改善小目标检测
- YOLOv4(2020):集成大量 bag-of-tricks,在精度和速度之间取得优秀平衡
- YOLOv5:Ultralytics 开源版本,工程友好,社区生态庞大
- YOLOv8(2023):Ultralytics 全新设计,无锚框(Anchor-free),支持检测/分割/姿态估计多任务
- YOLOv11(2024):进一步改进架构效率,在边缘设备上的推理速度更快
YOLO 系列的核心优势:速度极快(可达数百 fps),适合嵌入式部署和实时视频处理。
SSD / RetinaNet
- SSD(Single Shot MultiBox Detector):在多个不同尺度的特征图上预测,改善多尺度检测
- RetinaNet(2017):引入 Focal Loss 解决单阶段检测中正负样本极度不均衡问题,在精度上首次与两阶段方法媲美
DETR:用 Transformer 做检测
2020 年 Facebook 提出 DETR(Detection Transformer),完全抛弃了锚框和 NMS,引入端到端的目标检测新范式:
- 编码器:从 CNN 特征图提取全局上下文
- 解码器:100 个可学习的对象查询(Object Queries)通过自注意力和交叉注意力"询问"图像中的目标
- 匈牙利匹配:训练时用二分匹配将预测框与真实框一一对应,消除重复预测
图像 → CNN Backbone → 特征图
→ Transformer Encoder(全局上下文)
→ Transformer Decoder(100 个对象查询)
→ 每个查询输出 (类别, 边界框)
DETR 的优点是架构极简、无需人工设计的锚框,缺点是训练收敛慢。后续改进版 Deformable DETR 通过可变形注意力加速收敛,RT-DETR 实现了实时推理。
锚框(Anchor)机制
锚框是预先定义的一组参考框(不同尺度和长宽比),模型预测的是相对于锚框的偏移量而非绝对坐标:
真实框坐标 = 锚框坐标 + 预测偏移量
锚框设计是传统检测器性能的关键因素:
- 锚框尺寸通常通过在训练集上 K-Means 聚类真实框尺寸得到
- 过多的锚框增加计算量和正负样本不均衡问题
- 现代检测器(YOLOv8、DETR)已逐渐向**无锚框(Anchor-free)**方向发展
NMS(非极大值抑制)
NMS 用于消除对同一目标的重复检测:
- 按置信度对所有检测框降序排列
- 取置信度最高的框作为保留框
- 计算其与剩余框的 IoU(交并比),删除 IoU 超过阈值的框
- 重复步骤 2-3 直至处理完所有框
Soft-NMS 是改进版本,将重叠框的置信度衰减而非直接删除,减少漏检。
mAP 评测指标
mAP(mean Average Precision) 是目标检测的标准评测指标:
- AP(Average Precision):对某一类别,在不同 IoU 阈值下的精确率-召回率曲线下面积
- mAP@0.5:IoU 阈值为 0.5 时各类别 AP 的均值(PASCAL VOC 标准)
- mAP@0.5:0.95:在 IoU = 0.5 到 0.95(步长 0.05)的 10 个阈值下取均值(COCO 标准,更严格)
实时检测部署
将检测模型部署到生产环境的关键考量:
- 模型量化:FP32 → INT8 量化,减少内存占用和推理时间,精度损失通常在 1-2% 以内
- 模型剪枝:移除不重要的权重或通道,减小模型体积
- TensorRT:NVIDIA 推理优化框架,可对 YOLOv8 等模型加速 3-5 倍
- ONNX Runtime:跨平台推理引擎,支持 CPU/GPU/NPU
- 边缘部署:YOLOv8n(Nano)等轻量版本可在树莓派等嵌入式设备上运行
- 批处理推理:视频流场景下合并多帧同时推理,提升 GPU 利用率