YOLOv5改进实战 | 更换主干网络Backbone(一)之轻量化网络Ghostnet

这篇具有很好参考价值的文章主要介绍了YOLOv5改进实战 | 更换主干网络Backbone(一)之轻量化网络Ghostnet。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


yolov5 轻量化,YOLO改进系列,# YOLO轻量化改进,# YOLOv5改进系列,YOLO,深度学习,人工智能,目标检测


前言

轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法:

  1. 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。
  2. 分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不同通道,从而减少计算量。
  3. 深度可分离卷积:将标准卷积分解成深度卷积和逐点卷积两个步骤,使得在大部分情况下可以大幅减少计算量。
  4. 跨层连接:通过跨越多个层级的连接方式来增加神经网络的深度和复杂性,同时减少了需要训练的参数数量。
  5. 模块化设计:将神经网络分解为多个可重复使用的模块,以提高模型的可调节性和适应性。

传统的YOLOv5系列中,Backbone采用的是较为复杂的C3网络结构,这使得模型计算量大幅度的增加,检测速度较慢,应用受限,在某些真实的应用场景如移动或者嵌入式设备,如此大而复杂的模型时难以被应用的。为了解决这个问题,本章节通过采用Ghostnet轻量化主干网络作为Backbone的基础结构,从而在保证检测性能的同时,将网络结构精简到最小,大大减小了模型的参数量和计算量。

一、Ghostnet

2020 CVPR 论文链接:GhostNet: More Features from Cheap Operations
Pytorch code:ghostnet_pytorch

轻量级神经网络Ghostnet是专门为移动设备上的应用而设计的,由Ghost bottleneck搭建而成,而Ghost bottleneck通过Ghost模块堆叠。Ghost 模块是一种新颖的即插即用模块。Ghost 模块设计的初衷是使用更少的参数来生成更多特征图 (generate more features by using fewer parameters)。在ImageNet分类任务,GhostNet在相似计算量情况下Top-1正确率达75.7%,高于MobileNetV3的75.2%。
yolov5 轻量化,YOLO改进系列,# YOLO轻量化改进,# YOLOv5改进系列,YOLO,深度学习,人工智能,目标检测

  • GhostConv

    class GhostConv(nn.Module):
        # Ghost Convolution https://github.com/huawei-noah/ghostnet
        def __init__(self, c1, c2, k=1, s=1, g=1, act=True):  # ch_in, ch_out, kernel, stride, groups
            super(GhostConv, self).__init__()
            c_ = c2 // 2  # hidden channels
            self.cv1 = Conv(c1, c_, k, s, None, g, act)
            self.cv2 = Conv(c_, c_, 5, 1, None, c_, act)
    
        def forward(self, x):
            y = self.cv1(x)
            return torch.cat([y, self.cv2(y)], 1)
    
  • Ghost Bottleneck

    class GhostBottleneck(nn.Module):
        # Ghost Bottleneck https://github.com/huawei-noah/ghostnet
        def __init__(self, c1, c2, k=3, s=1):  # ch_in, ch_out, kernel, stride
            super().__init__()
            c_ = c2 // 2
            self.conv = nn.Sequential(
                GhostConv(c1, c_, 1, 1),  # pw
                DWConv(c_, c_, k, s, act=False) if s == 2 else nn.Identity(),  # dw
                GhostConv(c_, c2, 1, 1, act=False))  # pw-linear
            self.shortcut = nn.Sequential(DWConv(c1, c1, k, s, act=False), Conv(c1, c2, 1, 1,
                                                                                act=False)) if s == 2 else nn.Identity()
    
        def forward(self, x):
            return self.conv(x) + self.shortcut(x)
    
  • C3Ghost

    class C3Ghost(C3):
        # C3 module with GhostBottleneck()
        def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):
            super().__init__(c1, c2, n, shortcut, g, e)
            c_ = int(c2 * e)  # hidden channels
            self.m = nn.Sequential(*(GhostBottleneck(c_, c_) for _ in range(n)))
    

二、代码实现

2.1 无需修改common.py和yolo.py文件

YOLOv5-7.0最新版已经添加了GhostConv、Ghost Bottleneck、C3Ghost三个模块,可以说是很方便了。甚至在models/yolo.py文件中已经注册这三个模块。所以我们无需做任何修改,只需修改yaml文件。

if m in {
        Conv, GhostConv, Bottleneck, GhostBottleneck, SPP, SPPF, DWConv, MixConv2d, Focus, CrossConv,
        BottleneckCSP, C3, C3TR, C3SPP, C3Ghost, nn.ConvTranspose2d, DWConvTranspose2d, C3x}:
    c1, c2 = ch[f], args[0]
    if c2 != no:  # if not output
        c2 = make_divisible(c2 * gw, 8)

    args = [c1, c2, *args[1:]]
    if m in {BottleneckCSP, C3, C3TR, C3Ghost, C3x}:
        args.insert(2, n)  # number of repeats
        n = 1

2.2 yolov5s-ghost-backbone.yaml

细心的小伙伴可能会发现在models/hub文件夹下已经有yolov5s-ghost.yaml配置文件,不过官方给的是将整个网络的Conv和C3模块替换成了GhostConvC3Ghost。这里我们只替换Backbone中的Conv和C3模块,当然两者哪个效果更好,需要各位去实测一番。

# YOLOv5 🚀 by Ultralytics, AGPL-3.0 license

# Parameters
nc: 80  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
anchors:
  - [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 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2
   [-1, 1, GhostConv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3Ghost, [128]],
   [-1, 1, GhostConv, [256, 3, 2]],  # 3-P3/8
   [-1, 6, C3Ghost, [256]],
   [-1, 1, GhostConv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3Ghost, [512]],
   [-1, 1, GhostConv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3Ghost, [1024]],
   [-1, 1, SPPF, [1024, 5]],  # 9
  ]

