位置: IT常识 - 正文

YOLOV5更换轻量级的backbone:mobilenetV2(yolov5使用)

编辑:rootadmin
YOLOV5更换轻量级的backbone:mobilenetV2

目录

简洁概要:

修改主干网络:

一:添加自己主干网络

二:在yolo.py中添加common中的两个函数

三:制作mobilenetv2的yaml配置文件

四:制作数据集VOC的yaml配置文件

五:启用训练

六:性能检测

推荐整理分享YOLOV5更换轻量级的backbone:mobilenetV2(yolov5使用),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:yolov5 5.0,yolov5轻量化,yolov5商用,yolov5轻量化,yolov5轻量化,yolov5轻量化,yolov5更换backbone,yolov5轻量化,内容如对您有帮助,希望把文章链接给更多的朋友!

简洁概要:

MobileNetV2主要采用了深度可分离卷积,在MobileNetv1的基础上引用了残差模块以及Relu6的激活函数,用1*n,n*1的思想代替了n*n的矩阵,计算量会更小。

修改主干网络:一:添加自己主干网络

yolov5 6.1的版本中,在models/common中添加MobilenetV2作为backbone

class ConvBNReLU(nn.Sequential): # 该函数主要做卷积 池化 ReLU6激活操作 def __init__(self, in_planes, out_planes, kernel_size=3, stride=1, groups=1): padding = (kernel_size - 1) // 2 # 池化 = (步长-1)整除2 super(ConvBNReLU, self).__init__( # 调用ConvBNReLU父类添加模块 nn.Conv2d(in_planes, out_planes, kernel_size, stride, padding, bias=False, groups=groups), # bias默认为False nn.BatchNorm2d(out_planes), nn.ReLU6(inplace=True))class InvertedResidual(nn.Module): # 该模块主要实现了倒残差模块 def __init__(self, inp, oup, stride, expand_ratio): # inp 输入 oup 输出 stride步长 exoand_ratio 按比例扩张 super(InvertedResidual, self).__init__() self.stride = stride assert stride in [1, 2] hidden_dim = int(round(inp * expand_ratio)) # 由于有到残差模块有1*1,3*3的卷积模块,所以可以靠expand_rarton来进行升维 self.use_res_connect = self.stride == 1 and inp == oup # 残差连接的判断条件:当步长=1且输入矩阵与输出矩阵的shape相同时进行 layers = [] if expand_ratio != 1: # 如果expand_ratio不等于1,要做升维操作,对应图中的绿色模块 # pw layers.append(ConvBNReLU(inp, hidden_dim, kernel_size=1)) # 这里添加的是1*1的卷积操作 layers.extend([ # dw ConvBNReLU(hidden_dim, hidden_dim, stride=stride, groups=hidden_dim), # 这里做3*3的卷积操作,步长可能是1也可能是2,groups=hidden_dim表示这里使用了分组卷积的操作,对应图上的蓝色模块 # pw-linear nn.Conv2d(hidden_dim, oup, 1, 1, 0, bias=False), # 对应图中的黄色模块 nn.BatchNorm2d(oup), ]) self.conv = nn.Sequential(*layers) # 将layers列表中的元素解开依次传入nn.Sequential def forward(self, x): if self.use_res_connect: # 如果使用了残差连接,就会进行一个x+的操作 return x + self.conv(x) else: return self.conv(x) # 否则不做操作二:在yolo.py中添加common中的两个函数if m in (Conv, GhostConv, Bottleneck, GhostBottleneck, SPP, SPPF, DWConv, MixConv2d, Focus, CrossConv, BottleneckCSP, C3, C3TR, C3SPP, C3Ghost, nn.ConvTranspose2d, DWConvTranspose2d, C3x, ConvBNReLU, InvertedResidual): # 添加 common中新加的两个模块 ConvBNReLU和InvertedResidual三:制作mobilenetv2的yaml配置文件# Parametersnc: 1 # number of classesdepth_multiple: 1.0 # model depth multiplewidth_multiple: 1.0 # layer channel multipleanchors: - [ 10,13, 16,30, 33,23 ] # P3/8 - [ 30,61, 62,45, 59,119 ] # P4/16 - [ 116,90, 156,198, 373,326 ] # P5/32# YOLOv5 v6.0 backbonebackbone: # [from, number, module, args] [ [ -1, 1, Conv, [ 32, 3, 2 ] ], # 0-P1/2 32x320x320 [ -1, 1, InvertedResidual, [ 16, 1, 1 ] ], # 1 16x320x320 [ -1, 1, InvertedResidual, [ 24, 2, 6 ] ], # 2-P2/4 24x160x160 [ -1, 1, InvertedResidual, [ 24, 1, 6 ] ], # 3-P2/4 24x160x160 [ -1, 1, InvertedResidual, [ 32, 2, 6 ] ], # 4-P3/8 32x80x80 [ -1, 1, InvertedResidual, [ 32, 1, 6 ] ], # 5-P3/8 32x80x80 [ -1, 1, InvertedResidual, [ 32, 1, 6 ] ], # 6-P3/8 32x80x80 [ -1, 1, InvertedResidual, [ 64, 2, 6 ] ], # 7-P4/16 64x40x40 [ -1, 1, InvertedResidual, [ 64, 1, 6 ] ], # 8-P4/16 64x40x40 [ -1, 1, InvertedResidual, [ 64, 1, 6 ] ], # 9-P4/16 64x40x40 [ -1, 1, InvertedResidual, [ 64, 1, 6 ] ], # 10-P4/16 64x40x40 [ -1, 1, InvertedResidual, [ 96, 1, 6 ] ], # 11 96X40X40 [ -1, 1, InvertedResidual, [ 96, 1, 6 ] ], # 12 96X40X40 [ -1, 1, InvertedResidual, [ 96, 1, 6 ] ], # 13 96X40X40 [ -1, 1, InvertedResidual, [ 160, 2, 6 ] ], # 14-P5/32 160X20X20 [ -1, 1, InvertedResidual, [ 160, 1, 6 ] ], # 15-P5/32 160X20X20 [ -1, 1, InvertedResidual, [ 160, 1, 6 ] ], # 16-P5/32 160X20X20 [ -1, 1, InvertedResidual, [ 320, 1, 6 ] ], # 17 320X20X20 ]# YOLOv5 v6.0 headhead: [ [ -1, 1, Conv, [ 160, 1, 1 ] ], [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], [ [ -1, 13 ], 1, Concat, [ 1 ] ], # cat backbone P4 [ -1, 1, C3, [ 160, False ] ], # 21 [ -1, 1, Conv, [ 80, 1, 1 ] ], [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], [ [ -1, 6 ], 1, Concat, [ 1 ] ], # cat backbone P3 [ -1, 1, C3, [ 80, False ] ], # 25 (P3/8-small) [ -1, 1, Conv, [ 80, 3, 2 ] ], [ [ -1, 22 ], 1, Concat, [ 1 ] ], # cat head P4 [ -1, 1, C3, [ 160, False ] ], # 28 (P4/16-medium) [ -1, 1, Conv, [ 160, 3, 2 ] ], [ [ -1, 18 ], 1, Concat, [ 1 ] ], # cat head P5 [ -1, 1, C3, [ 320, False ] ], # 31 (P5/32-large) [ [ 25, 28, 31 ], 1, Detect, [ nc, anchors ] ], # Detect(P3, P4, P5) ]四:制作数据集VOC的yaml配置文件# YOLOv5 by Ultralytics, GPL-3.0 license# PASCAL VOC dataset ' # old img path lb_path = (lbs_path / f.name).with_suffix('.txt') # new label path f.rename(imgs_path / f.name) # move image convert_label(path, lb_path, year, id) # convert labels to YOLO format五:启用训练

