YOLOv8模型改进1【增加SE注意力+报错处理:AttributeError:Can‘t get attribute......】


从本文开始记录YOLOv8的改进策略,其中的操作都亲自走过一遍,应该问题不大。


写在前面:每一种改进方法的好坏取决于“天时、地利、人和”,三者缺一不可,具体效果怎么样,要具体分析,这也是炼丹师的快乐。

先从增加SE注意力机制开始吧!

【一、SE注意力机制简介】
SE(Squeeze-and-Excitation Networks),顾名思义,主要包括Squeeze(全局信息嵌入)以及Excitiation(自适应调整)两个部分。它是通过显式地建模卷积特征通道之间的相互依赖来提高网络产生的表征的质量;同时允许网络进行特征重新校准,通过该机制网络可以学习使用全局信息,选择性地强调信息特征和抑制无用的特征。(注:这里的选择性就是所谓的“注意力”

至于具体是怎么设计的,请看论文原文的细节:https://arxiv.org/pdf/1709.01507.pdf

SE官方代码:https://github.com/hujie-frank/SENet

【二:SE结构图】
在这里插入图片描述

【三:SE在目标检测任务上的表现(COCO数据集)】
在这里插入图片描述
【四:增加SE注意力到YOLOv8模型上】
1: .../ultralytics/nn/modules/conv.py
(2:...ultralytics-main/ultralytics/nn/modules/__init__.py)
(3:...ultralytics-main/ultralytics/nn/tasks.py)
(4:构造YOLOv8-SE模型.yaml文件)

注:主要就是修改上面的前三个文件,认准路径!!!

如下图:
在这里插入图片描述

(1):.../ultralytics/nn/modules/conv.py

这个文件中用来添加SE注意力模块,代码如下: 把它放到文件的末尾就好了!养成一个习惯,做一个注释。

class SEAttention(nn.Module):

    def __init__(self, channel=512, reduction=16):
        super().__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.fc = nn.Sequential(
            nn.Linear(channel, channel // reduction, bias=False),
            nn.ReLU(inplace=True),
            nn.Linear(channel // reduction, channel, bias=False),
            nn.Sigmoid()
        )

    def init_weights(self):
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                init.kaiming_normal_(m.weight, mode='fan_out')
                if m.bias is not None:
                    init.constant_(m.bias, 0)
            elif isinstance(m, nn.BatchNorm2d):
                init.constant_(m.weight, 1)
                init.constant_(m.bias, 0)
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小的学徒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值