使用YOLOv5网络作为示范,可以无缝加入到 YOLOv7、YOLOv6、YOLOX、YOLOR、YOLOv4、Scaled_YOLOv4、YOLOv3等一系列YOLO算法模块
先把理论部分弄一下, 代码部分有空更新。
论文参考:Paper
在每个卷积层中学习单个静态卷积核是现代卷积神经网络 (CNN) 的常见训练范式。相反,最近对动态卷积的研究表明,学习n使用依赖于输入的注意力加权的卷积核可以显着提高轻量级 CNN 的准确性,同时保持有效的推理。然而,我们观察到现有的工作通过内核空间的一维(关于卷积核数)赋予卷积核动态属性,但其他三个维度(关于空间大小、输入通道数和输出通道数)每个卷积核)都被忽略了。受此启发,我们提出了全维动态卷积(ODConv),一种更通用但更优雅的动态卷积设计,以推进这一研究方向。ODConv 利用一种新颖的多维注意力机制和并行策略,在任何卷积层沿内核空间的所有四个维度学习卷积内核的互补注意力。作为常规卷积的直接替代品,ODConv 可以插入到许多 CNN 架构中。在 ImageNet 和 MS-COCO 数据集上的大量实验表明,ODConv 为各种流行的 CNN 主干网(包括轻量级和大型主干网)带来了可靠的准确度提升,例如,3.77%5.71%|1.86%3.72% 的绝对 top-1 改进MobivleNetV2|ImageNet 数据集上的 ResNet 系列。有趣的是,由于其改进的特征学习能力,即使只有一个内核的 ODConv 也可以与现有的具有多个内核的动态卷积对应物竞争或优于现有的动态卷积对应物,从而大大减少了额外的参数。
(a) DyConv (CondConv 使用 GAP+FC+Sigmoid) 和 (b) ODConv 的示意图比较。与计算单个注意力标量的 CondConv 和 DyConv 不同对于卷积核, ODConv 利用一种新颖的多维注意力机制来计算四种类型的注意力,和为了以并行方式沿着内核空间的所有四个维度。
将 ODConv 中的四种注意力逐步乘以卷积核的图示。(a) 沿空间维度的位置乘法运算,(b) 沿输入通道维度的通道乘法运算,© 沿输出通道维度的滤波器乘法运算,以及 (d) 内核乘法运算沿着卷积核空间的核维度。
使用YOLOv5算法作为演示,模块可以无缝插入到YOLOv7、YOLOv5、YOLOv4、Scaled_YOLOv4、YOLOv3、YOLOR等一系列YOLO算法中
首先增加以下yolov5_ODConv.yaml文件,作为改进演示
# YOLOv5 by Ultralytics, GPL-3.0 license
# Parameters
在./models/common.py文件中增加以下模块,直接复制即可
然后找到./models/yolo.py文件下里的parse_model函数,将类名加入进去
在 models/yolo.py文件夹下
for i, (f, n, m, args) in enumerate(d['backbone'] + d['head']):
内部RepVGGBlock
模块参考代码
python train.py --cfg yolov5_ODConv.yaml