YOLOv5训练速度慢的一些解决方法

这篇具有很好参考价值的文章主要介绍了YOLOv5训练速度慢的一些解决方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

    训练YOLOv5-5.0版本的模型参数设置,模型是yolov5s,epoch 150(如果想要更好的mAP@0.5:0.95指标可以设置的更大,博主这个收敛的太快了就没设太多),batchsize 32或者64,imgsize 640,640,其他均为默认。

    在最初训练模型的时候训练一次epoch大约需要3分钟,而且不管怎么设置参数,训练时间都不会改变太多,都在3分钟左右,博主期初是因为自己没用GPU跑,但是显存是实实在在的吃满了,但利率用始终在0%和4%之间波动,大多数还是在0%,博主百思不得其解,百度了许多方法都没有用,看了大部分博主的文章,然后看了看运行时候的内存,CPU和GPU,发现CPU使用率不高,但是内存和显存占用很高,那么也就排除了在用CPU跑模型的情况,思来想去大概是出在数据读取上。下面来介绍一些训练模型速度慢可能的原因和解决方法:

    1.GPU太差

    博主之前用的自己的GTX960m的确跑不起来,如果自己显卡太老,显存太低,要么降低batchsize和worker,还有imgsize,要么就换一张显卡。三个参数的设置在train.py的设置代码如图yolov5在3060显卡上训练速度,python,目标检测

yolov5在3060显卡上训练速度,python,目标检测

yolov5在3060显卡上训练速度,python,目标检测

    2.没用到GPU,完全是CPU在跑

    这种情况也很好发现,只需要看看显存是否被占用或者有没有安装pytorch和cuda,可以用如下代码来查看是否装了pytorch和cuda,怎么安装很多博主已经介绍过了,随便一查一大堆。

yolov5在3060显卡上训练速度,python,目标检测

import torch

print(torch.__version__)
torch.cuda.is_available()

    上面代码结果如下图,说明正确安装CUDA和pytorch(记得要版本对应,不然会报错)最好把cudnn也装上。

 yolov5在3060显卡上训练速度,python,目标检测

    如果是CPU在训练,可以设置下面的代码来更换GPU训练模型,default设置成你GPU的编号就行,单显卡就是0。

yolov5在3060显卡上训练速度,python,目标检测

    3.训练瓶颈

    3.1 CPU瓶颈

    CPU瓶颈很好判断,那就是CPU占用率很高,同时GPU也在使用,这说明电脑CPU太差了。设置参数,尽量不让CPU占用率超过85%。

    3.2 内存瓶颈

    简单来说就是内存爆了,基本上不存在内存频率跟不上的,同样设置参数,内存占用也尽量不要超过85%-90%。

    3.3 IO瓶颈

    这种情况会复杂很多,这个IO可能是硬盘读到内存导致的,也有可能是从内存到GPU导致的,也有可能是读写记录的时候导致的,反正杂七杂八的,最难看出哪里出了问题。

    对于以上三种瓶颈可以通过瓶颈测试工具来测试出来,具体方法下面的博客说的很清楚。

(24条消息) PyTorch消除训练瓶颈 提速技巧_*pprp*的博客-CSDN博客

    对于前两种瓶颈,都可以通过设置batchsize,workers和imgsize来尝试解决,或者更换yolov5的模型,使用最小的yolov5s来训练,如果以上方法解决不了,建议更换硬件或者租用云服务器。对于第三种情况基本只能通过预读取数据和更换硬件来实现。

    4.性能过剩      

    对,你没有看错,性能过剩也会导致Yolov5训练速度过慢,原因也很让人无语,在train.py中有这样一行代码,这行代码旨在将数据读到内存中进行缓存,这样就可以更快的存取数据。

yolov5在3060显卡上训练速度,python,目标检测    这样读取数据就可以让正在工作的GPU计算完数据后不会因为硬盘读写太慢而等待数据读入,所以硬盘的读取很重要,训练过程中,数据首先从硬盘读入到内存,然后再从内存读取到CPU或者GPU,所以一块好的硬盘可以有效的加速模型的训练,特别是笔记本硬盘,笔记本硬盘读取速度很慢建议把数据放入SSD中。那么问题来了,如果GPU计算速度超过了从硬盘读入内存,再从内存读入GPU的速度,并且硬盘的读取速度够快,会发生什么,这也是导致博主训练速度太慢的原因。

    对于小批量数据(很多自建数据都是小批量数据),一两千张,检测目标数不多,模型不复杂的情况下,对于高端显卡或者专业图形卡都是小case,基本都用不到多少算力,GPU很快就计算完了一个batch的数据,这时候就要等待数据读入,如果硬盘读写够快,数据从硬盘读入内存,GPU再从内存读出,相较于直接从硬盘读入GPU,本来用作缓存的内存反而成了额外的开销,数据绕了远路,IO读取时间反而增大了。其实说白了还是IO问题造成的,只不过原因不是硬件太差。当然,以上内容是博主的猜测,仅供参考。

    所以,对于拥有一个好的SSD,好显卡,内存和CPU性能好的计算机而言,在训练数据量小,模型不大的情况下,建议将cacheimages关掉,直接从硬盘读入GPU,将action='store_true'替换为action='store_false'即可,关掉之后博主一次epoch从3分钟变成了20s,提升巨大,而且训练结果没有改变。

    总结

    大多数情况来说都是性能不足,存在瓶颈的情况,从而导致模型训练时间长,这也是深度学习中常有的事,但是在自己硬件条件好,数据量不大的情况下,模型训练仍然慢,就该考虑下是不是因为性能过剩,在数据存取上花了过多的时间造成的,这表现为内存和显存使用很大,但是CPU和GPU却不怎么占用经过博主一些测试,博主发现不管有没有用缓存,内存和显存使用都很大,这应该是pytorch底层逻辑的关系,在用GPU跑模型的时候pytorch会自动把数据缓存到显存里,内存使用大小仅仅和batch_size有关。

    值得一提的是,虽然训练速度大大增加,但是依然没有解决GPU占用率低的问题,虽然GPU占用率很低,但是不会存在一段时间为0的情况,博主推测,可能是因为数据量太小,所需要检测目标数不多造成计算量太小的原因。博主之前在用VOC2012数据集进行训练时,GPU占用率就不低,但是仍然只占用了30%-60%,不知道使用这种方法有没有效,因为学业问题只能先跑自己数据集,如果有时间博主会更新相关结论。

    最后,博主计算机功底不算扎实,如果有问题,希望各位读者指正。文章来源地址https://www.toymoban.com/news/detail-792368.html

