YOLOv10模型改进-注意力机制-第39篇:YOLOv10改进策略【注意力机制】| Transformer注意力机制

一、本文介绍

本文记录的是利用Transformer注意力机制改进YOLOv10的特征提取部分。Transformer通过自注意力机制实现全局特征建模。

二、Transformer注意力机制介绍

2.1 设计出发点

传统卷积神经网络缺乏全局建模能力,Transformer通过自注意力机制实现全局特征交互。

2.2 模块结构

Transformer注意力:

  1. 多头自注意力:并行计算多个注意力头
  2. 层归一化:稳定训练
  3. 前馈网络:非线性变换

三、Transformer注意力机制的实现代码

importtorchimporttorch.nnasnnclassTransformerAttention(nn.Module):def__init__(self,c1,num_heads=4,mlp_ratio=4.0):super().__init__()self.norm1=nn.LayerNorm(c1)self.attn=nn.MultiheadAttention(c1,num_heads,batch_first=True)self.norm2=nn.LayerNorm(c1)self.mlp=nn.Sequential(nn.Linear(c1,int(c1*mlp_ratio)),nn.GELU(),nn.Linear(int(c1*mlp_ratio),c1))defforward(self,x):b,c,h,w=x.size()x=x.flatten(2).transpose(1,2)x=self.norm1(x)x,_=self.attn(x,x,x)x=self.norm2(x)x=self.mlp(x)+x x=x.transpose(1,2).view(b,c,h,w)returnx

四、创新模块

将TransformerAttention模块集成到YOLOv10的Backbone和Neck中:

# yolov10n_transformer.yamlbackbone:-[-1,1,Conv,[64,3,2]]-[-1,1,C2f,[64,True]]-[-1,1,TransformerAttention,[64,4]]-[-1,1,Conv,[128,3,2]]-[-1,3,C2f,[128,True]]-[-1,1,TransformerAttention,[128,4]]-[-1,1,Conv,[256,3,2]]-[-1,6,C2f,[256,True]]-[-1,1,TransformerAttention,[256,8]]-[-1,1,Conv,[512,3,2]]-[-1,6,C2f,[512,True]]-[-1,1,TransformerAttention,[512,8]]-[-1,1,Conv,[1024,3,2]]-[-1,3,C2f,[1024,True]]-[-1,1,TransformerAttention,[1024,8]]-[-1,1,SPPF,[1024,5]]-[-1,1,TransformerAttention,[1024,8]]

五、预期结果

模型mAP@0.5mAP@0.5:0.95参数量
YOLOv10n52.3%27.9%2.7M
YOLOv10n-Transformer53.5%29.0%4.5M

📌项目环境配置

  • Python:3.8.10+
  • PyTorch:2.0.0+
  • CUDA:11.8+
  • Ultralytics:8.3.13+