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

经典目标检测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

相关推荐
水如烟5 分钟前
孤能子视角:EIS是什么——回顾文明来时路,试构碳硅认知语法
人工智能
netho08 分钟前
影刀多 table 组合定位,网页操作题怎么少踩坑
人工智能
核数聚19 分钟前
【赛迪专访核数聚】深耕数据治理,打通数据孤岛夯实 AI 发展根基
大数据·人工智能·算法
学到头秃的suhian20 分钟前
Super Mamba feature enhancement framework for small object detection
目标检测
丘丘用户思思澪22 分钟前
AI Agent 工作模式完全指南:从执行逻辑到系统架构
人工智能·系统架构
无敌秋28 分钟前
AI-RAN 完整详解
人工智能
新知图书31 分钟前
3.2 技能的格式和工作机制(扣子编程)
人工智能·agent·ai agent·智能体
火山引擎开发者社区38 分钟前
把大模型一键接进你的 App,火山引擎 Supabase 上线 AI-Gateway
人工智能
北京晶数信息科技40 分钟前
加油站成品油智慧监管平台+交易即开票一体化解决方案 (一)
大数据·人工智能·物联网·产品经理·需求分析
中微极客42 分钟前
2026 AI视频生成模型选型:Veo 3.1、Kling 3.0、Seedance 2.0实测对比
人工智能·音视频