YOLOv5训练速度慢的一些解决方法,YOLOv5训练速度优化方法,解决训练缓慢问题

马肤

温馨提示:这篇文章已超过466天没有更新,请注意相关的内容是否还可用!

摘要:针对YOLOv5训练速度慢的问题,可以采取一些解决方法。可以尝试优化模型结构来减少计算量,从而提高训练速度。使用高性能的计算资源,如GPU,可以加速训练过程。调整训练时的批次大小和学习率等参数也可以对训练速度产生影响。数据增强和预训练等技术也有助于提高训练效率。通过优化模型、使用高性能计算资源以及调整训练参数,可以有效解决YOLOv5训练速度慢的问题。

博主使用的电脑配置是AMD R5 3600,Nvidia RTX3060 12G,16G 3200MHz内存,训练数据集是自建数据集,大约包含1200张图片,3个检测目标。

博主正在训练YOLOv5-5.0版本的模型,使用的是yolov5s模型,设置epoch为150(若想得到更好的mAP@0.5:0.95指标,可以增大这个数值,但博主这里收敛得较快所以没有设太大),batch size设为32或64,img size为640x640,其他参数保持默认。

最初训练模型时,每次epoch的训练时间大约需要3分钟,无论如何调整参数,训练时间都没有太大变化,博主曾误以为是没有使用GPU进行计算,因为显存确实被占满了,但GPU的使用率始终在0%和4%之间波动,大部分时间都在0%,博主尝试了许多方法,包括检查CPU、GPU和内存的使用情况,排除了使用CPU进行模型运算的可能性。

我们来探讨模型训练速度慢的可能原因及解决方案:

YOLOv5训练速度慢的一些解决方法,YOLOv5训练速度优化方法,解决训练缓慢问题 第1张

1、GPU性能不足:如果自己的显卡性能较差,显存较低,建议降低batch size、worker和img size的参数,或者更换一张更好的显卡,这些参数的设置可以在train.py文件中进行,相关图示已随文给出。

2、未使用GPU:这种情况下,只需要检查显存是否被占用,以及是否安装了pytorch和cuda,可以使用特定的代码来查看是否安装了cuda和pytorch,结果如图所示,如果确实是CPU在训练模型,可以通过设置代码来更换GPU进行训练,将default设置为你GPU的编号(单显卡为0)。

YOLOv5训练速度慢的一些解决方法,YOLOv5训练速度优化方法,解决训练缓慢问题 第2张

3、训练瓶颈:

CPU瓶颈如果CPU占用率很高,同时GPU也在使用,但电脑CPU性能较差,可以通过调整参数尽量使CPU占用率不超过85%。

YOLOv5训练速度慢的一些解决方法,YOLOv5训练速度优化方法,解决训练缓慢问题 第3张

内存瓶颈内存占用过高时,可以尝试调整参数使内存占用不超过85%-90%。

IO瓶颈这种情况较为复杂,可能涉及硬盘读取、内存到GPU的传输等问题,对于前两种瓶颈,可以尝试通过调整batch size、workers和img size来解决,或更换较小的yolov5模型进行训练,如果问题仍未解决,建议更换硬件或租用云服务器,对于IO瓶颈,则可能需要通过预读取数据、更换硬件等方式来解决。

YOLOv5训练速度慢的一些解决方法,YOLOv5训练速度优化方法,解决训练缓慢问题 第4张

4、性能过剩:在训练数据量小、模型不复杂的情况下,高端显卡或专业图形卡的计算能力可能无法充分发挥,导致GPU计算速度超过数据读写速度,反而降低了训练速度,对于这种情况,可以尝试关闭缓存功能(将action='store_true'替换为action='store_false'),直接从硬盘读取数据到GPU,以提高训练速度,博主尝试后,一次epoch的时间从3分钟减少到了20秒,提升显著。

大多数情况下的模型训练时间长是因为性能不足或存在瓶颈,但在硬件条件好、数据量不大的情况下,可能是因为性能过剩导致的数据存取时间过长,值得一提的是,虽然训练速度大大提高,但GPU占用率依然较低,博主推测这可能与数据量较小、检测目标数不多有关,未来博主将尝试更新结论,希望能解决GPU占用率低的问题,由于博主计算机功底有限,如有任何问题,欢迎各位读者指正。

YOLOv5训练速度慢的一些解决方法,YOLOv5训练速度优化方法,解决训练缓慢问题 第5张


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码