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

  • 怎样玩转免费网页游戏(如何用免费网络)

    怎样玩转免费网页游戏(如何用免费网络)

  • 小爱音响怎么连接电脑(小爱音响怎么连接网络)

    小爱音响怎么连接电脑(小爱音响怎么连接网络)

  • 小米手机屏保怎么设置(小米手机屏保怎么换照片)

    小米手机屏保怎么设置(小米手机屏保怎么换照片)

  • xp系统是不是不能用了

    xp系统是不是不能用了

  • 不能创建对象怎么办(显示不能创建对象怎么办)

    不能创建对象怎么办(显示不能创建对象怎么办)

  • 华为手机怎么p字在图片上(华为手机怎么批量删除联系人)

    华为手机怎么p字在图片上(华为手机怎么批量删除联系人)

  • 抖音怎么拍不了视频了(抖音怎么拍不了同款)

    抖音怎么拍不了视频了(抖音怎么拍不了同款)

  • cad能做什么工作(会画cad能做什么工作)

    cad能做什么工作(会画cad能做什么工作)

  • 手机换了电池还是耗电快(手机换了电池还是发烫)

    手机换了电池还是耗电快(手机换了电池还是发烫)

  • 组装笔记本电脑需要哪些配件(组装笔记本电脑好还是原装好)

    组装笔记本电脑需要哪些配件(组装笔记本电脑好还是原装好)

  • word2010默认的视图是(word2010默认的视图方式)

    word2010默认的视图是(word2010默认的视图方式)

  • qq总被冻结是什么原因(qq总被冻结是什么原因和手机有关系吗)

    qq总被冻结是什么原因(qq总被冻结是什么原因和手机有关系吗)

  • 幻灯片中的备注有什么用(幻灯片中的备注怎么看到)

    幻灯片中的备注有什么用(幻灯片中的备注怎么看到)

  • 闲鱼怎么换东西(闲鱼怎么换东西发货)

    闲鱼怎么换东西(闲鱼怎么换东西发货)

  • 手机播放视频不能横屏是什么原因(手机播放视频不能快进)

    手机播放视频不能横屏是什么原因(手机播放视频不能快进)

  • qzonemusic是什么文件夹(qzonemusic默认在c盘)

    qzonemusic是什么文件夹(qzonemusic默认在c盘)

  • oppo手机锁屏一直出现广告怎么办(oppo手机锁屏一直换图片)

    oppo手机锁屏一直出现广告怎么办(oppo手机锁屏一直换图片)

  • 检查代理服务器和防火墙是什么意思(检查代理服务器和防火墙怎么弄啊)

    检查代理服务器和防火墙是什么意思(检查代理服务器和防火墙怎么弄啊)

  • amd卸载了有影响吗(amd卸载了有影响系统吗)

    amd卸载了有影响吗(amd卸载了有影响系统吗)

  • iphonexr好久上市的(iphonexr多久出的)

    iphonexr好久上市的(iphonexr多久出的)

  • 8p换电池后还防水吗(苹果8换了电池还能防水吗)

    8p换电池后还防水吗(苹果8换了电池还能防水吗)

  • 苹果x怎么删除就寝(苹果x怎么删除电池用量记录)

    苹果x怎么删除就寝(苹果x怎么删除电池用量记录)

  • 华为hd怎么关闭(华为hd怎么关闭nova5)

    华为hd怎么关闭(华为hd怎么关闭nova5)

  • xr没有3d touch功能吗

    xr没有3d touch功能吗

  • 红米k20promiui11多久更新(红米k20pro尊享版miui11)

    红米k20promiui11多久更新(红米k20pro尊享版miui11)

  • 怎么看etc激活成功(如何查看etc激活成功)

    怎么看etc激活成功(如何查看etc激活成功)

  • 打电话提示网络忙怎么回事(打电话提示网络忙怎么解决)

    打电话提示网络忙怎么回事(打电话提示网络忙怎么解决)

  • excel表格高度怎么调一致(Excel表格高度怎么设置在哪里)

    excel表格高度怎么调一致(Excel表格高度怎么设置在哪里)

  • 芒果二维码在哪能找到(芒果二维码在哪里)

    芒果二维码在哪能找到(芒果二维码在哪里)

  • 〖大前端 - 基础入门三大核心之JS篇㉓〗- JavaScript 的「数组」(大前端入门指南)

    〖大前端 - 基础入门三大核心之JS篇㉓〗- JavaScript 的「数组」(大前端入门指南)

  • 首套房契税税率是多少?
  • 出口退税是先交税后退税吗
  • 物业缴纳发票可以抵税吗
  • 累计折旧空运直接计入生产成本吗
  • 税盘服务费抵税怎么做分录
  • 商贸企业购进商品怎么做成本
  • 设计服务需要交文化建设费吗
  • 企业所得税年报错了怎么更正
  • 增值税专用发票电子版
  • 哪些车辆可退还车款
  • 信用卡产生滞纳金
  • 已认证的发票如何导入
  • 火灾造成的存货损失进项税额如何处理
  • 财产清查的种类有哪些
  • 所得税汇算清缴补税的会计处理
  • 水利行政事业性收费收入会计分录
  • 实收资本不是股东打来的怎么调帐
  • 金税盘发行后什么时候可以用
  • 交通费,通讯费均按照上级行标准领取
  • 社保扣款是根据每个月实发工资么
  • 内含报酬率概念
  • php有啥用
  • 暂估成本跨年怎么处理分录
  • php yii框架
  • 融资租入固定资产的入账价值
  • 免抵退税额是什么
  • 公司股东变更要交税吗可以将股东变更吗
  • php出栈函数
  • 南极岛在哪
  • cocos creator脚本开发指南
  • 中世纪城门
  • php 抓取别的网站的内容
  • php点击跳转
  • 多模手机
  • Es6的新特性promise对象的设计初衷是
  • css deep深度选择器
  • 查看ntpdate状态
  • 固定资产清理的含义
  • 应纳所得税额等于利润总额减去差异
  • 未开票金额怎么报税
  • 安装配置mysql,检验是否正常安装
  • mysql显示数据库语句
  • 给客户的现金奖励会计处理
  • sqlserver 数据集字符集种类
  • 营业外收入如何纳税
  • 农产品加工会计分录
  • 平行结转法什么意思
  • 出租机械设备
  • 营改增后服务业账务处理
  • 不能计入固定资产原值的有
  • 在建工程如何转固
  • 现金日记账年结需要另起一页吗
  • 技术服务费收入会计分录怎么写
  • 出口退税综合服务网
  • 地方教育附加申报
  • 本年利润的计算顺序为
  • mac salad
  • linux dd 系统
  • u盘装系统系统资料会被泄露吗
  • win8最多支持多大内存
  • mac的vmware
  • win10 rs1是什么版本
  • xp死机不动
  • 如何设置windows桌面图标
  • window10 系统安装
  • label控件的作用
  • jQuery Mobile 和 Kendo UI 的比较
  • javascript中匿名函数
  • bat上传文件
  • android toast位置
  • python算法的应用
  • unity ugui组件
  • Android自定义动画
  • comparable接口怎么用
  • 512到底是什么意思
  • 常州国家税务局待遇
  • 企业所得税法中所称有关的支出是指
  • 沈阳新公司办理社保流程
  • 加工修理修配统称为什么
  • 长沙买房后多久可以提取公积金
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设