English | 简体中文
欢迎来到DAMO-YOLO!DAMO-YOLO是由阿里巴巴达摩院智能计算实验室TinyML团队开发的一个兼顾速度与精度的目标检测框架,其效果超越了目前的一众YOLO系列方法,在实现SOTA的同时,保持了很高的推理速度。DAMO-YOLO是在YOLO框架基础上引入了一系列新技术,对整个检测框架进行了大幅的修改。具体包括:基于NAS搜索的高效检测骨干网络,更深的多尺度特征融合检测颈部,精简的检测头结构,以及引入蒸馏技术实现效果的进一步提升。具体细节可以参考我们的技术报告。模型之外,DAMO-YOLO还提供高效的训练策略以及便捷易用的部署工具,帮助您快速解决工业落地中的实际问题!
- [2023/04/12: DAMO-YOLO v0.3.1更新!]
- 增加可检测701类别的DAMO-YOLO-S模型,该模型可覆盖更多应用场景,同时可作为优质预训练模型,提升下游任务性能。
- 升级面向端上的DAMO-YOLO-Nano系列模型,仅用1.56/3.69/6.04GFlops即可在COCO数据集上达到32.3/38.2/40.5的mAP,在Intel-CPU平台上运行latency仅需4.08/5.05/6.69毫秒。
- 增加DAMO-YOLO-L模型,该模型在COCO数据集上mAP达到51.9,使用T4-GPU推理仅需7.95ms的推理时延。
- [2023/03/13: DAMO-YOLO v0.3.0更新!]
- 开源面向端上的DAMO-YOLO-Nano模型,仅用3.02GFLops在COCO数据集上达到35.1的mAP。
- 更新升级了optimizer builder,现在通过编辑config文件中的optimizer,即可使用任意一款Pytorch支持的优化器进行训练。
- 更新了data loader流程,给DAMO-YOLO全系列模型精度带来显著提升,其中DAMO-YOLO-S模型mAP从46.8提升到47.7,DAMO-YOLO-T模型mAP从43.0提升到43.6。
- [2023/02/15: 第三届无人机检测竞赛基准。]
- 欢迎大家参加CVPR2023举办的第三届无人机检测竞赛。比赛提供了基于DAMO-YOLO框架训练的基准模型,DamoYolo_Anti-UAV-23_S。
- [2023/01/07: DAMO-YOLO v0.2.1更新!]
- 增加TensorRT Int8部分量化教程,实现19%提速仅损失0.3%精度。
- 增加通用demo工具,支持TensorRT/Onnx/Torch引擎实现视频/图像/摄像头推理。
- 基于ModelScope增加工业应用模型,包括人体检测, 安全帽检测,口罩检测和香烟检测。
- 增加第三方资源板块,收集汇总第三方内容,目前包括DAMO-YOLO代码解读, DAMO-YOLO自有数据训练范例。
- [2022/12/15: DAMO-YOLO v0.1.1更新!]
- 增加详细的自有数据微调模型教程。
- 修复了空标签数据导致训练卡住的问题issue #30,如您使用中遇到任何问题,欢迎随时反馈,我们24小时待命。
- 线上Demo已整合至ModelScope,快去DAMO-YOLO-T,DAMO-YOLO-S,DAMO-YOLO-M 体验一下吧!ModelScope正免费提供GPU资源,并已支持DAMO-YOLO训练,快去试试吧!
Model | size | mAPval 0.5:0.95 |
Latency T4 TRT-FP16-BS1 |
FLOPs (G) |
Params (M) |
AliYun Download | Google Download |
---|---|---|---|---|---|---|---|
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 | -- |
旧版模型
Model | size | mAPval 0.5:0.95 |
Latency T4 TRT-FP16-BS1 |
FLOPs (G) |
Params (M) |
Download |
---|---|---|---|---|---|---|
DAMO-YOLO-T | 640 | 41.8 | 2.78 | 18.1 | 8.5 | torch,onnx |
DAMO-YOLO-T* | 640 | 43.0 | 2.78 | 18.1 | 8.5 | torch,onnx |
DAMO-YOLO-S | 640 | 45.6 | 3.83 | 37.8 | 16.3 | torch,onnx |
DAMO-YOLO-S* | 640 | 46.8 | 3.83 | 37.8 | 16.3 | torch,onnx |
DAMO-YOLO-M | 640 | 48.7 | 5.62 | 61.8 | 28.2 | torch,onnx |
DAMO-YOLO-M* | 640 | 50.0 | 5.62 | 61.8 | 28.2 | torch,onnx |
- 上表中汇报的是COCO2017 val集上的结果, 测试时使用multi-class NMS。
- 其中latency中不包括后处理时间(NMS)。
- * 表示模型训练时使用蒸馏。
- 蒸馏时,使用S作为老师蒸馏T,M作为老师蒸馏S,L作为老师蒸馏M,而L则进行自蒸馏。
Model | size | mAPval 0.5:0.95 |
Latency(ms) CPU OpenVino-Intel8163 |
FLOPs (G) |
Params (M) |
AliYun Download | Google Download |
---|---|---|---|---|---|---|---|
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 | -- |
- 上表中汇报的是COCO2017 val集上的结果, 测试时使用multi-class NMS。
- 其中latency中不包括后处理时间。
- Latency测试基于OpenVINO-2022.3.0,可以通过如下的配置修改和命令复现该测速结果:
# onnx export, enable --benchmark to ignore postprocess python tools/converter.py -f configs/damoyolo_tinynasL18_Ns.py -c ../damoyolo_tinynasL18_Ns.pth --batch_size 1 --img_size 416 --benchmark # model transform mo --input_model damoyolo_tinynasL18_Ns.onnx --data_type FP16 # latency benchmark ./benchmark_app -m damoyolo_tinynasL18_Ns.xml -i ./assets/dog.jpg -api sync -d CPU -b 1 -hint latency
我们提供了可检测701类别的DAMO-YOLO-S模型,该模型在包括COCO、Objects365和OpenImage在内的大型数据集上进行了训练,可覆盖更多应用场景。同时该模型可作为优质预训练模型,显著提升下游检测任务性能。
Pretrained Model | Downstream Task | mAPval 0.5:0.95 |
AliYun Download | Google Download |
---|---|---|---|---|
80-categories-DAMO-YOLO-S | VisDrone | 24.6 | torch,onnx | - |
701-categories-DAMO-YOLO-S | VisDrone | 26.6 | torch,onnx | - |
- 可下载链接为701类别的预训练的模型,我们此处展示了VisDrone的精度对比来表明我们的预训练模型可以提高下游任务的性能。
安装
步骤一. 安装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
步骤二. 安装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
Demo
步骤一. 从模型库中下载训练好的torch模型,onnx或tensorRt推理引擎,例如damoyolo_tinynasL25_S.pth,damoyolo_tinynasL25_S.onnx或damoyolo_tinynasL25_S.trt
步骤二. 执行命令时用-f选项指定配置(config)文件,--engine指定推理引擎,--path指定推理输入数据(支持图片和视频), --camid指定摄像头(仅在输入类型为camera时生效)。具体命令如下:
# 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上的精度
步骤一. 准备好COCO数据集,推荐将coco数据软链接到datasets目录下。
cd <DAMO-YOLO Home>
ln -s /path/to/your/coco ./datasets/coco
步骤二. 在COCO数据上进行训练,使用-f选项指定配置(config)文件。
python -m torch.distributed.launch --nproc_per_node=8 tools/train.py -f configs/damoyolo_tinynasL25_S.py
在自定义数据上微调模型
请参考自有数据微调模型教程。
在COCO val上测评训练好的模型
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自定义DAMO-YOLO骨干网络
步骤1. 如果您想自定义DAMO-YOLO骨干网络,可以参考适用于DAMO-YOLO的MAE-NAS教程,通过该教程您可以一步步学习如何使用latency/flops作为约束条件搜索该条件下的最优模型。
步骤2. 模型搜索结束后,您可以使用搜索得到的模型结构文件替换config中的structure text。把Backbone的name设置成TinyNAS_res或者TinyNAS_csp,将会分别得到ResNet或者CSPNet形式的TinyNAS骨干网络, 请注意到TinyNAS_res骨干网络的out_indices=(2,4,5)而TinyNAS_csp骨干网络的out_indices=(2,3,4)。
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 and 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
模型导出
模型导出工具现支持TensorRT Int8量化,通过指定trt_type即可将模型导出为TensorRT Int8推理引擎。另外也可以参考部分量化使用我们提供的部分量化工具来获得更好的性能与精度,
步骤一:将torch模型导出成onnx或者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
其中--end2end表示在导出的onnx或者TensorRT引擎中集成NMS模块,--trt_eval表示在TensorRT导出完成后即在coco2017 val上进行精度验证。
步骤二:已经完成TensorRT导出的模型也可由如下指令在coco2017 val上进行精度验证。--end2end表示待测试的TensorRT引擎包含NMS组件。
python tools/trt_eval.py -f configs/damoyolo_tinynasL25_S.py -trt deploy/damoyolo_tinynasL25_S_end2end.trt --batch_size 1 --img_size 640 --end2end
步骤三:使用已经导出的onnx或TensorRT引擎进行目标检测。
# 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模型,欢迎试用。请保持持续关注,更多的重磅模型即将释出!
人体检测 | 安全帽检测 | 人头检测 | 手机检测 |
---|---|---|---|
口罩检测 | 香烟检测 | 交通标识检测 | NFL-头盔检测 |
为了促进DAMO-YOLO用户间的交流,我们会定期收集汇总第三方资源到该板块,如果您有与DAMO-YOLO有关的原创内容,欢迎联系[email protected]。
- DAMO-YOLO总览:幻灯片,视频.
- DAMO-YOLO代码解读
- DAMO-YOLO自有数据训练范例
我们正在招聘研究型实习生,如果您对目标检测/模型量化/神经网络搜索等方向有兴趣,敬请将简历投递到[email protected]。
@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},
}