YOLOv5全面解析教程⑥:模型训练流程详解

e46540ddb8ebf98f4ce48a72f398874e.jpeg


作者 | Fengwen、BBuf
 

欢迎Star、试用One-YOLOv5:

https://github.com/Oneflow-Inc/one-yolov5

1

结构项目预览

77b3d1d56b0ae96e138b93266eb4f8d8.png
 

2

安装

git clone https://github.com/Oneflow-Inc/one-yolov5  # clone
cd one-yolov5
pip install -r requirements.txt  # install

3

训练

两种训练方式

  1. 带权重训练 

$ python path/to/train.py --data coco.yaml --weights yolov5s --img 640

2. 不带权重训练 

$ python path/to/train.py --data coco.yaml --weights '' --cfg yolov5s.yaml --img 640

单GPU训练

$ python train.py  --data coco.yaml --weights yolov5s --device 0

多GPU训练

$ python -m oneflow.distributed.launch --nproc_per_node 2 train.py --batch 64 --data coco.yaml --weights yolov5s --device 0,1

注意:
 

  • --nproc_per_node  指定要使用多少GPU。举个例子:在上面多GPU训练指令中它是2。

  • --batch 是总批量大小。它将平均分配给每个GPU。在上面的示例中,每GPU是64/2=32。

  • --cfg : 指定一个包含所有评估参数的配置文件。

  • 上面的代码默认使用GPU 0…(N-1)。使用特定的GPU?可以通过简单在 --device 后跟指定GPU来实现。「案例」,在下面的代码中,我们将使用GPU 2,3。

$ python -m oneflow.distributed.launch --nproc_per_node 2 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights '' --device 2,3

恢复训练

如果你的训练进程中断了,你可以这样恢复先前的训练进程。

# 多卡训练.
python -m oneflow.distributed.launch --nproc_per_node 2 train.py --resume

你也可以通过 --resume 参数指定要恢复的模型路径。

# 记得把 /path/to/your/checkpoint/path  替换为你要恢复训练的模型权重路径
--resume /path/to/your/checkpoint/path

使用SyncBatchNorm

SyncBatchNorm可以提高多gpu训练的准确性,但会显著降低训练速度。它仅适用于多GPU DistributedDataParallel 训练。建议最好在每个GPU上的样本数量较小(样本数量<=8)时使用。

要使用SyncBatchNorm,只需将添加 --sync-bn 参数选项,具体「案例」如下:

$ python -m oneflow.distributed.launch --nproc_per_node 2 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights '' --sync-bn

4

评估

下面的命令是在COCO val2017数据集上以640像素的图像大小测试 yolov5x 模型。yolov5x是可用小模型中最大且最精确的,其它可用选项是 yolov5n ,yolov5m,yolov5s,yolov5l ,以及他们的 P6 对应项比如 yolov5s6 ,或者你自定义的模型,即 runs/exp/weights/best 。

$ python val.py --weights yolov5x --data coco.yaml --img 640

5

推理

首先,下载一个训练好的模型权重文件,或选择你自己训练的模型;然后,通过 detect.py文件进行推理。

python path/to/detect.py --weights yolov5s --source 0              # webcamimg.jpg        # imagevid.mp4        # videopath/          # directorypath/*.jpg     # glob'https://youtu.be/Zgi9g1ksQHc'  # YouTube'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream

6

训练结果

本地日志

默认情况下,所有结果都记录为runs/train,并为每个新训练创建一个新的训练结果目录,如runs/train/exp2、runs/train/exp3等。查看训练和测试JPG以查看 mosaics, labels, predictions and augmentation 效果。注意:Mosaic Dataloader 用于训练(如下所示),这是Ultralytics发表的新概念,首次出现在YOLOv4中。

train_batch0.jpg 显示 batch 为 0 的 (mosaics and labels):

b5756e80b42bde80e716670c5fdc9cbc.jpeg

val_batch0_labels.jpg 展示测试 batch 为 0 的labels:

cfd3d2afed1fa11617bdd213a2afd775.jpeg

val_batch0_pred.jpg 展示测试 batch 为 0 predictions(预测):

5a36f0a886ea1bf1725c126bb788a254.jpeg

训练训损失和性能的指标有记录到Tensorboard和自定义结果中results.csv日志文件,训练训完成后作为结果绘制 results.png如下。在这里,我们展示了在COCO128上训练的YOLOV5结果

  • 从零开始训练 (蓝色)。

  • 加载预训练权重 --weights yolov5s (橙色)。

