英语 | 简体中文
介绍
欢迎使用 DAMO-YOLO!这是由阿里巴巴达摩数据分析与智能实验室的TinyML团队开发的一种快速且准确的目标检测方法。它在性能上超过了先进的YOLO系列。DAMO-YOLO 基于 YOLO 进行了扩展,但加入了一些新技术,包括神经架构搜索(NAS)主干网、有效的重新参数化通用-FPN(RepGFPN)、轻量级头部与 AlignedOTA 标签分配以及蒸馏增强。更多详情,请参阅我们的 Arxiv 报告。此外,在这里您不仅可以找到强大的模型,还可以找到从训练到部署的高效训练策略和完整工具。
更新
- [2023/04/12: 发布 DAMO-YOLO v0.3.1!]
- 添加 701 类别的 DAMO-YOLO-S 模型,覆盖更多应用场景,并作为高质量的预训练模型提升下游任务的性能。
- 升级DAMO-YOLO-Nano系列模型,分别在1.56/3.69/6.04 Flops下实现32.3/38.2/40.5 mAP,并在Intel-CPU上实时运行耗时分别为4.08/5.05/6.69ms。
- 添加DAMO-YOLO-L模型,在使用T4-GPU时实现51.9 mAP,延迟仅为7.95ms。
- [2023/03/13: 发布 DAMO-YOLO v0.3.0!]
- 发布DAMO-YOLO-Nano,在仅使用 3.02GFlops的情况下实现 35.1 mAP。
- 升级优化器构建器,编辑优化器配置,您可以使用 Pytorch 支持的任何优化器。
- 升级数据加载管道和训练参数,显著提高了DAMO-YOLO模型的性能,例如DAMO-YOLO-T/S/M的mAP分别从43.0/46.8/50.0 增加到43.6/47.7/50.2。
- [2023/02/15: 第三届反无人机挑战赛基线模型发布。]
- 欢迎参加CVPR2023上的第三届反无人机挑战赛。挑战赛提供了基于DAMO-YOLO训练的基线模型,可以在DamoYolo_Anti-UAV-23_S找到。
- [2023/01/07: 发布 DAMO-YOLO v0.2.1!]
- 添加 TensorRT Int8 量化教程,在准确率仅损失 0.3% 的情况下,实现 19% 的速度提升。
- 添加通用演示工具,支持基于 TensorRT/Onnx/Torch 的视频/图像/相机推理。
- 添加更多行业应用模型,包括人体检测、安全帽检测、口罩检测和香烟检测。
- 添加第三方资源,包括DAMO-YOLO代码解读、自定义数据集微调实战例子。
- [2022/12/15: 发布 DAMO-YOLO v0.1.1!]
- 添加详细的自定义数据集微调教程。
- 解决了无标签数据(例如,ISSUE#30)引起的卡顿问题。尽管联系我们,我们全天候待命。
在线演示
- DAMO-YOLO-T、DAMO-YOLO-S、DAMO-YOLO-M 已集成到 ModelScope 中。现在ModelScope 支持训练!来尝试使用ModelScope提供的免费GPU资源运行DAMO-YOLO吧。
模型库
通用模型
<SOURCE_TEXT>
模型 | 大小 | mAPval 0.5:0.95 | 延迟 T4 TRT-FP16-BS1 | FLOPs (G) | 参数 (M) | 阿里云 下载 | 谷歌 下载 |
---|---|---|---|---|---|---|---|
DAMO-YOLO-T | 640 | 42.0 | 2.78 | 18.1 | 8.5 | torch,onnx | -- |
DAMO-YOLO-T* | 640 | 43.6 | 2.78 | 18.1 | 8.5 | torch,onnx | -- |
DAMO-YOLO-S | 640 | 46.0 | 3.83 | 37.8 | 16.3 | torch,onnx | -- |
DAMO-YOLO-S* | 640 | 47.7 | 3.83 | 37.8 | 16.3 | torch,onnx | -- |
DAMO-YOLO-M | 640 | 49.2 | 5.62 | 61.8 | 28.2 | torch,onnx | -- |
DAMO-YOLO-M* | 640 | 50.2 | 5.62 | 61.8 | 28.2 | torch,onnx | -- |
DAMO-YOLO-L | 640 | 50.8 | 7.95 | 97.3 | 42.1 | torch,onnx | -- |
DAMO-YOLO-L* | 640 | 51.9 | 7.95 | 97.3 | 42.1 | torch,onnx | -- |
传统模型
0.5:0.95 | 延迟 T4
TRT-FP16-BS1| FLOPs
(G)| 参数
(M)| 阿里云下载 | 谷歌下载| | ------ |:---: | :---: |:---:|:---: | :---: | :---:| :---:| |[DAMO-YOLO-T](./configs/damoyolo_tinynasL20_T.py) | 640 | 41.8 | 2.78 | 18.1 | 8.5 |[torch](https://idstcv.oss-cn-zhangjiakou.aliyuncs.com/DAMO-YOLO/clean_models/before_distill/damoyolo_tinynasL20_T_418.pth),[onnx](https://idstcv.oss-cn-zhangjiakou.aliyuncs.com/DAMO-YOLO/onnx/before_distill/damoyolo_tinynasL20_T_418.onnx)|[torch](https://drive.google.com/file/d/1-9NzCRKJZs3ea_n35seEYSpq3M_RkhcT/view?usp=sharing),[onnx](https://drive.google.com/file/d/1-7s8fqK5KC8z4sXCuh3N900chMtMSYri/view?usp=sharing)| |[DAMO-YOLO-T*](./configs/damoyolo_tinynasL20_T.py) | 640 | 43.0 | 2.78 | 18.1 | 8.5 |[torch](https://idstcv.oss-cn-zhangjiakou.aliyuncs.com/DAMO-YOLO/clean_models/damoyolo_tinynasL20_T.pth),[onnx](https://idstcv.oss-cn-zhangjiakou.aliyuncs.com/DAMO-YOLO/onnx/damoyolo_tinynasL20_T.onnx) |[torch](https://drive.google.com/file/d/1-6fBf_oe9vITSTYgQkaYklL94REz2zCh/view?usp=sharing),[onnx](https://drive.google.com/file/d/1-1lK83OwVKL4lgHTlbgEZ8pYMYZHhEtE/view?usp=sharing)| |[DAMO-YOLO-S](./configs/damoyolo_tinynasL25_S.py) | 640 | 45.6 | 3.83 | 37.8 | 16.3 |[torch](https://idstcv.oss-cn-zhangjiakou.aliyuncs.com/DAMO-YOLO/clean_models/before_distill/damoyolo_tinynasL25_S_456.pth),[onnx](https://idstcv.oss-cn-zhangjiakou.aliyuncs.com/DAMO-YOLO/onnx/before_distill/damoyolo_tinynasL25_S_456.onnx)|[torch](https://drive.google.com/file/d/1-0GV1lxUS6bLHTOs7aNojsItgjDT6rK8/view?usp=sharing),[onnx](https://drive.google.com/file/d/1--CaKMHm-SjLnprZDMksO-jnbGbV9Zhp/view?usp=sharing)| |[DAMO-YOLO-S*](./configs/damoyolo_tinynasL25_S.py) | 640 | 46.8 | 3.83 | 37.8 | 16.3 |[torch](https://idstcv.oss-cn-zhangjiakou.aliyuncs.com/DAMO-YOLO/clean_models/damoyolo_tinynasL25_S.pth),[onnx](https://idstcv.oss-cn-zhangjiakou.aliyuncs.com/DAMO-YOLO/onnx/damoyolo_tinynasL25_S.onnx) |[torch](https://drive.google.com/file/d/1-O-ObHN970GRVKkL1TiAxfoMCpYGJS6B/view?usp=sharing),[onnx](https://drive.google.com/file/d/1-NDqCpz2rs1IiKNyIzo1KSxoJACKV65N/view?usp=sharing)| |[DAMO-YOLO-M](./configs/damoyolo_tinynasL35_M.py) | 640 | 48.7 | 5.62 | 61.8 | 28.2 |[torch](https://idstcv.oss-cn-zhangjiakou.aliyuncs.com/DAMO-YOLO/clean_models/before_distill/damoyolo_tinynasL35_M_487.pth),[onnx](https://idstcv.oss-cn-zhangjiakou.aliyuncs.com/DAMO-YOLO/onnx/before_distill/damoyolo_tinynasL35_M_487.onnx)|[torch](https://drive.google.com/file/d/1-RMevyb9nwpDBeTPttiV_iwfsiW_M9ST/view?usp=sharing),[onnx](https://drive.google.com/file/d/1-Cs4ozjAhTH_W32tGnq_L5TfE22vAD_c/view?usp=sharing)| |[DAMO-YOLO-M*](./configs/damoyolo_tinynasL35_M.py) | 640 | 50.0 | 5.62 | 61.8 | 28.2 |[torch](https://idstcv.oss-cn-zhangjiakou.aliyuncs.com/DAMO-YOLO/clean_models/damoyolo_tinynasL35_M.pth),[onnx](https://idstcv.oss-cn-zhangjiakou.aliyuncs.com/DAMO-YOLO/onnx/damoyolo_tinynasL35_M.onnx)|[torch](https://drive.google.com/file/d/1-RoKaO7U9U1UrweJb7c4Hs_S_qKFDExc/view?usp=sharing),[onnx](https://drive.google.com/file/d/1-HRkLfGoFBjdQDiWudsS1zxicx53Pu5m/view?usp=sharing)|
- 我们报告了模型在COCO2017验证集上的mAP,使用多类别NMS。
- 该表中的延迟是未经过后处理(NMS)测量的。
- * 表示使用蒸馏训练的模型。
- 我们用S作为老师对T进行蒸馏,用M作为老师对S进行蒸馏,用L作为老师对M进行蒸馏,而L是自我蒸馏的。
轻量模型
模型 | 尺寸 | mAPval 0.5:0.95 | 延迟(ms) CPU OpenVino-Intel8163 | FLOPs (G) | 参数 (M) | 阿里云下载 | 谷歌下载 |
---|---|---|---|---|---|---|---|
DAMO-YOLO-Ns | 416 | 32.3 | 4.08 | 1.56 | 1.41 | torch,onnx | -- |
DAMO-YOLO-Nm | 416 | 38.2 | 5.05 | 3.69 | 2.71 | torch,onnx | -- |
DAMO-YOLO-Nl | 416 | 40.5 | 6.69 | 6.04 | 5.69 | torch,onnx | -- |
</SOURCE_TEXT> |
- 我们报告了在COCO2017验证集上的模型mAP,使用多类别NMS。
- 表格中的延迟是按照picodet没有后处理的计算方法测量的。
- 延迟基于OpenVINO-2022.3.0进行评估,使用以下命令:
# 导出onnx模型,启用--benchmark以忽略后处理 python tools/converter.py -f configs/damoyolo_tinynasL18_Ns.py -c ../damoyolo_tinynasL18_Ns.pth --batch_size 1 --img_size 416 --benchmark # 模型转换 mo --input_model damoyolo_tinynasL18_Ns.onnx --data_type FP16 # 延迟基准测试 ./benchmark_app -m damoyolo_tinynasL18_Ns.xml -i ./assets/dog.jpg -api sync -d CPU -b 1 -hint latency
701类别DAMO-YOLO模型
我们提供了针对通用目标检测的701类别的DAMO-YOLO-S模型,该模型在包括COCO、Objects365和OpenImage的大型数据集上进行过训练。该模型也可以作为下游任务的预训练模型,帮助您轻松实现更好的性能。
预训练模型 | 下游任务 | mAPval 0.5:0.95 | 阿里云下载 | 谷歌下载 |
---|---|---|---|---|
80类别-DAMO-YOLO-S | VisDrone | 24.6 | torch,onnx | - |
701类别-DAMO-YOLO-S | VisDrone | 26.6 | torch,onnx | - |
- 注意:可下载的模型是一个包含701类别数据集的预训练模型。我们展示了VisDrone的结果,以证明我们的预训练模型可以提升下游任务的性能。
快速开始
安装
步骤1. 安装DAMO-YOLO。
git clone https://github.com/tinyvision/damo-yolo.git
cd DAMO-YOLO/
conda create -n DAMO-YOLO python=3.7 -y
conda activate DAMO-YOLO
conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=10.2 -c pytorch
pip install -r requirements.txt
export PYTHONPATH=$PWD:$PYTHONPATH
步骤2. 安装pycocotools。
pip install cython;
pip install git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI # for Linux
pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI # for Windows
演示
步骤1. 从基准表中下载预训练的torch、onnx或tensorRT引擎,例如damoyolo_tinynasL25_S.pth、damoyolo_tinynasL25_S.onnx、damoyolo_tinynasL25_S.trt。
步骤2. 使用-f(配置文件名)指定您的检测器配置文件,使用--path指定输入数据路径,支持图像/视频/摄像机。例如:
# torch引擎使用图像
python tools/demo.py image -f ./configs/damoyolo_tinynasL25_S.py --engine ./damoyolo_tinynasL25_S.pth --conf 0.6 --infer_size 640 640 --device cuda --path ./assets/dog.jpg
# onnx引擎使用视频
python tools/demo.py video -f ./configs/damoyolo_tinynasL25_S.py --engine ./damoyolo_tinynasL25_S.onnx --conf 0.6 --infer_size 640 640 --device cuda --path your_video.mp4
# tensorRT引擎使用摄像头
python tools/demo.py camera -f ./configs/damoyolo_tinynasL25_S.py --engine ./damoyolo_tinynasL25_S.trt --conf 0.6 --infer_size 640 640 --device cuda --camid 0
在COCO上重现我们的结果
步骤1. 准备COCO数据集
cd <DAMO-YOLO Home>
ln -s /path/to/your/coco ./datasets/coco
步骤2. 通过指定-f(配置文件名)在COCO上重现我们的结果
python -m torch.distributed.launch --nproc_per_node=8 tools/train.py -f configs/damoyolo_tinynasL25_S.py
在您的数据上微调
详情请参阅自定义数据集教程。
评估
python -m torch.distributed.launch --nproc_per_node=8 tools/eval.py -f configs/damoyolo_tinynasL25_S.py --ckpt /path/to/your/damoyolo_tinynasL25_S.pth
定制tinynas骨干网络
步骤1. 如果您想定制自己的骨干网络,请参阅[MAE-NAS for DAMO-YOLO教程](https://github.com/alibaba/lightweight-neural-architecture-search/blob/main/scripts/damo-yolo/Tutorial_NAS_for_DAMO-YOLO_cn.md)。这是关于如何在延迟/Flops预算下获得最佳骨干网络的详细教程。步骤2. 在搜索过程完成后,您可以将配置文件中的结构文本替换为新的。最后,您可以设置骨干网络名称为TinyNAS_res或者TinyNAS_csp来获得自定义的ResNet或CSPNet风格的骨干网络。请注意TinyNAS_res和TinyNAS_csp之间的out_indices的区别。
structure = self.read_structure('tinynas_customize.txt')
TinyNAS = { 'name'='TinyNAS_res', # ResNet风格的Tinynas骨干网络
'out_indices': (2,4,5)}
TinyNAS = { 'name'='TinyNAS_csp', # CSPNet风格的Tinynas骨干网络
'out_indices': (2,3,4)}
部署
安装
步骤1. 安装ONNX。
pip install onnx==1.8.1
pip install onnxruntime==1.8.0
pip install onnx-simplifier==0.3.5
步骤2. 安装CUDA、CuDNN、TensorRT和pyCUDA
2.1 CUDA
wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
sudo sh cuda_10.2.89_440.33.01_linux.run
export PATH=$PATH:/usr/local/cuda-10.2/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.2/lib64
source ~/.bashrc
2.2 CuDNN
sudo cp cuda/include/* /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
2.3 TensorRT
cd TensorRT-7.2.1.6/python
pip install tensorrt-7.2.1.6-cp37-none-linux_x86_64.whl
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:TensorRT-7.2.1.6/lib
2.4 pycuda
pip install pycuda==2022.1
模型转换
现在我们支持trt_int8量化,您可以指定trt_type为int8来导出int8 tensorRT引擎。您也可以尝试部分量化,以在精度和延迟之间取得良好的平衡。详情请参阅部分量化。
# onnx 导出
python tools/converter.py -f configs/damoyolo_tinynasL25_S.py -c damoyolo_tinynasL25_S.pth --batch_size 1 --img_size 640
# trt 导出
python tools/converter.py -f configs/damoyolo_tinynasL25_S.py -c damoyolo_tinynasL25_S.pth --batch_size 1 --img_size 640 --trt --end2end --trt_eval
步骤2:在 coco_val 数据集上评估 trt 引擎。end2end 表示使用带 nms 的 trt 引擎进行评估。
python tools/trt_eval.py -f configs/damoyolo_tinynasL25_S.py -trt deploy/damoyolo_tinynasL25_S_end2end_fp16_bs1.trt --batch_size 1 --img_size 640 --end2end
步骤3:onnx 或 trt 引擎的推理演示,并通过 --path 指定测试图像/视频。end2end 表示使用带 nms 的 trt 引擎进行推理。
# onnx 推理
python tools/demo.py image -f ./configs/damoyolo_tinynasL25_S.py --engine ./damoyolo_tinynasL25_S.onnx --conf 0.6 --infer_size 640 640 --device cuda --path ./assets/dog.jpg
# trt 推理
python tools/demo.py image -f ./configs/damoyolo_tinynasL25_S.py --engine ./deploy/damoyolo_tinynasL25_S_end2end_fp16_bs1.trt --conf 0.6 --infer_size 640 640 --device cuda --path ./assets/dog.jpg --end2end
工业应用模型:
我们提供了 DAMO-YOLO 模型用于真实场景的应用,如下所示。更多强大的模型即将推出,敬请期待。
第三方资源
为了促进 DAMO-YOLO 用户之间的交流,我们在此部分收集了第三方资源。如果您有关于 DAMO-YOLO 的原创内容,请随时通过 xianzhe.xxz@alibaba-inc.com 联系我们。
- DAMO-YOLO 概述: 幻灯片(中文 | English), 视频(中文 | English).
- DAMO-YOLO 代码解释
- 自定义数据集微调实用示例
引用 DAMO-YOLO
如果您在研究中使用了 DAMO-YOLO,请使用以下 BibTeX 条目引用我们的工作:
@article{damoyolo,
title={DAMO-YOLO: A Report on Real-Time Object Detection Design},
author={Xianzhe Xu, Yiqi Jiang, Weihua Chen, Yilun Huang, Yuan Zhang and Xiuyu Sun},
journal={arXiv preprint arXiv:2211.15444v2},
year={2022},
}
@inproceedings{sun2022mae,
title={Mae-det: Revisiting maximum entropy principle in zero-shot nas for efficient object detection},
author={Sun, Zhenhong and Lin, Ming and Sun, Xiuyu and Tan, Zhiyu and Li, Hao and Jin, Rong},
booktitle={International Conference on Machine Learning},
pages={20810--20826},
year={2022},
organization={PMLR}
}
@inproceedings{jiang2022giraffedet,
title={GiraffeDet: A Heavy-Neck Paradigm for Object Detection},
author={yiqi jiang and Zhiyu Tan and Junyan Wang and Xiuyu Sun and Ming Lin and Hao Li},
booktitle={International Conference on Learning Representations},
year={2022},
}