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

  • 腾讯会议怎么打字(腾讯会议怎么打开摄像头)

    腾讯会议怎么打字(腾讯会议怎么打开摄像头)

  • iqoo支持双扬声器吗(iqoo有没有双扬声器)

    iqoo支持双扬声器吗(iqoo有没有双扬声器)

  • 哔哩哔哩怎么设置退出后继续播放(哔哩哔哩怎么设置灭屏播放)

    哔哩哔哩怎么设置退出后继续播放(哔哩哔哩怎么设置灭屏播放)

  • 快手经常搜一个人他知道吗(快手经常搜一个人,她会发现吗)

    快手经常搜一个人他知道吗(快手经常搜一个人,她会发现吗)

  • opporeno怎么调4G(opporeno怎么调出小屏)

    opporeno怎么调4G(opporeno怎么调出小屏)

  •  注销空间后照片还在吗(注销空间后有什么后果)

    注销空间后照片还在吗(注销空间后有什么后果)

  • 苹果11可以放两张卡吗(苹果11可以放两张移动卡吗)

    苹果11可以放两张卡吗(苹果11可以放两张移动卡吗)

  • 优盘插电脑上显示格式化是怎么回事(优盘插电脑上显示格式化怎么办)

    优盘插电脑上显示格式化是怎么回事(优盘插电脑上显示格式化怎么办)

  • jbl耳机左耳不响了(jbl c100tws左耳不出声)

    jbl耳机左耳不响了(jbl c100tws左耳不出声)

  • ip44级防水是什么意思(ip44防水等级是什么)

    ip44级防水是什么意思(ip44防水等级是什么)

  • 抖音下载功能怎么开启(抖音下载功能怎么关闭掉)

    抖音下载功能怎么开启(抖音下载功能怎么关闭掉)

  • 微信朋友圈怎么发两个视频(微信朋友圈怎么@一个人)

    微信朋友圈怎么发两个视频(微信朋友圈怎么@一个人)

  • mac蓝牙在哪里(macbook中蓝牙在哪里)

    mac蓝牙在哪里(macbook中蓝牙在哪里)

  • 华为m6的鼠标怎么连接(华为m6鼠标灵敏度设置)

    华为m6的鼠标怎么连接(华为m6鼠标灵敏度设置)

  • 苹果x无面容可以修吗(苹果x无面容可以改成有面容吗)

    苹果x无面容可以修吗(苹果x无面容可以改成有面容吗)

  • 为什么iphone下载不了网易云音乐(为什么iphone下载软件一直在载入)

    为什么iphone下载不了网易云音乐(为什么iphone下载软件一直在载入)

  • 华为stfal00是什么型号(华为stf-al00是什么型号手机)

    华为stfal00是什么型号(华为stf-al00是什么型号手机)

  • 为什么腾讯视频打不开(为什么腾讯视频不能用手机号登录)

    为什么腾讯视频打不开(为什么腾讯视频不能用手机号登录)

  • linux是什么(linux是什么语言开发的)

    linux是什么(linux是什么语言开发的)

  • 抖音用户已重置什么意思(抖音用户已重置怎么办)

    抖音用户已重置什么意思(抖音用户已重置怎么办)

  • 绕过压缩包密码提取文件教程(如何绕开压缩包密码)

    绕过压缩包密码提取文件教程(如何绕开压缩包密码)

  • 在win7系统中,本地组策略编辑器打不开怎么办?(在windows 7中)

    在win7系统中,本地组策略编辑器打不开怎么办?(在windows 7中)

  • Mac怎么设置屏幕保护?Mac屏幕保护程序使用教程(mac怎么设置屏幕保护壁纸)

    Mac怎么设置屏幕保护?Mac屏幕保护程序使用教程(mac怎么设置屏幕保护壁纸)

  • 厂房出租开发票怎么交税
  • 个人去税务局开劳务票 税点是多少
  • 可以公账户给私账转账吗
  • 小规模纳税人发票怎么开
  • 电子设备残值率的最新规定
  • 固定资产做错了怎么办
  • 印刷配件有哪些
  • 新版增值税开票软件怎么下载
  • 竹笋属于什么税目类别
  • 员工转入子公司怎么做账
  • 主营业成本和销售费用的区别
  • 出口汇兑损益的会计分录
  • 服务费发票可以部分红冲吗
  • 拍卖的物品
  • mac系统如何连接北通手柄
  • 应付工程款账务处理
  • 预缴企业所得税怎么做账务处理
  • 应收票据的贴现利息应计入
  • 债权人撤销权诉讼有效债权为前提
  • 苹果14pro max价格
  • thinkphp 5.0.24 rce
  • 购进来的样品怎么账务处理
  • 如何做商品批发
  • 退休后工作单位填什么内容
  • vue页面路由传参
  • 什么情况下可以土葬
  • 固定资产没有发票可以计提折旧吗
  • vue3项目搭建
  • 企业所得税法定税率是多少
  • 债务重组收入属于什么科目
  • 知识图谱ui
  • 发票申请条件
  • 财务软件服务合同要交印花税吗
  • 居间协议合同范本完整版
  • 主营业务成本和生产成本的区别
  • 收到多开发票的会计分录
  • 学电脑的好网站
  • 为什么费用报销先由主管部门审批在由财务审核
  • 工程结算是否算成本
  • 外汇保值业务的特点包括
  • 个税专项附加扣除标准2023
  • 企业利润分配的内容
  • ERROR CODE: 1175 YOU ARE USING SAFE UPDATE MODE AN
  • 对公账户余额和可用余额不一样
  • 递延所得税如何计提
  • 公司股权变更如何合理避税
  • 缴纳印花税如何写分录
  • 车辆检验收费
  • 印花税税率是多少
  • 工程预算费用怎么做会计分录
  • 个体工商户的公章丢了怎么办
  • 年末结转的会计核算过程
  • 商品流通企业流程
  • 如何优化sql语句执行效率
  • centos7查看目录
  • linux/unix
  • 怎么进入win7系统
  • win7宽带自动拨号设置
  • centos设置终端快捷键
  • qtask.exe - qtask是什么进程 有什么用
  • Linux内核级别的资源隔离机制是
  • win7在开始菜单右击
  • win10如何将我的电脑添加到桌面
  • win8没有开始菜单 点键盘开始菜单黑屏
  • ,linux
  • 初识年岁尚温柔 小说 免费
  • python备份列表l
  • unity如何成一组
  • 简单介绍自己的名字由来
  • JavaScript中的方法名不区分大小写
  • jquery移动端ui框架
  • android:ViewPager与FragmentPagerAdapter
  • js继承的三种方法
  • 监听页面滚动事件
  • 盐城市地税局稽查大队长
  • 贵州新农合可以打电话停保吗
  • 电子税务局app扫脸认证
  • 房子的地税发票丢了怎么补办
  • 交通运输业包含哪些
  • 吉林省耕地面积有多少万亩
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设