1ce009009bd6df1bd1ad8f294e465015.png

具体的指标分析详见文章《模型精确度评估

7

训练技巧

声明:大多数情况下,只要数据集足够大且标记良好,就可以在不改变模型或训练设置的情况下获得良好的结果。如果一开始你没有得到好的结果,你可以采取一些步骤来改进,但我们始终建议用户在考虑任何更改之前先使用所有默认设置进行一次训练。这有助于建立评估基准和发现需要改进的地方。

模型选择

类似于YOLOv5x和YOLOv5x6的大型模型在几乎所有情况下都会产生更好的结果,但参数更多,需要更多的CUDA内存进行训练,运行速度较慢。

对于移动部署,我们推荐YOLOv5s/m,对于云部署,我们建议YOLOV5l/x。

a2b7b2ee33125f7de2385b29e2f856d2.png

(有关所有模型的完整比较)
 

  • 从预先训练的权重开始训练。建议用于中小型数据集(即VOC、VisDrone、GlobalWheat)。将模型的名称传递给--weights参数。模型自动从latest YOLOv5 releasse 下载 。

python train.py --data custom.yaml --weights yolov5s yolov5m yolov5l yolov5x custom_pretrained # 自定义的网络结构文件
  • 从头开始训练的话,推荐用大的数据集(即 COCO、Objects365、OIv6 )在 --cfg 选项后传递你感兴趣的网络结构文件参数 以及空的 --weights '' 参数:

python train.py --data custom.yaml --weights '' --cfg yolov5s.yamlyolov5m.yamlyolov5l.yamlyolov5x.yaml

训练配置

在修改任何内容之前,首先使用默认设置进行训练,以建立性能基线。训练参数的完整列表,能够在train.py文件中发现。

  • Epochs : 默认训练300个epochs。如果早期过拟合,则可以减少训练。如果在300个周期后未发生过拟合,则可以训练更长,比如600、1200个epochs。

  • Image size: COCO以 --img 640,的分辨率进行训练,但由于数据集中有大量的小对象,它可以从更高分辨率(如--img 1280)的训练中训练。如果有许多小对象,则自定义数据集将从更高分辨率的训练中获益。最好的推断结果是在相同的--img 处获得的 ,即如果在-img 1280处进行训练,也应该在--img 1280处进行测试和检测。

  • Batch Size: 使用更大的 --batch-size 。能够有效缓解小样本数产生的batchnorm统计的错误。

  • Hyperparameters:默认超参数在hyp.scratch-low.yaml文件中。我们建议你在考虑修改任何超参数之前,先使用默认超参数进行训练。一般来说,增加增强超参数将减少和延迟过度拟合,允许更长的训练和得到更高mAP值。减少损耗分量增益超参数,如hyp['obj'],将有助于减少这些特定损耗分量中的过度拟合。有关优化这些超参数的自动化方法,请参阅我们的  《超参数演化教程》。

  • ...更多训练的超参数配置请查看本文的附录。

8

拓展 

使用多机训练

这仅适用于多GPU分布式数据并行训练。

在训练之前,确保所有机器上的文件都相同,数据集、代码库等。之后,确保机器可以相互通信。

你必须选择一台主机器(其他机器将与之对话)。记下它的地址(master_addr)并选择一个端口(master-port)。对于下面的示例,将使用master_addr=192.168.1.1和master_ port=1234。

要使用它,可以执行以下指令:

# On master machine 0
$ python -m oneflow.distributed.launch --nproc_per_node G --nnodes N --node_rank 0 --master_addr "192.168.1.1" --master_port 1234 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights ''
# On machine R
$ python -m oneflow.distributed.launch --nproc_per_node G --nnodes N --node_rank R --master_addr "192.168.1.1" --master_port 1234 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights ''

其中G是每台机器的GPU数量,N是机器数量,R是从0到(N-1)的机器数量。

假设我有两台机器,每台机器有两个GPU,对于上面的情况,G=2,N=2,R=1。

在连接所有N台机器之前,训练不会开始。输出将仅显示在主机上!

注意:

  • oneflow目前不支持windows平台

  • --batch 必须是GPU数量的倍数。

  • GPU 0 将比其他GPU占用略多的内存,因为它维护EMA并负责检查点等。

  • 如果你得到 RuntimeError: Address already in use ,可能是因为你一次正在运行多个训练程序。要解决这个问题,只需通过添加--master_port来使用不同的端口号,如下所示

$ python -m oneflow.distributed.launch --master_port 1234 --nproc_per_node 2 ...

