1. 目标检测技术演进全景图
目标检测作为计算机视觉领域的核心任务,经历了从传统两阶段方法到单阶段检测,再到无锚框技术的完整演进过程。这项技术能够同时完成目标的定位(在哪里)和识别(是什么)两大任务,在自动驾驶、工业质检、安防监控等领域有着广泛应用。本文将系统梳理目标检测技术的发展脉络,剖析各阶段代表性算法的核心思想与实现细节。
2. 两阶段检测:精度优先的经典范式
2.1 R-CNN:开创性的两阶段检测框架
R-CNN(Regions with CNN features)是首个将深度学习成功应用于目标检测的算法。其核心流程分为三个关键步骤:
-
区域候选生成:使用Selective Search算法从原始图像中提取约2000个候选区域。该算法基于颜色、纹理、大小等特征进行层次化区域合并,相比传统滑动窗口方法显著减少了候选数量。
-
特征提取:将每个候选区域缩放到固定尺寸(通常为227×227),分别输入预训练的CNN网络(如AlexNet)提取4096维特征向量。这里存在明显的计算冗余——同一图像的不同区域会重复通过CNN。
-
分类与回归:对每个区域特征,先用SVM进行分类判断,再通过线性回归模型(Bounding Box Regression)精修候选框位置。最后使用非极大值抑制(NMS)去除高度重叠的冗余检测框。
实际工程中发现,Selective Search在CPU上处理一张图像约需2秒,而特征提取阶段由于重复计算,处理时间更长。这促使后续研究向特征共享方向发展。
技术演进:针对传统NMS的缺陷,后续出现了多种改进方案:
- Soft-NMS:通过连续函数降低相邻检测框的分数而非直接抑制,保留更多遮挡目标
- IoU-Net:引入IoU预测分支,提升定位质量评估的准确性
- Softer-NMS:考虑定位不确定性,实现更精细的框选择
2.2 Fast R-CNN:特征共享的革命性突破
Fast R-CNN通过两项关键创新大幅提升了检测效率:
-
整图特征提取:不再单独处理每个候选区域,而是将整张图像输入CNN(如VGG16)生成共享的特征图。候选区域通过RoI Pooling层从特征图上截取对应区域,统一转换为固定尺寸(如7×7)的特征块。
-
多任务损失联合训练:用单个网络同时完成分类(Softmax替代SVM)和回归任务,损失函数定义为:
code复制L = L_cls + λL_loc其中分类损失L_cls采用交叉熵,定位损失L_loc采用平滑L1损失,λ用于平衡两项任务。
工程优化:全连接层可通过SVD分解压缩,将参数从约250MB减少到30MB,推理速度提升30%以上。
2.3 Faster R-CNN:端到端的完整解决方案
Faster R-CNN的核心突破是引入区域候选网络(RPN),将候选框生成也纳入神经网络:
-
Anchor机制:在特征图的每个位置上预设9种锚框(3种尺度×3种宽高比),作为检测的参考基准。例如对于800×600的输入图像,典型配置为:
- 尺度:128², 256², 512²像素
- 宽高比:1:1, 1:2, 2:1
-
RPN网络:对每个Anchor预测:
- 二分类(前景/背景)
- 4个坐标偏移量(中心点x,y和宽高w,h)
通过"分类得分+定位质量"筛选出约300个优质候选框(Proposal)。
-
检测头:将候选框送入Fast R-CNN模块进行最终分类和精确定位。
训练技巧:可采用4-Step Alternating Training交替优化RPN和检测头,或直接进行端到端联合训练。实际测试表明,端到端训练在PASCAL VOC数据集上能达到70.4%的mAP,速度达到5fps。
3. 单阶段检测:速度与精度的平衡术
3.1 YOLO系列:实时检测的标杆
YOLOv1:开创性的统一检测框架
将图像划分为7×7网格,每个网格预测:
- 2个边界框(x,y,w,h,confidence)
- 20类条件概率(PASCAL VOC数据集)
总输出张量维度为7×7×30。损失函数设计考虑了定位误差与分类误差的平衡:
code复制λ_coord * ∑(x,y,w,h误差) + λ_obj * ∑(置信度误差) + λ_noobj * ∑(负样本置信度误差) + ∑(分类误差)
YOLOv2:系统性的工程优化
- Anchor聚类:在VOC数据集上通过K-means得到5种最佳Anchor尺寸:(1.19,1.98), (2.79,4.59), (4.53,8.92), (8.06,5.29), (10.32,10.65)
- 多尺度训练:每10个batch随机选择{320,352,...,608}中的输入尺寸,提升模型鲁棒性
- Darknet-19:使用19层卷积网络,在ImageNet上预训练达到72.9% top-1准确率
YOLOv3:现代检测框架的雏形
- Backbone升级:采用Darknet-53,引入残差连接,在保持速度的同时提升特征提取能力
- 多尺度预测:通过3种不同分辨率的特征图(13×13,26×26,52×52)分别检测大、中、小目标
- 损失函数改进:使用二元交叉熵替代Softmax,支持多标签分类
YOLOv4:工程技巧的集大成者
- 数据增强:Mosaic将4张图像拼接训练,显著提升小样本学习能力
- 网络结构:CSPDarknet53 + SPP + PAN,增强特征融合能力
- 损失函数:CIoU Loss同时优化重叠面积、中心距离和宽高比:
code复制其中α控制宽高比惩罚项v的权重L_CIoU = 1 - IoU + ρ²(b,b^gt)/c² + αv
3.2 RetinaNet:解决样本不平衡的里程碑
单阶段检测面临的核心挑战是前景-背景样本的极端不平衡(通常>1000:1)。RetinaNet提出Focal Loss重新平衡训练过程:
code复制FL(pt) = -αt(1-pt)^γ log(pt)
其中:
- pt为模型预测的概率
- αt为类别权重(通常α=0.25)
- γ为聚焦参数(通常γ=2)
在COCO数据集上,RetinaNet(ResNet-101-FPN)达到39.1% AP,首次超越两阶段方法,同时保持5fps的推理速度。
4. 无锚框检测:后深度学习时代的新方向
4.1 CenterNet:简洁高效的检测范式
CenterNet将目标建模为关键点检测问题,主要创新包括:
-
中心点预测:输出热图Ŷ∈[0,1]^(W/R×H/R×C),其中R=4为下采样率,C为类别数。训练时使用高斯核生成真值热图Y:
code复制Yxyc=exp(-((x-x̃)²+(y-ỹ)²)/(2σ²))σ根据目标大小自适应确定
-
损失函数设计:
- 热图损失:改进版Focal Loss
- 偏移损失:L1 Loss,补偿下采样离散化误差
- 尺寸损失:L1 Loss,预测宽高
-
后处理简化:通过3×3最大池化实现峰值点提取,无需NMS。在COCO上达到45.1% AP/28 FPS(DLA-34骨干网络)
4.2 FCOS:全卷积的像素级检测
FCOS的核心思想是让特征图上每个像素直接预测:
- 分类标签
- 到边界框四边的距离(l,t,r,b)
- Center-ness分数(√[(min(l,r)/max(l,r))×(min(t,b)/max(t,b))])
关键技术点:
- FPN分层检测:设定不同层级负责不同尺度目标(P3~P7分别对应[0,64]~[256,∞]像素)
- Center-ness分支:抑制低质量预测,提升AP约1.5%
- GIoU Loss:改进回归损失,增强定位准确性
5. 实战经验与调优技巧
5.1 数据增强策略组合
- 基础组合:随机翻转(p=0.5)+ 色彩抖动(亮度0.2,对比度0.2,饱和度0.2,色调0.1)
- 高级增强:MixUp(α=0.8)+ Mosaic(4图拼接)+ 随机仿射(旋转±10°,缩放0.9~1.1)
- 测试发现:过度增强可能导致小目标检测性能下降,建议对小目标数据集适当降低增强强度
5.2 模型部署优化
-
TensorRT加速:
- FP16模式可使YOLOv4推理速度提升1.8倍
- INT8量化需500张代表性图像校准,精度损失<1%
-
ONNX转换陷阱:
- 自定义OP(如Focal Loss)需注册实现
- 动态尺寸输入需显式指定axes参数
5.3 小目标检测专项优化
- 特征融合:在FPN基础上增加Bottom-up路径(如PANet)
- 高分辨率输入:将检测头最小stride从32降为16,配合增大输入尺寸
- 数据层面:人工合成小目标(粘贴复制需做Gamma校正避免边缘不自然)
在无人机影像数据集上,通过上述方法可使小目标(<32px)检测AP提升12.3%。