一、本文介绍
本文记录的是利用SPD-Conv
优化RT-DETR的目标检测网络模型。在利用SPD-Conv
在进行下采样特征图时保留了所有信息,避免了传统步长卷积和池化操作导致的细粒度信息丢失问题,从而使得神经网络能够学习到更有效的特征表示。在实际应用中能够显著提高检测和分类的准确性,尤其是在处理==小对象和低分辨率图像==时表现更为突出。
专栏目录:RT-DETR改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
专栏地址:RT-DETR改进专栏——以发表论文的角度,快速准确的找到有效涨点的创新点!
二、SPD - Conv介绍
SPD-Conv
是一种新的 CNN 构建模块,用于替代传统 CNN 架构中使用的步长卷积(strided convolution)
和池化(pooling)层
,它由空间到深度(Space-to-depth,SPD)层
和非步长卷积(non - strided convolution)层
组成。
2.1、SPD - Conv模块的设计原理
2.1.1 SPD层
SPD层
对特征图进行下采样,同时在通道维度上保留所有信息,从而不会造成信息损失。具体来说,对于任何中间特征图X(大小为S×S×C1),SPD层
将其切分为一系列子特征图。例如,子图f0,0 = X[0 : S : scale, 0 : S : scale],f1,0 = X[1 : S : scale, 0 : S : scale]等。一般地,给定原始特征图X,子图fx,y由所有满足i + x和j + y能被scale整除的条目X(i, j)形成。因此,每个子图将X下采样为原来的1/scale。以scale = 2为例,会得到四个子图f0,0, f1,0, f0,1, f1,1,每个子图的形状为(S / 2, S / 2, C1),将X下采样了2倍。然后,将这些子特征图沿通道维度进行拼接,得到一个特征图X',其空间维度减小了scale倍,通道维度增加了scale²倍。换句话说,SPD
将特征图X(S, S, C1)转换为中间特征图X'(S / scale, S / scale, scaleC1)。
2.1.2 非步长卷积层
在SPD
特征转换层之后,添加一个非步长(即步长为1)卷积层,该卷积层具有C2个滤波器,其中C2 < scale²C1,进一步将X'(S / scale, S / scale, scaleC1)转换为X''(S / scale, S / scale, C2)。使用非步长卷积的原因是为了尽可能保留所有的判别特征信息。否则,例如使用步长为3的3×3滤波器,特征图会“缩小”,但每个像素仅被采样一次;如果步长为2,则会出现不对称采样,偶数行/列和奇数行/列将在不同时间被采样。一般来说,步长大于1会导致信息的无差别丢失,尽管表面上它似乎也能将特征图X(S, S, C1)转换为X''(S / scale, S / scale, C2)(但没有中间的X')。
2.2、SPD - Conv模块的优势
- 通用性和统一性:
SPD-Conv
可以应用于大多数CNN架构,并且以相同的方式替换步长卷积和池化操作。 - 提高准确性:通过在
YOLOv5
和ResNet
中应用SPD-Conv
并进行实验,结果表明在对象检测和图像分类任务中,SPD-Conv
能够显著提高检测和分类的准确性,尤其是在处理小对象和低分辨率图像时表现更为突出。例如,在对象检测任务中,与其他基线模型相比,使用SPD-Conv
的YOLOv5-SPD
在AP(平均精度)和APS(小对象的AP)指标上有明显提升;在图像分类任务中,ResNet18-SPD
和ResNet50-SPD
在Top-1准确率上明显优于其他基线模型。 - 保留信息:
SPD-Conv
通过SPD层
下采样特征图时保留了所有信息,避免了传统步长卷积和池化操作导致的细粒度信息丢失问题,从而使得神经网络能够学习到更有效的特征表示。 - 易于集成:
SPD-Conv
可以轻松集成到流行的深度学习库如PyTorch和TensorFlow中,有可能产生更大的影响。
论文:https://arxiv.org/pdf/2208.03641v1.pdf
源码:https://github.com/LabSAINT/SPD-Conv
三、实现代码及YOLOv11修改步骤
模块完整介绍、个人总结、实现代码、模块改进、二次创新以及各模型添加步骤参考如下地址: