位置: IT常识 - 正文

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

发布时间:2024-01-15
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表白代码动态)

  • excel表格rank函数怎么用(excel表格rank函数怎么使用)

    excel表格rank函数怎么用(excel表格rank函数怎么使用)

  • 华为mate30pro屏幕刷新率是60Hz吗(华为mate30pro屏幕厂家)

    华为mate30pro屏幕刷新率是60Hz吗(华为mate30pro屏幕厂家)

  • 抖音号怎么隐藏起来(抖音号怎么隐藏IP地址)

    抖音号怎么隐藏起来(抖音号怎么隐藏IP地址)

  • 酷派手机开不了机怎么办(酷派手机开不了机闪烁灯亮)

    酷派手机开不了机怎么办(酷派手机开不了机闪烁灯亮)

  • u盘可以直接从电脑上拔下来吗(u盘可以直接从手机上拔出来吗)

    u盘可以直接从电脑上拔下来吗(u盘可以直接从手机上拔出来吗)

  • 微信扫码收钱为什么没积分(微信扫码收钱为什么限额)

    微信扫码收钱为什么没积分(微信扫码收钱为什么限额)

  • 手机关机qq电话能打通吗(手机关机qq电话会断吗)

    手机关机qq电话能打通吗(手机关机qq电话会断吗)

  • wps怎么把几个文件放在一个文件夹(wps怎么把几个文档合并一个文档里面)

    wps怎么把几个文件放在一个文件夹(wps怎么把几个文档合并一个文档里面)

  • 如何辨别att和s版(怎么分辨at和amt)

    如何辨别att和s版(怎么分辨at和amt)

  • 电子面单信息错误导致错发是什么意思(电子面单信息错误怎么改)

    电子面单信息错误导致错发是什么意思(电子面单信息错误怎么改)

  • 苹果售后为什么不能换外屏(苹果售后为什么叫天音)

    苹果售后为什么不能换外屏(苹果售后为什么叫天音)

  • iphonexr和11手机壳通用吗(iphonexr和ihone11)

    iphonexr和11手机壳通用吗(iphonexr和ihone11)

  • 微信一年提现限额多少(微信一年提现限制)

    微信一年提现限额多少(微信一年提现限制)

  • 手机粘贴不了怎么回事(手机没办法粘贴)

    手机粘贴不了怎么回事(手机没办法粘贴)

  • 剪映怎么上传音乐(剪映怎么上传音乐到音乐库)

    剪映怎么上传音乐(剪映怎么上传音乐到音乐库)

  • set协议的目标(set协议要达到的目标)

    set协议的目标(set协议要达到的目标)

  • 钉钉在哪写入职信息(钉钉填入职信息)

    钉钉在哪写入职信息(钉钉填入职信息)

  • 微信可以一键删好友吗(微信可以一键删除全部朋友圈吗)

    微信可以一键删好友吗(微信可以一键删除全部朋友圈吗)

  • 门机变频器怎么调试(门机变频器怎么买)

    门机变频器怎么调试(门机变频器怎么买)

  • 抖音为什么看不到别人的喜欢(抖音为什么看不了直播了)

    抖音为什么看不到别人的喜欢(抖音为什么看不了直播了)

  • x27摄像头怎么升降(x27摄像头是升降的吗)

    x27摄像头怎么升降(x27摄像头是升降的吗)

  • 8p玩王者不流畅原因(苹果8p玩王者越来越卡)

    8p玩王者不流畅原因(苹果8p玩王者越来越卡)

  • 全民k歌屏蔽对方私信对方知道吗(全民k歌可以屏蔽人不让他听吗)

    全民k歌屏蔽对方私信对方知道吗(全民k歌可以屏蔽人不让他听吗)

  • amdcpu怎么看型号(amdcpu怎样看型号)

    amdcpu怎么看型号(amdcpu怎样看型号)

  • createcd50.exe是一个安全的进程吗 createcd50进程查询(createrectrgn)

    createcd50.exe是一个安全的进程吗 createcd50进程查询(createrectrgn)

  • 销项税减去进项税
  • 农产品普票进项税抵扣怎么做账
  • 以物抵债需要缴纳之前欠的税吗?
  • 自产自用应税消费品的消费税,其纳税环节
  • 酒销售账务处理
  • 在没有进项票的情况下可以开销售票出去么
  • 汇算清缴退回的所得税
  • 过路费是来回收费还是单向
  • 印花税申报表怎么填写
  • 可供出售金融资产会计处理
  • 企业为什么要进行环境分析
  • 固定资产盘盈盘亏的会计科目
  • 业务招待费扣除比例
  • 个人给公司垫付款起诉状
  • 到账的钱还能退回去吗
  • 个税中的其他所得税
  • 公司租赁厂房开几个点发票
  • 递延所得税费用影响净利润吗
  • 建筑企业在增值税方面新出台的政策
  • 三证合一后怎么看税号
  • 月工资3000元,工伤7级能赔偿多少钱
  • 存货跌价准备转销账务处理
  • 所得税的税率有哪几种
  • 水电费计提和冲销
  • 地方教育费附加计入什么科目
  • 付款方付款的发票税金能入账吗?
  • 企业所得税是怎么来的?
  • 赔偿给客户的钱抵扣货款的会计分录
  • win7系统中回收站的内容清空后还能恢复吗
  • 俄勒冈州邮编
  • 曼哈顿公园大道432号
  • 精灵烟囱的形态判断
  • 注销公司的处理方式
  • ajax调用
  • 新必应申请使用资格
  • 预算会计的核算对象是什么
  • 资产负债表各项目的填列依据是
  • python generation
  • 生产费用在完工产品和在产品之间的方法
  • 暂缓收缴工会经费申请
  • 关于企业停工停产期间的工资支付有关规定
  • 月收入一万该怎么说
  • 免税农产品发票需要勾选吗
  • 代理费属于
  • 核定征收和查账征收可以自己选择吗
  • 烟丝缴纳消费税计算
  • 水电费分割单能报销吗
  • 子公司将股权转让给父公
  • 营改增后服务业账务处理
  • 房产契税一般什么时间交
  • 定期存款账务怎么处理
  • 劳动局仲裁花钱吗
  • 低值易耗品入账
  • 往年附加税退税怎么做
  • 什么是开办费包括
  • 小规模汽车维修管理制度
  • 微软10月已停止服务中国用户
  • ubuntu /opt
  • VMware虚拟机安装Android系统
  • win10怎么自定义壁纸
  • mac怎么切换输入法
  • linux中ls命令的功能
  • win10关闭defender方法
  • win8 ui
  • win7如何清理c盘空间不影响系统
  • jquery 设置和返回元素属性
  • python生成密钥
  • 微信内置浏览器怎么清除缓存
  • 安卓监听事件
  • JavaScript中的this指向
  • android 加载更多
  • javascript数据结构与算法
  • jquery做菜单
  • 实现断点续传的工具软件
  • [推荐]抖音上那些好看的视频和有才的帐号
  • 安家费购房补贴区别
  • 随子女定居外省好吗
  • 2023年新乡契税补贴政策
  • 实名办税有什么作用
  • 环保税申报操作手册
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号