IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> YOLO目标检测算法轻量化改进的过程记录 -> 正文阅读

[人工智能]YOLO目标检测算法轻量化改进的过程记录

一、前言

? ?? ?本文主要记录了在毕设期间关于将目标检测算法部署至嵌入式设备(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()。。。
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-24 18:10:12  更:2022-05-24 18:13:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:36:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码