【动手学深度学习】27 目标检测算法概览
前言
在计算机视觉领域,目标检测(Object Detection)的核心任务是解决“是什么(分类)”和“在哪里(定位)”两个问题。算法不仅要识别出图像中存在哪些物体,还要用边界框(Bounding Box)把它们框出来。
目标检测算法的发展主要经历了两个阶段:传统目标检测(2014年前)和深度学习目标检测(2014年后)。如今工业界和学术界几乎全部使用基于深度学习的算法。
在深度学习时代,目标检测算法主要分为三大流派:双阶段(Two-Stage)、单阶段(One-Stage) 以及最新的 基于 Transformer(DETR 系列) 的算法。
1 Two-Stage算法:准确率至上
双阶段算法将检测任务分两步走:
① 区域生成:先在图像中找出可能存在物体的候选区域。
② 分类与精修:对这些候选区域进行特征提取、类别分类以及边界框的精细调整。
1.1 R-CNN(2014)
R-CNN(Region CNN):首次将CNN引入目标检测。它用传统算法(Selective Search)在图上抠出2000个候选框,然后把每个框分别送入CNN提取特征,最后训练一个SVM分类,训练一个线性回归模型预测边缘框偏移。
缺点:速度极慢(一张图要几十秒),因为每个候选框单独送入CNN,2000各区域意味着要跑2000次CNN,存在大量重复计算。

李飞飞团队的Rol Pooling解决了这个问题。
1.2 Fast R-CNN(2015)
改进:将整张图片送入CNN得到特征图,再通过 Rol Pooling 层从特征图上截取对应候选区域,速度提升了上百倍。
Rol池化层:给定一个锚框,均匀分割成 块,输出每块里的最大值;不断锚框多大,总是输出
个值。

但其实相对来说Fast R-CNN的速度仍然还是比较慢。
1.3 Faster R-CNN
核心创新:RPN(区域生成网络)。它彻底抛弃了传统的候选框提取算法,改用一个纯全卷积网络(RPN)来自动预测候选框。
- Anchor Box(锚框):引入了锚框机制,在图像的每个位置生成不同尺度和宽高比的初始框,作为预测基准。
- 特点:速度达到了实时(当时标准的5-7FPS),且准确率极高。直到今天,很多需要工业级精度的复杂任务(如医疗影像病灶检测)依然在用Faster R-CNN 作为基线。

1.4 Mask R-CNN
在 Faster R-CNN 的基础上,增加了一个小巧的实例分割(Instance Segmentation)分支,实现了从“画框(目标检测)”到“抠图(实例分割)”(像素级)的跨越。

