YOLOv5、v7改进之三十二:引入SKAttention注意力机制
前 言:作为当前先进的深度学习目标检测算法YOLOv7,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法。此后的系列文章,将重点对YOLOv7的如何改进进行详细的介绍,目的是为了给那些搞科研的同学需要创新点或者搞工程项目的朋友需要达到更好的效果提供自己的微薄帮助和参考。由于出到YOLOv7,YOLOv5算法2020年至今已经涌现出大量改进论文,这个不论对于搞科研的同学或者已经工作的朋友来说,研究的价值和新颖度都不太够了,为与时俱进,以后改进算法以YOLOv7为基础,此前YOLOv5改进方法在YOLOv7同样适用,所以继续YOLOv5系列改进的序号。另外改进方法在YOLOv5等其他算法同样可以适用进行改进。希望能够对大家有帮助。
具体改进办法请关注后私信留言!
解决问题:之前改进增加了很多注意力机制的方法,包括比较常规的SE、CBAM等,本文加入SKAttention注意力机制,该注意力机制借鉴了SENet的思想,通过动态计算每个卷积核得到通道的权重,动态的将各个卷积核的结果进行融合。用于可以让网络更加关注待检测目标,提高检测效果。
基本原理:
在标准卷积神经网络(CNN)中,每层人工神经元的感受野被设计为共享相同的大小。在神经科学界众所周知,视觉皮层神经元的感受野大小受到刺激的调节,而在构建CNN时很少考虑刺激。我们提出了一种CNN中的动态选择机制,允许每个神经元根据输入信息的多尺度自适应调整其感受野大小。设计了一个称为选择性内核(SK)单元的构建块,其中不同内核大小的多个分支在这些分支中的信息指导下,使用softmax注意力进行融合。对这些分支的不同关注导致融合层神经元的有效感受野大小不同。多个SK单元堆叠在一个称为选择性内核网络(SKNets)的深层网络中。在ImageNet和CIFAR基准测试中,我们的经验表明,SKNet以更低的模型复杂度优于现有的最先进架构。详细分析表明,SKNet中的神经元能够捕获不同尺度的目标物体,这验证了神经元根据输入自适应调整其感受野大小的能力。
添加方法:
第一步:确定添加的位置,作为即插即用的注意力模块,可以添加到YOLOv5网络中的任何地方。
第二步:common.py构建SKAttention模块。部分代码如下,关注文章末尾,私信后领取。
class SKAttention(nn.Module):def __init__(self, channel=512, kernels=[1, 3, 5, 7], reduction=16, group=1, L=32):super().__init__()self.d = max(L, channel // reduction)self.convs = nn.ModuleList([])for k in kernels:self.convs.append(nn.Sequential(OrderedDict([('conv', nn.Conv2d(channel, channel, kernel_size=k, padding=k // 2, groups=group)),('bn', nn.BatchNorm2d(channel)),('relu', nn.ReLU())])))self.fc = nn.Linear(channel, self.d)self.fcs = nn.ModuleList([])for i in range(len(kernels)):self.fcs.append(nn.Linear(self.d, channel))self.softmax = nn.Softmax(dim=0)def forward(self, x):bs, c, _, _ = x.size()conv_outs = []### splitfor conv in self.convs:conv_outs.append(conv(x))feats = torch.stack(conv_outs, 0) # k,bs,channel,h,w### fuseU = sum(conv_outs) # bs,c,h,w### reduction channelS = U.mean(-1).mean(-1) # bs,cZ = self.fc(S) # bs,d### calculate attention weightweights = []for fc in self.fcs:weight = fc(Z)weights.append(weight.view(bs, c, 1, 1)) # bs,channelattention_weughts = torch.stack(weights, 0) # k,bs,channel,1,1attention_weughts = self.softmax(attention_weughts) # k,bs,channel,1,1
第三步:yolo.py中注册 SKAttention模块
elif m is SKAttention:c1, c2 = ch[f], args[0]if c2 != no:c2 = make_divisible(c2 * gw, 8)args = [c1, *args[1:]]
第四步:修改yaml文件,本文以修改head(特征融合网络)为例,将原C3模块后加入该模块。
head:[[-1, 1, Conv, [512, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 6], 1, Concat, [1]], # cat backbone P4[-1, 3, C3, [512, False]], # 13[-1, 1, Conv, [256, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 4], 1, Concat, [1]], # cat backbone P3[-1, 3, C3, [256, False]], # 17 (P3/8-small)[-1, 1, Conv, [256, 3, 2]],[[-1, 14], 1, Concat, [1]], # cat head P4[-1, 3, C3, [512, False]], # 20 (P4/16-medium)[-1, 1, Conv, [512, 3, 2]],[[-1, 10], 1, Concat, [1]], # cat head P5[-1, 3, C3, [1024, False]], # 23 (P5/32-large)[-1, 1, SKAttention, [1024]],[[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)]
第五步:将train.py中改为本文的yaml文件即可,开始训练。
结 果:本人在遥感数据集上进行实验,有涨点效果。需要请关注留言。
预告一下:下一篇内容将继续分享深度学习算法相关改进方法。有兴趣的朋友可以关注一下我,有问题可以留言或者私聊我哦
PS:该方法不仅仅是适用改进YOLOv5,也可以改进其他的YOLO网络以及目标检测网络,比如YOLOv7、v6、v4、v3,Faster rcnn ,ssd等。
最后,希望能互粉一下,做个朋友,一起学习交流。
YOLOv5、v7改进之三十二:引入SKAttention注意力机制相关推荐
- [YOLOv7/YOLOv5系列算法改进NO.33]引入GAMAttention注意力机制
前 言:作为当前先进的深度学习目标检测算法YOLOv7,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法.此后的系列文章,将重点对YOLOv7 ...
- SAP UI5 应用开发教程之三十二 - 如何创建一个自定义 SAP UI5 控件试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
- Citrix 服务器虚拟化之三十二 XenConvert
Citrix 服务器虚拟化之三十二 XenConvert 简介: Citrix XenConvert 是用于实现物理到虚拟(P2V)转换的工具,可将工作负载从运行 Windows 的服务器或桌 ...
- BetaFlight模块设计之三十二:MSP协议模块分析
BetaFlight模块设计之三十二:MSP协议模块分析 1. MSP协议模块 1.1 MSP描述 1.2 MSP版本优缺点 1.3 MSP代码资源 2. MSP报文解析 2.1 MSP收包状态机 2 ...
- 图灵访谈之三十二:我的精神家园——陈皓专访
图灵访谈之三十二:我的精神家园--陈皓(@左耳朵耗子)专访 推荐34收藏 芝兰生于深谷,不以无人而不芳 .君子修身养德,不以穷困而改志. "码农人物志"第二期码农代表:陈皓(@左耳 ...
- 目标检测论文解读复现之十八:基于注意力机制的光线昏暗条件下口罩佩戴检测
前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文,帮 ...
- 如何通过引入硬注意力机制来学习视觉问答任务?
作者 | Mateusz Malinowski, Carl Doersch, Adam Santoro, and Peter Battaglia 译者 | linstancy 编辑 | Jane 出品 ...
- YOLOv5、v7改进之三十一:CrissCrossAttention注意力机制
前 言:作为当前先进的深度学习目标检测算法YOLOv7,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法.此后的系列文章,将重点对YOLOv7 ...
- 胶囊网络全新升级!引入自注意力机制的Efficient-CapsNet
©PaperWeekly 原创 · 作者|孙裕道 学校|北京邮电大学博士生 研究方向|GAN图像生成.情绪对抗样本生成 论文链接: https://arxiv.org/abs/2101.12491 论 ...
最新文章
- 10.VMware View 4.6安装与部署-view clint和view for ipad连接测试
- rmd文件怎么转换html文件,提取.Rmd文件的html依赖项(包含htmlwidgets)
- Fedora 17 PHP编程环境配置
- 如何从零开始,成为element-plus的contributor
- laravel5.4之artisan使用总结一
- PRML-系列二之2.3
- ROS 教程之 navigation : 用 move_base 控制自己的机器人(2)
- 一张图看明白云计算架构核心竞争力
- 小米手环4 NFC版将全渠道开售:垃圾分类超智能
- POJ1703-Find them, Catch them
- 181016扇贝有道词霸每日一句
- Tween动画TranslateAnimation细节介绍
- 金蝶K3系统BOM数据批量审核/使用语句
- 【历史上的今天】7 月 14 日:MP3 诞生日;系统动力学的开创者诞生;正面战胜 IBM 的计算机公司
- 排列组合解析与例题总结
- vue怎么在地址栏隐藏路由
- Windows 自动连接wifi的bat批处理脚本
- 精准识别,指静脉智能门锁更好用吗?看先锋亲自体验的结果
- python+scapy实现ARP欺骗
- simi.city forum.php,simicitybuildit欧米伽建筑代号什么意思
热门文章
- Qt使用大图标工具栏、svg格式图标
- sudo pip install -i https://pypi.douban.com/simple --user MySQL-python报错‘my_config.h‘ file not found
- 互联网公司招聘--百度--运营岗-2015年笔试题
- php-fpm for windows,Just for fun——windows上的php-fpm
- 二叉树常见算法题(单值二叉树、二叉树的最大深度、反转二叉树、判断两颗二叉树是否相同、对称二叉树、一颗二叉树是否是另一颗二叉树的子树)
- vue之 render函数 入门篇
- java工程 p2p通讯_java实现P2P通信-Go语言中文社区
- 【行研报告】2021年中国剧本杀行业用户研究及标杆企业案例分析报告—附下载链接
- 进程同步——打瞌睡的理发师问题
- 购车分期系统-智能风控体系,有效控制贷款风险