位置: IT常识 - 正文

Yolov5添加注意力机制(yolov5添加注意力机制真的有用吗?)

编辑:rootadmin
Yolov5添加注意力机制 一、在backbone后面引入注意力机制

推荐整理分享Yolov5添加注意力机制(yolov5添加注意力机制真的有用吗?),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:yolov5添加注意力机制后可以剪枝吗,yolov5添加注意力机制,yolov5添加注意力机制效果怎么样,yolov5添加注意力机制mAP提高吗,yolov5添加注意力机制,yolov5添加注意力机制后精确度降低,yolov5添加注意力机制,但精确度没提高,yolov5添加注意力机制,内容如对您有帮助,希望把文章链接给更多的朋友!

1、先把注意力结构代码放到common.py文件中,以SE举例,将这段代码粘贴到common.py文件中

2、找到yolo.py文件里的parse_model函数,将类名加入进去

3、修改配置文件(我这里拿yolov5s.yaml举例子),将注意力层加到你想加入的位置;常用的一般是添加到backbone的最后一层,或者C3里面,这里是加在了最后一层

当在网络中添加了新的层之后,那么该层网络后续的层的编号都会发生改变,看下图,原本Detect指定的是[ 17 , 20 , 23 ]层,所以在我们添加了SE注意力层之后也要Detect对这里进行修改,即原来的17层变成了18 层;原来的20层变成了21 层;原来的23层变成了24 层;所以Detecet的from系数要改为[ 18 , 21 , 24 ] 

Yolov5添加注意力机制(yolov5添加注意力机制真的有用吗?)

同样的,Concat的from系数也要修改,这样才能保持原网络结构不发生特别大的改变,我们刚才把SE层加到了第9层,所以第9层之后的编号都会加1,这里我们要把后面两个Concat的from系数分别由[ − 1 , 14 ] , [ − 1 , 10 ]改为[ − 1 , 15 ] , [ − 1 , 11 ]

二、在残差模块Bottleneck中引入注意力机制(SimAM/CA)SimAM

1、将SimAM代码加入到common.py文件中,

#SimAMclass simam_module(torch.nn.Module): def __init__(self, channels=None, e_lambda=1e-4): super(simam_module, self).__init__() self.activaton = nn.Sigmoid() self.e_lambda = e_lambda def __repr__(self): s = self.__class__.__name__ + '(' s += ('lambda=%f)' % self.e_lambda) return s @staticmethod def get_module_name(): return "simam" def forward(self, x): b, c, h, w = x.size() n = w * h - 1 x_minus_mu_square = (x - x.mean(dim=[2, 3], keepdim=True)).pow(2) y = x_minus_mu_square / (4 * (x_minus_mu_square.sum(dim=[2, 3], keepdim=True) / n + self.e_lambda)) + 0.5 return x * self.activaton(y)

 2、在common.py的残差结构中引入SimAM,即重新定义一个含有SimAM的类Bottleneck_SimAM

#将SimAM注意力机制加在bottleneck里面class Bottleneck_SimAM(nn.Module): # Standard bottleneck def __init__(self, c1, c2, shortcut=True, g=1, e=0.5): # ch_in, ch_out, shortcut, groups, expansion super(Bottleneck_SimAM, self).__init__() c_ = int(c2 * e) # hidden channels self.cv1 = Conv(c1, c_, 1, 1) self.cv2 = Conv(c_, c2, 3, 1, g=g) self.add = shortcut and c1 == c2 self.attention = simam_module(channels=c2) def forward(self, x): return x + self.attention(self.cv2(self.cv1(x))) if self.add else self.cv2(self.cv1(x))

3、然后找到yolo.py文件里的parse_model函数,将类Bottleneck_SimAM加入进去并将原类名Bottleneck删除,这样就把注意力SimAM引入的残差结构中了

CA

1、将CoordAtt代码加入到common.py文件中,

# CoordAtt注意力机制class h_sigmoid(nn.Module): def __init__(self, inplace=True): super(h_sigmoid, self).__init__() self.relu = nn.ReLU6(inplace=inplace) def forward(self, x): return self.relu(x + 3) / 6class h_swish(nn.Module): def __init__(self, inplace=True): super(h_swish, self).__init__() self.sigmoid = h_sigmoid(inplace=inplace) def forward(self, x): return x * self.sigmoid(x)class CoordAtt(nn.Module): def __init__(self, inp, oup, reduction=32): super(CoordAtt, self).__init__() self.pool_h = nn.AdaptiveAvgPool2d((None, 1)) self.pool_w = nn.AdaptiveAvgPool2d((1, None)) mip = max(8, inp // reduction) self.conv1 = nn.Conv2d(inp, mip, kernel_size=1, stride=1, padding=0) self.bn1 = nn.BatchNorm2d(mip) self.act = h_swish() self.conv_h = nn.Conv2d(mip, oup, kernel_size=1, stride=1, padding=0) self.conv_w = nn.Conv2d(mip, oup, kernel_size=1, stride=1, padding=0) def forward(self, x): identity = x n, c, h, w = x.size() # c*1*W x_h = self.pool_h(x) # c*H*1 # C*1*h x_w = self.pool_w(x).permute(0, 1, 3, 2) y = torch.cat([x_h, x_w], dim=2) # C*1*(h+w) y = self.conv1(y) y = self.bn1(y) y = self.act(y) x_h, x_w = torch.split(y, [h, w], dim=2) x_w = x_w.permute(0, 1, 3, 2) a_h = self.conv_h(x_h).sigmoid() a_w = self.conv_w(x_w).sigmoid() out = identity * a_w * a_h return out