配置代码

# prepare
t=https://github.com/Oneflow-Inc/one-yolov5:latest && sudo docker pull $t && sudo docker run -it --ipc=host --gpus all -v "$(pwd)"/coco:/usr/src/coco $t
pip install --pre oneflow -f https://staging.oneflow.info/branch/master/cu112
cd .. && rm -rf app && git clone https://github.com/Oneflow-Inc/one-yolov5 -b master app && cd app
cp data/coco.yaml data/coco_profile.yaml# profile
python train.py --batch-size 16 --data coco_profile.yaml --weights yolov5l  --epochs 1 --device 0 
python -m oneflow.distributed.launch --nproc_per_node 2 train.py --batch-size 32 --data coco_profile.yaml --weights yolov5l  --epochs 1 --device 0,1   
python -m oneflow.distributed.launch --nproc_per_node 4 train.py --batch-size 64 --data coco_profile.yaml --weights yolov5l  --epochs 1 --device 0,1,2,3  
python -m oneflow.distributed.launch --nproc_per_node 8 train.py --batch-size 128 --data coco_profile.yaml --weights yolov5l  --epochs 1 --device 0,1,2,3,4,5,6,7

附件

train.py参数解析表

参数help帮助
--weightinitial weights path加载的权重文件路径
--cfgmodel.yaml path模型配置文件,网络结构 路径
--datadataset.yaml path数据集配置文件,数据集路径
--hyphyperparameters path超参数文件 路径
--epochsTotal training rounds训练总轮次
--batch-sizetotal batch size for all GPUs, -1 for autobatch一次训练所选取的样本数
--imgsztrain, val image size (pixels)输入图片分辨率大小
--rectrectangular training是否采用矩形训练,默认False
--resumeresume most recent training接着打断训练上次的结果接着训练
--nosaveonly save final checkpoint只保存最终的模型,默认False
--noautoanchordisable AutoAnchor不自动调整anchor,默认False
--noplotssave no plot files不保存打印文件,默认False
--evolveevolve hyperparameters for x generations是否进行超参数进化,默认False
--bucketgsutil bucket谷歌云盘bucket,一般不会用到
--cache--cache images in "ram" (default) or "disk"是否提前缓存图片到内存,以加快训练速度,默认False
--devicecuda device, i.e. 0 or 0,1,2,3 or cpu训练的设备,cpu;0(表示一个gpu设备cuda:0);0,1,2,3(多个gpu设备)
--multi-scalevary img-size +/- 50%%是否进行多尺度训练,默认False
--single-clstrain multi-class data as single-class数据集是否只有一个类别,默认False
--optimizeroptimizer优化器
--sync-bnuse SyncBatchNorm, only available in DDP mode是否使用跨卡同步BN,在DDP模式使用
--workersmax dataloader workers (per RANK in DDP mode)dataloader的最大worker数量
--projectsave to project path保存到项目结果地址
--namesave to project/name/保存到项目结果/名称
--exist-okexisting project/name ok, do not increment现有项目/名称确定,不递增,默认False
--quadquad dataloader四元数据加载器 开启之后在尺寸大于640的图像上识别效果更好,但是有可能会使在640尺寸的图片上效果更差
--cos-lrcosine LR scheduler是否采用退火余弦学习率,默认False
--label-smoothingLabel smoothing epsilon标签平滑
--patienceEarlyStopping patience (epochs without improvement)早停机制,默认False
--freezFreeze layers: backbone=10, first3=0 1 2冻结层数,默认不冻结
--save-periodSave checkpoint every x epochs (disabled if < 1)用于记录训练日志信息,int 型,默认 -1
--seedGlobal training seed随机数种子设置
--local_rankAutomatic DDP Multi-GPU argument, do not modify自动单机多卡训练 一般不改动

Reference

  • https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data

  • https://docs.ultralytics.com/quick-start/

其他人都在看

  • GPT-3/ChatGPT复现的经验教训

  • 超越ChatGPT:大模型的智能极限

  • YOLOv5解析教程:计算mAP用到的Numpy函数

  • ChatGPT作者Schulman:我们成功的秘密武器

  • 比快更快,开源Stable Diffusion刷新作图速度

  • OneEmbedding:单卡训练TB级推荐模型不是梦

  • GLM训练加速:性能最高提升3倍,显存节省1/3

