ToB企服应用市场:ToB评测及商务社交产业平台

标题: YOLOv5改进实战 | 更换主干网络Backbone(一)之轻量化网络Ghostnet [打印本页]

作者: 不到断气不罢休    时间: 2024-6-22 19:57
标题: YOLOv5改进实战 | 更换主干网络Backbone(一)之轻量化网络Ghostnet



前言
轻量化网络计划是一种针对移动设备等资源受限环境的深度学习模子计划方法。下面是一些常见的轻量化网络计划方法:
传统的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%。


二、代码实现

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

YOLOv5-7.0最新版已经添加了GhostConv、Ghost Bottleneck、C3Ghost三个模块,可以说是很方便了。甚至在models/yolo.py文件中已经注册这三个模块。所以我们无需做任何修改,只需修改yaml文件。
  1. if m in {
  2.         Conv, GhostConv, Bottleneck, GhostBottleneck, SPP, SPPF, DWConv, MixConv2d, Focus, CrossConv,
  3.         BottleneckCSP, C3, C3TR, C3SPP, C3Ghost, nn.ConvTranspose2d, DWConvTranspose2d, C3x}:
  4.     c1, c2 = ch[f], args[0]
  5.     if c2 != no:  # if not output
  6.         c2 = make_divisible(c2 * gw, 8)
  7.     args = [c1, c2, *args[1:]]
  8.     if m in {BottleneckCSP, C3, C3TR, C3Ghost, C3x}:
  9.         args.insert(2, n)  # number of repeats
  10.         n = 1
复制代码
2.2 yolov5s-ghost-backbone.yaml

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




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4