1.3 目标检测网络框架浅析
在1.2节中,简单介绍了当前常见的目标检测网络框架的基本部分:主干网络、颈部网络和检测头。本节将详细介绍每一个组成部分。
1.3.1 主干网络
为了检测出图像中目标的类别和位置,我们会先从输入的图像中提取出必要的特征信息,比如HOG特征。不论是基于传统方法还是深度学习方法,提取特征这一步都是至关重要的,区别只在于提取的方式。然后利用这些特征去完成后续的定位和分类。在深度学习领域中,由于CNN已经在图像分类任务中被证明具有强大的特征提取能力,因而选择CNN去处理输入图像,从中提取特征是一个很自然、合理的做法。在目标检测框架中,这一部分通常被称为主干网络。很多时候,一个通用目标检测器的绝大部分网络参数和计算都包含在了主干网络中。
由于深度学习领域本身的“黑盒子”特性,很多时候我们很难直观地去理解CNN究竟提取出了什么样的特征,尽管已经有一些相关的理论分析和可视化工作,但对于解开这层面纱还是远远不够的。不过,已经有大量的工作证明了这一做法的有效性。
从某种意义上来说,如何设计主干网络是至关重要的,这不仅因为主干网络占据了一个目标检测器的计算量和参数量的大部分,还因为提取的特征的好坏对后续的分类和定位有着至关重要的影响。在应用于目标检测任务之前,深度学习技术就已经在图像分类任务中大放光彩。尤其是在VGG[22]和ResNet[23]工作问世后,图像分类任务几乎达到了顶峰—从不再举办ImageNet比赛这一点就可见一斑。虽然这个领域还在陆陆续续地出现新的工作,诞生了很多出色的主干网络,但当年百花齐放的盛况已成为历史。
深度学习技术能够如此出色地完成图像分类任务,充分表明了这一新技术确实有着不同凡响的特征提取能力。另外,由于ImageNet是图像分类领域中最大的数据集,包含百万张自然图像,因而许多研究者认为经过该数据集训练后的CNN已经充分学会了如何提取“有用”的特征,这对于包括目标检测、语义分割、实例分割等在内的下游任务是有益的。以目标检测任务为例,尽管图像分类任务和目标检测任务有着明显区别,但二者又有着一定的相似性:都需要对图像中的目标进行分类。这种相似性为研究者们带来了这样的启发:能否将训练好的分类网络(如ResNet等)迁移到目标检测网络中呢?在经过这样的思考后,一些研究者们便将在 ImageNet数据集上训练好的分类网络做一些适当的调整—去掉最后的global avgpooling层和Softmax层后,便将其作为目标检测网络中的主干网络,并使用在ImageNet数据集上训练好的参数作为主干网络的初始化参数,即“预训练权重”。这一模式也就是后来所说的“ImageNet pretrained”。
大量的工作已经证明,这一模式是十分有效的,可以大大加快目标检测网络在训练过程中的收敛速度,也可以提升检测器的检测性能。虽然主干网络起初并不具备“定位”的能力,但依靠后续添加的检测头等其他网络层在目标检测数据集上的训练后,整体的网络架构便兼具了“定位”和“分类”两大重要能力,而主干网络所采用的预训练权重参数又大大加快了这一学习过程。自此,许多目标检测模型都采用了这样一套十分有效的训练策略。
然而,2019年的一篇重新思考经过ImageNet预训练的模式的论文[24]以大量的实验数据证明了即使不加载预训练权重,而是将主干网络的参数随机初始化,也可以达到与之相媲美的性能。但为了达到此目的,需要花更多的时间来训练网络,且数据集本身也要包含足够多的图像和训练标签,同时,对于数据预处理和训练所采用的超参数的调整也带来了一定的挑战。这样的结论似乎是很合理的,正所谓“天下没有免费的午餐”(早餐和晚餐也不免费),既然设计了一个主干网络,若是不想在ImageNet数据集上预训练,那么自然就要在目标检测数据集上投入更多的“精力”。因此,目前经过ImageNet预训练的模式仍旧是主流,后续的研究者们还是会优先采用这一套训练模式,来降低研究的时间成本和计算成本。
最后,简单介绍5个常用的主干网络模型。
● VGG网络。常用的VGG网络[22]是VGG-16网络。由于其结构富有规律性,由简单的卷积块堆叠而成,因此备受研究者们的青睐。VGG网络也打开了“深度”卷积神经网络的大门,是早期的深度卷积神经网络之一。早期的Faster R-CNN和SSD都使用了这一网络作为主干网络。
● ResNet网络。ResNet[23]是当下最主流、最受欢迎的网络之一。常用的ResNet是ResNet-50和ResNet-101。ResNet的核心理念是“残差连接”(residual connection),正是在这一理念下,此前令许多研究者困扰的“无法训练大模型”的问题得到了有效的解决。自ResNet工作之后,如何设计一个深度网络已经不再是难题,并且这一系列的工作已在多个计算机视觉领域中大放光彩,其残差思想也启发了其他领域的发展。
● DarkNet网络。DarkNet系列主要包含 DarkNet-19和DarkNet-53两个网络,它们分别来源于YOLOv2[2]和 YOLOv3[3]这两个工作。但由于DarkNet本身是很小众的深度学习框架,且这两个网络均是由DarkNet框架实现的,因此使用这两个主干网络的频率相对较低。
● MobileNet网络。MobileNet系列的工作由谷歌公司团队一手打造,目前已经推出了MobileNet-v1[25]、MobileNet-v2[26]和 MobileNet-v3[27]这3个版本。MobileNet系列的核心技术点是逐深度卷积(depthwise convolution),这一操作也是后来绝大多数轻量型CNN的核心操作。相较于前面介绍的以GPU为主要应用平台的大型主干网络,MobileNet着眼于低性能的移动端平台,如手机、无人机和其他嵌入式设备等。
● ShuffleNet网络。ShuffleNet系列由旷视科技公司团队一手打造,目前已经推出了ShuffleNet-v1[28]和 ShuffleNet-v2[29]两个版本,同样是针对低性能的移动端平台设计的轻量型网络,其核心思想是通道混合(channel shuffle),其目的是通过将每个通道的特征进行混合,弥补逐深度卷积无法使不同通道的信息进行交互的缺陷。
还有很多出色的主干网络,这里就不一一列举了。有关主干网络的更多介绍,感兴趣的读者可自行查阅相关资料。
1.3.2 颈部网络
1.3.1节已经介绍了目标检测模型中的主干网络,其作用可以用一句话来总结:提取图像中有用的信息。当然,“有用的信息”是一种笼统的描述,尚不能用精确的数学语言来做定量的解释。另外,由于主干网络毕竟是从图像分类任务中迁移过来的,在大多数情况下,这些网络的设计很少会考虑到包括目标检测、语义分割等下游任务,它们提取的特征也就有可能不太适合目标检测任务。因此,在主干网络处理完毕之后,仍有必要去设计一些额外的模块来对其特征做进一步的处理,以便适应目标检测任务。因为这一部分是在主干网络之后、检测头之前,因此被形象地称为颈部网络。
相较于主干网络常使用ImageNet预训练参数,颈部网络的参数的初始化没有太多需要解释的。既然颈部网络的作用是整合主干网络的信息,可供研究者们自由发挥的空间也就大得多,很多颈部网络被相继提了出来。这里我们介绍两种常见的颈部网络。
● 特征金字塔网络。特征金字塔网络(feature pyramid network,FPN)[19]是目前目标检测领域最有名的结构之一,几乎是当下目标检测网络的标准配置,其多尺度特征融合与多级检测思想影响了后续许多目标检测网络结构。FPN认为网络中的不同大小的特征图所包含的信息是不一样的,即浅层特征图包含更多的位置信息,且分辨率较高,感受野较小,便于检测小物体;而深层特征图包含更多的语义信息,且分辨率较低,感受野较大,便于检测大物体。因此,FPN设计了一种自顶向下的融合方式,将深层的特征不断融合到浅层特征中,通过将浅层与深层的信息进行融合,可以有效地提升网络对不同尺度物体的检测性能。图1-5展示了特征金字塔网络的结构。
图1-5 特征金字塔网络的结构
● 空间金字塔池化模块。虽然最早的空间金字塔池化(spatial pyramid pooling,SPP)模块是由Kaiming He团队[30]在2015年提出的,但在目标检测任务中常用的SPP模块则是由YOLOv3工作的作者团队所设计的SPP结构,包含4条并行的分支,且每条分支用了不同大小的池化核。SPP结构可以有效地聚合不同尺度的显著特征,同时扩大网络的感受野,进而提升模型的性能。SPP模块是一个性价比很高的结构,被广泛地应用在YOLOv4、YOLOv6和YOLOv7等工作中。图1-6展示了SPP模块的网络结构。
还有很多出色的颈部网络,这里就不一一展开细说了,感兴趣的读者可以自行搜索学习。
图1-6 SPP模块的网络结构
1.3.3 检测头
当一张输入图像经过主干网络和颈部网络两部分的处理后,得到的特征就可以用于后续的检测了。大多数的检测框架所采用的技术路线都是在处理好的特征图上,通过部署数层卷积来完成定位和分类。对于这一部分,由于其目的十分明确,而前面两部分已经做了充分的处理,因此检测头的结构通常十分简单,没有太多可发挥的空间,图1-7展示了RetinaNet的网络结构,RetinaNet采用了“解耦”结构的检测头,这是当前目标检测网络中常用的一种检测头结构,它由两条并行的分支组成,每一条分支都包含若干层普通卷积、非线性激活函数以及用于最终预测的线性卷积层。
图1-7 RetinaNet的网络结构(摘自论文[17])