改进的yolov5目标检测-yolov5替换骨干网络-yolo剪枝(TensorRT及NCNN部署)

YOLOv5改进点

在这里插入图片描述

  • 2022.10.30 复现TPH-YOLOv5

  • 2022.10.31 完成替换backbone为Ghostnet

  • 2022.11.02 完成替换backbone为Shufflenetv2

  • 2022.11.05 完成替换backbone为Mobilenetv3Small
    在这里插入图片描述

  • 2022.11.10 完成EagleEye对YOLOv5系列剪枝支持

  • 2022.11.14 完成MQBench对YOLOv5系列量化支持

  • 2022.11.16 完成替换backbone为EfficientNetLite-0

  • 2022.11.26 完成替换backbone为PP-LCNet-1x

  • 2022.12.12 完成SwinTrans-YOLOv5(C3STR)

  • 2022.12.15 完成Slimming对YOLOv5系列剪枝支持

Requirements

pip install -r requirements.txt

Multi-Backbone Substitution for YOLOs

1、Base Model

Train on Visdrone DataSet (Input size is 608)

No.ModelmAPmAP@50Parameters(M)GFLOPs
1YOLOv5n13.026.201.784.2
2YOLOv5s18.434.007.0515.9
3YOLOv5m21.637.8020.9148.2
4YOLOv5l23.239.7046.19108.1
5YOLOv5x24.340.8086.28204.4

2、高精度模型

A、TPH-YOLOv5 在这里插入图片描述

Train on Visdrone DataSet (6-7 size is 640,8 size is 1536)

No.ModelmAPmAP@50Parameters(M)GFLOPs
6YOLOv5xP230.049.2990.96314.2
7YOLOv5xP2 CBAM30.149.4091.31315.1
8YOLOv5x-TPH40.763.00112.97270.8
用法:
nohup python train.py --data VisDrone.yaml --weights yolov5n.pt --cfg models/yolov5n.yaml --epochs 300 --batch-size 8 --img 608 --device 0,1 --sync-bn >> yolov5n.txt &
组成部分:

P2 Head、CBAM、TPH、BiFPN、SPP

在这里插入图片描述

1、TransBlock的数量会根据YOLO规模的不同而改变,标准结构作用于YOLOv5m

2、当YOLOv5x为主体与标准结构的区别是:(1)首先去掉14和19的CBAM模块(2)降低与P2关联的通道数(128)(3)在输出头之前会添加SPP模块,注意SPP的kernel随着P的像素减小而减小(4)在CBAM之后进行输出(5)只保留backbone以及最后一层输出的TransBlock(6)采用BiFPN作为neck

3、更改不同Loss分支的权重:如下图,当训练集的分类与置信度损失还在下降时,验证集的分类与置信度损失开始反弹,说明出现了过拟合,需要降低这两个任务的权重

消融实验如下:

boxclsobjacc
0.050.51.037.90
0.050.30.738.00
0.050.20.437.5
B、SwinTrans-YOLOv5在这里插入图片描述
pip install timm
Usage:
python train.py --data VisDrone.yaml --weights yolov5x.pt --cfg models/accModels/yolov5xP2CBAM-Swin-BiFPN-SPP.yaml --hyp data/hyps/hyp.visdrone.yaml --epochs 60 --batch-size 4 --img 1536 --nohalf

(1)Window size由7替换为检测任务常用分辨率的公约数8

(2)create_mask封装为函数,由在init函数执行变为在forward函数执行

(3)若分辨率小于window size或不是其公倍数时,在其右侧和底部Padding

debug:在计算完之后需要反padding回去,否则与cv2支路的img_size无法对齐

(4)forward函数前后对输入输出reshape

