Skip to content

Latest commit

 

History

History
244 lines (188 loc) · 13.6 KB

README_cn.md

File metadata and controls

244 lines (188 loc) · 13.6 KB

简体中文 | English

YOLOv6

官方论文: YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications

YOLOv6 提供了一系列面向各种工业应用场景的模型,包括微小级(nano),极小极(tiny)、小(small),中(medium),大模型(large)。为更好的实现精度和速度权衡,这些模型的结构会根据模型大小而有所不同。此外,我们还引入了一些策略和技巧方法来进一步提高性能,例如自蒸馏和更多的训练轮次,这些策略和技巧并不会增加模型推理延时。在工业部署时,我们采用通道蒸馏和图优化的量化感知训练来实现极致的推理性能。

YOLOv6-N 在 COCO 数据集上的 mAP 为 35.9% ,在 T4 显卡推理速度可达 1234 FPS。 YOLOv6-S 的 mAP 为 43.5%,推理速度为 495 FPS ,量化后的 YOLOv6-S 模型在 T4显卡 上的 FPS 可以加速到 869,mAP 为 43.3% 。 YOLOv6-T/M/L 也具有出色的性能,与其他检测器相比,我们的模型在基本相同的推理速度时,可以达到更高的精度。

更新日志

  • [2022.11.04] 发布 基础版模型 简化训练部署流程。
  • [2022.09.06] 定制化的模型量化加速方法 🚀 量化教程
  • [2022.09.05] 发布 M/L 模型,并且进一步提高了 N/T/S 模型的性能 ⭐️ 模型指标
  • [2022.06.23] 发布 N/T/S v1.0 版本模型。

模型指标

模型 输入尺寸 mAPval
0.5:0.95
速度T4
trt fp16 b1
(fps)
速度T4
trt fp16 b32
(fps)
Params
(M)
FLOPs
(G)
YOLOv6-N 640 35.9300e
36.3400e
802 1234 4.3 11.1
YOLOv6-T 640 40.3300e
41.1400e
449 659 15.0 36.7
YOLOv6-S 640 43.5300e
43.8400e
358 495 17.2 44.2
YOLOv6-M 640 49.5 179 233 34.3 82.2
YOLOv6-L-ReLU 640 51.7 113 149 58.5 144.0
YOLOv6-L 640 52.5 98 121 58.5 144.0
  • 速度是在 T4 上测试的,TensorRT 版本为 7.2;

量化模型 🚀

模型 输入尺寸 精度 mAPval
0.5:0.95
速度T4
trt b1
(fps)
速度T4
trt b32
(fps)
YOLOv6-N RepOpt 640 INT8 34.8 1114 1828
YOLOv6-N 640 FP16 35.9 802 1234
YOLOv6-T RepOpt 640 INT8 39.8 741 1167
YOLOv6-T 640 FP16 40.3 449 659
YOLOv6-S RepOpt 640 INT8 43.3 619 924
YOLOv6-S 640 FP16 43.5 377 541
  • 速度是在 T4 上测试的,TensorRT 版本为 8.4;
  • 精度是在训练 300 epoch 的模型上测试的;
  • mAP 和速度指标是在 COCO val2017 数据集上评估的,输入分辨率为 640×640;
  • 复现 YOLOv 6 的速度指标,请查看 速度测试 教程;
  • YOLOv6 的参数和计算量是在推理模式下计算的;
旧版模型
模型 输入尺寸 mAPval
0.5:0.95
速度V100
fp16 b32
(ms)
速度V100
fp32 b32
(ms)
速度T4
trt fp16 b1
(fps)
速度T4
trt fp16 b32
(fps)
Params
(M)
FLOPs
(G)
YOLOv6-N 416
640
30.8
35.0
0.3
0.5
0.4
0.7
1100
788
2716
1242
4.3
4.3
4.7
11.1
YOLOv6-T 640 41.3 0.9 1.5 425 602 15.0 36.7
YOLOv6-S 640 43.1 1.0 1.7 373 520 17.2 44.2

快速开始

安装
git clone https://github.com/meituan/YOLOv6
cd YOLOv6
pip install -r requirements.txt
训练

单卡

