一、前言

本文主要记录了在毕设期间关于将目标检测算法部署至嵌入式设备(jetson nano)上的过程及对YOLO算法轻量化及精度提升的一些修改策略(改的并不多,基本都是重复组合,毕竟我是个菜鸡)。
      主要是在YOLOv4-tiny、YOLOv5-s及YOLOX-tiny的基础上做出的总结及改进,都是自己的实测效果及一些改进后的效果的记录,免得大家二次踩坑,并不一定适用于所有情况,并且容易受训练策略、数据集等各种各样因素影响导致结果有所区别,但深度学习嘛,本身就是个玄学问题,大家看看就好,如果在文中发现什么特别离谱的问题欢迎指正。

二、网络结构的选择过程

2.1 主干部分的选择

我尝试了对比几种网络(mobilenetv2、shufflenetv2、ghostnet以及darknet),我发现将YOLOX中使用的cspdarknet轻量化(以fps为标准,按倍数调整通道数)至与mobilenetv2、shufflenetv2及ghostnet相近,在推理速度相差不到5ms的前提下,cspdarknet的表现最优,具体的如表。

主干 mAP
cspdarknet -
shufflenetv2 -2.1%
mobilenetv2 -3.8%
ghostnet -7.2%

需要注意的是,YOLOX参考了YOLOv5的focus头,但这里我多次对比加不加focus头的情况,发现focus头增加了很多推理速度并且它的效果也并不是很好,因此我使用了普通的卷积块替代了。
      这部分实验我的初衷是为了以cspdarknet为基准作对比选择主干网络的,但没想到结果这么离谱,YOLOX中使用的cspdarknet轻量化之后表现是最好的。因为考虑到主干部分采用预训练的权值的话收敛会相对更快点,并且自己也没卡作预训练,所以就没对主干部分再动刀子了,直接用的YOLOX-tiny的主干,即depth = 0.33,width = 0.375。

2.2 特征金字塔的魔改

FPN、PAN、BiFPN等等各种网络都很常用,FPN、PAN更是常用在YOLO中,本文首先用了BiFPN替换了PAN,在保证推理速度相差不到5ms的前提下,发现BiFPN表现确实能有效的提升2-3%mAP,但在换了另一种数据集时(小目标很多),又发现效果反而下降了,想了很久想不到原因,就只能归集到这个结构并不能适用于我的数据集了。。。
      后面就有点为了改而改的意思了,在其中增加了csp、res等结构来替换卷积块,以及增加了其它一些边的特征融合,在一系列的尝试之后,相较于一般的多次卷积块的堆叠确实是有了一定的效果,毕竟这个是那么多大佬提出的结构,确实是好用。
      再然后就是注意力机制了,试了好几种,se、cbam、eca、da这些,效果试了一下,精度提升最大的是cbam,具体对推理速度的对比并没有测试,因为效果最好,所以只试了cbam的,但说实话,有点得不偿失,针对嵌入式设备而言,网络的整体推理速度大概40ms,增加了6个cbam块增加了10ms(因为bifpn的特征融合方式就有点注意力的那个意思了,所以主干加在了上采样及下采样之后),而mAP却只提升了1%左右。

2.3 输出部分

YOLOX确实好啊,解耦头是真的很好用,虽然增加了很多的计算量,但通过缩减通道数与非解耦结构推理速度相似的情况下,mAP居然提升了3%左右,真好用!!!

三、其它的一些记录

3.1 关于Params和FLOPs

刚开始啥都不懂,单纯的以为降这两个就等于加快模型的推理速度,但后来发现并不是,Params的降低只是仅仅说明了你降低了模型的参数量,FLOPs也只能说明每秒浮点运算次数,其它并不能说明啥。模型的推理速度还受内存访问次数等很多因素的影响。

3.2 关于深度可分离卷积

之前百度以及看一些博硕论文的时候,看别人的轻量化改进很多采用了深度可分离卷积,但我试了之后能够缩减的只有Params和FLOPs,在嵌入式设备上的推理速度反而更慢了。因此使用需要谨慎!!!

3.3 关于训练策略

虽然很多文章说不用预训练和使用预训练差不了太多,但我在使用的过程中,发现还是使用预训练权值训练的话效果会更好点,当然,这可能是我训练轮次相对可能不高的原因(300 epoch)。
      优化器的话,只试了sgd和adam。在300个epoch的情况下,sgd更好用,但在100个epoch的情况下发现adam的训练效果会更好。

四、总结

  • 推理速度和识别精度才是最能说明模型效果的东西。
  • 模型结构修改的话很多时候不如直接调整通道数。
  • 深度可分离卷积并没那么好用,(但这里我并没有用tensorRT加速后再对比,可能tensorRT加速后会提升?我也不清楚)。
  • cspdarknet和解耦头是真好用。
  • 浅层特征图对小目标的检测效果确实会更好,追求小目标检测效果的不妨在特征融合之后多上采样加多种处理后增加一个特征层预测。
  • YOLOv4-tiny是真快啊,追求速度的可以学一下它只用两个特征层预测。
  • pytorch搭建的模型如果想tensorRT加速的话可能会遇到问题,因为我没有具体研究,直接用的torch2trt转的,很多函数转换会出问题,比如torch.sum()。。。

