One-YOLOv5 v1.2.0 正式发布。完整更新列表请查看链接: https://github.com/Oneflow-Inc/one-yolov5/releases/tag/v1.2.0 ,欢迎体验新版本,期待你的反馈。
1
新版本特性
1. 同步了 Ultralytics YOLOv5 的上游分支 v7.0,同时支持分类、目标检测、实例分割任务
2. 支持 flask_rest_api
3. 支持使用 wandb 对实验跟踪和可视化功能
4. oneflow_hub_support_pilimage
5. 为每个 batch 的 compute_loss 部分减少一次 h2d 和 cpu slice_update 操作
6. 优化 bbox_iou 函数和模型滑动平均部分,大幅提升训练性能 (一块 RTX 3090 加速训练 YOLOv5s,时间减少 11 个小时,速度提升 20%)
7. 兼容 FlowFlops,训练时可以展示模型的 FLOPs
(基于 Flowflops 详解深度学习网络的 FLOPs 和 MACs 计算方案)
|
|
|
|
原图 |
目标检测:目标检测是指从图像中检测出多个物体并标记它们的位置和类别。目标检测任务需要给出物体的类别和位置信息,通常使用边界框(bounding box)来表示。目标检测可以应用于自动驾驶、视频监控、人脸识别等领域。 |
图像分类: 图像分类是指给定一张图像,通过计算机视觉技术来判断它属于哪一类别。图像分类是一种有监督学习任务,需要通过训练样本和标签来建立分类模型。在图像分类中,算法需要提取图像的特征,然后将其分类为预定义的类别之一。例如,图像分类可以用于识别手写数字、识别动物、区分汽车和自行车等。 |
实例分割:实例分割是指从图像中检测出多个物体并标记它们的位置和类别,同时对每个物体进行像素级的分割。实例分割要求更为精细的信息,因为它需要将物体的每个像素都分配给对应的物体。实例分割可以应用于医学影像分析、自动驾驶、虚拟现实等领域。 |
2
快速开始
安装
在 Python>=3.7.0 的环境中克隆版本仓并安装 requirements.txt,包括 OneFlow nightly 或者 oneflow>=0.9.0 。
git clone https://github.com/Oneflow-Inc/one-yolov5 # 克隆
cd one-yolov5
pip install -r requirements.txt# 安装
-
检测模型训练示例:
https://start.oneflow.org/oneflow-yolo-doc/tutorials/03_chapter/quick_start.html#_4
-
分割和分类模型训练示例:
https://start.oneflow.org/oneflow-yolo-doc/tutorials/03_chapter/model_train.html
3
在 COCO 上的精度表现
yolov5s-default
启动指令:
python -m oneflow.distributed.launch --nproc_per_node 4\
train.py --batch-size 128 --data coco.yaml --weights " " --cfg models/yolov5s.yaml --img 640 --epochs 300
yolov5s-seg
OneFlow 后端启动指令
python -m oneflow.distributed.launch --nproc_per_node8\
segment/train.py \
--data coco.yaml \
--weights ' ' \
--cfg yolov5s-seg.yaml \
--img 640\
--batch-size 320\
--device 0,1,2,4\
--epochs 300\
--bbox_iou_optim --multi_tensor_optimize
4
在 COCO 上的单 GPU 性能表现
测试环境
- 机器( 8GPUNVIDIA GeForce RTX 3090, 24268MiB)
-oneflow.__version__= '0.9.1+cu117
- torch.__version__= '1.13.0+cu117'
- export NVIDIA_TF32_OVERRIDE=0# PyTorch使用FP32训练
# 测试指令:
# OneFlow后端
python train.py \
--batch-size 8 \
--data coco.yaml \
--weights ' ' \
--cfg models/yolov5s.yaml \
--img 640 \
--epochs 1\
--bbox_iou_optim --multi_tensor_optimize
python segment/train.py \
--data coco.yaml \
--weights ' ' \
--cfgmodels/segment/yolov5s-seg.yaml \
--img 640 \
--batch-size 8
--epochs 1 \
--bbox_iou_optim --multi_tensor_optimize
# PyTorch后端:
export NVIDIA_TF32_OVERRIDE=0 # 使用fp32
python\
train.py \
--batch-size 8 \
--data coco.yaml \
--weights ' ' \
--cfg models/yolov5s.yaml \
--img 640 \
--epochs 1\
export NVIDIA_TF32_OVERRIDE=0 # 使用fp32
python segment/train.py \
--data coco.yaml \
--weights ' ' \
--cfgmodels/segment/yolov5s-seg.yaml \
--img 640 \
--epochs 1 \
--batch-size 8
5
bug 修复
以下记录了一些用户反馈的常见问题:
1. 出现满屏的误检框。
可能到原因场景太单一,泛化不够 ,更多可见我们关于如何准备一个好的数据集的介绍或者导出 ONNX 模型进行部署时代码有错误。
2. 让 batch 维度可以动态,加了 dynamic 参数?
暂时不支持该参数,可以自己编辑 ONNX 模型。相关教程请参考:https://github.com/Oneflow-Inc/one-yolov5/releases/download/v1.2.0_/openmmlab.pptx
3. 模型导出 onnx 时,出现 /tmp/oneflow_model322 类似报错。
OneFlow 新老版本兼容性问题。这是旧版本创建的文件但是没清理,删除就可以解决。
4. 为训练过程 loss、map、检测框等可视化适配了 wandb (https://start.oneflow.org/oneflow-yolo-doc/tutorials/03_chapter/intro_to_wandb.html)
5. CUDA_VISIBLE_DEVICES 环境变量设置放在 import oneflow 之后会失败,导致 device 选择失败,可以通过 export CUDA_VISIBLE_DEVICES=1 手动控制。
6. autobatch 功能
OneFlow 缺少 memory_reserved API,我们会尽快补齐,现在需要先手动指定下 batch_size。下个版本将会解决并且会直接支持导出 batch 维度为动态的模型。
下个版本的展望
-
继续提升 One-YOLOv5 单卡模式的训练速度
-
解决目前训练时显存比 Ultralytics 偏大的问题
-
CPU 模式下支持 ONNX 模型的导出
-
OneFlow 研发的 amp train 目前已经开发完成正在测试中,下个版本将合并进 main 分支
-
autobatch 功能
常用预训练模型下载列表
其他人都在看
-
GPT-3/ChatGPT 复现的经验教训
-
超越 ChatGPT:大模型的智能极限
-
YOLOv5 解析教程:计算 mAP 用到的 Numpy 函数
-
ChatGPT 作者 Schulman:我们成功的秘密武器
-
比快更快,开源 Stable Diffusion 刷新作图速度
-
OneEmbedding: 单卡 训练 TB 级推荐模型不是梦
-
GLM 训练加速:性能最高提升 3 倍,显存节省 1/3
欢迎 Star、试用 OneFlow 新版本:https://github.com/Oneflow-Inc/oneflow/