在视觉识别领域,卷积神经网络(ConvNets)擅长捕捉局部空间特征,但在建模全局上下文依赖方面存在不足;Vision Transformers(ViTs)通过自注意力机制能有效建模全局关系,却面临高分辨率图像下计算成本呈二次增长的问题。ConvNeXt 等研究虽表明大核卷积的潜力,但传统方法在核尺寸超过 7×7 时性能提升有限且计算负担加重。Convolutional Modulation应运而生,旨在通过卷积操作简化自注意力机制,更高效地利用大核卷积编码空间特征。
上面是原模型,下面是改进模型
1. Convolutional Modulation介绍
Convolutional Modulation 的核心思想是利用卷积特征对值(Value)进行调制,替代自注意力中查询(Query)与键(Key)的矩阵乘法来生成注意力权重。具体而言,通过深度卷积(DConv)生成权重矩阵 A,再与线性投影后的特征 V 进行哈达玛积(Hadamard Product),实现局部区域内的特征加权聚合。其公式为:Z=A⊙V, A=DConvk×k(W1X), V=W2X
其中,X 为输入特征,W1 和 W2 为线性层权重。该方法通过静态卷积核模拟动态注意力机制,避免了自注意力的二次复杂度,同时能有效利用大核卷积(如 11×11、21×21)捕捉更广域的空间交互。
Convolutional Modulation 模块的结构如图 所示,主要包含以下组件:
线性投影层:对输入特征 X 进行线性变换,生成用于调制的特征(W1X)和值特征(W2X)。
深度卷积层:对调制特征应用 k×k 深度卷积,生成权重矩阵 A,捕捉局部空间依赖。
哈达玛积操作:将权重矩阵 A 与值特征 V 逐元素相乘,输出调制后的特征 Z。
2. YOLOv12与Convolutional Modulation的结合
通过大核卷积(如 11×11)在不同层级特征图中捕捉更丰富的局部 - 全局空间关系,提升目标边界定位精度。
3. Convolutional Modulation代码部分
YOLOv8_improve/YOLOV12.md at master · tgf123/YOLOv8_improve · GitHub
YOLO12模型改进方法,快速发论文,总有适合你的改进,还不改进上车_哔哩哔哩_bilibili
4. 将Convolutional Modulation引入到YOLOv12中
第一: 先新建一个change_model,将下面的核心代码复制到下面这个路径当中,如下图如所示。YOLOv12\ultralytics\change_model。
第二:在task.py中导入包
第三:在task.py中的模型配置部分下面代码
第四:将模型配置文件复制到YOLOV12.YAMY文件中
第五:运行代码
from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorld
if __name__=="__main__":
# 使用自己的YOLOv12.yamy文件搭建模型并加载预训练权重训练模型
model = YOLO(r"E:\Part_time_job_orders\YOLO_NEW\YOLOv12_all\ultralytics\cfg\models\12\yolo12_ConMod.yaml")
# .load(r'E:\Part_time_job_orders\YOLO_NEW\YOLOv12\yolo12n.pt') # build from YAML and transfer weights
results = model.train(data=r'E:\Part_time_job_orders\YOLO\YOLOv12\ultralytics\cfg\datasets\VOC_my.yaml',
epochs=300,
imgsz=640,
batch=64,
# cache = False,
# single_cls = False, # 是否是单类别检测
# workers = 0,
# resume=r'D:/model/yolov8/runs/detect/train/weights/last.pt',
amp = True
)