位置: 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表白代码动态)

  • hi nova9有nfc功能吗(nova 9 nfc)

    hi nova9有nfc功能吗(nova 9 nfc)

  • 荣耀X30i是双扬声器吗(荣耀x30i测评)

    荣耀X30i是双扬声器吗(荣耀x30i测评)

  • 网易邮箱格式怎么写(网易邮箱格式怎么改)

    网易邮箱格式怎么写(网易邮箱格式怎么改)

  • 手机怎么能赚钱(手机怎么能赚钱最快的是什么)

    手机怎么能赚钱(手机怎么能赚钱最快的是什么)

  • 华为freebuds3有线和无线的区别(华为freebuds3有线版和无线版有什么区别)

    华为freebuds3有线和无线的区别(华为freebuds3有线版和无线版有什么区别)

  • 华为mate30首次充电要充多久(华为mate30pro5g第一次充电)

    华为mate30首次充电要充多久(华为mate30pro5g第一次充电)

  • 电脑进水黑屏还有救吗(电脑进水后黑屏,好了之后咋又黑了)

    电脑进水黑屏还有救吗(电脑进水后黑屏,好了之后咋又黑了)

  • 罗技键盘大写按哪个键(罗技k380键盘大写)

    罗技键盘大写按哪个键(罗技k380键盘大写)

  • 中继器工作在那一层(中继器功能)

    中继器工作在那一层(中继器功能)

  • qmv用什么打开(怎么打开qmcflac格式音乐)

    qmv用什么打开(怎么打开qmcflac格式音乐)

  • OPPO手机卡一卡二移动数据怎么切换(oppo手机卡一卡二怎么切换流量)

    OPPO手机卡一卡二移动数据怎么切换(oppo手机卡一卡二怎么切换流量)

  • 苹果内外屏必须一起换吗(iphone外屏有必要换原装的吗)

    苹果内外屏必须一起换吗(iphone外屏有必要换原装的吗)

  • 原彩显示省电还是费电(原彩显示省电还是闪充)

    原彩显示省电还是费电(原彩显示省电还是闪充)

  • 快手怎么找本地作品集(快手怎么找本地作品视频)

    快手怎么找本地作品集(快手怎么找本地作品视频)

  • 抖音最多可以关注多少人(抖音最多可以关注10000人)

    抖音最多可以关注多少人(抖音最多可以关注10000人)

  • 手机左上角显示hd是什么意思怎么关闭(手机左上角显示hd是什么意思)

    手机左上角显示hd是什么意思怎么关闭(手机左上角显示hd是什么意思)

  • 手机屏幕有划痕还能贴膜吗(手机屏幕有划痕怎么修复)

    手机屏幕有划痕还能贴膜吗(手机屏幕有划痕怎么修复)

  • 快速清理电脑垃圾用什么命令(如何快速清理电脑垃圾让电脑流畅)

    快速清理电脑垃圾用什么命令(如何快速清理电脑垃圾让电脑流畅)

  • 怎么回到电脑桌面(怎么样回到电脑桌面)

    怎么回到电脑桌面(怎么样回到电脑桌面)

  • 苹果11有128g吗(苹果11有128的内存吗)

    苹果11有128g吗(苹果11有128的内存吗)

  • 小米平板4打电话教程(小米平板4打电话破解)

    小米平板4打电话教程(小米平板4打电话破解)

  • 拼多多怎么获得幸运码(拼多多怎么获得优惠券)

    拼多多怎么获得幸运码(拼多多怎么获得优惠券)

  • 步数宝新手区补货时间(步数宝靠什么盈利)

    步数宝新手区补货时间(步数宝靠什么盈利)

  • 华为相册图片更改顺序(华为手机更改相片存储位置)

    华为相册图片更改顺序(华为手机更改相片存储位置)

  • 花呗周卡怎么关闭(如何关闭花呗周周省)

    花呗周卡怎么关闭(如何关闭花呗周周省)

  • win7系统把桌面背景设置成绿豆色,保护眼睛的方法(win7系统把桌面更改为d盘)

    win7系统把桌面背景设置成绿豆色,保护眼睛的方法(win7系统把桌面更改为d盘)

  • Transformers 库的基本使用(transformers document)

    Transformers 库的基本使用(transformers document)

  • Vue使用pdf-lib为文件流添加水印并预览(vue显示pdf)

    Vue使用pdf-lib为文件流添加水印并预览(vue显示pdf)

  • 建筑业购买材料计入什么科目
  • 取得的高速公路发票可以抵扣吗
  • 产业增加值就是增长率吗
  • 供电车间工人薪酬计入什么科目
  • 疫情期间发生的费用进什么科目
  • 为什么应交增值税记在借方
  • 个人往对公账户上存款怎么存
  • 印花税自查补缴要先申报吗
  • 存货清查的目的,主要是进行总账和明细账
  • 其他综合收益在利润表的哪个位置哪里
  • 工厂员工饭票制度
  • 验资取消股东怎么办
  • 公司注销欠法人款怎么帐务处理?
  • 递延所得税资产和负债怎么理解
  • 水产类账目怎么做
  • 企业新增股东
  • 不动产增值税计算公式
  • 单位价值5000元二手设备怎么算
  • php字符串型数据的定义方式
  • PHP:shell_exec()的用法_命令行函数
  • PHP:mcrypt_list_modes()的用法_Mcrypt函数
  • php如何实现登录和注册
  • yolov5m
  • php rest api
  • 低值易耗品报废时有残料价值收回的应冲减当月成本费用
  • php socket_select
  • 前端实现微信联系人二维码
  • 跨省不动产登记
  • 【第十一届“泰迪杯”数据挖掘挑战赛】B题产品订单的数据分析与需求预测“解题思路“”以及“代码分享”
  • 浅水滩怎么样
  • 深入理解计算机系统 第三版 pdf
  • 持续ping ip的命令
  • 营业外支出贷方在利润表怎么体现
  • 《中华人民共和国治安管理处罚法》
  • access导入到mysql
  • 资本公积可以转增资本因此称之为准资本
  • 厂房房租发票
  • 哪些情况需要开具无违法犯罪证明
  • 财务费用的内容包括哪些
  • 个人所得税累计收入怎么算
  • 资本公积含义
  • 企业所得税纳税申报表
  • 所得税费用是会计科目吗
  • 公司开业装修费会计分录
  • 企业库存现金的限额是
  • 设备融资租赁如何算综合利率
  • 实收资本印花税最新政策2023年
  • 逾期交房违约金 已支付金额
  • 暂估入账的固定资产
  • 社保缴费基数如何核定
  • 长期股权投资稀释股权
  • 一次摊销法的账务处理
  • 餐饮行业纸巾入库流程
  • 滴滴出行怎么开纸质发票
  • mysql5.7版本下载
  • 存储过程怎么理解
  • Tech Ed 2008:HPC Server 2008讲解
  • macOS 10.12 Beta 7更新了什么 macOS 10.12 Beta7更新内容汇总
  • linux中磁盘分区
  • win7宽带连接错误651怎么办
  • gcuservice.exe
  • windows8连wifi
  • win10系统样子
  • win10如何打开ie8
  • 卡带测评
  • node.js连接mysql的数据怎么可视化
  • 分区工具怎么取消主分区
  • div display inline-block
  • 非递归与递归
  • android FileNotFoundException(Is a Directory)解决办法
  • javascript 基础
  • python组合运算
  • java stringapi
  • javascript编程基础
  • Android音乐播放器评论功能怎么实现
  • 小规模无票收入怎么报税
  • 全国砂石供应紧缺
  • 电子税务局网页版
  • 个人所得税app可以更改电话号码吗
  • 印花税会计分录怎么做 印花税需要计提吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设