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

相关推荐
MARS_AI_1 小时前
云蝠智能 Voice Agent 落地展会邀约场景:重构会展行业的智能交互范式
人工智能·自然语言处理·重构·交互·语音识别·信息与通信
weixin_422456441 小时前
第N7周:调用Gensim库训练Word2Vec模型
人工智能·机器学习·word2vec
HuggingFace4 小时前
Hugging Face 开源机器人 Reachy Mini 开启预定
人工智能
企企通采购云平台5 小时前
「天元宠物」×企企通,加速数智化升级,“链”接萌宠消费新蓝海
大数据·人工智能·宠物
超级小忍5 小时前
Spring AI ETL Pipeline使用指南
人工智能·spring
张较瘦_6 小时前
[论文阅读] 人工智能 | 读懂Meta-Fair:让LLM摆脱偏见的自动化测试新方法
论文阅读·人工智能
巴伦是只猫6 小时前
【机器学习笔记 Ⅲ】4 特征选择
人工智能·笔记·机器学习
好心的小明7 小时前
【王树森推荐系统】召回11:地理位置召回、作者召回、缓存召回
人工智能·缓存·推荐系统·推荐算法
lishaoan777 小时前
使用tensorflow的线性回归的例子(十二)
人工智能·tensorflow·线性回归·戴明回归
二DUAN帝7 小时前
UE实现路径回放、自动驾驶功能简记
人工智能·websocket·机器学习·ue5·自动驾驶·ue4·cesiumforue