English | 简体中文
YOLOv6
论文实现:
最新动态
- [2023.09.15] 发布 YOLOv6-分割。 🚀 性能
- [2023.04.28] 发布适用于移动设备或 CPU 的 YOLOv6Lite 模型。 ⭐️ 移动设备基准测试
- [2023.03.10] 发布 YOLOv6-人脸。 🔥 性能
- [2023.03.02] 将基础模型更新至 3.0 版本。
- [2023.01.06] 发布 P6 模型并提升 P5 模型性能。 ⭐️ 基准测试
- [2022.11.04] 发布基础模型以简化训练和部署过程。
- [2022.09.06] 自定义量化方法。 🚀 量化教程
- [2022.09.05] 发布 M/L 模型并更新性能提升的 N/T/S 模型。
- [2022.06.23] 发布性能卓越的 N/T/S 模型。
基准测试
模型 | 尺寸 | mAP验证集 0.5:0.95 | 速度T4 trt fp16 b1 (fps) | 速度T4 trt fp16 b32 (fps) | 参数量 (M) | 计算量 (G) |
---|---|---|---|---|---|---|
YOLOv6-N | 640 | 37.5 | 779 | 1187 | 4.7 | 11.4 |
YOLOv6-S | 640 | 45.0 | 339 | 484 | 18.5 | 45.3 |
YOLOv6-M | 640 | 50.0 | 175 | 226 | 34.9 | 85.8 |
YOLOv6-L | 640 | 52.8 | 98 | 116 | 59.6 | 150.7 |
YOLOv6-N6 | 1280 | 44.9 | 228 | 281 | 10.4 | 49.8 |
YOLOv6-S6 | 1280 | 50.3 | 98 | 108 | 41.4 | 198.0 |
YOLOv6-M6 | 1280 | 55.2 | 47 | 55 | 79.6 | 379.5 |
YOLOv6-L6 | 1280 | 57.2 | 26 | 29 | 140.4 | 673.4 |
表格说明
- 除了 YOLOv6-N6/S6 模型训练 300 个周期且不使用蒸馏外,所有检查点都使用自蒸馏进行训练。
- mAP 和速度结果是在 COCO val2017 数据集上评估的,P5 模型的输入分辨率为 640×640,P6 模型的输入分辨率为 1280x1280。
- 速度在搭载 TensorRT 7.2 的 T4 上测试。
- 参考测速教程复现 YOLOv6 的速度结果。
- YOLOv6 的参数量和计算量是在部署模型上估算的。
旧版模型
模型 | 尺寸 | mAP验证集 0.5:0.95 | 速度T4 trt fp16 b1 (fps) | 速度T4 trt fp16 b32 (fps) | 参数量 (M) | 计算量 (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 |
- 速度在搭载 TensorRT 7.2 的 T4 上测试。
量化模型 🚀
模型 | 尺寸 | 精度 | 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 |
- 速度测试使用TensorRT 8.4在T4上进行。
- 精度是在300轮训练的模型上测得的。
移动端基准测试
模型 | 尺寸 | mAPval 0.5:0.95 | sm8350 (ms) | mt6853 (ms) | sdm660 (ms) | 参数量 (M) | FLOPS (G) |
---|---|---|---|---|---|---|---|
YOLOv6Lite-S | 320*320 | 22.4 | 7.99 | 11.99 | 41.86 | 0.55 | 0.56 |
YOLOv6Lite-M | 320*320 | 25.1 | 9.08 | 13.27 | 47.95 | 0.79 | 0.67 |
YOLOv6Lite-L | 320*320 | 28.0 | 11.37 | 16.20 | 61.40 | 1.09 | 0.87 |
YOLOv6Lite-L | 320*192 | 25.0 | 7.02 | 9.66 | 36.13 | 1.09 | 0.52 |
YOLOv6Lite-L | 224*128 | 18.9 | 3.63 | 4.99 | 17.76 | 1.09 | 0.24 |
- 从模型大小和输入图像比例的角度,我们在移动端构建了一系列模型,以便在不同场景下灵活应用。
- 所有检查点都经过400轮训练,没有使用蒸馏。
- mAP和速度结果是在COCO val2017数据集上评估的,输入分辨率为表中的尺寸。
- 速度在MNN 2.3.0 AArch64上使用2个线程通过arm82加速测试。推理预热进行10次,循环执行100次。
- 高通888(sm8350)、天玑720(mt6853)和高通660(sdm660)分别对应高、中、低端的不同性能芯片,可作为模型在不同芯片下能力的参考。
- 参考测试NCNN速度教程复现YOLOv6Lite的NCNN速度结果。
快速开始
安装
git clone https://github.com/meituan/YOLOv6
cd YOLOv6
pip install -r requirements.txt
在COCO数据集上复现我们的结果
请参考训练COCO数据集。
在自定义数据集上微调
单GPU
# P5模型
python tools/train.py --batch 32 --conf configs/yolov6s_finetune.py --data data/dataset.yaml --fuse_ab --device 0
# P6模型
python tools/train.py --batch 32 --conf configs/yolov6s6_finetune.py --data data/dataset.yaml --img 1280 --device 0
多GPU(推荐使用DDP模式)
# P5模型
python -m torch.distributed.launch --nproc_per_node 8 tools/train.py --batch 256 --conf configs/yolov6s_finetune.py --data data/dataset.yaml --fuse_ab --device 0,1,2,3,4,5,6,7
# P6模型
python -m torch.distributed.launch --nproc_per_node 8 tools/train.py --batch 128 --conf configs/yolov6s6_finetune.py --data data/dataset.yaml --img 1280 --device 0,1,2,3,4,5,6,7
- fuse_ab:添加基于锚框的辅助分支并使用锚框辅助训练模式(目前不支持P6模型)
- conf:选择配置文件以指定网络/优化器/超参数。我们建议在自定义数据集上训练时使用yolov6n/s/m/l_finetune.py。
- data:准备数据集并在data.yaml中指定数据集路径(COCO,YOLO格式COCO标签)
- 确保您的数据集结构如下:
├── coco
│ ├── annotations
│ │ ├── instances_train2017.json
│ │ └── instances_val2017.json
│ ├── images
│ │ ├── train2017
│ │ └── val2017
│ ├── labels
│ │ ├── train2017
│ │ ├── val2017
│ ├── LICENSE
│ ├── README.txt
YOLOv6支持不同的输入分辨率模式。详情请参见如何设置输入大小。
恢复训练
如果训练过程中断,可以通过以下方式恢复训练
# 单GPU训练
python tools/train.py --resume
# 多GPU训练
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数据集上使用640×640或1280x1280分辨率复现mAP
# P5模型
python tools/eval.py --data data/coco.yaml --batch 32 --weights yolov6s.pt --task val --reproduce_640_eval
# P6模型
python tools/eval.py --data data/coco.yaml --batch 32 --weights yolov6s6.pt --task val --reproduce_640_eval --img 1280
- verbose:设置为True以打印每个类别的mAP。
- do_coco_metric:设置为True / False以启用/禁用pycocotools评估方法。
- do_pr_metric:设置为True / False以打印或不打印精确度和召回率指标。
- config-file:指定配置文件以定义所有评估参数,例如:yolov6n_with_eval_params.py
推理
首先,从YOLOv6 release下载预训练模型或使用您训练的模型进行推理。
然后,使用tools/infer.py
运行推理
# P5模型
python tools/infer.py --weights yolov6s.pt --source img.jpg / imgdir / video.mp4
# P6模型
python tools/infer.py --weights yolov6s6.pt --img 1280 1280 --source img.jpg / imgdir / video.mp4
如果你想在本地摄像头或网络摄像头上进行推理,可以运行:
# P5模型
python tools/infer.py --weights yolov6s.pt --webcam --webcam-addr 0
# P6模型
python tools/infer.py --weights yolov6s6.pt --img 1280 1280 --webcam --webcam-addr 0
webcam-addr
可以是本地摄像头的编号ID或RTSP地址。
第三方资源
-
使用Amazon Sagemaker训练YOLOv6: yolov6-sagemaker 由 ashwincc 提供
-
YOLOv6 NCNN Android应用演示: ncnn-android-yolov6 由 FeiGeChuanShu 提供
-
YOLOv6 ONNXRuntime/MNN/TNN C++: YOLOv6-ORT, YOLOv6-MNN 和 YOLOv6-TNN 由 DefTruth 提供
-
YOLOv6 TensorRT Python: yolov6-tensorrt-python 由 Linaom1214 提供
-
YOLOv6 网页演示 在 Huggingface Spaces 上使用 Gradio。
-
YouTube教程: 如何在自定义数据集上训练YOLOv6
-
博客文章: YOLOv6目标检测 – 论文解释和推理
常见问题(持续更新)
如果你有任何问题,欢迎加入我们的微信群讨论交流。