欢迎Star、试用OneFlow新版本:GitHub - Oneflow-Inc/oneflow: OneFlow is a deep learning framework designed to be user-friendly, scalable and efficient.OneFlow is a deep learning framework designed to be user-friendly, scalable and efficient. - GitHub - Oneflow-Inc/oneflow: OneFlow is a deep learning framework designed to be user-friendly, scalable and efficient.https://github.com/Oneflow-Inc/oneflow/

Disable checkingPremium suggestions

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/16658.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

发布4大“业界首个”产品,华为让数据中心变革开启“狂飙”模式

华为聚焦数字基础设施创新&#xff0c;通过4大“业界首个”产品的发布&#xff0c;不仅将引领新型数据中心发展&#xff0c;也将进一步支持企业的数字化转型&#xff0c;释放数字生产力。 在全球经济增速放缓的今天&#xff0c;数字经济正在成为经济增长的新引擎&#xff0c;为…

数据治理在学术上的发展史以及未来展望

数据治理是大数据领域中非常重要的一环&#xff0c;从早期的学术研究到如今的各大企业落地实践&#xff0c;经历了漫长的过程&#xff0c;数据治理的实践落地本身也是一场马拉松。 从百度学术通过精确关键词匹配&#xff0c;搜索中文期刊的“数据治理” 和外文期刊的“data gov…

于变革时代探寻破局之光 | LeaTech全球CTO领导力峰会圆满落幕

引言 2023 年 3 月 4 日&#xff0c;腾讯云 TVP 与 51CTO 联合主办的 LeaTech 全球 CTO 领导力峰会于上海扬子江丽笙精选酒店圆满落幕。 本届峰会聚集了腾讯云 TVP 技术专家、TVP 行业大使、CTO 训练营导师、CTO 训练营历届校友&#xff0c;以及来自各个领域和行业的技术领导者…

【原创】理解ChatGPT之注意力机制和Transformer入门

作者&#xff1a;黑夜路人 时间&#xff1a;2023年4月27日 想要连贯学习本内容请阅读之前文章&#xff1a; 【原创】理解ChatGPT之GPT工作原理 【原创】理解ChatGPT之机器学习入门 【原创】AIGC之 ChatGPT 高级使用技巧 GPT是什么意思 GPT的全称是 Generative Pre-trained …

新传专业需要计算机二级吗,大学生有必要去考取计算机二级证书吗?

满意答案 JKSNX 2020.09.22 采纳率&#xff1a;41% 等级&#xff1a;12 已帮助&#xff1a;4161人 这是个很常见的问题。每年总有两个月&#xff0c;学校的教务会发一则“计算机二级报考通知”&#xff0c;大家便开始讨论计算机二级有没有用&#xff0c;身体却很诚实地交上7…

跨考安大计算机研究生难吗,关于跨考安大新传这件事,你现在纠结的问题我们都知道!...

灵魂拷问&#xff1a;你为什么想要跨考新传&#xff1f; 因为兴趣…&#xff1f;热爱…&#xff1f;新闻理想…&#xff1f; 还是因为…&#xff1f; (开玩笑啦)即便有以上因素存在&#xff0c;大家选择了新传也有大部分原因是因为喜欢&#xff0c;比如说我&#xff0c;虽然综合…

新传工作运用计算机吗,Windows 7正式退休,这些解决办法你必须了解

2020年1月14日&#xff0c;微软Windows 7系统正式停止技术支持&#xff0c;你的计算机将不会中断或停止工作&#xff0c;但如果你的Windows 7计算机出现问题&#xff0c;它将不再收到任何问题的技术支持、软件更新、安全更新或修复。 现在微软在官方网站上公布了最新的Windows …

新传工作运用计算机吗,计算机等现代办公技术运用给文秘工作带来的新思考1...

电子计算机技术的运用发展被称为人类科学技术发展的"第三次革命"&#xff0c;计算机技术在办公室的普及运用也使秘书工作由"笔杆子"向"键盘子"转变&#xff0c;计算机的运用操作成为了现代从业秘书的必备技能&#xff0c;与运而生的办公自动化大…

新传要不要学计算机,大学新生入学要带电脑吗?学长给出建议,不知道的会很“吃亏”...

教之而不受&#xff0c;虽强告之无益。譬之以水投石&#xff0c;必不纳也&#xff0c;今夫石田虽水润沃&#xff0c;其干可立待者&#xff0c;以其不纳故也。——张载 01前言 今年高考结束已经走了一段时间了&#xff0c;虽然成绩都还没有被公布&#xff0c;但相信很多考生的心…

服开与编排,老兵新传

