位置: 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谷歌浏览器网页)

  • 品牌塑造之路共七步,而大部分企业只走了一两步(品牌塑造过程)

    品牌塑造之路共七步,而大部分企业只走了一两步(品牌塑造过程)

  • 华为智慧助手图标怎么从桌面移除(华为智慧助手图标怎么隐藏)

    华为智慧助手图标怎么从桌面移除(华为智慧助手图标怎么隐藏)

  • 快手里面的背包在哪里(快手里面的背包怎么打开)

    快手里面的背包在哪里(快手里面的背包怎么打开)

  • 怎么办理大王卡呢(怎么办理大王卡19月租)

    怎么办理大王卡呢(怎么办理大王卡19月租)

  • 电脑管家怎么把软件彻底删干净(电脑管家怎么把软件添加到信任区)

    电脑管家怎么把软件彻底删干净(电脑管家怎么把软件添加到信任区)

  • 13.5英寸屏幕多大(13.3寸屏幕是多少cm)

    13.5英寸屏幕多大(13.3寸屏幕是多少cm)

  • pdf用office哪个打开(pdf文件用什么软件打印好)

    pdf用office哪个打开(pdf文件用什么软件打印好)

  • 新微信号多久可以收款(新微信号多久可以收款转账)

    新微信号多久可以收款(新微信号多久可以收款转账)

  • 拍立得mini9和25的区别(拍立得mini9和mini8哪个好)

    拍立得mini9和25的区别(拍立得mini9和mini8哪个好)

  • jspx用什么软件可以打开(jsp用什么开发工具)

    jspx用什么软件可以打开(jsp用什么开发工具)

  • 哔哩哔哩等级有什么用(哔哩哔哩等级有多少)

    哔哩哔哩等级有什么用(哔哩哔哩等级有多少)

  • 苹果手机突然不震动了怎么回事(苹果手机突然不亮了怎么回事)

    苹果手机突然不震动了怎么回事(苹果手机突然不亮了怎么回事)

  • 抖音平台的特点和优势是什么(简述抖音平台的特点)

    抖音平台的特点和优势是什么(简述抖音平台的特点)

  • volte语音业务是什么(volte语音呼叫流程)

    volte语音业务是什么(volte语音呼叫流程)

  • QQ匹配失败(qq匹配为什么会匹配失败)

    QQ匹配失败(qq匹配为什么会匹配失败)

  • 美图手机相机打不开了怎么办(美图手机相机打开闪光灯)

    美图手机相机打不开了怎么办(美图手机相机打开闪光灯)

  • 手机怎么下载电视剧(手机怎么下载电脑版软件)

    手机怎么下载电视剧(手机怎么下载电脑版软件)

  • 找不到漂流瓶怎么回事(漂流瓶没了我们怎么办)

    找不到漂流瓶怎么回事(漂流瓶没了我们怎么办)

  • 大数据具有四大特征(大数据具有四大特点)

    大数据具有四大特征(大数据具有四大特点)

  • iPhone11支持动态壁纸么(苹果11设置动态)

    iPhone11支持动态壁纸么(苹果11设置动态)

  • 苹果手机边充边玩对手机的影响大吗(苹果手机边充边玩发烫正常吗)

    苹果手机边充边玩对手机的影响大吗(苹果手机边充边玩发烫正常吗)

  • 解除qq情侣内容还在吗(qq解除情侣关系情侣空间会解除吗)

    解除qq情侣内容还在吗(qq解除情侣关系情侣空间会解除吗)

  • vue为什么点不了拍摄(vue ui打不开)

    vue为什么点不了拍摄(vue ui打不开)

  • 抖音作品怎么删除(抖音作品怎么删除方法)

    抖音作品怎么删除(抖音作品怎么删除方法)

  • 红米note9什么时候出

    红米note9什么时候出

  • 优酷hdr什么意思(优酷hdr什么意思啊)

    优酷hdr什么意思(优酷hdr什么意思啊)

  • multiple editions是什么版本

    multiple editions是什么版本

  • 爱沙尼亚波罗的海 (© fotoman-kharkov/Getty Images)(爱沙尼亚的故事)

    爱沙尼亚波罗的海 (© fotoman-kharkov/Getty Images)(爱沙尼亚的故事)

  • 冬季暴风雪中的欧亚鸲,英格兰峰区国家公园 (© Ben Robson Hull Photography/Getty Images)(暴风雪的寒冷)

    冬季暴风雪中的欧亚鸲,英格兰峰区国家公园 (© Ben Robson Hull Photography/Getty Images)(暴风雪的寒冷)

  • 税务机关地区编号查询
  • 增值税结转会计科目
  • 税务行政诉讼名词解释
  • 公司购进一台不需要安装的设备设备价款为700万元
  • 未认证发票有时间限制吗
  • 收入准则范围内
  • 通用发票
  • 加计扣除企业所得税季报申报
  • 红字发票没有地址和银行信息跨月了无法作废
  • 发票查询校验码看不清怎么办
  • 税务登记注销前异常项目类型非强制什么意思
  • 超标的职工教育经费为什么是可抵扣
  • 摊销租金是什么意思
  • 长期待摊费用摊销表
  • 消费税在流通环节征税吗
  • 建筑安装税务分类编码为多少?
  • 深圳风险程度
  • 发生广告费用会计分录
  • excel自动计算增值税
  • 营改增的销售额规定
  • 固定资产折旧应该考虑哪些因素
  • 合营企业之间为什么不构成关联方
  • 挂靠别人的资质进行房屋建筑会计怎样做账?
  • win10专业版虚拟内存怎么设置
  • 坏账准备年末余额怎么计算
  • 苹果手机zm
  • 同一年可以先娶后嫁吗
  • 计提本月短期借款利息1000元
  • 外购的福利费要转出吗
  • wind10画图在哪
  • deldir.exe是什么
  • 怎么做好零售
  • 加勒比海百科
  • php判断字符串是否合法日期
  • 短期资金都是债务类资金
  • thinkphp技巧
  • 一般纳税人无票收入怎么填申报表
  • vgchange命令
  • 租赁房屋开具发票商品名称
  • webservice api接口
  • 资本化支出影响营业利润吗
  • 服务业按什么结算工资
  • 工程类企业存货
  • 企业之间交换房地产要交土地增值税吗
  • 未分配利润转增股本 企业所得税
  • 土地增值税清算收入如何确定
  • 员工报销固定资产怎么算
  • 商品没入库直接发货
  • 美元转到中国银行入账是人民币吗
  • 委托方和受委托方的法律关系
  • 折扣 会计
  • 稳岗补贴会计分录怎么做,需要缴纳企业所得税不
  • docker部署zookeeper集群
  • ubuntu的sudo
  • win10桌面版微信连不上网
  • linux常用命令修改
  • macbook 如何设置safari的搜索引擎
  • linux配置ip地址文件
  • win10应用商店下载不了
  • unity项目中的资源
  • python内置函数open()的参数用来指定打开文本文件
  • unity3d初学者教程视频
  • unity3d总结
  • easyui控件
  • shell脚本实现监控进程
  • u3d官方
  • python安装心得
  • 运满满订单取消技术服务费退还吗
  • 北京930末班车时间表
  • 税款怎么查询
  • 业财税一体化所指的业财税包括下列哪几项
  • 山东统一发票查询平台
  • 福建省税务局 电子
  • 技术服务费减免企业所得税政策
  • 地方税务局工作内容
  • 国家税务总局网址
  • 上海电子税务平台开票不含税怎么改成含税
  • 忘记了密码怎么打开手机
  • 买新房子契税多久交
  • 陕西的发票在哪里领取
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设