![]() | ![]() |
![]() | ![]() |
原图 | 目标检测: 目标检测是指从图像中检测出多个物体并标记它们的位置和类别。目标检测任务需要给出物体的类别和位置信息,通常使用边界框(bounding box)来表示。目标检测可以应用于自动驾驶、视频监控、人脸识别等领域。 |
图像分类: 图像分类是指给定一张图像,通过计算机视觉技术来判断它属于哪一类别。 图像分类是一种有监督学习任务,需要通过训练样本和标签来建立分类模型。在图像分类中,算法需要提取图像的特征,然后将其分类为预定义的类别之一。例如,图像分类可以用于识别手写数字、识别动物、区分汽车和自行车等。 | 实例分割: 实例分割是指从图像中检测出多个物体并标记它们的位置和类别,同时对每个物体进行像素级的分割。 实例分割要求更为精细的信息,因为它需要将物体的每个像素都分配给对应的物体。 实例分割可以应用于医学影像分析、自动驾驶、虚拟现实等领域。 |
在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 # 安装
后端 | GPU | metrics/mAP_0.5, | metrics/mAP_0.5:0.95, | wandb 日志 |
---|---|---|---|---|
OneFlow | 4 | 37.659 | 56.992 | One-YOLOv5s-default |
PyTorch | 1 | 37.65 | 56.663 | YOLOV5s-default |
数据 results.txt
启动指令: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
后端 | GPU | mAP_0.5:0.95(B) | mAP_0.5:0.95(M) | wandb 日志 |
---|---|---|---|---|
OneFlow | 8 | 37.558 | 31.402 | One-YOLOv5s-seg_v1.2.0 |
PyTorch | 1 | 37.705 | 31.651 | YOLOV5s-seg |
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
单卡 | amp | epoch | gpu | batch | 数据集 | 模型 | time(min) |
---|---|---|---|---|---|---|---|
OneFlow | False | 1 | 1 | 8 | coco | yolov5s-default | 18:49 |
PyTorch | False | 1 | 1 | 8 | coco | yolov5s-default | 21:56 |
OneFlow | False | 1 | 1 | 16 | coco | yolov5s-default | 14:34 |
PyTorch | False | 1 | 1 | 16 | coco | yolov5s-default | 17:46 |
OneFlow | False | 1 | 1 | 8 | coco | yolov5s-seg | 25:36 |
PyTorch | False | 1 | 1 | 8 | coco | yolov5s-seg | 33:16 |
OneFlow | False | 1 | 1 | 16 | coco | yolov5s-seg | 24:07 |
PyTorch | False | 1 | 1 | 16 | coco | yolov5s-seg | 29:55 |
- 机器 ( 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
记录了一些用户反馈的常见问题
出现满屏的误检框, 可能到原因场景太单一,泛化不够 ,更多可见我们关于 如何准备一个好的数据集介绍 或者导出onnx模型进行部署时代码有错误。
这个应该是让batch维度可以动态 你加了dynamic参数? 暂时不支持该参数,可以自己编辑onnx模型。相关教程请参考: https://github.com/Oneflow-Inc/one-yolov5/releases/download/v1.2.0_/openmmlab.pptx
模型导出onnx时,出现 /tmp/oneflow_model322
类似报错。oneflow新老版本兼容性问题:因为这个是之前旧版本创建的文件但是没清理,删了就可以解决了。
训练过程loss,map,检测框等可视化 我们适配了wandb
device选择这里因为CUDA_VISIBLE_DEVICES环境变量设置放在import oneflow之后会失败,导致device选择失败了,可以export CUDA_VISIBLE_DEVICES=1 这样子手动控制下。
autobatch功能 oneflow这边缺少个memory_reserved api ,我们会尽快补齐这个api,现在还是先手动指定下batch_size, 我们将在下个版本解决并且会直接支持导出batch维度为动态的模型。
Model | Size(MB) | Model | Size(MB) | Model | Size(MB) | Model | Size(MB) |
---|---|---|---|---|---|---|---|
yolov5n | 3.87MB | yolov5n6 | 6.86MB | yolov5n-cls | 4.87MB | yolov5n-seg | 4.11MB |
yolov5s | 14.12MB | yolov5s6 | 24.78MB | yolov5s-cls | 10.52MB | yolov5s-seg | 14.87MB |
yolov5m | 40.82MB | yolov5m6 | 68.96MB | yolov5m-cls | 24.89MB | yolov5m-seg | 42.36MB |
yolov5l | 89.29MB | yolov5l6 | 147.36MB | yolov5l-cls | 50.88MB | yolov5l-seg | 91.9MB |
yolov5x | 166.05MB | yolov5x6 | 269.62MB | yolov5x-cls | 92.03MB | yolov5x-seg | 170.01MB |
上一篇:数据库复试问题总结
下一篇:分享一个可以早点下班的开发小技巧