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

  • 微信怎么激活医保电子凭证(微信怎么激活医保卡电子版)

    微信怎么激活医保电子凭证(微信怎么激活医保卡电子版)

  • opporeno6开发者选项在哪里(opporeno6开发者选项在哪关闭)

    opporeno6开发者选项在哪里(opporeno6开发者选项在哪关闭)

  • 华为p40付款没有面容吗(华为手机为什么没有支付管理)

    华为p40付款没有面容吗(华为手机为什么没有支付管理)

  • hdaudio是什么接口(hdaudio是什么接口有用吗)

    hdaudio是什么接口(hdaudio是什么接口有用吗)

  • 三星s9电池不耐用(三星s9+手机电池不耐用了怎么修复)

    三星s9电池不耐用(三星s9+手机电池不耐用了怎么修复)

  • 微信号可以隐藏吗(微信号可以隐藏性别吗)

    微信号可以隐藏吗(微信号可以隐藏性别吗)

  • 华为电子身份证用途(华为手机身份证扫描件怎么弄)

    华为电子身份证用途(华为手机身份证扫描件怎么弄)

  • qq最高等级是多少封顶(qq最高等级是多少级 第一名2022)

    qq最高等级是多少封顶(qq最高等级是多少级 第一名2022)

  • 华为nova5ProOTG在哪

    华为nova5ProOTG在哪

  • 荣耀手表2上市时间(荣耀手表gs3功能介绍)

    荣耀手表2上市时间(荣耀手表gs3功能介绍)

  • 充电头一直插在插线板会不好吗(充电头一直插在插座上会不会爆炸)

    充电头一直插在插线板会不好吗(充电头一直插在插座上会不会爆炸)

  • 关掉icloud照片为什么会删除手机上的照片(关掉icloud照片为什么都没有了)

    关掉icloud照片为什么会删除手机上的照片(关掉icloud照片为什么都没有了)

  • 淘宝领一百现金能提现吗(淘宝100元红包怎么领)

    淘宝领一百现金能提现吗(淘宝100元红包怎么领)

  • 小米摄像头断网后还拍吗(小米摄像头断网后怎么重新连接)

    小米摄像头断网后还拍吗(小米摄像头断网后怎么重新连接)

  • 苹果xs和xsmax外观区别(苹果xs和xsmax外放音效区别)

    苹果xs和xsmax外观区别(苹果xs和xsmax外放音效区别)

  • cpu的根本任务是什么(cpu的主要任务是)

    cpu的根本任务是什么(cpu的主要任务是)

  • ssl连接在哪一层(ssl连接怎么设置在哪里)

    ssl连接在哪一层(ssl连接怎么设置在哪里)

  • 咸鱼上买东西可以退货吗(咸鱼买东西可以退货吗?)

    咸鱼上买东西可以退货吗(咸鱼买东西可以退货吗?)

  • 在微型计算机中内存是按什么编制的(在微型计算机中,主机部分包括)

    在微型计算机中内存是按什么编制的(在微型计算机中,主机部分包括)

  • 怎样连接别人家带密码的网络(怎样连接别人家的网络)

    怎样连接别人家带密码的网络(怎样连接别人家的网络)

  • 抖音极速版和抖音有什么区别(抖音极速版和抖音哪个好用一点)

    抖音极速版和抖音有什么区别(抖音极速版和抖音哪个好用一点)

  • gtx950能玩什么游戏

    gtx950能玩什么游戏

  • Word文档中怎么输入上标下标(word文档中怎么加入分隔线)

    Word文档中怎么输入上标下标(word文档中怎么加入分隔线)

  • ipad有手电筒功能吗(ipad有手电筒功能怎么弄)

    ipad有手电筒功能吗(ipad有手电筒功能怎么弄)

  • 苹果后置摄像头模糊(苹果后置摄像头镜像模式怎么调整)

    苹果后置摄像头模糊(苹果后置摄像头镜像模式怎么调整)

  • 小程序开发类型有哪些(小程序开发方式)

    小程序开发类型有哪些(小程序开发方式)

  • win11任务栏白色怎么换成黑色?(win11任务栏白色卡死)

    win11任务栏白色怎么换成黑色?(win11任务栏白色卡死)

  • 应交税金指什么意思
  • 企业个人所得税税率表2023
  • 平均股东权益在利润表中怎么看
  • 自然人个税申报错误怎么更改?
  • 进项税额已抵扣转出会计分录
  • 领用包装物的会计分录
  • 小微企业所得税税率2.5% 10% 25%
  • 税票抵扣是用进项票还是销项票
  • 维保税率和维修税率是多少
  • 工商公示纳税总额包含个税吗
  • 哪些收入减免所得税
  • 总公司收回未分配利润如何入账?
  • 小企业所得税申报流程
  • 普票和专票的税率分别是多少
  • 平销返利怎么开票入账
  • 发票打错了重新打要交税吗
  • 股权激励取消怎么处理?
  • 华为分享是什么意思关闭有影响吗
  • 华为p20上市时间和价格
  • 股权和投票权的关系是什么关系
  • 哪些费用发票可以报销
  • 如何更改windows11显示语言
  • 索尼vpcea200c笔记本
  • apache24启动不了错误代码1
  • 经营营业执照以外
  • 景区门票定价方法
  • 什么时编制
  • php教程全集
  • vite + vue + ts 自动按需导入 Element Plus组件,并如何解决按需引入后ElMessage与ElLoading 的问题(找不到名称“ElMessage”问题。)
  • /locate village村庄
  • 企业所得税年报截止日期2023
  • 符合资本化的研发支出不影响利润总额吗
  • php数组排序方法
  • less中使用js变量
  • 支付价款含不含增值税
  • 公司买东西了怎么做账
  • 企业所得税申报表资产总额怎么填
  • 运输发票开具条件
  • 企业计提增值税的会计科目
  • 捐赠合同模板
  • python如何访问私有方法
  • 独立核算的分公司注销时账面怎么处理
  • 增值税抵扣联是什么意思
  • db2运维命令
  • 消费税的账务处理方法
  • 小规模纳税人购进商品会计分录
  • 自产农产品加工成产品销售怎么抵扣
  • 微信验证收到的信息在哪
  • 计提印花税会计科目
  • 管理费用和销售费用属于什么科目
  • sql Server 触发器的when的用法
  • sql数据库回滚操作
  • 安装mysql提示one or more
  • 如何在macbook中设置软件权限
  • centos6.1安装
  • win8错误代码0xc0000001开不了机
  • os x 10.11 el capitan中文版上手体验评测
  • tr linux 命令
  • win10系统怎么修改字体大小
  • 如何在win7电脑上添加新的打印机
  • win8 开始
  • cocos2d-x windows开发环境配置
  • TestOpenGL
  • Formatting Long Lines 格式化多行字符的shell脚本
  • HTML <!DOCTYPE> 标签
  • Python插件怎么安装
  • django中的model
  • unity协程会阻塞主线程吗
  • JavaScript的setter与getter方法
  • 用jQuery.ajaxSetup实现对请求和响应数据的过滤
  • web标准包含哪些
  • vue中的vuex
  • unity 1
  • jquery刷新页面的方法
  • 一个绿色
  • 重庆电子税务局网页版登录
  • 消费税税收优惠的纳税筹划
  • 河南地税税率怎么计算
  • 常州金坛最新新闻
  • 纳税申报的期限是什么意思
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设