关于yolov5训练大量数据存在的问题记录

相关配置环境

拉取官方最新的镜像(docker pull ultralytics/yolov5)
以及代码(git clone https://github.com/ultralytics/yolov5)

torch 1.10.1+cu102 CUDA:0 (Tesla V100-PCIE-32GB, 32510MiB)


相关问题

我是自定义数据集一共多达4.5w张,图像大小大多为3M(4000*3000)甚至更高。因为使用的是V100 32G显卡,本着batch_size越大训练越快的原则直接把batch_size设置为最大。

python train.py --batch-size 320 --data data/test.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt

1、batch_size设置最大后发现,训练特别慢,且显卡使用率长时间为0,偶尔会有使用率。结合打印日志发现,当完成一部分训练进行百分比展示时显卡使用率也会有。因此判断显卡未使用时是在进行io操作,在读取缓存数据,因为batch_size设置过大所以缓存特慢,当缓存完成才会进行训练,所以显存也会偶尔有使用率。(百度查询查到别人的分析:是exchange存取数据的问题,那个应该是个差不多网络存储的服务器,由于本身数据体积就比较大,程序在跑的时候数据读写速度跟不上,gpu就一直在等数据读进来)确定完原因开始在ylov5官方lssuse查找相关解决方法,作者提供了训练变快的方法

yolov5作者提供
自己也在网上找了一些训练加速的方法:

  • –workers 线程数量默认8(改成0或者增加)
  • –noval 每个epoch不进行评估
  • –cache 使用缓存训练
  • 使用DDP (python -m torch.distributed.launch --nproc_per_node 2 train.py)

2、最开始我一直在workers这个参数以及DDP进行测试,发现并没有提升太多,还是很慢。后面就把这四点进行结合,在DDP上进行缓存训练、不评估进行多线程。问题又来了,因为数据量过大,在DDP上进行RAM缓存时时间会超时NCCL设置的1800000(半个小时),保存本地disk缓存也是一样。自己排查觉得两部分解决这个问题:1.修改NCCL超时时间 2.加快缓存速度从而减少时间。因为需要快速训练所以并没有去解决

python -m torch.distributed.run --nproc_per_node 2 train.py --batch-size 320 --data data/test.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt --noval --workers 32 --cache

3、当DDP行不通,就想着使用最原始的python train.py的方式去使用缓存训练,没想到一试竟然成功了。RAM和disk都可以,ram缓存到内存需要有足够大的虚拟内存也就是启动docker镜像的时候加上–shm-size 256g这个参数,disk缓存本地本地有足够大的存储即可。

python train.py --batch-size -1 --data data/test.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt --workers 16 --cache disk
4.5w数据 309轮 训练时间:02:10

调试技巧

  1. 训练过程中发现batch-size并不是设置越大越快,测试发现batch-size=320和batch-size=128是一样的训练速度。 (来源网络:对于batch-size,有点玄学。理论是能尽量跑满显存为佳,但实际测试下来,发现当为8的倍数时效率更高一点。就是32时的训练效率会比34的高一点,这里就不太清楚原理是什么了,实际操作下来是这样。)
  2. workers也是一样,在镜像中workers不能设置过高会导致shm不够。我配置了–shm-size=256g能勉强最高使用32。测试发现使用32时算法并不进行卡着不执行,16会比8快三分之一左右
  3. 使用cache进行缓存训练是比一边加载一边训练快,所以不管数据多少都可以使用cache缓存循环会更快
  4. DDP分布式训练,在NCCL不超时的情况下理论上会更快(待测试)
  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Yolov7 是一种目标检测算法,与 Yolo 系列的其他版本相比,它具有更高的检测精度和更快的速度。训练 Yolov7 的过程通常分为以下几个步骤: 1. 数据集准备:收集并标注训练样本,生成相应的标注文件。 2. 模型配置:选择适当的超参数,如学习率、批量大小、训练周期等,并配置相应的模型结构。 3. 训练模型:使用准备好的数据集和模型配置文件,训练 Yolov7 模型,并保存训练的权重文件。 4. 模型评估:使用测试集对训练好的模型进行评估,包括计算模型的准确率、召回率、F1 值等指标。 5. 模型优化:根据评估结果,调整模型的超参数或结构,以提高模型的性能。 对于 Yolov7 的训练结果分析,可以从以下几个方面进行: 1. 训练时间:Yolov7 的训练时间通常比较长,因为它需要大量的样本和计算资源来训练。可以通过记录训练时间来评估训练效率。 2. 模型精度:Yolov7 的模型精度可以通过计算准确率、召回率、F1 值等指标来评估。如果模型的精度较低,可以考虑增加训练样本或优化模型结构。 3. 检测速度:Yolov7 的检测速度通常比较快,可以通过计算每秒处理的图像数量来评估。如果速度较慢,可以考虑优化模型结构或使用更高效的硬件。 4. 模型大小:Yolov7 的模型大小通常较小,可以通过计算模型的参数数量或磁盘空间占用来评估。如果模型大小过大,可以考虑优化模型结构或使用压缩算法进行压缩。 综上所述,Yolov7 的训练结果分析需要综合考虑模型的精度、速度、大小等因素,以评估模型的性能并进行优化。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值