Oneflow-Inc/one-yolov5

记录使用YOLOv5n-cls模型进行分类任务训练

ccssu opened this issue · 2 comments

ccssu commented
  • 问题: 使用YOLOv5s-cls模型进行分类任务,但是在训练了yolov5n 和 yolov5s 模型店精度均未标 。

  • 原因定位

  • 解决方案

  • 结论
    跑了两次90个epochs的完整训练 , 采用同样的参数配置,发现两次的训练是精度是一致的,都没有达到 ultralytics/yolov5 官方给的 YOLOv5n-cls 训练精度, 无法训到目标精度是同步的版本问题。one-yolov5同步的是 ultralytics/yolov5中 v7.0 版本, ultralytics/yolov5 给的 是 v6.0的训练精度值 。

ccssu commented

原因定位

下面图片 均来自 wandb 日志: https://wandb.ai/wearmheart/test_debug_classify_loss?workspace=user-wearmheart

结论; 从日志分析可能是计算精度造成的精度不够。

  1. loss log

image

  1. 精度 log:
    image
ccssu commented
  • 机器 a100
  • 跑了两次90个epochs的完整训练 , 采用同样的参数配置,发现两次的训练是精度是一致的,都没有达到 ultralytics/yolov5 官方给的 YOLOv5n-cls 训练精度, 无法训到目标精度是同步的版本问题。one-yolov5同步的是 ultralytics/yolov5中 v7.0 版本, ultralytics/yolov5 给的 是 v6.0的训练精度值 。
后端 top1_acc top5_acc 可视化日志
目标 0.64 0.854
PyTorch 0.631 0.847 https://wandb.ai/wearmheart/torch-YOLOv5_v_1_2_0_train/runs/2p814s15/overview
OneFlow 0.635 0.847 https://wandb.ai/wearmheart/One-YOLOv5_v_1_2_0_train/runs/k42lcu6t/overview?workspace=user-wearmheart
OneFlow-PyTorch 0.004 0.000

注意

  • 验证方式 均是通过训练 的 best.xx 模型使用 指令 python classify/val.py --data ../datasets/imagenet --img 224 --weights path/to/best.xx

ultralytics/yolov5

启动指令
python -m torch.distributed.run --nproc_per_node 4  \
     classify/train.py \
    --model ~/one-yolov5/runs/yolov5n.pt \
    --data ../datasets/imagenet   \
    --img 224  \
    --batch 256 \
    --epochs 90 \
    --project  torch-YOLOv5_v_1_2_0_train \
    --pretrained False \
    --name yolov5n-default --lr0 0.1 --optimizer SGD \
    --device 0,1,2,4

YOLOv5 🚀 v7.0-116-g5c91dae Python-3.8.11 torch-1.13.0+cu117 CUDA:0 (NVIDIA A100-PCIE-40GB, 40389MiB)

               Class      Images    top1_acc    top5_acc
                 all       50000       0.631       0.847

one-yolov5

启动指令
python -m oneflow.distributed.launch --nproc_per_node  4  \
     classify/train.py \
    --model runs/yolov5n.pt \
    --data ../datasets/imagenet   \
    --img 224  \
    --batch 256 \
    --epochs 90 \
    --project  One-YOLOv5_v_1_2_0_train \
    --pretrained False \
    --name yolov5n-default \
    --multi_tensor_optimizer \
    --name yolov5n-default --lr0 0.1 --optimizer SGD \
    --device 0,1,2,3

YOLOv5 🚀 v1.2.0-40-gdf5c3be Python-3.8.11 oneflow-0.9.1.dev20230226+cu117 CUDA:0 (NVIDIA A100-PCIE-40GB, 40389MiB)

               Class      Images    top1_acc    top5_acc
                 all       50000       0.635       0.847