前段时间&#xff0c;有同学问&#xff1a;编排与服开是什么关系&#xff1f;现在运营商都建设编排系统&#xff0c;那是不是服务开通以后就退出 OSS 舞台了&#xff1f;为什么会出现编排&#xff1f;这些问题对于行业老兵来说感慨万千&#xff0c;而对于新兵来说就要通过追溯其…

考研最卷的专业,我提名新传

不少专业的研究生统招考试都是一场“千军万马过独木桥”的残酷竞争&#xff0c;只是有的专业卷得明明白白&#xff0c;而有的专业多少让人意想不到 ——“钱途”一般&#xff0c;却也能卷上天&#xff0c;比如新传。 新传&#xff0c;指的是新闻传播类学科&#xff0c;除了主要…

Hitachi Vantara老兵新传

Hitachi Vantara正在书写一部“老兵新传”&#xff01; 所谓“老”&#xff0c;是指Hitachi Vantara的前身HDS&#xff08;Hitachi Data Systems&#xff09;资历老&#xff0c;它曾是企业级存储市场的领导者&#xff1b;何为“新”&#xff1f;Hitachi Vantara于2017年9月才正…

计算机知识讲座图片,计算机ppt辅导讲座

原标题&#xff1a;计算机ppt辅导讲座 2020年11月4日下午1:30,在竞秀南楼304&#xff0c;润园书院学习部请到了赵燕飞老师为大家带来了一次细致实用的计算机关于ppt的辅导讲座。同时也是为了丰富同学们的计算机知识&#xff0c;教同学们熟练运用计算机知识制作精美的ppt。本次讲…

【简单】使用ChatGPT和QT从零开始构建一个计算器应用

在这篇博文中&#xff0c;我将向大家展示如何使用ChatGPT和Qt来构建一个完整的计算器应用。我们将从零开始&#xff0c;逐步引导您完成整个项目&#xff0c;包括需求分析、软件设计、代码编写等环节。该项目代码全部由GPT编写,10分钟完成。 一&#xff0c;项目概述 本项目旨在…

太突然了,不会ChatGPT就被淘汰,很多公司开始行动了!

上周末分别和两拨朋友约了饭局。周六约的是国内最大ERP厂商的朋友&#xff0c;饭桌上大家聊的最多的话题就是ChatGPT&#xff0c;他们上面领导发话了&#xff0c;让尽快引入ChatGPT&#xff0c;寻求突破。周日约见的是一波搞游戏开发的朋友&#xff0c;聊的最多话题也是ChatGPT…

ChatGPT 大浪潮下,哪些行业会被淘汰?

在 ChatGPT 大浪潮下&#xff0c;随着新技术的不断涌现和应用&#xff0c;一些传统行业或者是不适应发展节奏的行业可能会被淘汰。 我们先来看看&#xff0c;以下是可能受到影响的一些行业&#xff1a; 1、银行和金融行业&#xff1a;区块链技术的发展和数字货币的出现使得原本…

chatgpt赋能python:如何用Python打包项目不卡顿

如何用Python打包项目不卡顿 随着Python语言的普及和不断发展&#xff0c;越来越多的开发者选择使用Python作为主要的开发语言来开发应用程序。然而&#xff0c;许多Python开发者不知道如何打包他们的项目&#xff0c;或者他们打包后的项目存在性能问题。在本文中&#xff0c;…

告别卡顿困扰:IDEA 性能优化设置

大家好&#xff0c;我是老赵 在我们日常使用IDEA进行开发时&#xff0c;可能会遇到许多卡顿的瞬间&#xff0c;明明我们的机器配置也不低啊&#xff1f;为什么就会一直卡顿呢&#xff1f; 原来这是因为IDEA软件在我们安装的时候就设置了默认的内存使用上限&#xff08;通常很小…

chatgpt赋能python:Python卡顿怎么办?这里有十年经验告诉你

Python卡顿怎么办&#xff1f;这里有十年经验告诉你 Python是一种高级编程语言&#xff0c;并且是一种面向对象、动态类型的脚本语言。它在科学计算、爬虫、人工智能等领域有着广泛的应用。然而&#xff0c;有时在使用Python进行开发时&#xff0c;可能会遇到卡顿或运行缓慢的…

chatgpt 逐字输出 使用fetch/eventSource/fetchEventSouce进行sse流式处理

前端使用vue 1.逐字输出 闪动css样式 <span id"response_row" class"result-streaming">{{ item.assistantContent }}</span>.result-streaming:after {-webkit-animation: blink 1s steps(5, start) infinite;animation: blink 1s steps(5,…