一个更快的YOLOv5问世,附送全面中文解析教程

作为核算机视觉范畴的根底性技术,方针检测在业界具有广泛应用,而YOLO系列因其归纳功能较好,成为广受欢迎的首选结构。

这次,为了让用户深化了解 OneFlow 练习方针检测模型的可行性以及功能的优越性,咱们将 Ultralytics 版 YOLOv5(github.com/ultralytics… )通过 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 的材料,期望协助你更好地理解和运用 YOLOv5。

  • 代码仓库地址: github.com/Oneflow-Inc…

  • 文档网站地址: start.oneflow.org/oneflow-yol…

  • OneFlow 装置办法: github.com/Oneflow-Inc…

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

1

One-YOLOv5与Ultralytics/YOLOv5精度共同

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

一个更快的YOLOv5问世,附送全面中文解析教程

能够看到,终究在第 300 个 epoch 时,map_0.5 达到了 0.45174,map_0.5:0.95 达到了0.27726。这与 Ultralytics/YOLOv5n 给出的精度数据共同。(github.com/ultralytics… ,注意官网给出的精度指定 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:github.com/ultralytics…
  • OneFlow版别 yolov5 code base:github.com/Oneflow-Inc…
  • 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

一个更快的YOLOv5问世,附送全面中文解析教程

能够看到,在 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

一个更快的YOLOv5问世,附送全面中文解析教程

在 2 卡 DDP 形式下,得益于单卡的功能优势,在 batch 比较小时,OneFlow 后端的 YOLOv5 比较 PyTorch 的功能稍微领先 ,而关于大 batch 来说,OneFlow的功能比较 PyTorch 根本相等。

3

总结

基于 OneFlow 移植 Ultralytics 版的 YOLOv5 ,在精度练习合格的情况下能够在 batch 比较小时获得一些功能优势。此外,对想深化了解 YOLOv5 的用户,咱们发布了《YOLOv5全面解析教程》,期望它能够成为协助你学习 YOLOv5 的绝佳材料。

欢迎下载体会 OneFlow v0.8.0 最新版别:

github.com/Oneflow-Inc…