(5)验证C3STR时,需要手动关闭默认模型在half精度下验证(–nohalf

3、Slighter Model

Train on Visdrone DataSet (1 size is 608,2-6 size is 640)

NoModelmAPmAP@50Parameters(M)GFLOPsTrainCost(h)Memory Cost(G)PT FileFPS@CPU
1YOLOv5l23.239.746.19108.1
2YOLOv5l-GhostNet18.433.824.2742.427.444.97PekingUni Cloud
3YOLOv5l-ShuffleNetV216.4831.121.2740.510.982.41PekingUni Cloud
4YOLOv5l-MobileNetv3Small16.5531.220.3838.410.195.30PekingUni Cloud
5YOLOv5l-EfficientNetLite019.123523.0143.913.942.04PekingUni Cloud
6YOLOv5l-PP-LCNet17.6332.821.6441.718.521.66PekingUni Cloud
A、GhostNet-YOLOv5

(1)为保持一致性,下采样的DW的kernel_size均等于3

(2)neck部分与head部分沿用YOLOv5l原结构

(3)中间通道人为设定(expand)

B、ShuffleNetV2-YOLOv5

在这里插入图片描述

(1)Focus Layer不利于芯片部署,频繁的slice操作会让缓存占用严重

(2)避免多次使用C3 Leyer以及高通道的C3 Layer(违背G1与G3准则)

(3)中间通道不变

C、MobileNetv3Small-YOLOv5

在这里插入图片描述

(1)原文结构,部分使用Hard-Swish激活函数以及SE模块

(2)Neck与head部分嫁接YOLOv5l原结构

(3)中间通道人为设定(expand)

D、EfficientNetLite0-YOLOv5

在这里插入图片描述

(1)使用Lite0结构,且不使用SE模块

(2)针对dropout_connect_rate,手动赋值(随着idx_stage变大而变大)

(3)中间通道一律*6(expand)

E、PP-LCNet-YOLOv5

在这里插入图片描述

(1)使用PP-LCNet-1x结构,在网络末端使用SE以及5*5卷积核

(2)SeBlock压缩维度为原1/16

(3)中间通道不变

Pruning for YOLOs

ModelmAPmAP@50Parameters(M)GFLOPsFPS@CPU
YOLOv5s18.4347.0515.9
YOLOv5n1326.21.784.2
YOLOv5s-EagleEye@0.614.327.94.599.6

1、Prune Strategy

(1)基于YOLOv5块状结构设计,对Conv、C3、SPP(F)模块进行剪枝,具体来说有以下:

  • Conv模块的输出通道数
  • C3模块中cv2块和cv3块的输出通道数
  • C3模块中若干个bottleneck中的cv1块的输出通道数

(2)八倍通道剪枝(outchannel = 8*n)

(3)ShortCut、concat皆合并剪枝

2、Prune Tools

(1)EagleEye

EagleEye: Fast Sub-net Evaluation for Efficient Neural Network Pruning

基于搜索的通道剪枝方法,核心思想是随机搜索到大量符合目标约束的子网,然后快速更新校准BN层的均值与方差参数,并在验证集上测试校准后全部子网的精度。精度最高的子网拥有最好的架构,经微调恢复后能达到较高的精度。

Usage
  1. 正常训练模型
python train.py --data data/VisDrone.yaml --imgsz 640 --weights yolov5s.pt --cfg models/prunModels/yolov5s-pruning.yaml --device 0

(注意训练其他模型,参考/prunModels/yolov5s-pruning.yaml进行修改,目前已支持v6架构)

  1. 搜索最优子网
python pruneEagleEye.py --weights path_to_trained_yolov5_model --cfg models/prunModels/yolov5s-pruning.yaml --data data/VisDrone.yaml --path path_to_pruned_yolov5_yaml --max_iter maximum number of arch search --remain_ratio the whole FLOPs remain ratio --delta 0.02
  1. 微调恢复精度
python train.py --data data/VisDrone.yaml --imgsz 640 --weights path_to_Eaglepruned_yolov5_model --cfg path_to_pruned_yolov5_yaml --device 0
(2)Network Slimming

Learning Efficient Convolutional Networks through Network Slimming

Usage
  1. 模型BatchNorm Layer \gamma 稀疏化训练
python train.py --data data/VisDrone.yaml --imgsz 640 --weights yolov5s.pt --cfg models/prunModels/yolov5s-pruning.yaml --device 0 --sparse

(注意训练其他模型,参考/prunModels/yolov5s-pruning.yaml进行修改,目前已支持v6架构)

  1. BatchNorm Layer剪枝
python pruneSlim.py --weights path_to_sparsed_yolov5_model --cfg models/prunModels/yolov5s-pruning.yaml --data data/VisDrone.yaml --path path_to_pruned_yolov5_yaml --global_percent 0.6 --device 3
  1. 微调恢复精度
python train.py --data data/VisDrone.yaml --imgsz 640 --weights path_to_Slimpruned_yolov5_model --cfg path_to_pruned_yolov5_yaml --device 0

Quantize Aware Training for YOLOs

MQBench是实际硬件部署下评估量化算法的框架,进行各种适合于硬件部署的量化训练(QAT)

Requirements

  • PyTorch == 1.8.1

Install MQBench Lib

由于MQBench目前还在不断更新,选择0.0.2稳定版本作为本仓库的量化库。

git clone https://github.com/ZLkanyo009/MQBench.git
cd MQBench
python setup.py build
python setup.py install

Usage

训练脚本实例:

python train.py --data VisDrone.yaml --weights yolov5n.pt --cfg models/yolov5n.yaml --epochs 300 --batch-size 8 --img 608 --nosave --device 0,1 --sync-bn --quantize --BackendType NNIE

Deploy

目前已支持TensorRT及NCNN部署,详见deploy

To do

  • Multibackbone: MobileNetV3-small
  • Multibackbone: ShuffleNetV2
  • Multibackbone: GhostNet
  • Multibackbone: EfficientNet-Lite0
  • Multibackbone: PP-LCNet
  • Multibackbone: TPH-YOLOv5
  • Module: SwinTrans(C3STR)
  • Module: Deformable Convolution
  • Pruner: Network Slimming
  • Pruner: EagleEye
  • Pruner: OneShot (L1, L2, FPGM), ADMM, NetAdapt, Gradual, End2End
  • Quantization: MQBench
  • Knowledge Distillation

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/610747.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源】基于JAVA、微信小程序的音乐平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示 四、核心代码4.1 查询单首音乐4.2 新增音乐4.3 新增音乐订单4.4 查询音乐订单4.5 新增音乐收藏 五、免责说明 一、摘要 1.1 项目介绍 基于微信小程序JAVAVueSpringBootMySQL的音乐平台,包含了音乐…

IPV6学习记录

IPV6的意义 从广义上来看IPV6协议包含的内容很多: IPV6地址的生成与分配 IPV6的报头的功能内容 IPV4网络兼容IPV6的方案 ICMPv6的功能(融合了arp和IGMP功能) IPV6的路由方式 ipv6的诞生除了由于ipv4的地址枯竭外,很大程度上也是因为ipv4多年的发展产生了很多…

数字化工厂产品推荐 带OPC UA的分布式IO模块

背景 近年来,为了提升在全球范围内的竞争力,制造企业希望自己工厂的机器之间协同性更强,自动化设备采集到的数据能够发挥更大的价值,越来越多的传统型工业制造企业开始加入数字化工厂建设的行列,实现智能制造。 数字化…

探索Shadowsocks-Android:保护你的网络隐私

探索Shadowsocks-Android:保护你的网络隐私 I. 引言 在数字时代,网络隐私和安全变得愈发重要。我们越来越依赖互联网,但同时也面临着各种网络限制和监控。在这个背景下,Shadowsocks-Android应用程序应运而生,为用户提…

“高端”的位运算

王有志,一个分享硬核Java技术的互金摸鱼侠加入Java人的提桶跑路群:共同富裕的Java人 原计划迭代作为预备知识的收尾,不过在解2的幂和4的幂时,想到关于数字2的问题可以通过位运算去解决,因此补充了关于位运算的内容。 …

3D软件坐标系速查【左手/右手】

本文介绍不同3D软件的世界坐标系之间的差异及其工作原理。 NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 基本上,游戏引擎和3…

Vue3-watch的用法

watch简介 作用:监视数据的变化 (和 Vue2 中的 watch 作用一致) 特点: Vue3 中的 watch 只能监视以下四种数据 1.ref 定义的数据(又可以分 基本 和 对象 ) 2.reactive 定义的数据 3.函数返回一个值。(getter 函数) 4.一个包含上述内容的数组 我们在 Vue3 中使用 watch …

为什么大家都在学鸿蒙开发HarmonyOS?

随着HarmonyOS讨论的话题是越来越火热了,大家学习过程中难免也会想这么一个问题,学习HarmonyOS有哪些发展空间?为什么大家都在学鸿蒙开发HarmonyOS? 学习鸿蒙开发OpenHarmony可以满足市场需求,提升技术能力,并参与到…

研发型企业怎样选择安全便捷的数据摆渡解决方案?

研发型企业在市场经济发展中发挥着至关重要的作用,研发型企业是指以科技创新为核心,以研发新产品、新技术、新工艺为主要业务的企业。这类企业注重技术创新和研发,持续不断地进行技术创新和产品升级,为经济发展注入新鲜的活力。 研…

世邦通信 SPON IP网络对讲广播系统exportrecord.php 任意文件读取漏洞

产品介绍 世邦通信SPON IP网络对讲广播系统采用领先的IPAudio™技术,将音频信号以数据包形式在局域网和广域网上进行传送,是一套纯数字传输系统。 漏洞描述 spon IP网络对讲广播系统exportrecord.php存在任意文件读取漏洞,攻击者可通过该漏洞在服务器端读取任意敏…

Phoenix基本使用

1、Phoenix简介 1.1 Phoenix定义 Phoenix是HBase的开源SQL皮肤。可以使用标准JDBC API代替HBase客户端API来创建表,插入数据和查询HBase数据。 1.2 Phoenix特点 容易集成:如Spark,Hive,Pig,Flume和Map Reduce。性能…

元宇宙电商带你走进数字商城

在当今这个数字化、互联网高速发展的时代,传统的购物方式已逐渐被新兴的电商模式所替代。而在这股变革的浪潮中,一个全新的概念——元宇宙电商,正逐步走入我们的视野,元宇宙概念的兴起成为了热门话题。元宇宙是一个虚拟的世界&…

遥感影像大气校正一:6S模型使用

6S介绍 1986年,法国里尔科技大学大气光学实验室Tanr等人为了简化大气辐射传输方程,开发了太阳光谱波段卫星信号模拟程序5S(SIMULATION OF THE SATELLITE SIGNAL IN THE SOLAR SPECTRUM),用来模拟地气系统中太阳…

spring cloud之集成sentinel

写在前面 源码 。 本文一起看下spring cloud的sentinel组件的使用。 1:准备 1.1:理论 对于一个系统来说,最重要的就是高可用,那么如何实现高可用呢?你可能会说,集群部署不就可以了,但事实并…

论文封面表格制作

原文参考:【【论文排版】论文封面完美对齐 强迫症重度患者的经验分享】https://www.bilibili.com/video/BV18f4y1p7hc?vd_source046491acdcff4b39fed20406b36a93e2 视频里up主介绍很详细。我自己也记录一下。 介绍一下如何完成论文封面信息的填写。 创建一个3列…

[足式机器人]Part2 Dr. CAN学习笔记 - Ch02动态系统建模与分析

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记 - Ch02动态系统建模与分析 1. 课程介绍2. 电路系统建模、基尔霍夫定律3. 流体系统建模4. 拉普拉斯变换(Laplace)传递函数、微分方程4.1 Laplace Transform 拉式变换4.2 收…

Exception sending a multicast message:Network is unreachable故障

出现这个故障就是没有连接到网络,如果虚拟机没有连接到本机,那么就会出现这个情况,当虚拟机连接到本机就会自动消失,同时如果是用电脑直接安装Ubuntu运行也会出现这个情况,应该是要连接到一个路由器里面这个情况才会消…

Eigen 中的传播计算

Eigen: Reductions, visitors and broadcasting

太实用了!关于ControlNet,这篇你一定要看

一篇文章教会你,从入门到使用。 这里是行者AI,我们专注于人工智能在游戏领域的研究和应用,凭借自研算法,推出游戏AI、智能内容审核、数据平台等产品服务。 controlNet控制生成 anypaint 看到这篇文章的你,一定也是AI绘…

SpringBoot整合人大金仓数据库KingBase

1 去KingBase官网下载驱动jar包 2 将解压得到的所有jar包放置在libs目录下&#xff08;没有就新建一个目录&#xff09; 3 在pom文件添加相关依赖 <!--添加KingBase所需要的依赖--> <dependency><groupId>com.kingbase</groupId><artifactId>kin…