2、在common.py的残差结构中引入CA,即重新定义一个含有SimAM的类Bottleneck_CA,

# 将CA注意力机制加在bottleneck里面class Bottleneck_CA(nn.Module): # Standard bottleneck def __init__(self, c1, c2, shortcut=True, g=1, e=0.5): # ch_in, ch_out, shortcut, groups, expansion super(Bottleneck_CA, self).__init__() c_ = int(c2 * e) # hidden channels self.cv1 = Conv(c1, c_, 1, 1) self.cv2 = Conv(c_, c2, 3, 1, g=g) self.add = shortcut and c1 == c2 self.attention = CoordAtt(inp=c2) def forward(self, x): return x + self.attention(self.cv2(self.cv1(x))) if self.add else self.cv2(self.cv1(x))

3、然后找到yolo.py文件里的parse_model函数,将类Bottleneck_CA加入进去并将原类名Bottleneck删除,这样就把注意力CA引入的残差结构中了

三、在YOLOV5的Backbone、Neck、Head模块中分别引入注意力机制1、Backbone

2、Neck

 3、Head 

 

reference

手把手带你Yolov5 (v6.1)添加注意力机制(一)(并附上30多种顶会Attention原理图)_迪菲赫尔曼的博客-CSDN博客_yolov5添加注意力机制https://blog.csdn.net/weixin_43694096/article/details/124443059

注意力机制(SE、Coordinate Attention、CBAM、ECA,SimAM)、即插即用的模块整理_吴大炮的博客-CSDN博客_se注意力机制https://blog.csdn.net/weixin_44645198/article/details/122102201#comments_21981724

本文链接地址:https://www.jiuchutong.com/zhishi/295155.html 转载请保留说明!

上一篇:分享 6 个 Vue3 开发必备的 VSCode 插件(vue3开发app)