先来理解Mask R-CNN如何“借力打力”。
- Faster R-CNN的输出:对于每个目标,输出两个东西——类别标签(class)和边界框偏移量(Bouding Box)。
- Mask R-CNN的输出:在以上两者的基础上,并行增加了一个输出——物体的掩码(Mask)。
(1) 整体流水线:
① Backbone:利用 ResNet + FPN(特征金字塔网络)提取多尺度的高级特征图。
② RPN(区域生成网络):筛选出可能存在物体的的候选区域(Rol)。
③ RolAlign层:对这些候选区域进行特征对齐和固定的尺寸裁剪。
④ 多任务分支:
a)分支1:传统的分类与边界框回归。
b)分支2:Mask分支,采用全卷积网络(FCN)对每个Rol预测一个像素级的二进制掩码。
(2) 核心技术一:Rol Align(彻底解决像素级错位)
这是Mask R-CNN最具技术含量的创新。这之前的 RolPooling 在做目标检测(画框)时没问题,但在做实例分割(精准到像素的抠图)时却是个灾难。
为什么RolPooling不行?
RolPooling包含两次量化(取整)操作:
- 候选框边界通常是浮点数,RolPooling会直接四舍五入或向下取整。
- 将候选框划分为
的网格时,如果无法整除,会再次取整。
两次取整会导致特征图与原始图像之间产生像素级的位置偏差,通常会有几像素~十几像素的移动。这对于只需要画个大概框的检测任务影响不大,但对于需要精细勾勒边缘的分割任务,错位直接导致边缘模糊甚至崩塌。
RolAlign如何解决?
RolAlign彻底取消了量化取整:
无论边界还是网格划分,全程保留浮点数(比如保留 $4.28$)。
在每个网格内部,均匀采样 4 个坐标点。
利用 双线性插值(Bilinear Interpolation) 算法,通过周围的整数像素点计算出这 4 个采样点的精确特征值。
最后对这 4 个点做 Max Pooling(最大池化)得到该网格的值。
结果:RoIAlign 实现了特征与原图的完全对齐,直接让分割准确率(AP)获得了质的飞跃。
(3) 核心技术二:解耦分类与分割
早期的分割尝试(如 FCIS)在预测掩码时,会同时让掩码去预测类别(比如:这个像素是猫、那个像素是狗)。这会导致不同类别之间产生竞争,效果很差。
Mask R-CNN 提出了一个非常聪明的解耦策略:
Mask 分支不对类别进行竞争。如果数据集中有
个类别,Mask 分支会对每个 RoI 独立输出
个通道的单色掩码(每个通道代表一类,尺寸为
)。
最终哪个通道的掩码起作用?由分类分支(Classification Head)说了算。如果分类分支说这个框里是“猫”,那我们就只取出第“猫”个通道的掩码,其余通道丢弃。
这种将空间解耦(Mask 分支只管形状)与类别解耦(分类分支只管是谁)的设计,大大减轻了网络的学习负担。
Mask R-CNN 的美感在于它的优雅和简洁。它没有发明什么奇奇怪怪的复杂结构,而是把当时最好的目标检测(Faster R-CNN)、最好的语义分割(FCN)以及最精细的特征对齐(RoIAlign)完美地融为一体。
1.5 Caascade R-CNN(级联 R-CNN)
-
核心思想:传统的检测器通常只用一个固定的 IoU 阈值(比如 0.5)来定义正负样本。IoU 低了模型噪声多,高了模型容易过拟合。Cascade R-CNN 通过串联多个检测头,阈值逐级提高(如 0.5 -> 0.6 -> 0.7),前一步的输出作为下一步的输入。
-
特点:大幅提升了定位精度,是各类 CV 竞赛中刷新双阶段模型最高分数的常客。
小结
R-CNN是最早也是最有名的一类基于锚框的CNN的目标检测算法,随后Fast/Faster R-CNN持续提升性能;Faster R-CNN 和Mask R-CNN是在求高精度的场景下的常用算法。
2 One-Stage 算法
单阶段算法没有独立的候选区域生成步骤,而是直接在输入图像的各个位置上进行密集的分类和边界框回归。
2.1 YOLO系列
YOLO:You Only Look Once,是工业界应用最广、名气最大的算法系列。核心思想:一次看完整张图片,直接预测目标。
(1) YOLOv1 - YOLOv3 (经典奠基):将图片划分为
的网格,每个网格直接负责预测边界框和类别概率。YOLOv3 引入了多尺度预测(FPN 思想)和 DarkNet-53 骨干网络,成为了速度与精度的完美平衡点。
- YOLO v1: 把图片划分网络,例如7×7,每个 grid 负责预测 bbox+class,对于小目标比较困难,因为当一格有多个目标时,算法只能预测一个。
- YOLO v2:改进Anchor Box,提前设计好锚框(细长框、正方形框、大框),模型学习调整 anchor 以接近真实框。(加入BatchNorm、更高分辨率以及Darknet-19)
- YOLO v3(经典):引入多尺度检测——大尺度检测小目标、中尺度、小尺度检测大目标。
(2) YOLOv4 - YOLOv5 (工程落地巅峰):引入了大量的数据增强(Mixup, Mosaic)、更强的特征融合网络(PANet)以及自适应锚框计算。YOLOv5 凭借极低的部署门槛、丰富的部署工具链,成为了至今工业界最常用的版本之一。
(3) YOLOv8 - YOLOv11 & YOLO-World (现代演进):后续版本(由 Ultralytics、美团等团队持续迭代)转向了 Anchor-Free(无锚框设计),直接预测物体的中心点和宽高,更加轻量更快,进一步精简了模型;而 YOLO-World 等更是引入了开放词汇检测(输入任意文本即可检测对应物体)。
- Anchor-free算法
在目标检测领域,Anchor-free的兴起是近年来最重要的一次技术范式变革。传统的检测器(Faster R-CNN,YOLO v3/v4,SSD)极度依赖Anchor-based(基于锚框)的设计,存在诸多痛点。
为什么要干掉Anchor(痛点)?
- 超参数极其敏感,全凭人工经验:需要手动设计Anchor的scale和aspect ratio。如果检测任务从“检测行人”变到“检测细长管道”,这些超参数必须全部重新设计和调优。
- 极端的正负样本不均衡:为了保证覆盖率,网络会在一张图上铺设成千上万个(甚至几十万个)候选框,但其中真正包含物体的正样本屈指可数,绝大多数都是背景(负样本)。这浪费了大量的计算资源和显存。
- NMS计算冗余:由于Anchor铺的太密,模型会输出海量重叠的预测框,后续必须依赖复杂的NMS算法进行后处理滤除,这成为了实时检测的算例瓶颈。
Anchor-free的两大主流实现路径
为了彻底Anchor,科学家们探索出了两条截然不同的但同样高效的路线:基于关键点(Keypoint-based)和基于中心点/像素(Center-based)。
(1) keytpoint-based
将目标检测任务转换为姿态估计,或关键点任务估计。它不再寻找“框”而是寻找框的“角点”。
- CornerNet(2018)
- 核心思想:将物体边界框检测为一对关键点——左上角和右下角。
- 工作原理:网络输出左上角和右下角两张热力图,并预测一个嵌入向量Embedding。若两个角点的嵌入向量距离很近,说明它们属于同一个物体,从而将它们配对成框。
- CenterNet(2019)
- 核心思想:既然找到两个角点还需要配对,不如直接找物体的中心点。
- 工作原理:网络只预测一个点——物体的中心热力图。一旦确定了中心点,网络再在每个中心点位置直接回归出物体的宽度和高度(W,H)。
(2) Center-based
保留了类似语义分割的密集预测模式。它对特征图上的每一个像素点进行分类和回归。
FCOS(Fully Convolutional One-Stage, 2019):
- 核心思想:彻底将目标检测与语义分割统一。
- 工作原理:对于落在物体边界框内部的每一个像素点,网络直接预测该点到边界框四个边界的距离
。
- Center-ness(中心度):由于靠近物体边缘的像素预测的框通常不够准,FCOS引入了一个“中心度”分支,它计算相似点离物体中心点的距离,距离越近权重越高,用来在后处理中抑制边缘像素产生的劣质框。
为什么 YOLO 也全面倒向 Anchor-free?
① 标签分配策略的进化
早期Anchor-free方法虽然简单,但精度干不过精心调参的Anchor架构。后来发明的更高级的动态标签分配策略(如SimOTA、Task-Aligned Assigner),不再机械地通过IoU阈值来决定哪个像素负责哪个物体,而是根据模型当前的预测表现,动态地将物体分配给最合适的像素,这让 Anchor-free的精度彻底超越了Anchor-based。
② 回归损失函数的改良
传统的距离回归易受尺度影响。现代检测器引入了GIoU/DIoU/CIoU损失,以及DFL(Distribution Focal Loss,分布焦点损失)。DFL不再让网络直接回归一个生硬的绝对数值,而是预测边界位置的概率分布,这让无锚框检测在面对模糊边界、遮挡物体时,定位精度甚至远超传统锚框。
2.2 SSD(Single Shot Detector)
SSD(Single Shot MultiBox Detector) 是由 Wei Liu 等人在 2016 年提出的一种经典单阶段(One-Stage)目标检测算法。
前言:在它诞生之前,目标检测领域面临着两难的选择:要么选择以 Faster R-CNN 为代表的双阶段算法(精度高,但速度慢,无法做到实时);要么选择 YOLOv1 这样的单阶段算法(速度极快,但精度低,尤其是对小物体几乎测不准)。
核心思想:结合了YOLO的速度和Faster R-CNN 的Anchor机制。它最大的特点是多尺度特征检测——在网络的不同深度的特征图上分别进行检测。(浅层)大分辨率检测小目标,(深层)小分辨率检测大目标。
特点:对小物体的检测效果明显好于早期的 YOLOv1/v2,但在今天已被现代 YOLO 系列全面超越。