到了这里,关于YOLOv5训练速度慢的一些解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 目标检测 YOLOv5 预训练模型下载方法

    目标检测 YOLOv5 预训练模型下载方法 flyfish https://github.com/ultralytics/yolov5 https://github.com/ultralytics/yolov5/releases 可以选择自己需要的版本和不同任务类型的模型 后缀名是pt

    2024年02月08日
    浏览(58)
  • 一文彻底解决YOLOv5训练找不到标签问题

    ❤️ 网上绝大部分教程所述解决方法都不靠谱,也没有分析问题发生的原因,本文彻底解决了YOLOv5训练时找不到标签,出现 No labels found in /path/train.cache 的问题!希望通过本文,在配置环境的过程中,为各位解决一些不必要的麻烦。——©️ Sylvan Ding 版本 系统 YOLOv5 v6.1 Linu

    2024年02月05日
    浏览(67)
  • 【YOLOv5】一些不常见的报错及解决【持续更新】

    目录 AssertionError: Label class 4 exceeds nc=4 in /xxxxxx解决方法 原因 解决方法:(以我的情况为例) RuntimeError: result type Float can‘t be cast to the desired output type long int 原因 解决方法 ImportError: libgthread-2.0.so.0: cannot open shared object file: tensorboard :No dashboards are active for the current data set. 问题

    2024年02月12日
    浏览(36)
  • 【YOLOv5】一些网上找不到答案的报错解决方案

    目录 AssertionError: Label class 4 exceeds nc=4 in /xxxxxx解决方法 原因 解决方法:(以我的情况为例) RuntimeError: result type Float can‘t be cast to the desired output type long int 原因 解决方法 ImportError: libgthread-2.0.so.0: cannot open shared object file: tensorboard :No dashboards are active for the current data set. 问题

    2024年02月12日
    浏览(43)
  • YOLOv5训练过程中遇到该问题的解决方法ValueError: The requested array has an inhomogeneous shape after 1 dimensions

    YOLOv5训练时遇到问题ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions.可以参考以下解决方案 问题分析: 数组append时前后数组的shape不一致,当时我在自己遇到问题时也没有找到解决方法,最后发现是训练集中有一个图片名字太长导致

    2024年02月11日
    浏览(49)
  • YOLOV5 训练好模型测试时出现问题:AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor‘的解决方法

    在使用YOLOV5 训练好模型测试时出现问题:AttributeError: ‘Upsample’ object has no attribute \\\'recompute_scale_factor’的快速解决方法。 解决方法一: 有些博主说降低torchhe和torchvision版本,比如上图所示我的torch版本1.11.0 torchvision版本0.10.2,torch版本降低到版本1.9.1,torchvision版本降低到版

    2024年02月12日
    浏览(51)
  • 解决YOLOV5训练时P、R、mAP等值均为0的问题

    最近用YOLOV5训练自己的数据集,出现了训练失败的情况,比如box,obj,cls,labels等均为nan或0,找了很多办法,其实就是cuda与PyTorch版本的问题 我的cuda版本是11.2,PyTorch1.9,可能以前安装的有问题,重新安装官网的cuda11.3版本也是没有解决,可能重置电脑后用11.3的才能跑通,在

    2023年04月08日
    浏览(42)
  • 【Yolov5+Deepsort】训练自己的数据集(3)| 目标检测&追踪 | 轨迹绘制 | 报错分析&解决

    📢前言: 本篇是关于 如何使用YoloV5+Deepsort训练自己的数据集 ,从而实现目标检测与目标追踪,并绘制出物体的运动轨迹。本章讲解的为第三部分内容:数据集的制作、Deepsort模型的训练以及动物运动轨迹的绘制。本文中用到的数据集均为自采,实验动物为斑马鱼。 💻环境

    2024年02月10日
    浏览(52)
  • 训练yolov5的那些事之解决:AssertionError: Label class x exceeds nc=x in data/yolov5.yaml. Possible class label

    Yolov5报错: AssertionError: Label class x exceeds nc=x in data/yolov5.yaml. Possible class labels are 0-x-1 File “C:Users1Desktop水表识别YOLO5yolov5-mastertrain.py”, line 175, in train assert mlc nc, ‘Label class %g exceeds nc=%g in %s. Possible class labels are 0-%g’ % (mlc, nc, opt.data, nc - 1) 找到train文件的175行: 改成这样

    2024年02月11日
    浏览(63)
  • 【零基础玩转yolov5】yolov5训练自己的数据集(CPU训练+GPU训练)

     博主也是最近开始玩yolov5的,甚至也是最近开始使用python的,很多东西都没有接触过,因此训练自己的数据集花了不少时间,所以想写篇博客记录一下,希望同样是零基础的小伙伴们可以更加轻松的上手。同时大家如果发现了错误和理解偏差,欢迎指正。 参考资料: Yolo

    2024年02月06日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包