IncubatorShokuhou / one-yolov5

A more efficient yolov5 with oneflow backend 🎉🎉🎉

Home Page:https://start.oneflow.org/oneflow-yolo-doc

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

写在前面:本项目是基于 ultralytics 版 YOLOv5 源码改成 OneFlow 后端的结果,本工程的目的是做一个拥有更快训练速度的 YOLOv5 ,同时提供丰富的中文教程和源码细节解读,使得读者可以更加深入的了解 YOLOv5 。本 README 的其中一些部分也是直接用的 ultralytics 版 YOLOv5 README 的翻译,我们将相关链接替换为了 OneFlow 后端 YOLOv5 对应的链接。

最近新闻

为了说明使用 OneFlow 训练目标检测模型的可行性以及性能的优越性,最近我们将 ultralytics 版 YOLOv5 通过 import oneflow as torch 的方式迁移为了OneFlow后端(我们将尽量跟随 ultralytics/yolov5 开源的新Feature,比如对分类,分割的支持)。并对 YOLOv5 中相关的教程进行了汉化,添加了一系列详细的代码解读,原理讲解以及部署教程,希望使得 YOLOv5 项目对用户更加透明化。另外我们也将在性能这个角度进行深入探索,我们在单卡上凭借对YOLOv5的性能分析以及几个简单的优化将GTX 3090 FP32 YOLOv5s的训练速度提升了近20%。对于需要迭代300个Epoch的COCO数据集来说相比 ultralytics/yolov5 我们缩短了11.35个小时的训练时间。详情请看消费级显卡的春天,GTX 3090 YOLOv5s单卡完整训练COCO数据集缩短11.35个小时

  • 🎉 代码仓库地址
  • 🎉 文档网站地址
  • 🎉 OneFlow 安装方法 (注意⚠️: 目前OneFlow 需要安装 nightly 版本,等OneFlow后续新版本发布后可以安装稳定版。此外 OneFlow 目前仅对Linux平台有完整支持,请 Windows 和 Macos 用户注意)

不过即使你对 OneFlow 带来的性能提升不感兴趣,我们相信OneYOLOv5文档网站中对 ultralytics/yolov5 相关教程的汉化以及源码剖析也会是从零开始深入学习 YOLOv5 一份不错的资料。欢迎在仓库给我们提出宝贵的意见。🌟🌟🌟

文档

请查看 文档网站 获取关于训练,测试和推理的完整文档。

快速开始案例

注意⚠️:

  • oneflow目前不支持windows平台

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

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

快速开始案例

安装

Python>=3.7.0 的环境中克隆版本仓并安装 requirements.txt,包括 OneFlow nightly或者oneflow>=0.9.0

注意⚠️: 目前OneFlow 需要安装 nightly 版本,等OneFlow后续新版本发布后可以安装稳定版。

git clone https://github.com/Oneflow-Inc/one-yolov5  # 克隆
cd one-yolov5
pip install -r requirements.txt  # 安装
推理

YOLOv5 的 OneFlow Hub 推理. 模型 自动从最新YOLOv5 版本下载。

import oneflow as flow

# 模型
model = flow.hub.load('Oneflow-Inc/one-yolov5', 'yolov5s')  # or yolov5n - yolov5x6, custom

# 图像
img = 'https://raw.githubusercontent.com/Oneflow-Inc/one-yolov5/main/data/images/zidane.jpg'  # or file, Path, PIL, OpenCV, numpy, list

# 推理
results = model(img)

# 结果
results.print()  # or .show(), .save(), .crop(), .pandas(), etc.
用 detect.py 进行推理

detect.py 在各种数据源上运行推理, 其会从最新的 YOLOv5 版本 中自动下载 模型 并将检测结果保存到 runs/detect 目录。

python detect.py --source 0  # 网络摄像头
                          img.jpg  # 图像
                          vid.mp4  # 视频
                          path/  # 文件夹
                          'path/*.jpg'  # glob
                          'https://youtu.be/Zgi9g1ksQHc'  # YouTube
                          'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP 流
训练

