自学内容网 自学内容网

一文搞懂目标检测技术的发展历程: 从R-CNN到YOLO、DETR、DINO

目标检测技术在过去的十几年中,从传统的方法逐步转变成基于深度学习驱动的方法。2012年,AlexNet在ImageNet竞赛中胜利,促进了目标检测技术的发展。目标检测领域的技术发展经历了从基于卷积神经网络(CNN)的架构到基于Transformer架构的重要转变。

最初的突破来自于基于CNN的模型,如R-CNN系列(包括R-CNN、Fast R-CNN和Faster R-CNN),这些模型通过引入区域提议网络(RPNs)和端到端的训练方式,大幅提升了目标检测的准确性。

随后,YOLO(You Only Look Once)系列模型的出现,以其一次性的检测方式和高效的性能,迅速成为实时目标检测的标准之一。

随着深度学习技术的进步,基于Transformer架构的DETR(DEtection TRansformer)模型系列开始崭露头角。DETR利用了Transformer的强大序列建模能力,通过自注意力机制处理图像特征,理论上能够更好地捕捉全局上下文信息。

一.R-CNN 

1.R-CNN(2014年)

R-CNN是第一个将卷积神经网络用于目标检测的深度学习模型。主要思路:首先使用无监督的选择性搜索(ss),产生约2000个候选区域;然后将候选区域送入一个CNN中提取特征,提取出来的特征被送入一个SVM分类器中进行分类,以及一个线性回归器进行边界框位置和大小的修正;最后对检测结果进行NMS操作,得到最终的检测结果。基本思路是将图像分成许多候选区域,对每个候选区域进行卷积神经网络的特征提取和分类。

详细步骤:候选区域生产、特征提取、目标分类、目标定位

缺点:计算量大、存在过拟合问题、不可端到端训练、检测精度不高、数据依赖性强、小目标检测困难、实时性差

2.SPPNet(2014年)

SPPNet是何凯明等人提出的一种使用空间金字塔池化的卷积神经网络模型,主要优点是可以接受任意尺寸的输入图像,并能够输出固定大小的特征向量。

空间金字塔池化是一种多尺度的特征提取方法。在传统的CNN中,输入图像的尺寸是固定的,在处理不同大小的图像时需要将其缩放到固定大小。在SPPNet中,网络的最后一层不是全连接层,而是一个空间金字塔池化层。该层将输入特征图分为不同大小的子网格,并对每个子网格进行池化操作,最终输出一个固定大小的特征向量。这个固定大小的特征向量可以作为输入到全连接层进行分类。

实现方式

将输入特征图按照不同的比例进行分割,对于每个子网格,进行池化操作,得到每个子网格的一个固定大小的特征向量。将所有子网格的特征向量拼接在一起,得到一个固定大小的特征向量作为输出。

缺点:计算量大,对不同大小的目标检测存在限制,不易扩展,特征提取能力有限

3.Fast R-CNN(2015年)

与之前的目标检测方法相比,Fast RCNN可以通过共享卷积特征图来加速检测过程,从而均衡检测精度与检测速度之间的关系。

步骤:

1. Region Proposal Network(RPN)阶段:对输入图像进行特征提取,并在提取的特征图上生成候选区域。
 2. Fast R-CNN阶段:对每个候选区域进行RoI池化,然后输入到全连接层中进行分类和回归。

特征提取采用预训练的卷积神经网络;候选区域生成(RPN)阶段,在卷积特征图上滑动一个小窗口,并对每个窗口内的特征进行分类和回归,从而得到候选区域。ROI池化是将每个候选区域分成固定大小的网格,然后在每个网格内进行最大池化。从而得到固定大小的特征图。

空间金字塔池化和ROI池化的区别?

两者起的作用是相同的,即把不同尺寸的特征输入转化为相同尺寸的特征输出。SPP针对同一个输入使用了多个不同的尺寸池化(1 x 1,2x2,4x4)操作,把不同尺度的结果拼接作为输出;ROI池化可看作但尺度的SPP,对于一个输入只进行一次池化操作。

缺点:训练时间长、目标尺度限制、对旋转不变性教程、前向计算复杂度高、ROI 

 4.Faster R-CNN(2015年)

Faster R-CNN是R-CNN和Fast R-CNN的改进版,主要解决这两种算法的瓶颈问题--区域提取。

