当前位置: 首页 > news >正文

YOLOv5更换骨干网络之 PP-LCNet

在这里插入图片描述
在这里插入图片描述
论文地址:https://arxiv.org/abs/2109.15099
代码地址:https://github.com/ngnquan/PP-LCNet

我们提出了一种基于MKLDNN加速策略的轻量级CPU网络,名为PP LCNet,它提高了轻量级模型在多个任务上的性能。本文列出了在延迟几乎不变的情况下可以提高网络准确性的技术。通过这些改进,PP LCNet的精度可以在相同的分类推理时间下大大超过以前的网络结构。如图1所示,它优于最先进的模型。对于计算机视觉的下游任务,它也表现得很好,例如对象检测、语义分割等。我们所有的实验都是基于PaddlePaddle1实现的。PaddleClas2提供代码和预训练模型。


PP-LCNet网路结构

在这里插入图片描述
将YOLOv5主干网络替换为PP-LCNet:
yolov5lPP-LC.yaml

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license

# Parameters
nc: 80  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # 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

#  PP-LCNet backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [16, 3, 2, 1]],              # 0-P1/2  ch_out, kernel, stride, padding
   [-1, 1, DepthSepConv, [32, 3, 1, False]],  # 1

   [-1, 1, DepthSepConv, [64, 3, 2, False]],  # 2-P2/4
   [-1, 1, DepthSepConv, [64, 3, 1, False]],  # 3

   [-1, 1, DepthSepConv, [128, 3, 2, False]], # 4-P3/8
   [-1, 1, DepthSepConv, [128, 3, 1, False]], # 5

   [-1, 1, DepthSepConv, [256, 3, 2, False]], # 6-P4/16
   [-1, 5, DepthSepConv, [256, 5, 1, False]], # 7

   [-1, 1, DepthSepConv, [512, 5, 2, True]],  # 8-P5/32
   [-1, 1, DepthSepConv, [512, 5, 1, True]],  # 9
  ]

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

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

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

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

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

在YOLOv5项目中添加方式:

common.py中加入以下代码:

class DepthSepConv(nn.Module):
    def __init__(self, inp, oup, dw_size, stride, use_se):
        super(DepthSepConv, self).__init__()
        self.stride = stride
        self.inp = inp
        self.oup = oup
        self.dw_size = dw_size
        self.dw_sp = nn.Sequential(
            nn.Conv2d(self.inp, self.inp, kernel_size=self.dw_size, stride=self.stride, padding=(dw_size - 1) // 2, groups=self.inp, bias=False),
            nn.BatchNorm2d(self.inp),
            nn.Hardswish(),

            SeBlock(self.inp, reduction=16) if use_se else nn.Sequential(),

            nn.Conv2d(self.inp, self.oup, kernel_size=1, stride=1, padding=0, bias=False),
            nn.BatchNorm2d(self.oup),
            nn.Hardswish())

    def forward(self, x):
        y = self.dw_sp(x)
        return y

yolo.py中添加如下代码:
在这里插入图片描述


本人更多YOLOv5实战内容导航🍀🌟🚀

  1. 手把手带你调参Yolo v5 (v6.2)(推理)🌟强烈推荐

  2. 手把手带你调参Yolo v5 (v6.2)(训练)🚀

  3. 手把手带你调参Yolo v5 (v6.2)(验证)

  4. 如何快速使用自己的数据集训练Yolov5模型

  5. 手把手带你Yolov5 (v6.2)添加注意力机制(一)(并附上30多种顶会Attention原理图)🌟强烈推荐🍀新增8种

  6. 手把手带你Yolov5 (v6.2)添加注意力机制(二)(在C3模块中加入注意力机制)

  7. Yolov5如何更换激活函数?

  8. Yolov5如何更换BiFPN?

  9. Yolov5 (v6.2)数据增强方式解析

  10. Yolov5更换上采样方式( 最近邻 / 双线性 / 双立方 / 三线性 / 转置卷积)

  11. Yolov5如何更换EIOU / alpha IOU / SIoU?

  12. Yolov5更换主干网络之《旷视轻量化卷积神经网络ShuffleNetv2》

  13. YOLOv5应用轻量级通用上采样算子CARAFE

  14. 空间金字塔池化改进 SPP / SPPF / SimSPPF / ASPP / RFB / SPPCSPC / SPPFCSPC🚀

  15. 用于低分辨率图像和小物体的模块SPD-Conv

  16. GSConv+Slim-neck 减轻模型的复杂度同时提升精度🍀

  17. 头部解耦 | 将YOLOX解耦头添加到YOLOv5 | 涨点杀器🍀

  18. Stand-Alone Self-Attention | 搭建纯注意力FPN+PAN结构🍀

  19. YOLOv5模型剪枝实战🚀

  20. YOLOv5知识蒸馏实战🚀

  21. YOLOv7知识蒸馏实战🚀

  22. 改进YOLOv5 | 引入密集连接卷积网络DenseNet思想 | 搭建密集连接模块🍀

  23. YOLOv5 框架引入 Google 轻量化网络 MobileNet V3🍀

  24. YOLOv5更换骨干网络之 EfficientNet-B0🍀


参考文献:

https://github.com/Gumpest/YOLOv5-Multibackbone-Compression

相关文章:

  • 环境变量?拿来把你!
  • 【柔性数组与局部性原理】
  • SCI论文解读复现【NO.3】MSFT-YOLO:基于变压器的改进YOLOv5钢表面缺陷检测(代码已复现)
  • 2022年度总结|我的CSDN成长历程
  • CSS基础总结(五)定位
  • 一文学会基础的TypeScript
  • js函数之call和apply
  • stm32平衡小车(1)---蓝牙模块及其bug处理
  • [JavaEE]线程的状态与安全
  • 【Qt】事件处理——按键事件处理
  • opencv-python常用函数解析及参数介绍(八)——轮廓与轮廓特征
  • flutter项目编译问题汇总
  • C++关联容器(复习题篇)
  • 02SpringCloudAlibaba服务注册中心—Eureka
  • opencv-python常用函数解析及参数介绍(七)——边缘检测
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【Amaple教程】5. 插件
  • 2017届校招提前批面试回顾
  • C++11: atomic 头文件
  • Cookie 在前端中的实践
  • CSS魔法堂:Absolute Positioning就这个样
  • Elasticsearch 参考指南(升级前重新索引)
  • JavaScript函数式编程(一)
  • Kibana配置logstash,报表一体化
  • react-native 安卓真机环境搭建
  • Redis 中的布隆过滤器
  • Terraform入门 - 1. 安装Terraform
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Vultr 教程目录
  • 阿里云前端周刊 - 第 26 期
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 从0到1:PostCSS 插件开发最佳实践
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 对象引论
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 如何实现 font-size 的响应式
  • 如何优雅地使用 Sublime Text
  • 跳前端坑前,先看看这个!!
  • 微信小程序开发问题汇总
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 由插件封装引出的一丢丢思考
  • kubernetes资源对象--ingress
  • 数据库巡检项
  • ​io --- 处理流的核心工具​
  • ​用户画像从0到100的构建思路
  • #图像处理
  • (八)Spring源码解析:Spring MVC
  • (二)pulsar安装在独立的docker中,python测试
  • (分布式缓存)Redis持久化
  • (十三)Flask之特殊装饰器详解
  • ***监测系统的构建(chkrootkit )
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)