经典目标检测YOLO系列(一)引言_目标检测架构

2023-12-14 17:35:49

经典目标检测YOLO系列(一)引言_目标检测架构

一个常见的目标检测网络,其本身往往可以分为一下三大块:

在这里插入图片描述

  • Backbone network,即主干网络,是目标检测网络最为核心的部分,backbone选择的好坏,对检测性能影响是十分巨大的。

  • Neck network,即颈部网络,Neck部分的主要作用就是将由backbone输出的特征进行整合。其整合方式有很多,最为常见的就是FPN(Feature Pyramid Network),SPPF等。

  • Detection head,即检测头,这一部分的作用就没什么特殊的含义了,就是若干卷积层进行预测,head部分就是在由前面网络输出的特征上去进行预测,约等于是从这些信息里解耦出来图像中物体的类别和位置信息。

1.1 Backbone network

  • 通常,为了实现从图像中检测目标的位置和类别,我们会先从图像中提取出些必要的特征信息,比如HOG特征,然后利用这些特征去实现定位和分类。而在深度学习这一块,这一任务就交由backbone网络来完成。深度学习的强大之处就在于其特征提取的能力,在很多任务上都超越了人工特征。

  • 从某种意义上来说,如何设计好的backbone,更好地从图像中提取信息,是至关重要的,因为特征提取不好,自然会影响到后续的定位检测

  • Backbone这一部分通常就是将诸如VGG、ResNet等模型搬过来(去掉最后的global avgpooling和softmax层),这一部分的参数初始化就直接使用在ImageNet上训练好的参数。这一模式也就是后来所说的ImageNet pretrained概念。

  • 常用的backbone模型如下:

    • VGG网络:其中最常用的就是VGG-16。
    • ResNet网络:其中最常用的就是ResNet50ResNet101。当任务需求很小的时候,也可以ResNet18。
    • ResNeXT网络
    • DarkNet网络:常用的包括darknet19darknet53,这两个网络分别来源于YOLOv2和YOLOv3两个工作中。其中darknet19对标的是vgg19,darknet53对标的是resnet101,但由于darknet本身是个很小众的深度学习框架,不受学术界关注,且这两个网络均是由darknet框架实现的,因此也就很少会在其他工作中看到这两个backbone。
    • MobileNet:来自谷歌,一共出了v1,v2,v3三个版本了,相较于上面那些以GPU为主要应用平台的大型网络,MobileNet则着眼于低性能的移动端平台,如手机、嵌入式设备等。
    • ShuffleNet:来自旷视科技,一共出了v1和v2两个版本,同样是针对于低性能的移动端平台。
    • 。。。。。。

1.2 Neck network

backbone部分,其作用归根结底就是一句话:提取图像中有用的信息。

由于backbone网络毕竟是从图像分类(image classification)任务迁移过来的,其提取特征的模式可能不太适合目标检测detection。因此,在我们最终从这些特征中得到图像中若干目标的类别信息(classification)和位置(location)信息之前,有必要对它们做一些处理。

这一部分,因为是在backbone之后,detection head之前,因此,被称为“Neck”。

1.2.1 FPN

Neck部分最有名的,莫过于 FPN(Feature Pyramid Network)

在这里插入图片描述

在SSD之前,不论是Faster R-CNN还是YOLO,他们都只是在backbone输出的最后一层很粗糙的特征图(feature map)上去做检测的。

在CNN中,有一个很关键的概念叫做“感受野”(receptive field),意思就是这一张特征图的pixel能包含原始图像中的少个像素。直观上来看,backbone最后输出的很粗糙的特征图。通常stride=32,即经过了32倍降采样,具有很大的感受野,这对于大物体来说是很友好的,但对于小物体而言,经过多次降采样,小物体的信息很容易就被丢失掉了。

为了解决这么个问题,SSD在三个不同大小的特征图上进行预测,即上图中的(c),但CNN随着网络深度的增加,每一层的特征图所携带的信息量和信息性质也不一样。

浅层包含的细节信息、轮廓信息、位置信息等更多,深层包含的语义信息更多。因此,FPN的工作就是在检测前,先将多个尺度的特征图进行一次bottom-up的融合,也就是上图中的(d),这被证明是极其有效的特征融合方式,几乎成为了后来目标检测的标准模式之一。

1.2.2 SPP及SPPF

当然除了FPN,还有SPP模块及其改进版本SPPF,也是很常用的Neck结构,下图便是SPP的结构示意图。

在这里插入图片描述

YOLOv3通过添加这一模块有效提升了模型的性能,而模型的计算量的增加几乎可以忽略不记。SPP的思想很简单,通过不同大小的maxpooling核来丰富特征图的感受野。

在YOLOV5中,使用了改进版本的SPPF,如下所示,后面我们自己实现YOLOV1版本中,会使用到SPPF。

在这里插入图片描述

1.2.3 其他Neck

RFB:出自《Receptive Field Block Net for Accurate and Fast Object Detection

在这里插入图片描述

ASPP:ASPP是通过并联不同空洞率 3 * 3的卷积核组成的,通过多支路后进行concate,再进行1x1卷积(降维)。

在这里插入图片描述

PAN:PAN是一个非常好用的特征融合方式,在FPN的bottom-up基础上又引入了top-down二次融合(如下图),有效地提升了模型性能。

在这里插入图片描述

当然,还有很多出色的Neck模块,这里就不展开细说了。

1.3 Detection head

一张图像,在经过了backbone和neck两部分的处理后,就得到了最终的特征图。

随后,在这样的特征图上,通过添加几层卷积即可进行识别和定位。

Detection head并不像前两部分那样,有那么多的说道和自由发挥的空间,这一部分通常就是普通的卷积。如下图的RetinaNet,最后的detection head部分就是三条并行的分支,每个分支右4层普通卷积堆叠而成。

在这里插入图片描述

结语:

我们可以为以上任意部分【主干网络、Neck以及检测头】单独去设计一个模块,然后“插进去”即可。

很多目标检测的优化工作就是这么来的,比如2018年的ECCV上的RFBNet,就是在SSD基础上,设计了RFB模块插进Neck部分,从而显著提升了模型性能。

在这里插入图片描述

本文参考自《YOLO目标检测》ISBN编号:9787115627094

文章来源:https://blog.csdn.net/qq_44665283/article/details/134921849
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。