python tools/train.py --batch 32 --conf configs/yolov6s_finetune.py --data data/dataset.yaml --device 0

多卡 (我们推荐使用 DDP 模式)

python -m torch.distributed.launch --nproc_per_node 8 tools/train.py --batch 256 --conf configs/yolov6s_finetune.py --data data/dataset.yaml --device 0,1,2,3,4,5,6,7
  • conf: 配置文件路径,里面包含网络结构、优化器配置、超参数信息。如果您是在自己的数据集训练,我们推荐您使用yolov6n/s/m/l_finetune.py配置文件;
  • data: 数据集配置文件,以 COCO 数据集为例,您可以在 COCO 下载数据, 在这里下载 YOLO 格式标签
  • 确保您的数据集按照下面这种格式来组织;
├── coco
│   ├── annotations
│   │   ├── instances_train2017.json
│   │   └── instances_val2017.json
│   ├── images
│   │   ├── train2017
│   │   └── val2017
│   ├── labels
│   │   ├── train2017
│   │   ├── val2017
在COCO数据集复现我们的结果 ⭐️

Nano 模型

python -m torch.distributed.launch --nproc_per_node 4 tools/train.py \
									--batch 128 \
									--conf configs/yolov6n.py \
									--data data/coco.yaml \
									--epoch 400 \
									--device 0,1,2,3 \
									--name yolov6n_coco

Tiny 和 Small 模型

python -m torch.distributed.launch --nproc_per_node 8 tools/train.py \
									--batch 256 \
									--conf configs/yolov6s.py \ # configs/yolov6t.py
									--data data/coco.yaml \
									--epoch 400 \
									--device 0,1,2,3,4,5,6,7 \
									--name yolov6s_coco # yolov6t_coco

Medium 和 Large 模型

# 第一步: 训练一个基础模型
python -m torch.distributed.launch --nproc_per_node 8 tools/train.py \
									--batch 256 \
									--conf configs/yolov6m.py \ # configs/yolov6l.py
									--data data/coco.yaml \
									--epoch 300 \
									--device 0,1,2,3,4,5,6,7 \
									--name yolov6m_coco # yolov6l_coco


# 第二步: Self-distillation training
python -m torch.distributed.launch --nproc_per_node 8 tools/train.py \
									--batch 256 \ # 128 for distillation of yolov6l
									--conf configs/yolov6m.py \ # configs/yolov6l.py
									--data data/coco.yaml \
									--epoch 300 \
									--device 0,1,2,3,4,5,6,7 \
									--distill \
									--teacher_model_path runs/train/yolov6m_coco/weights/best_ckpt.pt \ # # yolov6l_coco
									--name yolov6m_coco # yolov6l_coco
恢复训练

如果您的训练进程中断了,您可以这样恢复先前的训练进程。

# 单卡训练
python tools/train.py --resume

# 多卡训练
python -m torch.distributed.launch --nproc_per_node 8 tools/train.py --resume

上面的命令将自动在 YOLOv6 目录中找到最新保存的模型,然后恢复训练。

您也可以通过 --resume 参数指定要恢复的模型路径

# 记得把 /path/to/your/checkpoint/path  替换为您要恢复训练的模型权重路径
--resume /path/to/your/checkpoint/path

这将从您提供的模型路径恢复训练。

评估 在 COCO val2017 数据集上复现我们的结果(输入分辨率 640x640) ⭐️
python tools/eval.py --data data/coco.yaml --batch 32 --weights yolov6s.pt --task val --reproduce_640_eval
  • verbose: 如果要打印每一类的精度信息,请设置为 True;
  • do_coco_metric: 设置 True / False 来打开或关闭 pycocotools 的评估;
  • do_pr_metric: 设置 True / False 来显示或不显示精度和召回的指标;
  • config-file: 指定一个包含所有评估参数的配置文件,例如 yolov6n_with_eval_params.py
推理

首先,从 release页面 下载一个训练好的模型权重文件,或选择您自己训练的模型;

然后,通过 tools/infer.py文件进行推理。

python tools/infer.py --weights yolov6s.pt --source img.jpg / imgdir / video.mp4
部署
教程
第三方资源