位置: IT常识 - 正文

[YOLOv7/YOLOv5系列算法改进NO.11]主干网络C3替换为轻量化网络MobileNetV3(yolov5m)

编辑:rootadmin

推荐整理分享[YOLOv7/YOLOv5系列算法改进NO.11]主干网络C3替换为轻量化网络MobileNetV3(yolov5m),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:yolov5 ciou,yolov5 c,yolov5简介,yolo v5详解,yolov5tiny,yolov5m,yolov5s,yolov5s,内容如对您有帮助,希望把文章链接给更多的朋友!

​前 言:作为当前先进的深度学习目标检测算法YOLOv5,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法。此后的系列文章,将重点对YOLOv5的如何改进进行详细的介绍,目的是为了给那些搞科研的同学需要创新点或者搞工程项目的朋友需要达到更好的效果提供自己的微薄帮助和参考。

解决问题:YOLOv5主干特征提取网络采用C3结构,带来较大的参数量,检测速度较慢,应用受限,在某些真实的应用场景如移动或者嵌入式设备,如此大而复杂的模型时难以被应用的。首先是模型过于庞大,面临着内存不足的问题,其次这些场景要求低延迟,或者说响应速度要快,想象一下自动驾驶汽车的行人检测系统如果速度很慢会发生什么可怕的事情。所以,研究小而高效的CNN模型在这些场景至关重要,至少目前是这样,尽管未来硬件也会越来越快。本文尝试将主干特征提取网络替换为更轻量的MobileNet网络,以实现网络模型的轻量化,平衡速度和精度。

原理:

论文地址:https://arxiv.org/abs/1905.02244.pdf

代 码:https://github.com/LeBron-Jian/DeepLearningNote

MobileNet V3 相关技术如下:

1,用 MnasNet 搜索网络结构

2,用 V1 的深度可分离

3,用 V2 的倒置残差线性瓶颈结构

[YOLOv7/YOLOv5系列算法改进NO.11]主干网络C3替换为轻量化网络MobileNetV3(yolov5m)

4,引入 SE模块

5,新的激活函数 h-swish(x)

6,网络搜索中利用两个策略:资源受限的 NAS 和 NetAdapt

7,修改 V2 最后部分减小计算

方 法:

第一步修改common.py,增加MobileNetV3模块。部分代码如下。