# YOLOv5 v6.0 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)

   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

2.3 模型验证

python models/yolo.py --cfg models/yolov5s-ghost-backbone.yaml --line-profile
YOLOv5s-ghost-backbone summary: 321 layers, 5301141 parameters, 5301141 gradients, 11.4 GFLOPs

2.4 模型训练

python train.py --cfg models/yolov5s-ghost-backbone.yaml --name yolov5s-ghost-backbone

2.5 模型对比

模型参数量和计算量对比(运行train.py文件的结果,以自己实测为主,仅供参考)

模型 参数量(parameters) 计算量(GFLOPs)
YOLOv5s 7033114 16.0
YOLOv5s-Ghost 3695330(↓47.46% 8.2(↓48.75%
YOLOv5s-Ghost-Backbone(本章) 5098866(↓27.50% 10.8(↓32.5%

三、总结

  • 模型的训练具有很大的随机性,您可能需要点运气和更多的训练次数才能达到最高的 mAP。

yolov5 轻量化,YOLO改进系列,# YOLO轻量化改进,# YOLOv5改进系列,YOLO,深度学习,人工智能,目标检测文章来源地址https://www.toymoban.com/news/detail-753328.html

到了这里,关于YOLOv5改进实战 | 更换主干网络Backbone(一)之轻量化网络Ghostnet的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • YOLOv5改进系列(5)——替换主干网络之 MobileNetV3

        【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制 YOLOv5改进系列(2#

    2024年02月06日
    浏览(50)
  • 改进YOLOv8 | 主干网络篇 | YOLOv8 更换骨干网络之 SwinTransformer | 《基于位移窗口的层次化视觉变换器》

    论文地址:https://arxiv.org/pdf/2103.14030.pdf 代码地址:https://github.com/microsoft/Swin-Transformer 本文介绍了一种新的视觉 Transformer ,称为 Swin Transformer ,它可以作为计算机视觉通用的骨干网络。从语言到视觉的转换中,适应 Transformer 所面临的挑战源于两个领域之间的差异,如视觉实体

    2024年02月06日
    浏览(48)
  • 【目标检测】yolov5改进系列:主干网络中添加SE注意力机制网络

    写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 CNN网络中,图像或者说特征图Feature Map的特征主要分为空间特征(Spatial)和通道(Channel)特征。对于空间

    2023年04月16日
    浏览(45)
  • YOLOv5算法改进(13)— 替换主干网络之PP-LCNet

    前言: Hello大家好,我是小哥谈。 PP-LCNet是一个由百度团队针对Intel-CPU端加速而设计的轻量高性能网络。它是一种基于MKLDNN加速策略的轻量级卷积神经网络,适用于多任务,并具有提高模型准确率的方法。与之前预测速度相近的模型相比,PP-LCNet具有更高的准确性。此外,对

    2024年02月10日
    浏览(45)
  • YOLOv5改进 | 主干篇 | 12月份最新成果TransNeXt特征提取网络(全网首发)

    本文给大家带来的改进机制是 TransNeXt特征提取网络 , 其发表于2023年的12月份是一个最新最前沿的网络模型 ,将其应用在我们的特征提取网络来提取特征,同时本文给大家解决其自带的一个报错,通过结合聚合的像素聚焦注意力和卷积GLU,模拟生物视觉系统,特别是对于中心

    2024年01月18日
    浏览(77)
  • YOLOv5改进 | 主干篇 | 华为GhostnetV1一种移动端的专用特征提取网络

    本文给大家带来的改进机制是华为移动端模型 Ghostnetv1 ,华为GhostnetV1一种移动端的专用特征提取网络,旨在在计算资源有限的嵌入式设备上实现高性能的图像分类。 GhostNet的关键思想 在于通过引入Ghost模块,以较低的计算成本增加了特征图的数量,从而提高了模型的性能。这

    2024年01月21日
    浏览(47)
  • YOLOv5改进系列(21)——替换主干网络之RepViT(清华 ICCV 2023|最新开源移动端ViT)

    【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制 YOLOv5改进系列(2

    2024年02月12日
    浏览(73)
  • 改进YOLO系列 | YOLOv5 更换骨干网络之 ConvNeXt

    🍀2023/6/30 更新源代码 ,并追加结构对应的超参数文件 论文地址:https://arxiv.org/pdf/2201.03545.pdf 代码地址:https://github.com/facebookresearch/ConvNeXt 视觉识别的“Roaring 20年代”始于视觉变换器(ViTs)的引入,它很快取代了ConvNets,成为最先进的图像分类模型。另一方面,普通ViTs在应

    2024年02月04日
    浏览(43)
  • YOLOv5改进之替换Backbone为ResNet50

    BestYOLO:https://github.com/WangRongsheng/BestYOLO BestYOLO是一个以科研和竞赛为导向的最好的YOLO实践框架! 目前BestYOLO是一个完全基于YOLOv5 v7.0 进行改进的开源库,该库将始终秉持以落地应用为导向,以轻便化使用为宗旨,简化各种模块的改进。目前已经集成了基于torchvision.models 模型为

    2024年02月05日
    浏览(47)
  • YOLOv5改进之替换Backbone为EfficientNetV2 Small

    BestYOLO:https://github.com/WangRongsheng/BestYOLO BestYOLO是一个以科研和竞赛为导向的最好的YOLO实践框架! 目前BestYOLO是一个完全基于YOLOv5 v7.0 进行改进的开源库,该库将始终秉持以落地应用为导向,以轻便化使用为宗旨,简化各种模块的改进。目前已经集成了基于torchvision.models 模型为

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包