由于修改了网络所以不能加载预训练模型进行

预训练模型的作用:加快模型训练初期的超参数训练时间

YOLOV5更换轻量级的backbone:mobilenetV2(yolov5使用)

weights修改为空

cfg修改为自己网络模型的配置文件

data修改为自己VOC数据集的配置文件

六:性能检测

修改val.py的参数,与上一步一致

这里分别用了V5s,V5n,以及mobilenetV2分别做了150批次训练来对比

mobilenetV2

 V5s

 V5n

对比可以发现 V5n与mobilenetV2的相差并不大,相比较于这两个模型,V5s的精度稍微高一些,但是它模型的复杂度会略微大一丢丢,推理时间略大一点。

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

上一篇:X-Frame-Options简介(next frame)

下一篇:html表白代码(html表白代码动态)

  • vivo怎么看屏幕使用时间(vivo怎么看屏幕分辨率)

    vivo怎么看屏幕使用时间(vivo怎么看屏幕分辨率)

  • 小米civi跑分

    小米civi跑分

  • word怎么分左右两栏(word怎么分左右两边)

    word怎么分左右两栏(word怎么分左右两边)

  • 在中国移动上积分兑换的东西怎么查询(在中国移动上积分怎么兑换话费)

    在中国移动上积分兑换的东西怎么查询(在中国移动上积分怎么兑换话费)

  • iphone已停用连接itunes怎么解锁教程(iphone已停用连接iTunes什么意思)

    iphone已停用连接itunes怎么解锁教程(iphone已停用连接iTunes什么意思)

  • iphonex盒子里的耳机怎么用(iphone x的盒子)

    iphonex盒子里的耳机怎么用(iphone x的盒子)

  • 为什么芒果TV突然没弹幕(为什么芒果TV突然没有弹幕)

    为什么芒果TV突然没弹幕(为什么芒果TV突然没有弹幕)

  • 2g,3g,4g,5g是什么意思(直观2g,3g,4g,5g的区别)

    2g,3g,4g,5g是什么意思(直观2g,3g,4g,5g的区别)

  • 移动网络不好(移动网络不好使打哪个电话投诉)

    移动网络不好(移动网络不好使打哪个电话投诉)

  • 微信有红点但是没有消息(微信有红点但是没有消息如何清除)

    微信有红点但是没有消息(微信有红点但是没有消息如何清除)

  • 抖音和tiktok什么关系(tiktok与抖音的区别)

    抖音和tiktok什么关系(tiktok与抖音的区别)

  • 腾讯视频卡顿怎么回事(腾讯视频卡顿怎么变流畅)

    腾讯视频卡顿怎么回事(腾讯视频卡顿怎么变流畅)

  • 二极管具有什么导电特性(二极管具有什么导电性)

    二极管具有什么导电特性(二极管具有什么导电性)

  • 电脑16g和32g的区别(电脑16g内存和32g内存差多少钱)

    电脑16g和32g的区别(电脑16g内存和32g内存差多少钱)

  • ip地址位数代表多少(ip地址位数代表什么)

    ip地址位数代表多少(ip地址位数代表什么)

  • 喵喵机如何异地传纸条(喵喵机怎么异地传纸条)

    喵喵机如何异地传纸条(喵喵机怎么异地传纸条)

  • 如何调闹钟铃声大小(如何调闹钟铃声音量)

    如何调闹钟铃声大小(如何调闹钟铃声音量)

  • 天猫与淘宝的区别(天猫淘宝的区别)

    天猫与淘宝的区别(天猫淘宝的区别)

  • 搜索历史为啥老关闭(搜索历史为什么打不开)

    搜索历史为啥老关闭(搜索历史为什么打不开)

  • 拼多多显示拼单怎么弄(拼多多显示拼单成功)

    拼多多显示拼单怎么弄(拼多多显示拼单成功)

  • 为什么oppor9s不会闪充(oppor9s为什么不能下载软件)

    为什么oppor9s不会闪充(oppor9s为什么不能下载软件)

  • 怎么分辨苹果x是不是原装屏幕(怎么分辨苹果X手机屏幕是原装的?)

    怎么分辨苹果x是不是原装屏幕(怎么分辨苹果X手机屏幕是原装的?)

  • 淘宝托管运营有效果吗(网店淘宝代运营托管)

    淘宝托管运营有效果吗(网店淘宝代运营托管)

  • 最早的光学变焦拍照手机是什么(目前光学变焦最大支持多少倍)

    最早的光学变焦拍照手机是什么(目前光学变焦最大支持多少倍)

  • 【HTML5】调查问卷制作简约版(html调查问卷简单代码)

    【HTML5】调查问卷制作简约版(html调查问卷简单代码)

  • 支付给境外个人的租金
  • 房产税的税收优惠政策
  • 小规模在税务局开的专票已交税,如何在税务平台申报
  • 入股资金打进公司帐户要交税吗
  • 怎么查企业适用哪个会计制度教学视频
  • 资产处置收益计入利润总额吗
  • 结转损益管理费用在借方
  • 代开的专用发票如何开具红字发票
  • 计算土地增值税时增值税可以扣除吗
  • 控股股权转让
  • 出口退税的原则是什么
  • 自制半成品具体如何处理账务?
  • 一个订单只能申请一次退款吗
  • 国税里发票采集中的税控机动车发票是指什么发票?
  • 一般纳税人年审证明
  • 固定资产折旧方法可以变更吗
  • 企业收入准则的主要内容
  • 现金流量表附表的其他指的是什么
  • 对外投资的风险及对策
  • 年报弥补以前年度亏损了还需要填107040表吗
  • 递延所得税怎么产生
  • 个体户经营所得核定税率
  • 预提保障金和交税的区别
  • 微信提现收取手续费多少钱
  • 个体工商户起征点10万执行时间
  • kali linux安装kde桌面
  • mac outlook怎么设置邮箱签名
  • 查看电脑开机时间记录win10
  • 细说php
  • php数组函数输出《咏雪》里有多少"片"字
  • 实物折扣例题
  • jinjia.exe进程
  • vue项目上线教程
  • PHP:mcrypt_module_get_supported_key_sizes()的用法_Mcrypt函数
  • 柏林亚历山大广场1980
  • php 延迟
  • 存货什么时候计提什么时候回转
  • 残保金解决方案
  • 劳务公司企业所得税税负率
  • 精选100个Python实战项目案例,送给缺乏实战经验的你
  • tr命令详解
  • 单位收到投标保证金会计分录
  • 如何计提所得税费用科目
  • 税务局开普票需要什么材料
  • wordpress加速
  • 事业单位回复短信里的加号要吗
  • 二房东可以卖房吗
  • 单位销售收入不包括哪些
  • 怎么计算利润的百分比
  • 工程服务费会计怎么做账
  • 社保费单位减免
  • 货款发票如何入账
  • 进项认证怎么算
  • 暂不认证通知单 不在认证范围内
  • 计提本月应交增值税
  • 支付投资者投入的款项
  • 工程施工的主要事迹
  • 境外机构境内外汇账户管理办法
  • centos6.2安装
  • mysql 多表联合更新
  • mac怎么安装字体到ai
  • windows 8.1更新
  • 禁止windows安装程序
  • u盘背景图片设置方法
  • mssecsvc是什么进程
  • 怎么在win7系统看蓝牙
  • win10桌面图标排列设置
  • 内存一次性读多少字节
  • nodejs静态编译
  • div如何排版
  • android图片库
  • 命令行输入以下哪个命令可以画出样条曲线
  • jQuery实现textarea自动增长宽高的方法
  • unity3d基本操作
  • Ubuntu、Linux Mint一键安装Chrome浏览器的Shell脚本分享
  • 深入探讨英文
  • UNITE 2015 TAIPEI 五大系列重要議題搶鮮看!
  • js动态设置css样式
  • Javascript字符串对象函数
  • 如何查询票据真伪信息
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设