One-YOLOv5 v1.2.0发布:支持分类、检测、实例分割

news/2024/11/30 7:40:10/

0c15167e7b8765bcd720b3846731930c.jpeg
 

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 计算方案)

84d178ee3c660d7b9dc6e59c5538fe41.jpeg1249262d056ca043dc886b21b5713eb9.jpeg
b8235a2eaecbdeea7eb56891f905b215.jpeg142bd092b500aaf47f04cff662b4d31a.jpeg

原图

目标检测: 目标检测是指从图像中检测出多个物体并标记它们的位置和类别。目标检测任务需要给出物体的类别和位置信息,通常使用边界框(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

1efb169e1039104ae3998bceb935b3f6.png

启动指令:

 
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

09a9e74155fbaec7edcf3ba26d665848.png

OneFlow后端启动指令

 
python -m oneflow.distributed.launch --nproc_per_node  8  \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性能表现

04ae3211807814b39da9678849f959ea.png

测试环境

 
- 机器  ( 8GPU  NVIDIA 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_optimizepython segment/train.py \--data coco.yaml \--weights ' ' \--cfg  models/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 ' ' \--cfg  models/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功能

常用预训练模型下载列表

18ac6bbd0e6465b96259f4fb1023ae81.png

其他人都在看

  • 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.ppmy.cn/news/39115.html

相关文章

都2023了,学习自动化测试还有必要么?会不会浪费我时间

最近收到不少小伙伴私信提问,其中问得比较多的就是“学习自动化测试有那么重要吗?”。 我的回答是肯定的——很重要。 相信不少同学都有诸如此类的疑问,例如:“日常工作中好像用不上自动化?”、“手工点点点好像也可…

该不该放弃嵌入式,单片机这条路?

本文几乎浓缩了我从业10几年的精华,内容涵盖我转行、打工、创业的经历。 建议从头到尾不要错过一字一句,因为字里行间的经验之谈,或许能成为你人生重要转折点。 全文3700多字,写了6个多小时,如果你赶时间,建…

《花雕学AI》04:尝鲜功能丰富且容易上手的AI绘画工具——Leonardo AI

偶然机缘,我接触到了另外一个AI绘画平台:Leonardo.AI 它是一个新的 AI 图像平台,其输出质量可与目前最火的Midjourney 相媲美,当然差距还是有的。其链接是https://leonardo.ai/,界面如下图。 我填写了电邮地址&#xf…

中华好诗词(八)

701、相传纪晓岚将哪首诗重新断句为“黄河远上白云一片,孤城万仞山,羌笛何须怨,杨柳春风,不度玉门关。”(王之涣《凉州词》) 702、台湾歌手周传雄演唱的《寂寞沙洲冷》,请问歌名是出自于哪首词…

博客4:YOLOv5车牌识别实战教程:模型优化与部署

摘要:本篇博客将详细介绍如何对YOLOv5车牌识别模型进行优化和部署。我们将讨论模型优化策略,如模型蒸馏、模型剪枝和量化等。此外,我们还将介绍如何将优化后的模型部署到不同平台,如Web、移动端和嵌入式设备等。 车牌识别视频 正文: 4.1 模型优化策略 在实际应用中,我们…

【Maven】3—其他核心概念

⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以,麻烦各位看官顺手点个star~😊 如果文章对你有所帮助,可以点赞👍…

【C++从0到1】25、C++中嵌套使用循环

C从0到1全系列教程 1、实例代码 #include <iostream> // 包含头文件。 using namespace std; // 指定缺省的命名空间。int main() {// 超女分4个小组&#xff0c;每个小组有3名超女&#xff0c;在控制台显示每个超女的小组编号和组内编号。// 用一个循环…

【剧前爆米花--爪哇岛寻宝】常见的锁策略——乐观锁、读写锁、重量级锁、自旋锁、公平锁、可重入锁等

作者&#xff1a;困了电视剧 专栏&#xff1a;《JavaEE初阶》 文章分布&#xff1a;这是关于操作系统锁策略的文章&#xff0c;包括乐观锁、读写锁、重量级锁、自旋锁、公平锁、可重入锁等&#xff0c;希望对你有所帮助&#xff01; 目录 乐观锁和悲观锁 悲观锁 乐观锁 应用…