深度学习视觉2D检测算法综述
目录
一、两阶段目标检测算法
1.1 R-CNN(Region-based CNN,2014)
1.2 Fast R-CNN(Fast Region-based CNN,2015)
1.3 Faster R-CNN(Faster Region-based CNN,2016)
1.4 Mask R-CNN(Faster Region-based CNN,2017)
二、单阶段目标检测算法
2.1 yolov3(You Only Look Once v3,2018)
2.2 SSD网络(Single Shot MultiBox Detector,2016)
2.3 RetinaNet网络(2017)
2.4 fcos网络(Fully Convolutional One-Stage Object Detector,2019)
三、基于transformer目标检测算法
3.1 DETR网络(End-to-End Object Detection with Transformer,2020)
3.2 Deformable DETR网络(2020)
编辑
自从2012年深度学习再次应用,基于深度学习的视觉2D检测算法便得到了飞速的发展。2D检测算法到目前大致经历了3个阶段,第一个阶段是(2014-2017)两阶段目标检测算法、第二个阶段(2017-2020)单阶段目标检测算法、第三阶段(2020-2024)transformer目标检测算法。
一、两阶段目标检测算法
两阶段目标检测(Two-stage Object Detection)算法是一种基于区域建议(Region Proposal)的目标检测方法,通常能够提供更高的检测精度,但速度相对较慢。它主要分为两个阶段:
第一阶段:从输入图像中生成候选区域(Region Proposals)。
第二阶段:对候选区域进行分类,并进一步优化边界框。
两阶段方法最具代表性的算法是 R-CNN 系列,包括 R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN 等。
1.1 R-CNN(Region-based CNN,2014)
R-CNN是最早基于深度学习的目标检测方法之一,主要包括:
1)使用 Selective Search 生成候选区域(通常约 2000 个),Selective Search是根据图像的纹理和颜色等特征进行候选区域选择;
2)对每个候选区域进行 CNN 特征提取(如 AlexNet),Selective Search确定的候选区域大小是不同的,将候选区域进行缩放到固定尺寸(224*224),这里的CNN网络是在imagenet分类任务里面训练好的网络,不参与RCNN的训练,只用来产生分类特征;
3)通过CNN获取4096维特征,将特征输入到SVM分类器进行训练,这里是需要训练SVM分类器,训练样本就是计算候选区域与ground truth之间的 IoU,IoU ≥ 0.5为正样本,0.1 ≤ IoU ≤ 0.5为负样本,IoU ≤ 0.1就舍弃掉,因为0.1 ≤ IoU ≤ 0.5的负样本已经足够多,IoU ≤ 0.1对训练没有太大影响;
4)然后使用回归器(Bounding Box Regressor)优化检测框,回归器与SVM分类器是完全独立训练,回归器只对IoU ≥ 0.5的样本进行训练,回归获取候选框与 Ground Truth 框的偏移量(Δx,Δy,Δw,Δh);
5)推理过程: 通过Selective Search 方法生成候选框(约2000个),CNN模型生成特征,svm分类器进行分类,回归器对分类器中的目标进行精确位置检测,最后采用非极大值抑制(NMS)算法进行过滤,这是由于多个 Region Proposal 可能预测出相同目标,导致 多个候选框重叠,需要进行 NMS 过滤。
R-CNN属于早期应用深度学习算法进行2D视觉检测的算法,从算法上可以明显看出有机器学习和深度学习缝合的现象,算法性能比传统的机器学习算法要高,由于每个候选框都需要进行CNN提取特征,推理速度非常慢。
1.2 Fast R-CNN(Fast Region-based CNN,2015)
Fast R-CNN才真正意义上算是基于深度学习的目标检测,它共享了CNN计算,使用 RoI Pooling固定候选框大小,去掉了RCNN中的SVM分类器,实现端到端的训练任务。
1)相比于R-CNN,Fast R-CNN只进行一次CNN计算,依然采用 Selective Search 生成候选区域(在原图上生成候选区域),然后将原图的候选区域按照步长缩放到特征图层上,例如原始图像224*224*3,特征图层为14*14*512,步长为16进行缩放,而且这里的CNN是参与训练的;
2)由于后续全连接层需要固定的特征维度输入,ROI Pooling负责将缩放到特征图形的感兴趣区域(由于缩放过程位置和尺寸可能成为小数)转化成固定尺寸大小,如7*7*512,通过不同池化系数等比例缩放到固定尺寸大小;
3)相比于R-CNN,使用Softmax 替换SVM预测目标类别,Bounding Box 回归调整目标框,正负样本选取逻辑基本一致,这样可以进行端到端训练;
4)推理过程:与R-CNN类似,使用 NMS(非极大值抑制)去除冗余框,输出最终目标框和类别。
Fast R-CNN相比R-CNN可以进行端到端的训练,使用共享CNN计算和RoI Pooling使得训练和推理效率得到了极大的提升,但是依然采用Selective Search使得效率依然不高,同时ROI Pooling精度不高,导致小目标检测效果不佳,这些问题在后续Faster R-CNN中得到解决。
1.3 Faster R-CNN(Faster Region-based CNN,2016)
Faster R-CNN最重要的改进是采用了RPN网络替代了Selective Search算法,其次是采用RoI Align替换了 RoI Pooling,提高了检测的精度,可以实现从图像到识别的端到端训练。
1)Faster R-CNN采用RPN网络替代了Selective Search算法,RPN网络是一个全卷积网络,在特征层后面是一个独立的分支,例如特征层为38*62*512,首先会经过一个卷积层变为38*62*256,然后经过两个1*1的卷产生两个分支,分别是分类分支38*62*18和回归分支38*62*32。这里主要是为了提高RPN的丰富性,在每个窗口点位置放了9个先验的anchors(3个比例和3个大小组合)。为了提高候选区域的可靠性,这里训练时取IoU ≥ 0.7 作为正样本,IoU ≤ 0.3 作为负样本(背景),IoU在0.3-0.7 的 Anchor 被忽略;
2)与Fast R-CNN类似,产生的候选框经过筛选进入到检测网络, Faster R-CNN采用了RoI Align替换了 RoI Pooling,使得在计算过程中候选框的位置投射的更加精确。训练过程中Fast R-CNN与RPN网络是同时训练的;
3)其他的计算和推理与Fast R-CNN类似。
Faster R-CNN基本上是两段式检测算法的最经典算法。
1.4 Mask R-CNN(Faster Region-based CNN,2017)
Mask R-CNN 是 Faster R-CNN 的扩展版本,能够同时完成目标检测(分类 + 目标框)和实例分割(像素级掩码)。
1)与Faster R-CNN基本相似,但是在R-CNN后增加了一个分割分支。首先在ROI Align增加了一个分支将所有特征映射为14*14*256(识别网络为7*7*256),通过卷积和反卷积最终输出为28*28*C,其中28*28代表分割特征区域大小,需要缩放到候选区域大小再投射到原始图像上获取真值,C代表每一个类别都有一个单独的分割特征图,输出不是1或者0的二值,而是0-1的连续值。
二、单阶段目标检测算法
单阶段(One-Stage)目标检测算法直接从输入图像预测目标的类别和边界框,不需要像 Faster R-CNN这样的两阶段(Two-Stage)方法生成候选区域(RoI)。单阶段目标检测算法一般采用全卷积网络,没有全连接层,然后通过网格(Grid)划分图像,在每个网格或特征点上进行障碍物的检测和回归。单阶段检测方法通常计算速度更快,适用于实时检测任务,典型的网络有yolo、ssd、RetinaNet和fcos。
2.1 yolov3(You Only Look Once v3,2018)
yolo系列是比较典型的单阶段检测算法,其中yolov3是最经典的版本。它采用darknet-53(类似resnet)作为主干网络,基于多尺度特征进行检测,其中P3(52×52)适用于小目标检测,P4(26×26)适用于中等大小目标,P5(13×13)适用于大目标检测。在每个特征图网格上会有3个anchor,最后通过非极大值抑制(NMS)过滤冗余框,生成最终检测结果,包括类别、目标框坐标、置信度等。
2.2 SSD网络(Single Shot MultiBox Detector,2016)
SSD网络与yolov3网络思想类似,但使用了不同的主干网络,SSD采用了VGG网络,采用不同的尺度特征以及每个特征网络网格放置不同的anchor。
2.3 RetinaNet网络(2017)
RetinaNet网络与yolov3也是同样的思想,但使用了resnet50作为主干网络,采用P3-P7层输出作为尺度特征层,每个特征网络网格放置了9个anchor,同时采用了focal loss作为损失函数,在小目标检测效果上比较好。
2.4 fcos网络(Fully Convolutional One-Stage Object Detector,2019)
fcos网络与RetinaNet网络较为类似,但是采用无Anchor设计,直接回归目标框位置和大小,采用 Center-ness 计算,提高边界框质量。fcos计算量较小,速度较快,同时对小目标检测也有较高的精度。
三、基于transformer目标检测算法
近年来,Transformer 结构在计算机视觉领域取得了重大突破,特别是在目标检测任务上,基于 Transformer 的目标检测方法(如 DETR、Deformable DETR)展现了比 CNN 传统方法更强的性能。
3.1 DETR网络(End-to-End Object Detection with Transformer,2020)
DETR(DEtection TRansformer)是 Facebook AI Research(FAIR)于 2020 年提出的基于 Transformer 的端到端目标检测算法。它彻底去掉了传统目标检测方法中的 Anchor Box、NMS(非极大值抑制),直接使用 Transformer 进行目标框的回归和分类,使得目标检测变成一个序列预测任务。
DETR 主要由 CNN Backbone(特征提取)+ Transformer(目标建模)+ FFN(最终预测) 三部分组成。采用 ResNet-50 / ResNet-101 提取深度特征,输出 固定大小的特征图(如 H/32 × W/32),这个特征图会作为 Transformer Encoder 的输入。
CNN Backbone 提取特征:
- 采用 ResNet-50 / ResNet-101 提取深度特征;
- 输出 固定大小的特征图(如
H/32 × W/32
); - 这个特征图会作为 Transformer Encoder 的输入。
Transformer 编码器(Encoder):
- 将 CNN 提取的特征图展平成序列(Flattened Features);
- 加入位置编码(Positional Encoding),保持空间信息;
- 经过
N
层标准 Transformer Encoder 进行特征建模; - 和输入形状相同的特征序列,但经过 Transformer 编码器建模。
Transformer 解码器(Decoder):
- 采用 固定数量(N=100)的查询(Object Queries) 作为目标检测任务的 Query;
- 查询 Query + 编码器输出 进行跨注意力计算(Cross-Attention);
- 经过
M
层 Transformer Decoder,输出N × D
维度的目标信息; - 每个 Query 预测一个目标框(N=100);
- 使用 Hungarian Algorithm(匈牙利匹配) 计算每个预测框与真实目标的最优匹配。
detr是首次基于transformer进行的端到端训练,无需 Anchor、NMS,全局建模能力强,减少候选框误检,但是收敛速度慢(需要 500+ 轮训练),小目标检测能力较弱。
3.2 Deformable DETR网络(2020)
Deformable DETR(可变形 DETR) 是对 DETR(Detection Transformer) 的改进版本,旨在解决 DETR 的收敛速度慢、计算复杂度高、小目标检测能力差等问题。Deformable DETR 通过引入 Deformable Attention(可变形注意力),提高检测效率和准确度。
Deformable Attention机制:
标准 Transformer 采用全局自注意力(Global Self-Attention),需要计算所有Query和Key之间的相似性,导致 计算复杂度 = O(N^2)(计算量大)。而Deformable DETR采用 Deformable Attention(可变形注意力),只在每个Query 选取少量关键点(Key Points)进行计算,而不是全局计算,计算复杂度降低到O(N)。假如我们设定的关键点数量为k,Query为Q(N,256),代表N个查询向量,Q会经过两个MLP将其映射为两个物理概念,一个为Pref,维度为N*2,代表在特征层的N个二维位置,另外一个是ΔP,维度为N*L*K*2,代表在每一个特征层L上(例如P3 P4 P5)有k个偏移位置,这些偏移位置就是每一个目标N所重点关注的特征,通过P=Pref + ΔP,P的维度为N*L*K*2,可以获得在P所示的位置的L*K个特征点,以这些特征点再进行注意力计算,可以极大减少计算量。
多尺度特征融合:
Deformable DETR不仅考虑了最终输出层的特征,同时也考虑了多尺度的特征层,并通过MLP将query映射到不同尺度特征层具体的位置。