最新创新点改进推荐
-💡统一使用 YOLO 代码框架,结合不同模块来构建不同的YOLO目标检测模型。
🔥 《芒果书》系列改进专栏内的改进文章,均包含多种模型改进方式,均适用于YOLOv3
、YOLOv4
、 YOLOR
、 YOLOX
、YOLOv5
、 YOLOv7
、 YOLOv8
改进(重点)!!!
🔥 专栏创新点教程 均有不少同学反应和我说已经在自己的数据集上有效涨点啦!! 包括COCO数据集也能涨点
所有文章博客均包含 改进源代码部分,一键训练即可
🔥 对应专栏订阅的越早,就可以越早使用原创创新点
去改进模型,抢先一步
YOLOv8 + 改进注意力机制
详细内容
参考这篇博客:点击查看详情:YOLOv5改进、YOLOv7、YOLOv8改进|YOLO改进超过50种注意力机制,全篇共计30万字(内附改进源代码),原创改进50种Attention注意力机制和Transformer自注意力机制
YOLOv5、YOLOv7、YOLOv8 模型全系列最新改进方式教程(内附原代码)
🔥 《芒果书》系列改进专栏内的改进文章
专栏地址:独家全网首发专栏《芒果YOLOv8深度改进教程》🍊
专栏地址:独家全网首发专栏《芒果YOLOv5深度改进教程》🥝
专栏地址:独家全网首发专栏《芒果YOLOv7深度改进教程》🍉
文章目录
YOLOv5、YOLOv7 + 注意力机制一览
YOLOv5 + ShuffleAttention注意力机制
博客链接🔗🌟:改进YOLOv5系列:12.添加ShuffleAttention注意力机制
YOLOv5 + CrissCrossAttention注意力机制
博客链接🔗🌟:改进YOLOv5系列:13.添加CrissCrossAttention注意力机制
YOLOv5 + S2-MLPv2注意力机制
博客链接🔗🌟:改进YOLOv5系列:14.添加S2-MLPv2注意力机制
YOLOv5 + SimAM注意力机制
博客链接🔗🌟:改进YOLOv5系列:15.添加SimAM注意力机制
YOLOv5 + SKAttention注意力机制
博客链接🔗🌟:改进YOLOv5系列:16.添加SKAttention注意力机制
YOLOv5 + NAMAttention注意力机制
博客链接🔗🌟:改进YOLOv5系列:17.添加NAMAttention注意力机制
YOLOv5 + SOCA注意力机制
博客链接🔗🌟:改进YOLOv5系列:18.添加SOCA注意力机制
YOLOv5 + CBAM注意力机制
博客链接🔗🌟:改进YOLOv5系列:18.添加CBAM注意力机制
YOLOv5 + SEAttention注意力机制
博客链接🔗🌟:改进YOLOv5系列:19.添加SEAttention注意力机制
YOLOv5 + GAMAttention注意力机制
博客链接🔗🌟:改进YOLOv5系列:20.添加GAMAttention注意力机制
YOLOv5 + CA注意力机制
博客链接🔗🌟:github
YOLOv5 + ECA注意力机制 博客链接🔗🌟:github
更多模块详细解释持续更新中。。。
之后继续更新🔥🔥🔥
第一种、YOLOv5使用CBAM注意力机制
CBAM注意力机制原理图
1.1增加以下yolov5_cbam.yaml文件
# YOLOv5 🚀 by YOLOAir, GPL-3.0 license
# Parameters
nc: 80 # number of classes
depth_multiple: 0.33 # model depth multiple
width_multiple: 0.50 # layer channel multiple
anchors:
- [10,13, 16,30, 33,23] # P3/8
- [30,61, 62,45, 59,119] # P4/16
- [116,90, 156,198, 373,326] # P5/32
# YOLOv5 v6.0 backbone
backbone:
# [from, number, module, args]
[[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2
[-1, 1, Conv, [128, 3, 2]], # 1-P2/4
[-1, 3, C3, [128]],
[-1, 1, Conv, [256, 3, 2]], # 3-P3/8
[-1, 6, C3, [256]],
[-1, 1, Conv, [512, 3, 2]], # 5-P4/16
[-1, 9, C3, [512]],
[-1, 1, Conv, [1024, 3, 2]], # 7-P5/32
[-1, 3, C3, [1024]],
[-1, 1, SPPF, [1024, 5]], # 9
]
# YOLOv5 v6.0 head
head:
[[-1, 1, Conv, [512, 1, 1]],
[-1, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 6], 1, Concat, [1]], # cat backbone P4
[-1, 3, C3, [512, False]], # 13
[-1, 1, Conv, [256, 1, 1]],
[-1, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 4], 1, Concat, [1]], # cat backbone P3
[-1, 3, C3, [256, False]], # 17 (P3/8-small)
[-1, 1, Conv, [256, 3, 2]],
[[-1, 14], 1, Concat, [1]], # cat head P4
[-1, 3, C3, [512, False]], # 20 (P4/16-medium)
[-1, 1, Conv, [512, 3, 2]],
[[-1, 10], 1, Concat, [1]], # cat head P5
[-1, 3, C3, [1024, False]], # 23 (P5/32-large)
[-1, 1, CBAM, [1024]],
[[17, 20, 24], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
]
1.2common.py配置
新增一个cbam.py文件,新增以下代码
然后 在./models/common.py文件中 导入模块 CBAM
class ChannelAttentionModule(nn.Module):
def __init__(self, c1, reduction=16):
super(ChannelAttentionModule, self).__init__()
mid_channel = c1 // reduction
self.avg_pool = nn.AdaptiveAvgPool2d(1)
self.max_pool = nn.AdaptiveMaxPool2d(1)
self.shared_MLP = nn.Sequential(
nn.Linear(in_features=c1, out_features=mid_channel),
nn.LeakyReLU(0.1, inplace=True),
nn.Linear(in_features=mid_channel, out_features=c1)
)
self.act = nn.Sigmoid()
#self.act=nn.SiLU()
def forward(self, x):
avgout = self.shared_MLP(self.avg_pool(x).view(x.size(0),-1)).unsqueeze(2).unsqueeze(3)
maxout = self.shared_MLP(self.max_pool(x).view(x.size(0),-1)).unsqueeze(2).unsqueeze(3)
return self.act(avgout + maxout)
class SpatialAttentionModule(nn.Module):
def __init__(self):
super(SpatialAttentionModule, self).__init__()
self.conv2d = nn.Conv2d(in_channels=2, out_channels=1, kernel_size=7, stride=1, padding=3)
self.act = nn.Sigmoid()
def forward(self, x):
avgout = torch.mean(x, dim=1, keepdim=True)
maxout, _ = torch.max(x, dim=1, keepdim=True)
out = torch.cat([avgout, maxout], dim=1)
out = self.act(self.conv2d(out))
return out
class CBAM(nn.Module):
def __init__(self, c1,c2):
super(CBAM, self).__init__()
self.channel_attention = ChannelAttentionModule(c1)
self.spatial_attention = SpatialAttentionModule()
def forward(self, x):
out = self.channel_attention(x) * x
out = self.spatial_attention(out) * out
return out
1.3yolo.py配置
在 models/yolo.py文件夹下
- 定位到parse_model函数中
for i, (f, n, m, args) in enumerate(d['backbone'] + d['head']):
内部- 对应位置 下方只需要新增以下代码
elif m is CBAM:
c1, c2 = ch[f], args[0]
if c2 != no:
c2 = make_divisible(c2 * gw, 8)
args = [c1, c2]
1.4训练模型
python train.py --cfg yolov5_cbam.yaml
YOLOv8 + 改进注意力机制
详细内容
参考这篇博客:点击查看详情:YOLOv5改进、YOLOv7、YOLOv8改进|YOLO改进超过50种注意力机制,全篇共计30万字(内附改进源代码),原创改进50种Attention注意力机制和Transformer自注意力机制