以下指令再现了 YOLOv5 COCO 数据集结果. 模型数据集 自动从最新的YOLOv5 版本 中下载。YOLOv5n/s/m/l/x的训练时间在V100 GPU上是 1/2/4/6/8天(多GPU倍速). 尽可能使用最大的 --batch-size, 或通过 --batch-size -1 来实现 YOLOv5 自动批处理 批量大小显示为 V100-16GB。

python train.py --data coco.yaml --cfg yolov5n.yaml --weights '' --batch-size 128
                                       yolov5s                                64
                                       yolov5m                                40
                                       yolov5l                                24
                                       yolov5x                                16
教程和源码解读

持续新增中...

为什么选择 one-yolov5

消费级显卡的春天,GTX 3090 YOLOv5s单卡完整训练COCO数据集缩短11.35个小时

YOLOv5-P5 640 图像 (点击扩展)

图片注释 (点击扩展)
  • COCO AP val 表示 mAP@0.5:0.95 在5000张图像的COCO val2017数据集上,在256到1536的不同推理大小上测量的指标。
  • GPU Speed 衡量的是在 COCO val2017 数据集上使用 AWS p3.2xlarge V100实例在批量大小为32时每张图像的平均推理时间。
  • EfficientDet 数据来自 google/automl ,批量大小设置为 8。
  • 复现 mAP 方法: python val.py --task study --data coco.yaml --iou 0.7 --weights yolov5n6 yolov5s6 yolov5m6 yolov5l6 yolov5x6

CheckPoints

模型 ONNX版本模型 规模
(像素)
mAP验证
0.5:0.95
mAP验证
0.5
速度
CPU b1
(ms)
速度
V100 b1
(ms)
速度
V100 b32
(ms)
参数
(M)
浮点运算
@640 (B)
YOLOv5n YOLOv5n.onnx 640 28.0 45.7 45 6.3 0.6 1.9 4.5
YOLOv5s YOLOv5s.onnx 640 37.4 56.8 98 6.4 0.9 7.2 16.5
YOLOv5m YOLOv5m.onnx 640 45.4 64.1 224 8.2 1.7 21.2 49.0
YOLOv5l YOLOv5l.onnx 640 49.0 67.3 430 10.1 2.7 46.5 109.1
YOLOv5x YOLOv5x.onnx 640 50.7 68.9 766 12.1 4.8 86.7 205.7
YOLOv5n6 YOLOv5n6.onnx 1280 36.0 54.4 153 8.1 2.1 3.2 4.6
YOLOv5s6 YOLOv5s6.onnx 1280 44.8 63.7 385 8.2 3.6 12.6 16.8
YOLOv5m6 YOLOv5m6.onnx 1280 51.3 69.3 887 11.1 6.8 35.7 50.0
YOLOv5l6 YOLOv5l6.onnx 1280 53.7 71.3 1784 15.8 10.5 76.8 111.4
YOLOv5x6
+ [TTA][TTA]
YOLOv5x6.onnx 1280
1536
55.0
55.8
72.7
72.7
3136
-
26.2
-
19.4
-
140.7
-
209.8
-
表格注释 (点击扩展)
  • 所有检查点都以默认设置训练到300个时期. Nano和Small模型用 hyp.scratch-low.yaml hyps, 其他模型使用 hyp.scratch-high.yaml.
  • mAPval 值是 COCO val2017 数据集上的单模型单尺度的值。
    复现方法: python val.py --data coco.yaml --img 640 --conf 0.001 --iou 0.65
  • 使用 AWS p3.2xlarge 实例对COCO val图像的平均速度。不包括NMS时间(~1 ms/img)
    复现方法: python val.py --data coco.yaml --img 640 --task speed --batch 1
  • TTA 测试时数据增强 包括反射和比例增强. # 文档网站还没有,稍后更新。
    复现方法: python val.py --data coco.yaml --img 1536 --iou 0.7 --augment

About

A more efficient yolov5 with oneflow backend 🎉🎉🎉

https://start.oneflow.org/oneflow-yolo-doc

License:GNU General Public License v3.0


Languages

Language:Python 87.6%Language:Jupyter Notebook 11.8%Language:Shell 0.6%