核心网络架构
SSD的创新在于其多尺度检测机制。
整个网络结构主要由3部分组成:
① Backbone(主干特征提取网络)
- SSD默认使用VGG-16作为基础分类网络(在后来的改进版或轻量化版本中,也常替换为Mobile或RseNet)
- 作者去掉了VGG-16的全连接层(F6、F7),将其改写为卷积层(Conv6、Conv7),从而使网络能够接受任意分辨率的输入。
② Extra Features(级联的附加卷积层)
- 在 VGG-16 之后,SSD 额外接了数个逐渐缩小的卷积层(如 Conv8、Conv9、Conv10、Conv11),目的是为了提取不同分辨率的特征图。
③ 多尺度预测
网络在向下传播的过程中,会挑选出 6 个不同尺度 的特征图(例如在
输入下,特征图大小分别为
,
,
,
,
,
)并行进行预测:

小结
SSD通过单神经网络来检测模型,以每个像素为中心产生多个锚框,在多个段的输出上进行多尺度的检测。
2.3 RetinaNet(解决单阶段痛点)
核心创新:Focal Loss(焦点损失函数)。单阶段算法之前准确率不如双阶段,核心原因在于“正负样本极度不均衡”(背景区域远多于有物体的区域)。
原理:Focal Loss 通过数学公式降低了大量易分类负样本(普通背景)的损失权重,让模型把注意力集中在那些高难度的、真正包含物体的区域。
3 Transformer(DETR系列)
2020 年以后,Transformer 席卷计算机视觉。目标检测也迎来了革命性的改变。
3.1 DETR(DEtection TRansformer)
核心思想:由 Facebook 提出的 端到端(End-to-End) 目标检测器。它彻底干掉了传统检测算法中极其恶心的两个部分:Anchor(锚框) 和 NMS(非极大值抑制后处理)。
工作原理:将图像特征展开成序列送入 Transformer En-Decoder,使用一组固定数量的“物体查询(Object Queries)”去图像里探查物体,最后通过二分图匹配(Bipartite Matching)直接输出最终的边界框。
缺点:收敛极慢(往往需要训练几百个 Epoch)。
3.2 DINO-DETR 与 RT-DETR
DINO-DETR:通过引入对比学习、改进查询初始化等手段,解决了 DETR 家族收敛慢、小物体检测差的死穴,在 COCO 数据集上疯狂霸榜。
RT-DETR (Real-Time DETR):由百度提出。通过优化跨尺度特征交互,首次将 Transformer 检测器的速度提升到了实时级别,在保持高精度的同时,推理速度直接硬刚 YOLOv8。
总结
目标检测技术历经传统方法和深度学习两个阶段,目前主流算法分为三类:双阶段、单阶段和Transformer系列。
| 算法家族 | 代表作 | 优缺点 | 适用场景 |
|
双阶段 (Two-Stage) |
Faster R-CNN, Cascade R-CNN |
优:定位精度极高,小物体好。 缺:速度慢,难以部署在嵌入式端。 |
医疗影像、遥感图像、对速度要求低的精密工业质检。 |
|
单阶段 (One-Stage) |
YOLOv5/v8/v10, SSD, RetinaNet |
优:速度极快,端侧部署生态完美(如 TensorRT, NCNN)。 缺:极端密集场景易漏检。 |
自动驾驶、安防监控、手机端实时App、工业流水线快速检测。 |
| Transformer | DETR, RT-DETR |
优:无需调参 Anchor,天生具备全局视野,上限极高。 缺:训练吃显存,传统硬件部署需适配。 |
前沿学术研究、算力充沛且追求极致泛化性能的场景。 |
(1) 双阶段算法以R-CNN家族为代表,通过区域生成和分类精修实现高精度检测,如Faster R-CNN和Mask R-CNN(加入RoIAlign和实例分割)。
(2) 单阶段算法如YOLO系列和SSD采用端到端方式实现实时检测,YOLO最新版本转向Anchor-Free设计提升性能。
(3) Transformer系列如DETR通过自注意力机制实现全局建模,RT-DETR进一步优化了实时性。
三类算法各具特点:双阶段精度高但速度慢,单阶段适合实时场景,Transformer在算力充沛时表现优异。技术演进呈现从手工特征到自动学习、从局部检测到全局建模的趋势。
更多推荐




所有评论(0)