主要由两部分组成:RPN和Faster Rcnn检测器。RPN是一种特殊的卷积神经网络,它在输入图像中扫描滑动窗口,并输出每个窗口中是否包含目标及其边界框位置的概率。与之前的区域提取算法不同,RPN并不是基于选定的一组候选区域进行检测,而是在整张图像上提出潜在的目标区域,以及他们的边界框位置和得分。

训练过程包括两个阶段:首先,训练RPN来提出目标候选区域;然后,使用这些候选区域训练Fast Rcnn检测器。训练方式可以采用端到端的方式,通过最小化损失函数来同时训练RPN和Fast RCNN。

缺点:计算量大、模型复杂、检测速度低

5.FPN(2017年)

FPN主要解决的是Faster RCNN物体检测算法在处理多尺度变化问题时的不足,Fster RCNN中,都是基于单个高层特征。这样做的缺陷时对小物体不友好。为了处理小物体,经典的方式是采用图像金字塔的方式在训练或测试阶段对图片进行多尺度变化增强,但是这样带来了极大的计算量,FPN通过简单的网络连接改变,在基本不增加原有模型计算量的情况下,大幅度提升了小物体检测的性能。

 

低层的特征语义信息比较少,但是目标位置准确;高层的特征语义比较丰富,但是目标的位置比较粗略。虽然有些算法采用多尺度特征融合的方式,但一般是采用融合后的特征预测,而FPN不一样的地方在于预测是在不同特征层独立进行,训练时间较小,可作为图像金字塔的替代。

RCNN解决了使用CNN进行目标定位问题

Fast RCNN解决了目标定位和分类同步问题

Fater RCNN解决了选择性搜索目标问题

 二. You Only Look Once

YOLO系列是目标检测领域的使用较普遍的方法,以其高效、实时的能力著称。从YOLOv1到YOLOv11(截止2024.10),每个迭代都带来了显著的改进。在谷歌学术上搜索,大约282000个结果。

1.YOLOv1(2015年)

 由Joseph Redmon和他的团队提出,首次将目标检测视为一个回归问题,而不是传统的分类加定位两步法。它通过单次前向传播即可预测出图像中的目标位置和类别。

将一幅图片分成s*s个网格,如果某个object的中心落在这个网格中,则这个网格负责预测这个object。

通过一些列卷积池化进行特征提取,形成一个7*7*30的特征矩阵。30代表的是2个预测框的位置+置信度+20个类别的概率。7*7的特征矩阵,每个单位可以生成两个候选框,同类别的,然后通过NMS去掉小的,训练的时候,通过IOU留下大的,然后一张图像最多生成49个物体。

缺点:定位不准确,检测精度低。

2.YOLOv2(2016年)

YOLOv2的诞生,主要解决YOLOv1的定位不准确和召回率低的问题,能检测9000种物体。

 创新点:

  1. Batch Normalization(BN层的引入):有助于解决反向传播中的梯度消失与梯度爆炸的问题;加速模型的收敛
  2. High Resolution Classifier(高分辨率的分类器):仅仅使用与分类,而不是用于目标检测
  3. Convolutional With Anchor Boxes(锚框):V2尝试采用anchor.在每个gird预先设定一组不同大小和宽高比的边框,来覆盖整个图像的不同位置和多种尺度,先验框作为预定义的候选区域在神经网络中检测其中是否存在对象,以及微调边框的位置。5个锚框,极大的提高了召回率 一共会产生13*13*5个anchor!
  4. Dimension Clusters(维度集群):通过聚类产生的锚框,而不是像Faster RCNN哪样,人为手工的设置边框的比例
  5. Fine-Grained Features(细粒度的特征图):提高小目标的检测精度
  6. Multi-Scale Training(多尺度的训练):训练阶段分三个阶段,在第三个阶段才开启的多尺度训练,每10个batch就换一个输入的大小。

缺点:虽然检测精度有所提升,但仍有增长空间。

3.YOLOv3(2018年)

YOLO v3进一步提升了检测精度,特别是在小目标检测方面。它使用了更深的网络Darknet-53,并且加入了多尺度预测机制。

算法由4部分组成:第一部分输入端;第二部分backbone(Darknet-53):用于提取特征;第三部分,neck颈部:融合不同尺度的特征;第四部分,输出端(头部):用于获取最终的预测结果

