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

  • 红米k30如何开启OTG(红米K30如何开启OTG)

    红米k30如何开启OTG(红米K30如何开启OTG)

  • ios13可以清空流量统计吗(ios清空流量数据)

    ios13可以清空流量统计吗(ios清空流量数据)

  • 明明拦截短信却能收到(拦截短信看不到了)

    明明拦截短信却能收到(拦截短信看不到了)

  • 华为m5怎样隐藏应用(华为m5怎样隐藏应用软件)

    华为m5怎样隐藏应用(华为m5怎样隐藏应用软件)

  • 联想笔记本开机显示invalid(联想笔记本开机黑屏什么都不显示)

    联想笔记本开机显示invalid(联想笔记本开机黑屏什么都不显示)

  • 551怎么删除成员(551家庭网怎么删除成员)

    551怎么删除成员(551家庭网怎么删除成员)

  • 淘宝基础分320如何恢复到400(淘宝基础分多少)

    淘宝基础分320如何恢复到400(淘宝基础分多少)

  • 天翼超高清投屏方式(天翼超高清投屏找不到电视)

    天翼超高清投屏方式(天翼超高清投屏找不到电视)

  • 手机右下角有个小人是什么意思(手机右下角有个小人图标怎么取消)

    手机右下角有个小人是什么意思(手机右下角有个小人图标怎么取消)

  • 已经给了评价怎么给差评(已经给了评价怎么删除)

    已经给了评价怎么给差评(已经给了评价怎么删除)

  • 淘宝什么时候可以发货(淘宝什么时候可以延长收货)

    淘宝什么时候可以发货(淘宝什么时候可以延长收货)

  • cd rom又称为什么(cdrom又称为什么)

    cd rom又称为什么(cdrom又称为什么)

  • excel2010工作簿文件的默认扩展名是(excel2010工作簿文件默认有几个工作表)

    excel2010工作簿文件的默认扩展名是(excel2010工作簿文件默认有几个工作表)

  • 荣耀blnal10是什么机型(荣耀bln一tl10)

    荣耀blnal10是什么机型(荣耀bln一tl10)

  • 苹果手机下载的软件未受信任怎么办(苹果手机下载的音乐在哪个文件夹)

    苹果手机下载的软件未受信任怎么办(苹果手机下载的音乐在哪个文件夹)

  • 手机主题如何下载(手机主题如何下载到电脑)

    手机主题如何下载(手机主题如何下载到电脑)

  • 一个手机能登录几个淘宝号(一个手机能登录两个快手吗)

    一个手机能登录几个淘宝号(一个手机能登录两个快手吗)

  • 打印机缩印怎么设置(打印机缩印怎么设置纸张方向)

    打印机缩印怎么设置(打印机缩印怎么设置纸张方向)

  • 怎样阻止电视自动安装软件(怎样阻止电视自动续费)

    怎样阻止电视自动安装软件(怎样阻止电视自动续费)

  • 红米k20pro有nfc吗(红米k20pro有nfc吗?)

    红米k20pro有nfc吗(红米k20pro有nfc吗?)

  • 电脑显示大写锁定打开怎么办(电脑显示大写锁定打开)

    电脑显示大写锁定打开怎么办(电脑显示大写锁定打开)

  • 怎么取消绿钻自动续费(怎么取消绿钻自动付费)

    怎么取消绿钻自动续费(怎么取消绿钻自动付费)

  • 点我达怎么注销账号(点我达怎么取消订单)

    点我达怎么注销账号(点我达怎么取消订单)

  • 一头公牛站在皮库山前的田野中,亚速尔群岛皮科岛 (© Atmo-Sphere/Getty Images)(一头公牛和一头母牛,答五个字)

    一头公牛站在皮库山前的田野中,亚速尔群岛皮科岛 (© Atmo-Sphere/Getty Images)(一头公牛和一头母牛,答五个字)

  • 日出时分的圣皮埃尔全景,加拿大圣皮埃尔和密克隆 (© Henryk Sadura/Getty Images)(日出的时候是圣诞节)

    日出时分的圣皮埃尔全景,加拿大圣皮埃尔和密克隆 (© Henryk Sadura/Getty Images)(日出的时候是圣诞节)

  • 财产行为税包括资源税吗
  • 应纳税所得额是利润总额吗
  • 小微企业一般要交什么费用2019
  • 个税汇算清缴为啥要补交
  • 机票抵扣怎么填申报表
  • 应交税费是没有增值税吗
  • 增值税专用发票电子版
  • 进项税额有留底怎么做分录
  • 国税征收项目有哪些
  • 集团子公司之间调拨固定资产
  • 免税单位取得增值税发票
  • 公司用现金发放工资在税法上合规吗
  • 公司冲账发票做账流程
  • 电子钥匙的发票怎么开
  • 以前年度的税金及附加
  • 烟酒发票可以抵扣所得税吗
  • 一般纳税人认定标准500万是什么时候开始执行
  • 设备升级改造如何开发票
  • 新版关闭edge地址栏建议
  • macbookpro怎么添加文件夹
  • 收到的投资属于什么科目
  • 2023年电子发票如何申领
  • 招待费如何列支
  • 为什么电脑开机显示无信号然后黑屏
  • 取得经营所得及其他所得交纳的所得税
  • type3插件
  • php运用于哪些领域
  • 电脑启动不了windows能进安全模式
  • 事业单位接受捐赠固定资产入账
  • 强化税收风险意识
  • Chateau de Castelnaud in Perigord, France (© Peter Adams/Offset by Shutterstock)
  • 泛型 static
  • 基于深度学习的车型识别系统(Python+清新界面+数据集)
  • php注释有几种?如何表示?
  • php如何上传文件
  • ahs日志
  • bash详解
  • 临时工交押金会扣钱吗
  • 资产处置费用是资产类会计科目吗
  • 银行年费什么时候取消的
  • 高铁票的电子发票
  • 企业应交税金科目编码
  • 服务器连接db2数据库命令
  • 小规模纳税人每个月都要抄税清卡吗
  • 借应付职工薪酬贷财政拨款收入
  • 向非关联企业捐赠现金会计分录
  • 其他收益和其他综合收益区别
  • 应付账款借方余额负数表示什么
  • 海外也不能避税吗
  • 支付的税费现金流量表公式
  • 销售货物的流程
  • 汇算清缴弥补以前年度亏损多少年
  • 企业应收账款的规模受哪些因素的影响?( )
  • 销售费用和管理费用的税前扣除
  • sql server的数据库
  • php连接mysql数据库的几种方式及区别
  • win8.1iso
  • win10如何配置
  • vi编辑器的三种模式
  • quickres.exe - quickres是什么进程 作用是什么
  • 0x81000204错误
  • win8谷歌浏览器出现无法访问此网站
  • WIN10补丁白屏
  • linux开启ssh服务失败
  • ajax 编码
  • js信息框
  • python中urllib.unquote乱码的原因与解决方法
  • bios查看电脑配置信息
  • sql命令语句
  • node.js ejs
  • unity behavior designer
  • CameraViewControl 摄像机 绕 物体
  • javascript作用域链
  • javascript原理详解
  • jquery筛选器
  • 税务局三级主办是副科吗
  • 税务局怎么添加税种
  • 自然人办税服务平台怎么登录不进?
  • 怎么查询购置税交了没有
  • 年度申报个人所得税专项扣除多填了怎么办
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设