class StemBlock(nn.Module): def __init__(self, c1, c2, k=3, s=2, p=None, g=1, act=True): super(StemBlock, self).__init__() self.stem_1 = Conv(c1, c2, k, s, p, g, act) self.stem_2a = Conv(c2, c2 // 2, 1, 1, 0) self.stem_2b = Conv(c2 // 2, c2, 3, 2, 1) self.stem_2p = nn.MaxPool2d(kernel_size=2, stride=2, ceil_mode=True) self.stem_3 = Conv(c2 * 2, c2, 1, 1, 0) def forward(self, x): stem_1_out = self.stem_1(x) stem_2a_out = self.stem_2a(stem_1_out) stem_2b_out = self.stem_2b(stem_2a_out) stem_2p_out = self.stem_2p(stem_1_out) out = self.stem_3(torch.cat((stem_2b_out, stem_2p_out), 1)) return outclass h_swish(nn.Module): def __init__(self, inplace=True): super(h_swish, self).__init__() self.sigmoid = h_sigmoid(inplace=inplace) def forward(self, x): y = self.sigmoid(x) return x * yclass SELayer(nn.Module): def __init__(self, channel, reduction=4): super(SELayer, self).__init__() self.avg_pool = nn.AdaptiveAvgPool2d(1) self.fc = nn.Sequential( nn.Linear(channel, channel // reduction), nn.ReLU(inplace=True), nn.Linear(channel // reduction, channel), h_sigmoid() ) def forward(self, x): b, c, _, _ = x.size() y = self.avg_pool(x) y = y.view(b, c) y = self.fc(y).view(b, c, 1, 1) return x * yclass conv_bn_hswish(nn.Module): """ This equals to def conv_3x3_bn(inp, oup, stride): return nn.Sequential( nn.Conv2d(inp, oup, 3, stride, 1, bias=False), nn.BatchNorm2d(oup), h_swish() ) """ def __init__(self, c1, c2, stride): super(conv_bn_hswish, self).__init__() self.conv = nn.Conv2d(c1, c2, 3, stride, 1, bias=False) self.bn = nn.BatchNorm2d(c2) self.act = h_swish() def forward(self, x): return self.act(self.bn(self.conv(x))) def fuseforward(self, x): return self.act(self.conv(x))class MobileNetV3_InvertedResidual(nn.Module): def __init__(self, inp, oup, hidden_dim, kernel_size, stride, use_se, use_hs): super(MobileNetV3_InvertedResidual, self).__init__() assert stride in [1, 2] self.identity = stride == 1 and inp == oup if inp == hidden_dim: self.conv = nn.Sequential( # dw nn.Conv2d(hidden_dim, hidden_dim, kernel_size, stride, (kernel_size - 1) // 2, groups=hidden_dim, bias=False), nn.BatchNorm2d(hidden_dim), h_swish() if use_hs else nn.ReLU(inplace=True), # Squeeze-and-Excite SELayer(hidden_dim) if use_se else nn.Sequential(), # Eca_layer(hidden_dim) if use_se else nn.Sequential(),#1.13.2022 # pw-linear nn.Conv2d(hidden_dim, oup, 1, 1, 0, bias=False), nn.BatchNorm2d(oup), ) else: self.conv = nn.Sequential( # pw nn.Conv2d(inp, hidden_dim, 1, 1, 0, bias=False), nn.BatchNorm2d(hidden_dim), h_swish() if use_hs else nn.ReLU(inplace=True), # dw nn.Conv2d(hidden_dim, hidden_dim, kernel_size, stride, (kernel_size - 1) // 2, groups=hidden_dim, bias=False), nn.BatchNorm2d(hidden_dim), # Squeeze-and-Excite SELayer(hidden_dim) if use_se else nn.Sequential(), # Eca_layer(hidden_dim) if use_se else nn.Sequential(), # 1.13.2022 h_swish() if use_hs else nn.ReLU(inplace=True), # pw-linear nn.Conv2d(hidden_dim, oup, 1, 1, 0, bias=False), nn.BatchNorm2d(oup), ) def forward(self, x): y = self.conv(x) if self.identity: return x + y else: return y

第二步:将yolo.py中注册模块。

if m in [Conv,MobileNetV3_InvertedResidual,ShuffleNetV2_InvertedResidual, ]:

第三步:修改yaml文件

backbone: # MobileNetV3-large # [from, number, module, args] [[-1, 1, conv_bn_hswish, [16, 2]], # 0-p1/2 [-1, 1, MobileNetV3_InvertedResidual, [ 16, 16, 3, 1, 0, 0]], # 1-p1/2 [-1, 1, MobileNetV3_InvertedResidual, [ 24, 64, 3, 2, 0, 0]], # 2-p2/4 [-1, 1, MobileNetV3_InvertedResidual, [ 24, 72, 3, 1, 0, 0]], # 3-p2/4 [-1, 1, MobileNetV3_InvertedResidual, [ 40, 72, 5, 2, 1, 0]], # 4-p3/8 [-1, 1, MobileNetV3_InvertedResidual, [ 40, 120, 5, 1, 1, 0]], # 5-p3/8 [-1, 1, MobileNetV3_InvertedResidual, [ 40, 120, 5, 1, 1, 0]], # 6-p3/8 [-1, 1, MobileNetV3_InvertedResidual, [ 80, 240, 3, 2, 0, 1]], # 7-p4/16 [-1, 1, MobileNetV3_InvertedResidual, [ 80, 200, 3, 1, 0, 1]], # 8-p4/16 [-1, 1, MobileNetV3_InvertedResidual, [ 80, 184, 3, 1, 0, 1]], # 9-p4/16 [-1, 1, MobileNetV3_InvertedResidual, [ 80, 184, 3, 1, 0, 1]], # 10-p4/16 [-1, 1, MobileNetV3_InvertedResidual, [112, 480, 3, 1, 1, 1]], # 11-p4/16 [-1, 1, MobileNetV3_InvertedResidual, [112, 672, 3, 1, 1, 1]], # 12-p4/16 [-1, 1, MobileNetV3_InvertedResidual, [160, 672, 5, 1, 1, 1]], # 13-p4/16 [-1, 1, MobileNetV3_InvertedResidual, [160, 960, 5, 2, 1, 1]], # 14-p5/32 原672改为原算法960 [-1, 1, MobileNetV3_InvertedResidual, [160, 960, 5, 1, 1, 1]], # 15-p5/32 ]

结 果:本人在多个数据集上做了大量实验,针对不同的数据集效果不同,map值有所下降,但是权值模型大小降低,参数量下降。

预告一下:下一篇内容将继续分享网络轻量化方法的分享。有兴趣的朋友可以关注一下我,有问题可以留言或者私聊我哦

PS:干网络的替换不仅仅是适用改进YOLOv5,也可以改进其他的YOLO网络以及目标检测网络,比如YOLOv4、v3等。

最后,希望能互粉一下,做个朋友,一起学习交流。

本文链接地址:https://www.jiuchutong.com/zhishi/293745.html 转载请保留说明!

上一篇:uniapp制作pc端响应式布局——带开源前端【伸手党福利】【持续更新】(uniapp实战视频教程)

下一篇:麒麟Linux操作系统磁盘策略永久调整为deadline(麒麟软件的linux桌面操作系统)

  • 天猫精灵需要连wifi吗(天猫精灵需要连网吗)

    天猫精灵需要连wifi吗(天猫精灵需要连网吗)

  • 微信怎么发信息给朋友(微信怎么发信息给自己)

    微信怎么发信息给朋友(微信怎么发信息给自己)

  • 三星s20+和华为p40pro对比(三星s20和华为p40选哪个)

    三星s20+和华为p40pro对比(三星s20和华为p40选哪个)

  • 快手发货在途中后可以退款吗(快手发货在途中怎么取消)

    快手发货在途中后可以退款吗(快手发货在途中怎么取消)

  • 免安装版是什么意思(免安装版和安装版哪个好)

    免安装版是什么意思(免安装版和安装版哪个好)

  • iphone保修期内电池损耗多少可以免费换(iphone保修期内电池低于80)

    iphone保修期内电池损耗多少可以免费换(iphone保修期内电池低于80)

  • 为什么钉钉有的人头像上有小鸡(为什么钉钉有的时候消息不提示)

    为什么钉钉有的人头像上有小鸡(为什么钉钉有的时候消息不提示)

  • 手机卡顿闪退是哪里出现了问题(手机卡顿闪退是中病毒了吗)

    手机卡顿闪退是哪里出现了问题(手机卡顿闪退是中病毒了吗)

  • qq一个月亮多长时间(qq一个月亮是几个星星)

    qq一个月亮多长时间(qq一个月亮是几个星星)

  • qq语音通话最多几个人(qq语音通话最多支持多少人)

    qq语音通话最多几个人(qq语音通话最多支持多少人)

  • 抖音里面的变身特效是怎么弄的(抖音里面变身小程序 必须要达到粉丝数吗?)

    抖音里面的变身特效是怎么弄的(抖音里面变身小程序 必须要达到粉丝数吗?)

  • 充新机和靓机什么意思(手机充新和靓机是什么意思)

    充新机和靓机什么意思(手机充新和靓机是什么意思)

  • 为什么微信录音录不了(为什么微信录音功能不能用了)

    为什么微信录音录不了(为什么微信录音功能不能用了)

  • 苹果x可以插几个卡(苹果X可以插几张手机卡)

    苹果x可以插几个卡(苹果X可以插几张手机卡)

  • 米聊怎么加陌生好友(米聊怎么加好友)

    米聊怎么加陌生好友(米聊怎么加好友)

  • 笔记本电脑开机键是哪个(笔记本电脑开机密码忘了怎么解除)

    笔记本电脑开机键是哪个(笔记本电脑开机密码忘了怎么解除)

  • 情侣空间解除了情侣相册会消失吗(情侣空间解除了相册相片还能找回来吗)

    情侣空间解除了情侣相册会消失吗(情侣空间解除了相册相片还能找回来吗)

  • 华为p30数据线型号(华为p30数据线型号是多少)

    华为p30数据线型号(华为p30数据线型号是多少)

  • 联想m7206用什么粉盒(联想m7206用什么型号粉盒)

    联想m7206用什么粉盒(联想m7206用什么型号粉盒)

  • bixby怎么彻底关闭(bixby键关闭在哪设置)

    bixby怎么彻底关闭(bixby键关闭在哪设置)

  • 韩剧tv如何投屏(韩剧tv如何投屏到投影仪)

    韩剧tv如何投屏(韩剧tv如何投屏到投影仪)

  • 对方把你微信拉黑了能收到信息吗(对方把你微信拉黑了显示什么)

    对方把你微信拉黑了能收到信息吗(对方把你微信拉黑了显示什么)

  • 【已解决】Git踩坑笔记[! [remote rejected] main -> main (pre-receive hook declined) error: failed to push some refs to "xxx"](git t)

    【已解决】Git踩坑笔记[! [remote rejected] main -> main (pre-receive hook declined) error: failed to push some refs to "xxx"](git t)

  • phpcms用户登录失败怎么办(php登录不了)

    phpcms用户登录失败怎么办(php登录不了)

  • 小规模增值税会计处理流程
  • 按适用税率征税销售额等于销售收入吗
  • 增值税的专用发票有几联
  • 通货膨胀有什么危害?
  • 员工回家探亲的文案
  • 出口退税正式申报撤销申请
  • 加计扣除企业所得税季报申报
  • 货车的折旧年限怎么算
  • 外贸公司代理出口退税怎么入账
  • 收取不合规发票怎么处理
  • 预算报表分析报告
  • 应计入资产负债表应付利息项目的有
  • 佣金的支付方式主要有什么
  • 房地产开发项目手册备案
  • 售楼部垃圾桶
  • 事业单位利息收入
  • 发行收入要减去股本吗
  • 营改增后不动产出租适用税率
  • 跨季度的发票怎么冲销
  • 农产品增值税优惠政策2021
  • 二手房有不动产统一发票吗
  • 养牛需要活动场地吗
  • 计提厂房租金怎么做账?
  • 分公司注销时有未分配利润需要交税吗
  • 会展服务可以入管理费用的哪个明细费用
  • 预缴税金跨区域涉税在哪查询
  • 如何查看系统浏览器记录
  • windows10出现你的电脑出现问题
  • 销售免费样品账务处理
  • 鸿蒙系统快捷键
  • 建筑企业挂靠违法吗
  • msg3.0.db是什么文件
  • 固定资产一次性扣除后第二年账务处理
  • et.exe进程占用
  • 销售免税农产品进项税可以抵扣吗
  • 微信小程序获取手机号
  • 报错专业了可不可以改
  • 配件买不到
  • 基于车联网
  • 农药免税政策文件有哪些
  • 将织梦dedecms转换到wordpress
  • 进口关税完税价格的计算公式
  • 商家的这些行为对消费者的购买行为有什么影响
  • 公司 用车
  • 免征增值税所得税在申报表中咋填
  • 营业成本和生产费用一样吗
  • 给慈善机构捐款英语
  • 实收资本为零该怎么办
  • 什么是委托检验报告
  • 房租收入怎么确认收入
  • 公司车辆交强险怎么网上买
  • 税务销售滞后是什么意思
  • 外籍人员个税汇算清缴流程
  • 应付账款会计分录例题
  • 应付利润科目
  • 单位组织活动主持词
  • 在建工程的人工费会计分录
  • 购进中央空调可以抵税吗
  • 出纳建账的基本流程
  • sql server删除重复数据保留一条
  • 远程登陆服务器命令
  • ubuntu怎样
  • win7 管理
  • ubuntu静态ip地址
  • Mac怎么去掉开机密码
  • win1020h2更新卡在1
  • secondoption是什么意思
  • 如何修改windows密码策略
  • cocos2djs教程
  • 简述js和jquery的关系
  • js中的函数
  • 重装操作系统后无法开机
  • 各种常用的js函数有哪些
  • js闭包的使用
  • 安卓 centos
  • 国家税务总局全国增值税发票查验平台
  • 四川省地方税务局关于城镇土地使用税困难减免
  • 潍坊市滨海经济开发区属于哪里
  • 广西电子税务局电话人工客服电话
  • 2020年小规模纳税人普票免税政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设