创新点: 

1.采用了新的网络结构Darknet-53,借鉴了残差网络,能够使用更深的网络。

2.多尺度进行预测,3个尺度进行预测,借鉴FPN的特征金字塔结构。下采样8倍/16倍/32倍

3.13*13的特征矩阵预测大的物体,52*52的特征矩阵预测较小的物体,通过特征融合,较好的实现了这个对小目标和密集物体的检测。

缺点:模型变得更加复杂,训练时间更长。

YOLO系列(v1-v3)作者 Joe Redmon 宣布不再继续CV方向的研究,引起学术圈一篇哗然。YOLO之父宣布退出CV界,坦言无法忽视自己工作带来的负面影响

4.YOLOv4(2020年)

由Alexey Bochkovskiy提出,他是darknet另一个github版本的维护者。

缺点:虽然性能优异,但由于引入了许多新技术,模型的复杂度有所增加。

5.YOLOv5(2020年)

由ultralytics公司提出

创新点:

Back bone:New CSp-Darknet53 ,网络第一层 v5.0 版本前是 FOCUS 结构,v5.0 版本以后是 6x6 卷积

Neck:PAN 结构, v5.0版本以前是SPP结构, v5.0版本以后是 SPPF 结构

Loss:分类损失,obj损失,定位损失。

提供了多种模型变体(如YOLOv5s, YOLOv5m, YOLOv5l, YOLOv5x),适用于不同的性能需求。

6.YOLOv6(2020年)

YOLOv6是美团技术团队研发的检测框架,其融合了近期多种网络结构、训练策略、测试技术、量化和模型优化等思想。

EfficientRep Backbone:这是模型的主干网络,用于提取图像的特征。EfficientRep是一种高效的特征提取网络,能够在保持高精度的同时减少计算量。

训练期间,RepBlock通过多个RepVGG块提取特征,并使用ReLU激活函数进行非线性变换。推理期间,RepBlock被简化为RepConv,以减少计算量和提高推理速度。CSPStackRep Block旨在提高特征提取的效率和精度,同时保持较低的计算复杂度。

Neck

  • Rep-PAN:这是模型的颈部结构,用于进一步处理和融合特征。Rep-PAN包含多个模块:

  • Up-sample:上采样操作,用于增加特征图的分辨率。
  • Concatenation over channel dimension:在通道维度上进行特征图的拼接。
  • RepBlock:包含卷积层和其他操作,用于特征提取和融合。
  • Conv:卷积层,用于特征处理。

Head

  • Efficient decoupled head:这是模型的头部结构,用于最终的目标检测。每个头部包含三个输出:

    • cls.:分类输出,用于预测目标的类别。

    • reg.:回归输出,用于预测目标的边界框。

    • obj.:目标置信度输出,用于预测目标的存在概率

7.YOLOx(2021年)

① 输入端:Strong augmentation数据增强

② BackBone主干网络:主干网络没有什么变化,还是Darknet53。

③ Neck:没有什么变化,Yolov3 baseline的Neck层还是FPN结构。

④ Prediction:Decoupled Head、End-to-End YOLO、Anchor-free、Multi positives.

无锚(Anchor-free)。自YOLOv2以来,所有后续的YOLO版本都是基于锚点的检测器。回到了一个无锚结构,简化了训练和解码过程。与YOLOv3基线相比,无锚的AP增加了0.9;
多重正样本(Multi positives)。为了弥补因缺乏锚点而产生的巨大不平衡,作者使用了中心采样,他们将中心3×3的区域作为正例区域。这种方法使AP增加了2.1点;
解耦头(Decoupled head)。分类置信度和定位精度之间可能存在错位。由于这个原因,YOLOX将这两者分离成两个头,一个用于分类任务,另一个用于回归任务,将AP提高了1.1 分,并加快了模型收敛。
高级标签分配。多个对象的bounding box重叠时,ground truth标签分配可能存在模糊性,并将分配程序表述为最佳传输(OT)问题。YOLOX在这项工作的启发下,提出了一个简化的版本,称为simOTA。这一变化使AP增加了2.3分;
强化增强。YOLOX使用MixUP和Mosaic增强。作者发现,在使用这些增强后,ImageNet预训练不再有好处。

8.YOLOv7(2022年)

