关于后端:一个更快的YOLOv5问世附送全面中文解析教程

41次阅读

共计 3409 个字符,预计需要花费 9 分钟才能阅读完成。

作为计算机视觉畛域的基础性技术,指标检测在业界具备广泛应用,而 YOLO 系列因其综合性能较好,成为广受欢迎的首选框架。

这次,为了让用户深刻理解 OneFlow 训练指标检测模型的可行性以及性能的优越性,咱们将 Ultralytics 版 YOLOv5(https://github.com/ultralytic…)通过 import oneflow as torch 的形式迁徙为 OneFlow 后端(对应 YOLOv5 的 commit 为:48a85314bc80d8023c99bfb114cea98d71dd0591)。

相比 PyTorch,目前 YOLOv5 在 OneFlow 上进行小 batch 训练时有 5%-10% 的性能劣势,而训练大 batch 的性能与 PyTorch 持平。

须要阐明的是,本次公布的 OneFlow 后端的 One-YOLOv5 只是一个根底版本,还没有用任何优化技巧,置信在后续的一些定制化的性能优化技巧下(比方 nn.Graph 加持,算子的优化),OneFlow 能够持续晋升 YOLOv5 在 COCO 等数据集的训练速度,更无效缩短指标检测模型的训练工夫。

此外,咱们还推出了《YOLOv5 全面解析教程》,其中对 YOLOv5 的相干教程进行了汉化,并增加了一系列具体的代码解读、原理解说以及部署教程,并将逐渐装备相应的视频解说。置信这是一份很不错地从零开始深刻学习 YOLOv5 的材料,心愿帮忙你更好地了解和应用 YOLOv5。

  • 代码仓库地址:https://github.com/Oneflow-In…
  • 文档网站地址:https://start.oneflow.org/one…
  • OneFlow 装置办法:https://github.com/Oneflow-In…

欢送在 GitHub 上 Star One-YOLOv5 我的项目获取最新的动静,并在仓库提 Issue、PR。以下将具体介绍 One-YOLOv5 在 COCO 上的精度以及性能体现。

1、One-YOLOv5 与 Ultralytics/YOLOv5 精度统一

以 YOLOv5n 网络为例,result.csv
(https://oneflow-static.oss-cn…) 这个日志展现了基于 One-YOLOv5 在 COCO 上从零开始训练 YOLOv5n 网络的日志。下图展现了 box_loss , obj_loss, cls_loss,map_0.5, map_0.5:0.95 等指标在训练过程中的变动状况:

能够看到,最终在第 300 个 epoch 时,map_0.5 达到了 0.45174,map_0.5:0.95 达到了 0.27726。这与 Ultralytics/YOLOv5n 给出的精度数据统一。(https://github.com/ultralytic…,留神官网给出的精度指定 iou 为 0.65 的精度,而上述 csv 文件中是在 iou 为 0.60 下的精度,应用咱们训练的权重并把 iou 指定为 0.65 能够齐全对齐官网给出的精度数据)。

对于这一点,咱们能够应用 Ultralytics/YOLOv5n 来验证:

python val.py  --weights yolov5n.pt --data data/coco.yaml --img 640 --iou 0.60

输入:


val: data=data/coco.yaml, weights=['yolov5n.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.6, max_det=300, task=val, device=, workers=8, single_cls=False, augment=False, verbose=False, save_txt=False, save_hybrid=False, save_conf=False, save_json=True, project=runs/val, name=exp, exist_ok=False, half=False, dnn=False
YOLOv5 🚀 v6.1-384-g7fd9867 Python-3.8.13 torch-1.10.0+cu113 CUDA:0 (NVIDIA GeForce RTX 3080 Ti, 12054MiB)

cuda:0
Fusing layers... 
YOLOv5n summary: 213 layers, 1867405 parameters, 0 gradients, 4.5 GFLOPs
val: Scanning '/data/dataset/fengwen/coco/val2017.cache' images and labels... 4952 found, 48 missing, 0 empty, 0 corrupt: 100%|█████
                 Class     Images  Instances          P          R      mAP50   mAP50-95: 100%|██████████| 157/157 [00:40<00:00,  3.
                   all       5000      36335      0.573      0.432      0.456      0.277

上述输入能够阐明,One-YOLOv5n 与 Ultralytics/YOLOv5n 的精度齐全对齐。

在 One-YOLOv5n 从零开始训练 YOLOv5n 进行精度复现的命令为 (2 卡 DDP 模式):


python  -m oneflow.distributed.launch --nproc_per_node 2 train.py --data  data/coco.yaml  --weights ' ' --cfg models/yolov5n.yaml --batch 64

2、小 batch 训练,One-YOLOv5 性能更优

以下性能后果都是间接将 PyTorch 切换为 OneFlow 之后测试的,还没有做针对性优化,后续会在此基础上持续晋升 OneFlow 后端 YOLOv5 的训练速度。

在 3080Ti 的性能测试后果

单卡测试后果

  • 以下为 GTX 3080ti(12GB) 的 YOLOv5 测试后果(OneFlow 后端 vs PyTorch 后端)
  • 以下测试后果的数据配置均为 coco.yaml,模型配置也齐全一样,并记录训练完 COCO 数据集的 1 个 epoch 所需工夫
  • 因为 OneFlow Eager 目前 AMP 的反对还不欠缺,所以咱们提供的后果均为 FP32 模式下进行训练的性能后果
  • PyTorch 版本 yolov5 code base:https://github.com/ultralytic…
  • OneFlow 版本 yolov5 code base:https://github.com/Oneflow-In…
  • CUDA 版本 11.7, cuDNN 版本为 8.5.0
  • 测试命令(其中 batch 参数是动态变化的)为:
python train.py --batch 16 --cfg models/yolov5n.yaml --weights '' --data coco.yaml --img 640 --device 0 

能够看到,在 batch 比拟小时,OneFlow 后端的 YOLOv5 相比 PyTorch 有 5%-10% 的性能劣势,这得益于 OneFlow 的 Eager 运行时零碎能够更快的做 CUDA Kernel Launch。而 batch 比拟大的时候 OneFlow 后端的 YOLOv5 相比于 PyTorch 的性能根本持平,这是因为当 batch 比拟大时 CUDA Kernel Launch 的开销相比计算的开销会比拟小。

两卡 DDP 测试后果

  • 配置和单卡均统一
  • 测试命令(其中 batch 参数是动态变化的)为:
python -m oneflow.distributed.launch --nproc_per_node 2 train.py --batch 16 --data coco.yaml --weights '' --device 0,1

在 2 卡 DDP 模式下,得益于单卡的性能劣势,在 batch 比拟小时,OneFlow 后端的 YOLOv5 相比 PyTorch 的性能略微当先,而对于大 batch 来说,OneFlow 的性能相比 PyTorch 根本持平。

3、总结

基于 OneFlow 移植 Ultralytics 版的 YOLOv5,在精度训练达标的状况下能够在 batch 比拟小时获得一些性能劣势。此外,对想深刻理解 YOLOv5 的用户,咱们公布了《YOLOv5 全面解析教程》,心愿它能够成为帮忙你学习 YOLOv5 的绝佳材料。

欢送下载体验 OneFlow v0.8.0 最新版本:https://github.com/Oneflow-In…

正文完
 0