CV之DL之YOLOv6:YOLOv6的简介、安装和使用方法、案例应用之详细攻略
目录
相关论文
《YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications》翻译与解读
Abstract
YOLOv6的简介
1、 更新日志
2、 模型性能
旧版模型
量化模型
移动端模型指标
YOLOv6的安装和使用方法
1、安装
2、在自定义数据集上微调模型
单卡
多卡 (我们推荐使用 DDP 模式)
3、恢复训练
4、推理
5、部署
6、教程
7、第三方资源
YOLOv6的案例应用
相关论文
《YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications》翻译与解读
地址 | |
时间 | 最初版本在2022年6月提出 2022年9月7日 |
作者 | Chuyi Li, Lulu Li, Hongliang Jiang, Kaiheng Weng, Yifei Geng, Liang Li, Zaidan Ke, Qingyuan Li, Meng Cheng, Weiqiang Nie, Yiduo Li, Bo Zhang, Yufei Liang, Linyuan Zhou, Xiaoming Xu, Xiangxiang Chu, Xiaoming Wei, Xiaolin Wei |
总结 | 这篇论文描述了一种单阶段目标检测框架YOLOv6,用于工业应用。 背景痛点: >> 实时对象检测在工业应用中十分重要,需要既快速又准确。 >> 传统目标检测框架在速度和准确率之间需要权衡,难以满足工业实时要求。 具体解决方案: >> YOLOv6融合了网络设计、训练策略、测试技术、量化与优化方法等最新成果,构建出多种规模的部署就绪网络。 >> 对比其他框架,YOLOv6网络结构更复杂而优化,例如添加跨层连接和空间注意力模块。 >> 采用进阶训练策略如动量校准、混合精度训练等提升学习效果。 >> 使用多尺度测试、自适应量化等手段同时提升速度和精度。 核心特点: >> 实现实时检测要求速度和准确性。 >> 多种规模的网络可根据不同需求选择,满足个性化部署。 >> 相比同阶段其他主流检测器在速度和准确率上都有优势。 优势: >> 精度在同阶段检测器中领先,达到35.9%的AP率。 >> 量化版本也保持较高精度43.3%的AP率,同时速度提升至869FPS。 >> YOLOv6框架各模块协同优化,在保持高精度的同时也提升了最大限度的检测速度。 |
Abstract
For years, the YOLO series has been the de facto industry-level standard for efficient object detection. The YOLO community has prospered overwhelmingly to enrich its use in a multitude of hardware platforms and abundant scenarios. In this technical report, we strive to push its limits to the next level, stepping forward with an unwavering mindset for industry application. Considering the diverse requirements for speed and accuracy in the real environment, we extensively examine the up-to-date object detection advancements either from industry or academia. Specifically, we heavily assimilate ideas from recent network design, training strategies, testing techniques, quantization, and optimization methods. On top of this, we integrate our thoughts and practice to build a suite of deployment-ready networks at various scales to accommodate diversified use cases. With the generous permission of YOLO authors, we name it YOLOv6. We also express our warm welcome to users and contributors for further enhancement. For a glimpse of performance, our YOLOv6-N hits 35.9% AP on the COCO dataset at a throughput of 1234 FPS on an NVIDIA Tesla T4 GPU. YOLOv6-S strikes 43.5% AP at 495 FPS, outperforming other mainstream detectors at the same scale~(YOLOv5-S, YOLOX-S, and PPYOLOE-S). Our quantized version of YOLOv6-S even brings a new state-of-the-art 43.3% AP at 869 FPS. Furthermore, YOLOv6-M/L also achieves better accuracy performance (i.e., 49.5%/52.3%) than other detectors with a similar inference speed. We carefully conducted experiments to validate the effectiveness of each component. Our code is made available at this https URL. | 多年来,YOLO系列一直是高效目标检测的业界事实标准。YOLO社区极大地繁荣,丰富了其在多种硬件平台和丰富场景中的应用。在这份技术报告中,我们努力将其极限推向下一个水平,带着坚定的产业应用心态迈出了一步。 考虑到在真实环境中对速度和准确性的多样化要求,我们广泛研究了来自产业或学术界的最新目标检测进展。具体而言,我们大量吸收了最近的网络设计、训练策略、测试技术、量化和优化方法的思想。在此基础上,我们整合了自己的思考和实践,构建了一套可部署的、适应各种规模的网络,以适应多样化的用例。在YOLO作者的慷慨许可下,我们将其命名为YOLOv6,并对用户和贡献者表示热烈欢迎,期待进一步增强。关于性能的一瞥,我们的YOLOv6-N在NVIDIA Tesla T4 GPU上以1234 FPS的吞吐量在COCO数据集上达到了35.9%的AP。YOLOv6-S在495 FPS时取得了43.5%的AP,超过了同一规模的其他主流检测器(如YOLOv5-S、YOLOX-S和PPYOLOE-S)。我们的YOLOv6-S的量化版本甚至以869 FPS取得了43.3%的新的最先进AP。此外,YOLOv6-M/L在相似的推理速度下也取得了更好的准确性表现(即49.5%/52.3%),超过了其他同类检测器。我们仔细进行了实验证实每个组件的有效性。我们的代码可在此 https URL 上获取。 |
YOLOv6的简介
2022年6月23日,美团技术团队发布了YOLOv6。YOLOv6是一种单阶段目标检测框架,用于工业应用。YOLOv6是基于YOLO系列目标检测方法提出的,YOLO系列一直都是实时目标检测在工业级应用中的主流标准方法。YOLOv6融合了网络设计、训练策略、测试技术、量化与优化等多个最新成果,构建出多种规模的网络模型,以适应不同场景下的速度和精度要求。
与传统目标检测框架相比,YOLOv6在保持较高检测精度的同时,通过对模型和算法进行全面优化,能够实现更高的检测速度。作者报告YOLOv6-N模型在COCO数据集上实现35.9%的平均准确率, throughput达到1234 FPS;YOLOv6-S模型实现43.5%的平均准确率,速度为495 FPS,在同规模下优于其他主流检测器。
总体来说,YOLOv6是一种针对工业应用优化的实时单阶段目标检测框架,它集成了目标检测领域多个新成果,在保持高精度的基础上实现了显著提升的检测速度,很好满足工业场景下同时需要速度和准确率的检测需求。
1、 更新日志
- [2023.04.28] 发布 移动端轻量级模型 YOLOv6Lite. ⭐️ 移动端模型指标
- [2023.03.10] 发布 YOLOv6-Face. 🔥 人脸检测模型指标
- [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 v1.0 版本模型
2、 模型性能
模型 | 输入尺寸 | mAPval 0.5:0.95 | 速度T4 trt fp16 b1 (fps) | 速度T4 trt fp16 b32 (fps) | Params (M) | FLOPs (G) |
640 | 37.5 | 779 | 1187 | 4.7 | 11.4 | |
640 | 45.0 | 339 | 484 | 18.5 | 45.3 | |
640 | 50.0 | 175 | 226 | 34.9 | 85.8 | |
640 | 52.8 | 98 | 116 | 59.6 | 150.7 | |
1280 | 44.9 | 228 | 281 | 10.4 | 49.8 | |
1280 | 50.3 | 98 | 108 | 41.4 | 198.0 | |
1280 | 55.2 | 47 | 55 | 79.6 | 379.5 | |
1280 | 57.2 | 26 | 29 | 140.4 | 673.4 |
表格笔记
- 除了 YOLOv6-N6/S6 模型是训练了300轮的结果,其余模型均为自蒸馏训练之后的结果;
- mAP 和速度指标是在 COCO val2017 数据集上评估的,P5模型输入分辨率为 640×640,P6模型输入分辨率为 1280×1280;
- 速度是在 T4 上测试的,TensorRT 版本为 7.2;
- 复现 YOLOv6 的速度指标,请查看 速度测试 教程;
- YOLOv6 的参数和计算量是在推理模式下计算的;
旧版模型
模型 | 输入尺寸 | mAPval 0.5:0.95 | 速度T4 trt fp16 b1 (fps) | 速度T4 trt fp16 b32 (fps) | Params (M) | FLOPs (G) |
640 | 35.9300e 36.3400e | 802 | 1234 | 4.3 | 11.1 | |
640 | 40.3300e 41.1400e | 449 | 659 | 15.0 | 36.7 | |
640 | 43.5300e 43.8400e | 358 | 495 | 17.2 | 44.2 | |
640 | 49.5 | 179 | 233 | 34.3 | 82.2 | |
640 | 51.7 | 113 | 149 | 58.5 | 144.0 | |
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 的模型上测试的;
移动端模型指标
模型 | 输入尺寸 | mAPval 0.5:0.95 | sm8350 (ms) | mt6853 (ms) | sdm660 (ms) | Params (M) | FLOPs (G) |
320*320 | 22.4 | 7.99 | 11.99 | 41.86 | 0.55 | 0.56 | |
320*320 | 25.1 | 9.08 | 13.27 | 47.95 | 0.79 | 0.67 | |
320*320 | 28.0 | 11.37 | 16.20 | 61.40 | 1.09 | 0.87 | |
320*192 | 25.0 | 7.02 | 9.66 | 36.13 | 1.09 | 0.52 | |
224*128 | 18.9 | 3.63 | 4.99 | 17.76 | 1.09 | 0.24 |
表格笔记
- 从模型尺寸和输入图片比例两种角度,在构建了移动端系列模型,方便不同场景下的灵活应用。
- 所有权重都经过 400 个 epoch 的训练,并且没有使用蒸馏技术。
- mAP 和速度指标是在 COCO val2017 数据集上评估的,输入分辨率为表格中对应展示的。
- 使用 MNN 2.3.0 AArch64 进行速度测试。测速时,采用2个线程,并开启arm82加速,推理预热10次,循环100次。
- 高通888(sm8350)、天玑720(mt6853)和高通660(sdm660)分别对应高中低端不同性能的芯片,可以作为不同芯片下机型能力的参考。
- NCNN 速度测试教程可以帮助展示及复现 YOLOv6Lite 的 NCNN 速度结果。
YOLOv6的安装和使用方法
1、安装
git clone https://github.com/meituan/YOLOv6
cd YOLOv6
pip install -r requirements.txt
在 COCO 数据集上复现我们的结果
请参考教程 训练 COCO 数据集.
2、在自定义数据集上微调模型
单卡
# P5 models python tools/train.py --batch 32 --conf configs/yolov6s_finetune.py --data data/dataset.yaml --fuse_ab --device 0 # P6 models python tools/train.py --batch 32 --conf configs/yolov6s6_finetune.py --data data/dataset.yaml --img 1280 --device 0
多卡 (我们推荐使用 DDP 模式)
# P5 models 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 models 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: 增加anchor-based预测分支并使用联合锚点训练模式 (P6模型暂不支持此功能)
- 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
YOLOv6 支持不同的输入分辨率模式,详情请参见 如何设置输入大小.
3、恢复训练
如果您的训练进程中断了,您可以这样恢复先前的训练进程。
# 单卡训练
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 或 1280x1280)
# P5 models python tools/eval.py --data data/coco.yaml --batch 32 --weights yolov6s.pt --task val --reproduce_640_eval # P6 models python tools/eval.py --data data/coco.yaml --batch 32 --weights yolov6s6.pt --task val --reproduce_640_eval --img 1280
- verbose: 如果要打印每一类的精度信息,请设置为 True;
- do_coco_metric: 设置 True / False 来打开或关闭 pycocotools 的评估;
- do_pr_metric: 设置 True / False 来显示或不显示精度和召回的指标;
- config-file: 指定一个包含所有评估参数的配置文件,例如 yolov6n_with_eval_params.py
4、推理
首先,从 release页面 下载一个训练好的模型权重文件,或选择您自己训练的模型;
然后,通过 tools/infer.py
文件进行推理。
# P5 models python tools/infer.py --weights yolov6s.pt --source img.jpg / imgdir / video.mp4 # P6 models python tools/infer.py --weights yolov6s6.pt --img 1280 1280 --source img.jpg / imgdir / video.mp4
如果您想使用本地摄像头或者网络摄像头,您可以运行:
# P5 models python tools/infer.py --weights yolov6s.pt --webcam --webcam-addr 0 # P6 models python tools/infer.py --weights yolov6s6.pt --img 1280 1280 --webcam --webcam-addr 0
webcam-addr
可以是本地摄像头的 ID,或者是 RTSP 地址。
5、部署
6、教程
7、第三方资源
- YOLOv6 NCNN Android app demo: ncnn-android-yolov6 from FeiGeChuanShu
- YOLOv6 ONNXRuntime/MNN/TNN C++: YOLOv6-ORT, YOLOv6-MNN and YOLOv6-TNN from DefTruth
- YOLOv6 TensorRT Python: yolov6-tensorrt-python from Linaom1214
- YOLOv6 TensorRT Windows C++: yolort from Wei Zeng
- YOLOv6 web demo on Huggingface Spaces with Gradio.
- 教程: 如何用 YOLOv6 训练自己的数据集
- YOLOv6 在 Google Colab 上的推理 Demo
YOLOv6的案例应用
更新中……