YOLOv7[由YOLOv4和YOLOR的同一作者于2022年7月发表在ArXiv。当时,在5 FPS到160 FPS的范围内,它的速度和准确度超过了所有已知的物体检测器。与YOLOv4一样,它只使用MS COCO数据集进行训练,没有预训练的骨干。

YOLOv7的架构变化是:

  • 扩展高效层聚合网络(E-ELAN)。ELAN通过控制最短的最长梯度路径,让深度模型更有效地学习和收敛。YOLOv7提出的E-ELAN适用于具有无限叠加计算块的模型。E-ELAN通过洗牌和合并cardinality结合不同组的特征,在不破坏原始梯度路径的情况下增强网络的学习;
  • 基于串联的模型的模型缩放。缩放通过调整一些模型属性来生成不同大小的模型。YOLOv7的架构是一个基于串联的架构,其中标准的缩放技术,如深度缩放,导致过渡层的输入通道和输出通道之间的比例变化,这反过来又导致了模型的硬件使用量的减少。YOLOv7提出了一种新的基于串联模型的缩放策略,其中块的深度和宽度以相同的因素进行缩放,以保持模型的最佳结构。

YOLOv7中使用的bag-of-freebies包括:

  • 计划中的重新参数化卷积。和YOLOv6一样,YOLOv7的架构也是受到重新参数化卷积(RepConv) 的启发。然而,他们发现RepConv中的身份连接破坏了ResNet[53]中的残差和DenseNet中的串联。出于这个原因,他们删除了身份连接,并称之为RepConvN;
  • 对辅助头进行粗略的标签分配,对主导头进行精细的标签分配。主导头负责最终输出,而辅助头则协助训练;
  • conv-bn-activation中的批量归一化。这将批量归一化的平均值和方差整合到推理阶段的卷积层的偏置和权重中;
  • YOLOR中启发的隐性知识;
  • 指数移动平均线作为最终推断模型。

 9.YOLOv8(2024年)

YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本,目前支持图像分类、物体检测和实例分割任务,在还没有开源时就收到了用户的广泛关注。

改进点:

1. Backbone: 第一层卷积由原本的 6x6 卷积改为 3x3 卷积;参考 YOLOv7 ELAN 设计思想将C3 模块换成了 C2f 模块,并配合调整了模块的深度。

2. Neck:移除了 1x1 卷积的降采样层;同时也将原本的 C3 模块换成了 C2f 模块。

3.Head:这部分改动较大,换成了解耦头结构,将分类任务和回归任务解耦;同时也将 Anchor-Based 换成了Anchor-Free

4. LoSS:使用 BCE LOSS 作为分类损失;使用 DFL LOSS + CIOU Loss 作为回归损失。

5.样本匹配策略: 采用了 Task-Aligned Assigner 样本分配策略。

6.训练策略:新增加了最后 10 轮关闭 Mosaic 数据增强操作,该操作可以有效的提升精度。

C2f 的优势?

1.参数少:c2f模块中的卷积核参数数量比c3模块少,因此c2f模块需要的计算资源更少。

2.计算速度快:由于参数少,c2f模块的计算速度比c3模块更快。

3.适应性强:c2模块可以适应不同大小的输入,而c3模块只适用于一定大小的输入。这使得c2f模块在处理不同大小的图像时更加灵活。

4.对小物体敏感:由于c2f模块的卷积核大小较小,因此对于小物体的识别更加敏感。

10.YOLOv9(2024年) 

YOLOv9 引入了可编程梯度信息 (PGI) 和广义高效层聚合网络 (GELAN) 等开创性技术,标志着实时目标检测领域的重大进步。该模型在效率、准确性和适应性方面都有显著提高,在 MS COCO 数据集上树立了新的标杆。

PGI主要包括三个部分,即:

(1)主分支(用于推理过程)

(2)辅助可逆分支(用于解决神经网络深度化带来的问题)

(3)多级辅助信息(用于处理深度监督带来的误差积累问题,特别是针对多预测分支的架构和轻量化模型。)

把 CSPNet、 ELAN 这两种神经网络架构结合起来,从而设计出兼顾轻量级、推理速度和准确性的通用高效层聚合网络(generalized efficient layer aggregation network ,GELAN)。

11.YOLOv10(2024年)

YOLOv10 是清华大学研究人员提出的一种新的实时目标检测方法,解决了YOLO 以前版本在后处理和模型架构方面的不足。通过消除非最大抑制(NMS)和优化各种模型组件,YOLOv10 在显著降低计算开销的同时实现了最先进的性能。

改进点:

1.双标签分配策略:标签分配策略对于目标检测器来说是至关重要的。核心思想便是在训练阶段使用一对多的检测头提供更多的正样本来丰富模型的训练;而在推理阶段则通过梯度截断的方式,切换为一对一的检测头,如此一来便不在需要 NMS 后处理,在保持性能的同时减少了推理开销。

2.架构改进:

Backbone & Neck:使用了先进的结构如 CSPNet 作为骨干网络,和 PAN 作为颈部网络,优化了特征提取和多尺度特征融合。
大卷积核与分区自注意力:这些技术用于增强模型从大范围上下文中学习的能力,提高检测准确性而不显著增加计算成本。
整体效率:引入空间-通道解耦下采样和基于秩引导的模块设计,减少计算冗余,提高整体模型效率。

12.YOLOv11(2024年)

YOLOv11是ultralytics公司的最新作品,此公司还出了yolov5,yolov8。不得不说,ultralytics公司出品,必是精品。相比于YOLOv8,在YOLOv11中,将c2f变为C3K2,在SPPF后面添加了C2PSA,检测头内部替换了两个DWConv,模型的宽度和深度进行了大幅度的调整。

改进点:

1. C3K2机制,提出了C3K2机制,其中C3K2有参数c3k,在网络的部分位置设置为False,叫C3K2的原因个人认为是C3K调用时参数N设置为2。

 

2.C2PSA, C2机制内部嵌入了一个多头注意力机制,仔细观察把Attention哪里去掉则C2PSA机制就变为了C2所以我上面说C2PSA就是C2里面嵌入了一个PSA机制。

 

 3.分类检测头增加了两个DWConv。在分类检测头中YOLOv11插入了两个DWConv这样的做法可以大幅度减少参数量和计算量。

 关于YOLO11的配置及详细解释、训练,见本人的另一篇博客:YOLOv11| 一文搞懂yolo得最新作品YOLOv11,并训练自己的数据集-CSDN博客

YOLO系列算法存在的问题:

小目标检测性能不佳、多目标检测的局限性、边界框预测误差、对遮挡目标的鲁棒性差等。

三.DETR

1.DETR(2020年)

DETR由Facebook AI Research团队在2020年提出。

创新点:

  • 使用Transformer编码器-解码器架构代替传统的CNN网络组合。
  • 通过直接匹配预测框和真实框来简化目标检测流程,消除了候选区域生成、非极大值抑制(NMS)等传统步骤。
  • 使用匈牙利算法进行预测框与真实框的匹配。

特点:虽然在某些基准测试中展示了与传统方法相当甚至更好的性能,但由于其较长的训练时间和缓慢的收敛速度,在实际应用中受到了一定限制。

2.Deformable DETR (2021年)

  • 改进:为了解决标准DETR中由于全局注意力机制导致的计算成本高昂问题,Deformable DETR引入了可变形注意力机制。

  • 特点:通过选择性地关注输入特征图中的关键位置,而非所有位置,从而大幅减少了计算量,提高了模型的效率。

3.RT-DETR (2023)

  • 改进:RT-DETR专注于提高模型的实时性能。

  • 特点:通过采用新的注意力机制等技术,RT-DETR实现了更高效的训练和推理,使其更适合实时应用。

四.DINO

DINO(DETR with Improved deNoising AnchOr Boxes)是一种基于Transformer架构的目标检测模型,它是DETR的一种改进版本,旨在解决原始DETR模型的一些局限性,特别是其较慢的收敛速度和对小目标检测能力的不足。

1.DINO (2022)

提出背景:DINO由IDEA-Research团队在2022年提出,旨在通过改进的去噪锚框(deNoising Anchor Boxes)机制来提升DETR模型的性能。

关键技术:

  • 去噪训练:通过引入去噪机制来提高模型的鲁棒性和检测精度。

  • 混合查询:采用混合查询方法进行锚点初始化,这有助于模型更好地学习目标的位置信息。

  • 重复推理:通过多次推理来增强模型的检测能力。


原文地址:https://blog.csdn.net/weixin_43826536/article/details/142852987

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!