YOLO目标检测算法轻量化改进的过程记录相关推荐

  1. 目标检测YOLO实战应用案例100讲-基于深度学习的无人机目标检测算法轻量化研究

    目录 基于深度学习的无人机图像目标检测算法研究 目标检测相关技术理论 2.1 引言

  2. 瞬间洞察万物:YOLO目标检测算法的黑科技全揭秘

    目录 简介与背景知识: 数据集准备: 模型选择和预训练: 模型构建和训练: 目标检测与推断: 性能优化与改进: 实例应用和扩展: yolo各版本: 总结: 简介与背景知识: ​ YOLO(You On ...

  3. 项目设计:基于YOLO目标检测算法的安全帽/口罩/汽车/行人/交通标志...检测

    本文将详细介绍YOLO目标检测算法,该算法支持各种目标检测,包括:安全帽.汽车.造价.交通标志......等.  其他毕业设计题目推荐参考: 毕业设计:电子/通信/计算机/物联网专业毕业设计选题参考( ...

  4. YOLO目标检测算法

    YOLO算法 简介 本文主要介绍YOLO算法,包括YOLOv1.YOLOv2/YOLO9000和YOLOv3.YOLO算法作为one-stage目标检测算法最典型的代表,其基于深度神经网络进行对象的识 ...

  5. YOLO目标检测算法的意义

    YOLO (You Only Look Once) 是一种目标检测算法,它的意义在于能够快速进行目标检测. YOLO 通过训练一个深度学习模型,在图像中找到目标并进行分类.它的优势在于,它只需要进行一 ...

  6. YOLO目标检测算法的深入理解

    YOLO框架概述 YOLO(You only look once)是一种目标检测算法,目标检测算法分为两大任务:目标分类和定位,YOLO创造性的将候选区和对象识别这两个阶段合二为一,看一眼图片(不用看 ...

  7. 浅析YOLO目标检测算法AI安全帽识别技术及场景应用

    安全帽是建筑业.制造业等工业生产中重要的劳保工具,应用十分广泛.但是在实际场景中,比如建筑工地或工厂流水线上,依然有很多工人忽视安全帽的重要性,同时,由于企业的监督不到位,因未佩戴安全帽而引发的安全事 ...

  8. 目标检测算法——YOLOv5/YOLOv7改进之结合轻量化网络MobileNetV3(降参提速)

    >>>深度学习Tricks,第一时间送达<<< 论文题目:Searching for MobileNetV3 论文地址:https://arxiv.org/abs/ ...

  9. 目标检测算法——YOLOv5/YOLOv7改进结合轻量型Ghost模块

    >>>深度学习Tricks,第一时间送达<<< 论文题目:<GhostNet:More Features from Cheap Operations> ...

最新文章

  1. ECSHOP删除云服务
  2. hadoop集群硬盘损坏_Hadoop集群(万台规模)的磁盘故障自动处理
  3. 009_jQuery链式编程
  4. python波峰波谷算法_波动均分算法
  5. oracle10g遇到ORA-16038日志无法归档问题
  6. datx 开启debug
  7. 神策数据:打造趁手好用的标签用户画像系统(附PPT下载链接)
  8. react-native 之 redux 与 react-redux
  9. 虚拟人出新晋卷王,无薪工作70天却没人认出来
  10. 【C语言】 扫雷游戏(保姆级的实现过程)
  11. 软件工程 教师信息管理系统
  12. 计算机登录网站慢手机快,手机WiFi网速慢,简单输入几个数字立马变快!
  13. MySQL的函数——聚合函数、数学函数、字符串函数、日期函数
  14. Use Eager execution or decorate this function with @tf.function.
  15. 电热毯UL964标准上架亚马逊所需资料流程
  16. 无人驾驶技术——YOLO目标检测
  17. 如何利用PDF转换器将WPS转换成word
  18. 顶级域名.tk申请与DNSPOD解析
  19. 2019纪中寒假培训
  20. Let's Encrypt证书自动更新

热门文章

  1. 发布网站ASP.NET(ASPX)
  2. 实现树莓派控制电机的运转
  3. android开发照相机啊,Android照相机开发详解(一)
  4. 老毛桃U盘快速安装ghost win7系统图文教程
  5. Shell显示系统时间的全年日
  6. 风冷精密空调安装规范
  7. 商业化广告--体系学习-- 10 -- 业务实战篇 -- 效果优化:如何一步步从提升曝光量深入到提升销量?
  8. 织梦网站如何设置404错误页面?
  9. MATLAB-7-程序流程控制
  10. 用标号法求最短路径matlab,标号法求最短路径问题