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

📅 2026/7/1 14:26:49
YOLOv10模型改进-注意力机制-第40篇:YOLOv10改进策略【注意力机制】| CoordAttention注意力机制
一、本文介绍本文记录的是利用CoordAttentionCoordinate Attention注意力机制改进YOLOv10的特征提取部分。CoordAttention通过坐标信息增强注意力机制实现更精确的特征定位。二、CoordAttention注意力机制介绍2.1 设计出发点传统通道注意力只关注通道信息忽略了位置信息。CoordAttention通过将通道注意力分解为两个1D特征编码过程分别沿水平和垂直方向捕获位置信息。2.2 模块结构CoordAttention块全局平均池化沿水平和垂直方向分别进行池化特征编码将两个方向的特征拼接并编码特征分离将编码后的特征分离为两个方向的注意力权重特征增强应用注意力权重到原始特征三、CoordAttention注意力机制的实现代码importtorchimporttorch.nnasnnclassCoordAttention(nn.Module):def__init__(self,c1,c2None,reduction32):super().__init__()c2c2orc1 self.conv1nn.Conv2d(c1,c1//reduction,1,biasFalse)self.bn1nn.BatchNorm2d(c1//reduction)self.conv_hnn.Conv2d(c1//reduction,c2,1,biasFalse)self.conv_wnn.Conv2d(c1//reduction,c2,1,biasFalse)self.actnn.SiLU()defforward(self,x):b,c,h,wx.size()x_htorch.mean(x,dim2,keepdimTrue)x_wtorch.mean(x,dim3,keepdimTrue)x_cattorch.cat([x_h,x_w],dim2)x_outself.act(self.bn1(self.conv1(x_cat)))x_h_out,x_w_outtorch.split(x_out,[h,w],dim2)x_h_outtorch.sigmoid(self.conv_h(x_h_out))x_w_outtorch.sigmoid(self.conv_w(x_w_out))returnx*x_h_out*x_w_out四、创新模块将CoordAttention模块集成到YOLOv10的Backbone和Neck中# yolov10n_coordattn.yamlbackbone:-[-1,1,Conv,[64,3,2]]-[-1,1,C2f,[64,True]]-[-1,1,CoordAttention,[64]]-[-1,1,Conv,[128,3,2]]-[-1,3,C2f,[128,True]]-[-1,1,CoordAttention,[128]]-[-1,1,Conv,[256,3,2]]-[-1,6,C2f,[256,True]]-[-1,1,CoordAttention,[256]]-[-1,1,Conv,[512,3,2]]-[-1,6,C2f,[512,True]]-[-1,1,CoordAttention,[512]]-[-1,1,Conv,[1024,3,2]]-[-1,3,C2f,[1024,True]]-[-1,1,CoordAttention,[1024]]-[-1,1,SPPF,[1024,5]]-[-1,1,CoordAttention,[1024]]五、预期结果模型mAP0.5mAP0.5:0.95参数量YOLOv10n52.3%27.9%2.7MYOLOv10n-CoordAttn53.2%28.7%2.8M项目环境配置Python3.8.10PyTorch2.0.0CUDA11.8Ultralytics8.3.13