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

  • 怎样增加微信公众号粉丝(怎样增加微信公众号阅读量)

    怎样增加微信公众号粉丝(怎样增加微信公众号阅读量)

  • elasticsearch安装教程(elasticsearch安装ik分词器)

    elasticsearch安装教程(elasticsearch安装ik分词器)

  • 抖音时空旅行多少抖币(抖音时空旅行多少票可以买)

    抖音时空旅行多少抖币(抖音时空旅行多少票可以买)

  • 手机的imei码可以告诉别人吗(手机的imei码可以造访机吗)

    手机的imei码可以告诉别人吗(手机的imei码可以造访机吗)

  • 苹果11微信视频黑屏怎么回事(苹果11微信视频悬浮窗怎么设置)

    苹果11微信视频黑屏怎么回事(苹果11微信视频悬浮窗怎么设置)

  • bilibili手机怎么发高级弹幕(哔哩哔哩手机怎么缓存视频)

    bilibili手机怎么发高级弹幕(哔哩哔哩手机怎么缓存视频)

  • 淘宝店铺会员无法删除(淘宝店铺会员无法退出显示业务繁忙)

    淘宝店铺会员无法删除(淘宝店铺会员无法退出显示业务繁忙)

  • 苹果能应用分身不(苹果如何应用分身)

    苹果能应用分身不(苹果如何应用分身)

  • 物联网专用卡在手机上怎么用(物联网专用卡在哪里办)

    物联网专用卡在手机上怎么用(物联网专用卡在哪里办)

  • 拼多多精品推荐消除(拼多多精品推荐内容怎么换)

    拼多多精品推荐消除(拼多多精品推荐内容怎么换)

  • windows激活是什么意思(激活windows是干嘛的)

    windows激活是什么意思(激活windows是干嘛的)

  • gps沒打开能定位吗(手机gps不打开是否会显示位置)

    gps沒打开能定位吗(手机gps不打开是否会显示位置)

  • vivo蓝牙耳机怎么接电话(vivo蓝牙耳机怎么连接苹果手机)

    vivo蓝牙耳机怎么接电话(vivo蓝牙耳机怎么连接苹果手机)

  • 手机网盘怎么用(手机网盘怎么用二维码登陆)

    手机网盘怎么用(手机网盘怎么用二维码登陆)

  • 手机音乐怎么传到mp3(手机音乐怎么传到OTG)

    手机音乐怎么传到mp3(手机音乐怎么传到OTG)

  • 低数据模式是啥意思(低数据模式开与不开的区别)

    低数据模式是啥意思(低数据模式开与不开的区别)

  • 电视无wifi怎么投屏(电视机无wifi)

    电视无wifi怎么投屏(电视机无wifi)

  • 华为放大器怎么设置(华为放大器怎么恢复出厂设置)

    华为放大器怎么设置(华为放大器怎么恢复出厂设置)

  • 闪充对手机有什么影响(闪充对手机的坏处)

    闪充对手机有什么影响(闪充对手机的坏处)

  • oppo手机在哪看运行内存(oppo手机在哪看内存占用)

    oppo手机在哪看运行内存(oppo手机在哪看内存占用)

  • class10以上的sd卡是什么意思(class10以上的sd卡有哪些)

    class10以上的sd卡是什么意思(class10以上的sd卡有哪些)

  • acer笔记本如何使用tplink桥接【方法步骤】(acer笔记本如何关闭键盘数字键)

    acer笔记本如何使用tplink桥接【方法步骤】(acer笔记本如何关闭键盘数字键)

  • python中Allure框架是什么?(python框架的作用)

    python中Allure框架是什么?(python框架的作用)

  • 免税收入对应的成本费用可以扣除吗
  • 计入职工福利费的有哪些
  • 什么是抄报税成功
  • 海关缴款通知书在哪里查询
  • 怎么看运费
  • 车辆固定资产的入账价值
  • 房地产企业拆迁补偿契税政策
  • 出口退税新旧申报
  • 长期借款费用会减少吗
  • 小规模增值税做那个费用科目
  • 销售退回的货物应当由什么部门清点
  • 所得税汇算清缴退税会计分录怎么做
  • 出售闲置的材料物资
  • 银行 收美金
  • 为在建工程发生的管理费用
  • 招标代理公司转让
  • 境内货代公司之间付美金
  • 外币报表折算差额在会计报表中应作为
  • 给不是本单位的人开证明
  • 自然人独资属于个体工商户吗?
  • 一般纳税人的资质在哪里打印
  • 机动车销售发票如何补开?
  • 小微企业贷款利息补贴
  • 给外国教授发邮件最后一句
  • 预征率3%
  • 事业单位财务预算管理制度
  • 准备购买材料会计分录
  • 本月暂估成本的会计分录
  • 兼职人员工资如何扣税
  • 销售折扣的会计分录处理
  • 用科目汇总表怎么登记总账
  • php getdate
  • 报销差旅费会计凭证
  • 科托儿古城
  • 合伙企业分配股票给合伙人
  • 老生常谈含义
  • php判断是否为字母
  • 暂估金额与发票金额会影响什么信息
  • flask框架入门
  • 帝国cms移动端
  • 哪些费用计入管理费用中
  • 物料最低库存
  • 销售黄金的会计分录
  • 汇算清缴期间费用保险费是什么
  • 如何用ps做半圆
  • 有趣的 Go HttpClient 超时机制
  • php生成器和迭代器理解
  • 公司用印制度
  • 高速公路通行发票税率
  • 变更税务法人需提供银行流水吗
  • 小微企业金融免税政策
  • 代扣代缴公积金现金流量
  • 商贸企业发出商品怎么确认收入
  • 冲红发票如何做账务处理
  • 未开票收入如何计提增值税
  • 交易性金融资产入账价值怎么计算
  • 租户押金抵房租
  • 人力资源服务费是什么意思
  • 发票怎么保管不会坏
  • 主营业务收入多栏式明细账怎么登
  • sql语句错误提示
  • MySQL利用不同的流程语句输出1到200的和
  • sqlserver判断数据库是否存在
  • mac设置outlook默认邮箱
  • win10怎么显示磁盘已用空间
  • win8关闭uac
  • unity摄像机怎么调出来
  • sqlserver 服务器
  • 如何用jquery
  • javascript基于什么的语言
  • jquery简单例子
  • js的异步解决方案有哪些
  • [置顶]游戏名 TentacleLocker
  • java项目怎么变成web项目
  • js实现文本框输入功能
  • python框架flask系列
  • 按照5%的征收率减按1.5%
  • 为什么登录不了福建社保网站
  • 电子税务局都能完成哪些功能
  • 原始股卖出多少需要披露
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设