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

  • 华为p40pro不是2K屏的吗(华为p40pro不是双卡5g)

    华为p40pro不是2K屏的吗(华为p40pro不是双卡5g)

  • 无法访问函数不正确是怎么回事(无法访问函数不正确 光驱)

    无法访问函数不正确是怎么回事(无法访问函数不正确 光驱)

  • 太阳能电子秤要晒多久(家用太阳能电子秤坏了怎么修)

    太阳能电子秤要晒多久(家用太阳能电子秤坏了怎么修)

  • 蓝牙耳机听歌能听多久(蓝牙耳机听歌能听见生音,为啥接电话听不见生音)

    蓝牙耳机听歌能听多久(蓝牙耳机听歌能听见生音,为啥接电话听不见生音)

  • 华为nova7耳机怎么用(华为nova7耳机怎么插)

    华为nova7耳机怎么用(华为nova7耳机怎么插)

  • 4k显示器对显卡的要求(4k显示器对显卡配置的要求)

    4k显示器对显卡的要求(4k显示器对显卡配置的要求)

  • 手机没下载什么东西内存就没了(手机没下载什么软件,为什么储存会满)

    手机没下载什么东西内存就没了(手机没下载什么软件,为什么储存会满)

  • pr无法拖动素材到序列(pr为什么不能拖动视频素材)

    pr无法拖动素材到序列(pr为什么不能拖动视频素材)

  • 苹果11怎么设置指纹登录(苹果11怎么设置悬浮球)

    苹果11怎么设置指纹登录(苹果11怎么设置悬浮球)

  • 电脑硬盘里没东西为什么显示(电脑硬盘里没东西了,为什么还显示有内存)

    电脑硬盘里没东西为什么显示(电脑硬盘里没东西了,为什么还显示有内存)

  • 移动宽带没网络是什么原因(移动宽带没网络怎么办)

    移动宽带没网络是什么原因(移动宽带没网络怎么办)

  • iphonexsmax可以用5g网络吗

    iphonexsmax可以用5g网络吗

  • netware是网络操作系统吗(netsh network)

    netware是网络操作系统吗(netsh network)

  • vivo蓝牙设置在哪里(vivo手机蓝牙在哪里设置)

    vivo蓝牙设置在哪里(vivo手机蓝牙在哪里设置)

  • 京豆怎么转赠(京豆怎么转让赠送)

    京豆怎么转赠(京豆怎么转让赠送)

  • 怎么把软件放在桌面上(怎么把软件放在文件夹里)

    怎么把软件放在桌面上(怎么把软件放在文件夹里)

  • word文档无法修改怎么办(word文档无法修改字体颜色)

    word文档无法修改怎么办(word文档无法修改字体颜色)

  • 把通讯录导到微信上去(怎样把通讯录转到微信列表)

    把通讯录导到微信上去(怎样把通讯录转到微信列表)

  • vivo手机怎么显示流量(vivo手机怎么显示时间和日期)

    vivo手机怎么显示流量(vivo手机怎么显示时间和日期)

  • 闲鱼被禁言怎么取消(闲鱼被禁言怎么聊天)

    闲鱼被禁言怎么取消(闲鱼被禁言怎么聊天)

  • 企业微信如何设置部门(企业微信如何设置打卡规则)

    企业微信如何设置部门(企业微信如何设置打卡规则)

  • 微信封号怎么解除(微信封号怎么解开啊)

    微信封号怎么解除(微信封号怎么解开啊)

  • qq默契好友在哪里(qq好友默契大考验在哪里找)

    qq默契好友在哪里(qq好友默契大考验在哪里找)

  • 手机色彩突然变了(手机色彩突然变成x光一样)

    手机色彩突然变了(手机色彩突然变成x光一样)

  • 微信听语音黑屏(微信听语音黑屏是怎么回事)

    微信听语音黑屏(微信听语音黑屏是怎么回事)

  • 8p怎么录制屏幕视频(8p苹果手机怎么录制屏幕视频)

    8p怎么录制屏幕视频(8p苹果手机怎么录制屏幕视频)

  • rtacct命令  网络统计工具(tracetcp命令)

    rtacct命令 网络统计工具(tracetcp命令)

  • 财务管理税后利息率计算公式
  • 筹资现金流量净额为负说明了什么问题
  • 发票开错对方已抵扣怎么处理
  • 年末增值税需要计提吗
  • 分公司可以独立开银行账户吗
  • 上一年的收入少做账了该怎么调
  • 个税累计扣除项目合计2712.5是什么
  • 进口货物的应纳增值税
  • 煤炭企业补偿费会计分录
  • 增值税申报表更正情况说明怎么写
  • 冲销主营业务收入后导致发生额变大
  • 工程施工企业人工成本最高多少
  • 减免增值税可以税前扣除吗
  • 集团内部企业之间借款利息增值税
  • 视同内销发票重开要带税吗
  • 员工宿舍可以扣除住房租金支出吗
  • 酒店兼营行为的税务处理?
  • 实际利率法是哪一章的知识
  • 小规模纳税人缴纳增值税怎么做账
  • 新版edge浏览器兼容ie
  • 电子税务局发送短信异常是怎么回事
  • win10为什么毛病这么多
  • 应收账款怎么登账
  • 应收账款怎么做分录
  • 企业所得税汇算清缴扣除标准2023
  • 收取违约金如何入账
  • 苹果电脑屏幕键盘怎么去除
  • php 生成缩略图
  • 借条和欠条的区别 法律效力
  • 将债务转为资本的,债务人应当将债权人
  • 投资性房地产减值准备为什么不能转回
  • word下划线怎么延长
  • symfony2.4的twig中date用法分析
  • wordpress转化为html
  • AI:DeepSpeed Chat(一款帮用户训练自己模型的工具且简单/低成本/快 RLHF 训练类ChatGPT高质量大模型)的简介、安装、使用方法之详细攻略
  • vue全家桶介绍
  • vuexy
  • htmlcss导航栏网页
  • 定期定额征收超出3万怎么办
  • 通行费电子发票抵扣填写到附表二的第几栏次
  • 租房发票怎么缴税
  • 一般纳税人季报还是月报
  • 帝国cms视频教程
  • PostgreSQL中关闭死锁进程的方法
  • 季度缴纳企业所得税可以弥补亏损吗
  • 销售返利的会计分录 东奥
  • 建安企业增值税预缴
  • 差额征收的有哪些
  • 公司库存商品科目余额太大怎么办
  • 往来账怎么记账
  • 空调的折旧年限一般是多少年
  • 中介费可以要求退吗
  • 建筑业人工费怎么做账
  • 分公司账务处理需要注意哪些
  • 凭证上的数字金额怎么填
  • Linux/UNIX和Window平台上安装Mysql
  • SQL语句实现表的创建
  • ubuntu安装chia
  • linux中安装软件可使用哪些方式
  • onenotewindows10
  • centos基本操作命令
  • shpc32.exe - shpc32是什么进程 有什么用
  • win7 显示日期
  • gzip与zip
  • win10电脑磁盘损坏
  • win8谷歌浏览器出现无法访问此网站
  • [置顶]游戏名:chivalry2
  • 安卓 截图
  • [置顶]星陨计划
  • python同一层次的语言必须对齐吗
  • 深入理解新发展理念
  • 一次$.getJSON不执行的简单记录
  • 原单位已交社保,新单位怎么办
  • 怎么查询企业的联系方式
  • 滴滴收入统计
  • 增值税发票打印机怎么连接电脑
  • 企业自建厂房在建工程会计账务处理
  • 开电子发票流程步骤
  • 郑州市国家税务局地址在哪里
  • 审计如何配合教师工作
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设