https://arxiv.org/pdf/2208.03641.pdf
卷积神经网络(CNN)在许多计算机视觉任务中取得了巨大的成功,例如图像分类和目标检测。然而,它们的性能在低分辨率图像或小目标等更困难的图像任务中迅速下降。在本文中,我们指出,这根源于现有CNN体系结构中常见的缺陷设计,即使用步长卷积和/或池化层,这导致精细信息的损失和学习更有效的特征表示。为此,我们提出了一种新的CNN构建块,称为SPD-Conv,以替代每个步长卷积层和池化层(从而完全消除它们)。SPD-Conv由空间到深度(SPD)层和无步长卷积(Conv)层组成,并且可以应用于大多数甚至所有CNN体系结构。我们在两个最具代表性的计算机视觉任务中解释了这种新设计:目标检测和图像分类。然后,我们将SPD-Conv应用于YOLOv5和ResNet,并创建了新的CNN体系结构。经验上表明,我们的方法显著优于最先进的深度学习模型,特别是在低分辨率图像和小目标等更困难的图像任务中。我们已经在https://github.com/LabSAINT/SPD-Conv上开源了我们的代码。
自AlexNet[18]以来,卷积神经网络(CNN)在许多计算机视觉任务中表现出色。例如,在图像分类中,著名的CNN模型包括AlexNet、VGGNet[30]、ResNet[13]等;而在目标检测中,这些模型包括R-CNN系列[9,28]、YOLO系列[26,4]、SSD[24]、EfficientDet[34]等等。然而,所有这些CNN模型都需要在训练和推理中输入“质量好的”输入(清晰图像、中等大小至较大的目标)。例如,AlexNet最初是在227×227清晰图像上训练和评估的,但将图像分辨率降低到1/4和1/8后,其分类准确率分别下降了14%和30%[16]。对VGGNet和ResNet也进行了类似的观察[16]。在目标检测的情况下,SSD在1/4分辨率的图像上遭受了显著的mAP损失(相当于损失了1/4大小的目标),如[11]所示。事实上,小目标检测是一项非常具有挑战性的任务,因为较小的目标固有较低的分辨率,并且模型学习的上下文信息也有限。此外,它们(不幸的是)经常与同一图像中的大型目标共存,而大型目标往往主导特征学习过程,从而使小型目标未被检测到。
在本论文中,我们认为这种性能下降的根源在于现有CNN中存在缺陷但又常见的设计。即使用步长卷积和/或池化,特别是在CNN体系结构的早期层中。这种设计的不利影响通常不会表现出来,因为大多数被研究的场景都是“友好的”,其中图像具有良好的分辨率,对象大小适中;因此,有大量的冗余像素信息,步长卷积和池化可以方便地跳过,模型仍然可以很好地学习特征。然而,在图像模糊或物体很小的更困难的场景中,冗余信息的丰富假设不再成立,当前的设计开始遭受精细信息的损失和不良学习的特征。
为了解决这个问题,我们提出了一个新的CNN构建块,称为SPD-Conv,以替代(并因此消除)步长卷积和池化层。SPD-Conv是一个空间到深度(SPD)层,后面是一个非步长(即普通)卷积层。SPD层对特征图X进行下采样,但保留通道维度中的所有信息,因此没有信息损失。我们的灵感来自于一种图像转换技术[29],该技术在对神经网络输入原始图像之前对其进行缩放,但我们将其大幅度推广到网络内部和整个网络中的特征图下采样;此外,我们在每个SPD后添加非步长卷积操作,以使用附加卷积层中的可学习参数减少(增加的)通道数。我们提出的方法既通用又统一,因为SPD-Conv(i)可以应用于大多数(如果不是所有)CNN体系结构,(ii)以相同的方式替换步长卷积和池化。总之,本文有以下贡献:
1、我们发现了现有CNN体系结构中存在缺陷但常见的的一种设计,并提出了一种新的构建块,称为SPD-Conv,以代替旧的设计。SPD-Conv在不失去可学习信息的情况下对特征图进行下采样,完全摒弃了现在广泛使用的步长卷积和池化操作。
2、SPD-Conv代表了一种通用和统一的方法,可以很容易地应用于大多数(如果不是所有)基于深度学习的计算机视觉任务。
3、我们使用两个最具有代表性的计算机视觉任务,即目标检测和图像分类,来评估SPD-Conv的性能。具体来说,我们构建了YOLOv5-SPD、ResNet18-SPD和ResNet50-SPD,并将它们与几个最先进的深度学习模型进行比较,评估它们在COCO-2017、Tiny ImageNet和CIFAR-10数据集上的性能。结果表明,特别是在小目标和低分辨率图像上,SPD-Conv在AP和top-1准确率方面取得了显著的性能提升。参见图1的预览。
4、SPD-Conv可以很容易地集成到流行的深度学习库,例如PyTorch和TensorFlow中,可能会产生更大的影响。我们的源代码可以在https://github.com/LabSAINT/SPD-Conv上获取。
本文的其余部分安排如下。第2节介绍了背景和相关工作的回顾。第3节描述了我们提出的方法,第4节使用了物体检测和图像分类两个案例研究。第5节提供了性能评估。本文在第6节得出结论。
我们首先概述了这一领域,重点放在物体检测上,因为它包含了图像分类。
目前最先进的物体检测模型是基于CNN的,可以分为一阶段和二阶段检测器,或基于锚点和基于锚点的检测器。二阶段检测器首先生成粗略的区域建议,然后使用头部对每个建议进行分类和细化(全连接网络)。相比之下,一阶段检测器跳过了区域建议步骤,直接在密集采样的位置上进行检测。基于锚点的方法使用锚框,这是一组预先定义的与训练数据中对象宽度和高度相匹配的框,以改善训练过程中的损失收敛。我们提供表1,将一些著名的模型进行分类。
通常,一阶段检测器比二阶段检测器更快,基于锚点的模型比无锚点模型更准确。因此,在我们的案例研究和实验中,我们更关注表1的第一栏中的一阶段和基于锚点的模型。
图2展示了一个典型的一阶段物体检测模型。它包括用于视觉特征提取的基于CNN的主干网络和一个用于预测每个包含的物体的类别和边界框的检测头。在两者之间,增加了一个额外的层作为颈部分组合不同尺度的特征以产生用于检测不同大小的物体的语义强特征。
传统上,检测小和大物体被视为一个多尺度物体检测问题。一种经典的方法是图像金字塔[3],它将输入图像调整为多个尺度并训练每个尺度的专用检测器。为了提高准确性,SNIP[31]提出了基于每个检测器中不同物体大小的选择性反向传播。SNIPER[32]通过仅处理每个对象实例周围的上下文区域而不是图像金字塔中的每个像素来提高SNIP的效率,从而减少了训练时间。以不同的方法来提高效率,特征金字塔网络(FPN)利用卷积层中固有的多尺度特征,使用侧向连接并使用自顶向下的结构组合这些特征。之后,PANet[22]和BiFPN[34]通过使用更短的通路来改善FPN的特征信息流。此外,SAN[15]被引入将多尺度特征映射到尺度不变子空间,使检测器对尺度变化更加鲁棒。所有这些模型一致地使用步长卷积和最大池化,而我们完全摆脱了它们。
解决这一挑战的早期尝试之一是[6],该论文提出了一种端到端的CNN模型,在分类之前增加了超分辨率步骤。之后,[25]提出将从高分辨率训练图像中获得精细知识转移到低分辨率测试图像上。然而,这种方法需要与特定应用(例如类别)相对应的高分辨率训练图像,而这些图像并不总是可用的。
同样需要高分辨率训练图像的还有如[37]等多个其他研究。最近,[33]提出了一种损失函数,该函数包含了属性级别的可分离性(其中属性指的是精细的、分层类标签),以便模型可以学习特定类别的判别特征。然而,精细的(分层的)类标签很难获得,因此限制了该方法的使用。
SPD-Conv由空间到深度(SPD)层和一个非下采样卷积层组成。本部分详细描述了它。
我们的SPD组件将一种(原始)图像转换技术[29]推广到CNN内部和整个网络的下采样特征图,如下所示。
考虑任何中间特征图X的大小 S × S × C 1 S \times S \times C_{1} S×S×C1,切出一个子特征图的序列作为
f 0 , 0 = X [ 0 : S : scale , 0 : S : scale ] , f 1 , 0 = X [ 1 : S : scale , 0 : S : scale ] , … , f scale − 1 , 0 = X [ scale − 1 : S : scale , 0 : S : scale ] ; f 0 , 1 = X [ 0 : S : scale , 1 : S : scale ] , f 1 , 1 , … , f scale − 1 , 1 = X [ scale − 1 : S : scale , 1 : S : scale ] ; ⋮ f 0 , scale − 1 = X [ 0 : S : scale, scale − 1 : S : scale ] , f 1 , scale − 1 , … , , f scale − 1 , scale − 1 = X [ scale − 1 : S : scale, scale − 1 : S : scale ] . \begin{array}{c} f_{0,0}=X[0: S: \text { scale }, 0: S: \text { scale }], f_{1,0}=X[1: S: \text { scale }, 0: S: \text { scale }], \ldots, \\ f_{\text {scale }-1,0}=X[\text { scale }-1: S: \text { scale }, 0: S: \text { scale }] ; \\ f_{0,1}=X[0: S: \text { scale }, 1: S: \text { scale }], f_{1,1}, \ldots, \\ f_{\text {scale }-1,1}=X[\text { scale }-1: S: \text { scale }, 1: S: \text { scale }] ; \\ \vdots \\ f_{0, \text { scale }-1}=X[0: S: \text { scale, scale }-1: S: \text { scale }], f_{1, \text { scale }-1, \ldots,}, \\ f_{\text {scale }-1, \text { scale }-1}=X[\text { scale }-1: S: \text { scale, scale }-1: S: \text { scale }] . \end{array} f0,0=X[0:S: scale ,0:S: scale ],f1,0=X[1:S: scale ,0:S: scale ],…,fscale −1,0=X[ scale −1:S: scale ,0:S: scale ];f0,1=X[0:S: scale ,1:S: scale ],f1,1,…,fscale −1,1=X[ scale −1:S: scale ,1:S: scale ];⋮f0, scale −1=X[0:S: scale, scale −1:S: scale ],f1, scale −1,…,,fscale −1, scale −1=X[ scale −1:S: scale, scale −1:S: scale ].
一般来说,给定任何(原始)特征图X,一个子图f_{x,y}由所有那些i+x和j+y都能被scale整除的X(i,j)组成。因此,每个子图都能把X以一个比例因子downsamples。Fig. 3(a)(b)©给出了一个当scale=2时的例子,我们得到了四个子图 f 0 , 0 , f 1 , 0 , f 0 , 1 , f 1 , 1 f_{0,0},f_{1,0},f_{0,1},f_{1,1} f0,0,f1,0,f0,1,f1,1,每个子图都呈现出 ( S 2 , S 2 , C 1 ) (\frac{S}{2},\frac{S}{2},C_{1}) (2S,2S,C1)形状,且每个都能以2为因子downsamplesX。
下一步,我们在通道维度上将这些子特征图拼接起来,从而得到一个特征图 X ′ X^{\prime} X′,该特征图在空间维度上被scale因子减小,在通道维度上被scale因子增加了 e 2 e^{2} e2。换句话说,SPD将特征图 X ( S , S , C 1 ) X\left(S, S, C_{1}\right) X(S,S,C1)转换成了中间特征图 X ′ ( S s c a l e , S s c a l e , s c a l e 2 C 1 ) X^{\prime}\left(\frac{S}{scale}, \frac{S}{scale}\right. , scale \left.^{2} C_{1}\right) X′(scaleS,scaleS,scale2C1)(图3(d)给出了当scale=2时的示例)。
在SPD特征变换层之后,我们添加了一个非下采样(即步长为1)的卷积层,该卷积层有C_{2}个滤波器,其中 C 2 < s c a l e 2 C 1 C_{2}
为了解释如何将我们提出的方法应用于重新设计CNN体系结构,我们使用两个最代表性的计算机视觉模型类别:目标检测和图像分类。这不会失去一般性,因为几乎所有的CNN体系结构都使用下采样操作来进行有步幅的卷积和/或池化操作。
YOLO是一系列非常流行的目标检测模型,我们选择最新的YOLOv5[14]来演示。YOLOv5使用CSPDarknet53[4]和一个SPP[12]模块作为其主干,PANet[23]作为其脖子,YOLOv3头[26]作为其检测头。此外,它还使用了各种数据扩充方法和YOLOv4[4]的一些模块进行性能优化。它使用带有一个sigmoid层的交叉熵损失来计算对象性和分类损失,以及CIoU损失函数[38]用于定位损失。CIoU损失考虑了比IoU损失更多的细节,例如边缘重叠、中心距离和宽度与高度的比率。
YOLOv5-SPD。我们将第3节中描述的方法应用于YOLOv5,并获得YOLOv5-SPD(图4),只需将YOLOv5的stride2卷积替换为我们的SPD-Conv构建块。有7个实例这样的替换,因为YOLOv5在主干中使用五个stride-2卷积层将特征图下采样2^5倍,在脖子中使用两个stride-2卷积层。在YOLOv5的脖子中,每个有步长的卷积后面都有一个连接层;这不会改变我们的方法,我们只需将其保留在我们的SPD和Conv之间。
可扩展性。YOLOv5-SPD可以轻松上下扩展,以满足不同应用或硬件需求,与YOLOv5一样。具体来说,我们只需简单地调整(1)每个非下采样卷积层的滤波器数量和/或(2)C3模块的重复次数(如图4所示),以获得不同版本的YOLOv5-SPD。第一个被称为宽度缩放,将原始宽度n_{w}(通道数)改变为 ⌈ n w × width-factor ⌉ 8 \left\lceil n_{w} \times \text{width-factor}\right\rceil_{8} ⌈nw×width-factor⌉8(四舍五入到最近的8的倍数)。第二个被称为深度缩放,将原始深度n_{d}(重复C3模块的次数;例如,图4中的9个C3)改变为 ⌈ n d × d e p t h f a c t o r ⌉ \left\lceil n_{d} \times\right. depth_factor \rceil ⌈nd×depthfactor⌉。通过选择不同的宽度/深度因子,我们可以获得nano、small、medium和large版本的YOLOv5-SPD,如表2所示,其中因子值与后来实验中用于比较的YOLOv5相同。
一个典型的分类CNN以一个stem单元开始,该单元由一个步长为2的卷积和一个池化层组成,以将图像分辨率降低4倍。一个流行的模型是ResNet [13],它赢得了ILSVRC 2015挑战赛。ResNet引入了残差连接,允许训练深度达到152层的网络。它还通过只使用单个全连接层显着减少了总参数数量。在最后使用一个softmax层来归一化类别预测。
ResNet18-SPD和ResNet50-SPD。ResNet-18和ResNet-50都使用四个步长为2的卷积和一个步长为2的最大池化层来将每个输入图像下采样2^5倍。应用我们提出的构建块,我们用SPD-Conv替换四个有步长的卷积;但另一方面,我们只需删除最大池化层,因为我们的主要目标是低分辨率图像,所以实验中使用的数据集中的图像都很小(Tiny ImageNet中的64 \times 64和CIFAR-10中的32 \times 32),因此池化是不必要的。对于较大的图像,这种最大池化层仍然可以通过SPD-Conv以同样的方式替换。这两个新架构如表3所示。
本节使用两个具有代表性的计算机视觉任务,即目标检测和图像分类,来评估我们提出的SPD-Conv方法。
数据集和设置。我们使用COCO-2017数据集[1],该数据集分为train2017(118,287张图像)用于训练,val2017(5,000张图像;也称为minival)用于验证,以及test2017(40,670张图像)用于测试。我们使用表4和表5中列出的各种最先进的基础模型。我们报告不同IoU阈值[0.5:0.95]和目标大小(小、中、大)下val2017的标准平均精度(AP)指标。我们还报告了具有可访问标签的test2017子集test-dev2017(20,288张图像)上的AP指标。但是,这些标签没有公开发布,但需要向CodaLab COCO Detection Challenge[2]提交所有预测标签的JSON文件以检索评估指标,我们已经提交了。
训练。我们在train2017上训练不同版本(nano、small、medium和large)的YOLOv5-SPD和所有基准模型。与大多数其他研究不同,我们没有使用迁移学习,而是从头开始训练。这是因为我们想要检查每个模型的真实学习能力,而不被它通过从理想(高质量)数据集(如ImageNet)迁移学习继承的丰富特征表示所掩盖。这是在我们自己的模型 ( ∗ − S P D − n / s / m / l ) (*-\mathrm{SPD}-\mathrm{n} / \mathrm{s} / \mathrm{m} / \mathrm{l}) (∗−SPD−n/s/m/l)和所有现有的yolo系列模型(v5, X, v4及其缩放版本,如纳米,小型,大型等)上进行的。其他基线模型仍然使用迁移学习,因为我们缺乏资源(从头开始训练消耗大量GPU时间)。然而,请注意,这仅仅意味着这些基线比我们自己的模型处于更有利的位置,因为它们受益于高质量的数据集。
我们选择具有0.937动量和0.0005权重衰减的SGD优化器。在三个预热时期内,学习率从0.0033线性增加到0.01,然后使用Cosine衰减策略减小到最终值0.001。nano和small模型在四个V-100 32 GB GPU上以批量大小128进行训练,而medium和large模型以批量大小32进行训练。对于目标性和分类,我们采用CIoU损失[38]和交叉熵损失。我们还采用几种数据增强技术来减轻过拟合并提高所有模型的性能;这些技术包括(i)色调、饱和度和值的摄影失真,(ii)几何失真,如平移、缩放、剪切、fliplr和flipup,以及(iii)多图像增强技术,如马赛克和cutmix。请注意,在推理时不会使用增强。超参数直接采用YOLOv5的而没有重新调整。
结果
表4报告了在val2017上的结果, 表5报告了在test-dev上的结果。两表中的 A P S , A P M , A P L \mathrm{AP}_{\mathrm{S}}, \mathrm{AP}_{\mathrm{M}}, \mathrm{AP}_{\mathrm{L}} APS,APM,APL均表示对于小/中/大物体的 A P \mathrm{AP} AP,不应与模型尺度(nano,small,medium,large)混淆。如表所示,图像分辨率为640 \times 640在目标检测中并不算高(与图像分类相反),因为实际物体的分辨率要低得多,尤其是在物体较小时。
val2017上的结果。表4按模型尺度组织,由水平线分隔(最后一组是大尺度模型)。在nano模型的第一类中,我们的YOLOv5-SPD-n在AP和 A P S \mathrm{AP}_{\mathrm{S}} APS方面都是表现最好的:其 A P S \mathrm{AP}_{\mathrm{S}} APS比第二名YOLOv5n高出13.15%,其整体AP也比第二名YOLOv5n高出10.7%。
在第二类,小模型中,我们的YOLOv5-SPD-s在AP和\mathrm{AP}_{\mathrm{S}}方面都是表现最好的,尽管这一次YOLOX-S在AP方面是第二好的。
在第三类,中等模型类别中,虽然我们的YOLOv5-SPD-m仍然优于其他模型,但AP性能已经相当接近。另一方面,我们的 A P S \mathrm{AP}_{\mathrm{S}} APS比第二名高出8.6%,具有较大的领先优势,这是一个好兆头,因为SPD-Conv对更小的物体和更低的分辨率特别有利。
最后,对于大型模型,YOLOX-L在AP方面取得了最好的成绩,而我们的YOLOv5-SPD-l仅略低(低3%)(但比最后一组中显示的其他基准要好得多)。另一方面,我们的 A P S \mathrm{AP}_{\mathrm{S}} APS仍然是最高的,这反映了SPD-Conv的上述优势。
test-dev2017上的结果。如表5所示,我们的YOLOv5-SPD-n在nano模型类别中的 A P S \mathrm{AP}_{\mathrm{S}} APS上再次成为明显的赢家,具有良好的获胜优势(比第二名YOLOv5n高出19%)。对于平均AP,虽然看起来EfficientDet-D0表现得比我们更好,但这是因为EfficientDet的参数几乎是我们的两倍,并且使用高分辨率图像进行训练(通过转移学习,单元格中标记为“Trf”),因此AP与分辨率高度相关。这种训练好处同样反映在小模型类别中。
尽管其他基准获得了这种好处,但我们的方法在接下来的中等模型类别中重新获得了最高排名,在 A P \mathrm{AP} AP和 A P S \mathrm{AP}_{\mathrm{S}} APS方面均表现最佳。最后,在大型模型类别中,我们的YOLOv5-SPD-l在 A P S \mathrm{AP}_{\mathrm{S}} APS方面也是表现最好的,并且在AP上与YOLOX-L非常接近。
总结。很明显,通过简单地用我们提出的SPD-Conv构建块替换跨行卷积和池化层,神经网络可以显着提高其准确性,同时保持相同水平的参数大小。对象越小,改进越明显,很好地满足了我们的目标。虽然我们并不总是在所有情况下都占据第一位置,但SPD-Conv是唯一一直表现良好的方法;如果表现不佳,它偶尔会成为(非常接近的)亚军,而在 A P S \mathrm{AP}_{\mathrm{S}} APS(我们的主要目标指标)上,它总是赢家。
最后,请注意,我们采用了未经调整的YOLOv5超参数,这意味着在专门的超参数调整后,我们的模型表现可能会更好。还要注意,所有非YOLO的基线(和PP-YOLO)都使用了转移学习进行训练,因此受益于高质量的图像,而我们的模型则没有。
视觉对比。为了直观的理解,我们使用随机选择的两张图片提供了两个真实的例子,如图5所示。我们比较了YOLOv5-SPD-m和YOLOv5m,因为后者在相应(中等)类别的所有基线中表现最好。图5(a)(b)表明,YOLOv5-SPD-m能够检测到YOLOv5m遗漏的被遮挡长颈鹿,图5©(d)表明,YOLOv5-SPD-m能够检测到非常小的物体(一张脸和两个长凳),而YOLOv5m无法检测到。
数据集和设置。对于图像分类任务,我们使用了Tiny ImageNet[19]和CIFAR-10数据集[17]。Tiny ImageNet是ILSVRC-2012分类数据集的一个子集,包含200个类。每个类有500个训练图像、50个验证图像和50个测试图像。每张图像的分辨率为 64 × 64 × 3 64 \ × 64 \ × 3 64 ×64 ×3像素。CIFAR-10由6万张分辨率为 32 × 32 × 3 32 \ × 32 \ × 3 32 ×32 ×3的图像组成,其中包括5万张训练图像和1万张测试图像。有10个类,每个类有6000张图片。我们使用top-1的准确率作为衡量分类性能的指标。
训练。我们在Tiny ImageNet上训练我们的ReseNet18-SPD模型。我们执行随机网格搜索来调整超参数,包括学习率、批大小、动量、优化器和权重衰减。图6显示了使用wandb mlop生成的样例超参数扫描图。结果是SGD优化器的学习率为0.01793,动量为0.9447,小批大小为256,权值衰减正则化为0.002113,训练epoch为200。接下来,我们在CIFAR-10上训练我们的ResNet50-SPD模型。超参数采用ResNet50论文,其中SGD优化器使用初始学习率0.1和动量0.9,批大小128,权衰减正则化0.0001,200个训练epoch。对于ReseNet18-SPD和ReseNet50-SPD,我们使用与ResNet相同的衰减函数,随着epoch数的增加而降低学习率。
测试。Tiny ImageNet上的精度是在验证数据集上评估的,因为测试数据集中的地面真实值不可用。在测试数据集上计算CIFAR-10上的精度。
结果。表6总结了top- 1精度的结果。结果表明,我们的模型ResNet18-SPD和ResNet50-SPD明显优于所有其他基准模型。
最后,我们在图7中提供了一个使用Tiny ImageNet的视觉插图。给出了8个ResNet18错误分类和ResNet18SPD正确分类的例子。这些图像的共同特点是分辨率较低,因此对标准ResNet提出了挑战,该ResNet在其跨步卷积和池化操作中丢失了细粒度信息。
本文发现了现有CNN架构中一种普遍但有缺陷的设计,即使用步长卷积和/或池化层。这会导致特别是在低分辨率图像和小物体上的精细特征信息的损失。然后,我们提出了一种新的CNN构建块,称为SPD-Conv,通过用空间到深度卷积和非步长卷积取代它们来消除步长和池化操作。这种新设计具有在降低特征图采样率的同时保留判别特征信息的巨大优势。它也代表了一种通用和统一的方法,可以很容易地应用于任何CNN架构,就像应用于步长卷积和池化一样。我们提供了两个最代表性的用例,即目标检测和图像分类,并通过广泛的评估证明SPD-Conv带来了显著的检测和分类准确率提升。我们期望它可以轻松集成到现有的深度学习框架(如PyTorch和TensorFlow)中,从而广泛受益于研究社区。