下一篇:Chrome谷歌浏览器强制刷新页面(不使用缓存)(Chrome谷歌浏览器网页)

  • 企业微博内容的发布技巧(企业微博的功能)

    企业微博内容的发布技巧(企业微博的功能)

  • 如何升级鸿蒙3.0(p40如何升级鸿蒙3.0)

    如何升级鸿蒙3.0(p40如何升级鸿蒙3.0)

  • iqoo8怎么分屏(iqoo,怎么分屏)

    iqoo8怎么分屏(iqoo,怎么分屏)

  • oppopdpmoo是什么型号(oppopdhmoo是啥牌子手机)

    oppopdpmoo是什么型号(oppopdhmoo是啥牌子手机)

  • 显示页眉页脚的视图方式是什么(显示页眉页码)

    显示页眉页脚的视图方式是什么(显示页眉页码)

  • cpu是通过运算器中的什么来完成加法运算的

    cpu是通过运算器中的什么来完成加法运算的

  • 剪映如何读出字幕(剪映中如何读出文字)

    剪映如何读出字幕(剪映中如何读出文字)

  • windows7查看windows版本号(windows7查看ip地址)

    windows7查看windows版本号(windows7查看ip地址)

  • 手机进水了声音变沙哑怎么办(手机进水了声音滋滋啦啦的)

    手机进水了声音变沙哑怎么办(手机进水了声音滋滋啦啦的)

  • iphone11来电不显示通讯录名字(苹果11来电不显示号码怎么办)

    iphone11来电不显示通讯录名字(苹果11来电不显示号码怎么办)

  • 删除的图片可以在哪里找到(删除的图片可以找回吗?)

    删除的图片可以在哪里找到(删除的图片可以找回吗?)

  • b站绑定身份证能改吗(b站绑定身份证安全吗)

    b站绑定身份证能改吗(b站绑定身份证安全吗)

  • 页边距内侧和外侧是指(页边距内侧和外侧在哪设置)

    页边距内侧和外侧是指(页边距内侧和外侧在哪设置)

  • opporeno后面几个摄像头(oppo reno后面那个突出的点是什么)

    opporeno后面几个摄像头(oppo reno后面那个突出的点是什么)

  • 删去的照片在手机哪里能找回来(手机删除的照片最后去哪里了)

    删去的照片在手机哪里能找回来(手机删除的照片最后去哪里了)

  • 微信发哪些文字会有特效(微信发哪些文字会有特效2023)

    微信发哪些文字会有特效(微信发哪些文字会有特效2023)

  • 快手观众怎么与主播连麦(快手观众怎么与别人聊天)

    快手观众怎么与主播连麦(快手观众怎么与别人聊天)

  • 不用充电的针孔摄像头(不用充电头)

    不用充电的针孔摄像头(不用充电头)

  • 三星s10需要贴膜吗(三星s10需要贴膜不)

    三星s10需要贴膜吗(三星s10需要贴膜不)

  • 快手怎么ktv模式直播(快手ktv怎么唱歌)

    快手怎么ktv模式直播(快手ktv怎么唱歌)

  • iphonex锁屏手电筒删除(iphonex锁屏手电筒怎么去掉)

    iphonex锁屏手电筒删除(iphonex锁屏手电筒怎么去掉)

  • qq音乐怎么剪音乐(qq音乐中怎么剪辑音乐)

    qq音乐怎么剪音乐(qq音乐中怎么剪辑音乐)

  • 手机两个卡怎么选择流量(手机两个卡怎么拉黑一个卡的联系人)

    手机两个卡怎么选择流量(手机两个卡怎么拉黑一个卡的联系人)

  • 圆顶礁国家公园里的希克曼桥,美国犹他州 (© Tim Fitzharris/Minden Pictures)(圆顶山遗址)

    圆顶礁国家公园里的希克曼桥,美国犹他州 (© Tim Fitzharris/Minden Pictures)(圆顶山遗址)

  • 一般纳税人暂未开具发票
  • 我国流转税的税种有哪些
  • 其他应付款和其他应付款可以重分类
  • 应收账款属于利润嘛
  • 报表没有其他收入怎么办
  • 农业生产者销售自产农产品按9%的税率征收增值税
  • 税控盘服务费去年忘记抵了今年可以抵扣吗
  • 进项税额转出结平分录怎么写
  • 一般纳税人减免增值税政策
  • 房地产企业广告费扣除基数
  • 小规模纳税检查怎么做
  • 计算错误多缴税怎么处理
  • 营改增后建筑业
  • 税后利润补亏的会计分录怎么做
  • 已收款未开票未发货能确认收入吗
  • 施工企业增值税纳税地点
  • 酒店收入简易征收会计核算是怎样的?
  • 小微企业增值税申报表怎么填
  • 开票方与受票方的区别
  • 建筑施工企业的安全生产许可证由哪里颁发
  • 盈余公积可以发放工资吗
  • 基金赎回未到账可继续买吗?
  • 加工费可以计入管理费用吗
  • 营改增后一般纳税人税率是多少
  • 检验费用会计分录
  • 在win10中如何设置在开始菜单中显示应用列表
  • 公司logo设计费是业务宣传费吗
  • PHP:Memcached::delete()的用法_Memcached类
  • PHP:class_parents()的用法_spl函数
  • 股票涨幅公式怎么写
  • 转让旧设备
  • 无形资产出租怎么开具发票
  • 相思树学名叫什么
  • 黄喉蜂虎鸟是保护动物吗
  • 设计部工资计入什么费用
  • 产品报废进项税转出
  • session跨域导致失效
  • 商业积分消费模式
  • 高速过路费电子发票怎么开
  • c#构造函数
  • 销项税额和进项税额月底怎么结转
  • 无销项税能抵扣进项税吗
  • 1000元的打印机双十一满减可以减150吗少
  • 应收账款期末余额为负数表示什么
  • 举办活动的工作要求
  • 差额征收的有哪些
  • 办理社会保险需要什么材料
  • 税收优惠应计入那个科目
  • 客户退货,但不退货
  • 什么情况下可以不交物业费
  • 一个身份证可以实名几个qq
  • sqlserver提示功能怎么打开
  • unix系统中目录采用什么结构
  • windows10预览版是什么
  • elccest.exe是间谍广告程序吗 elccest进程有什么作用
  • win10系统无法卸载补丁
  • 怎么从win8装回win7
  • linux里chmod
  • windows7网速慢怎么解决
  • 使用速度最快的手机
  • win10系统误删文件怎么恢复
  • win8安装wps
  • Linux通过shell脚本创建SVN版本库简化创建过程
  • cocos2djs教程
  • 浅谈特殊儿童的融合教育论文
  • 完美解决win11间歇性掉线
  • linux shell终端
  • 批处理安装
  • android/bitmap.h
  • jquery二级导航栏
  • 在javascript中
  • shell脚本中获取日期
  • JavaScript中的方法名不区分大小写
  • unity iphone
  • jquery :not
  • 副局长哪里任命
  • 办完营业执照多久可以开抖音小店
  • 软件即征即退软件是什么
  • 微信密码忘记了,手机号也没有用了,怎么办
  • 经营网络订单可以退款吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设