Skip to content

Latest commit

 

History

History
 
 

visdrone

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

VisDrone-DET 小目标检测模型

PaddleDetection团队提供了针对VisDrone-DET小目标数航拍场景的基于PP-YOLOE的检测模型,用户可以下载模型进行使用。整理后的COCO格式VisDrone-DET数据集下载链接,检测其中的10类,包括 pedestrian(1), people(2), bicycle(3), car(4), van(5), truck(6), tricycle(7), awning-tricycle(8), bus(9), motor(10),原始数据集下载链接。其他相关小目标数据集可参照 DataDownload.md

注意:

  • VisDrone-DET数据集包括train集6471张,val集548张,test_dev集1610张,test-challenge集1580张(未开放检测框标注),前三者均有开放检测框标注。
  • 模型均只使用train集训练,在val集和test_dev集上分别验证精度,test_dev集图片数较多,精度参考性较高。

原图训练,原图评估:

模型 COCOAPI mAPval
0.5:0.95
COCOAPI mAPval
0.5
COCOAPI mAPtest_dev
0.5:0.95
COCOAPI mAPtest_dev
0.5
MatlabAPI mAPtest_dev
0.5:0.95
MatlabAPI mAPtest_dev
0.5
下载 配置文件
PP-YOLOE-s 23.5 39.9 19.4 33.6 23.68 40.66 下载链接 配置文件
PP-YOLOE-P2-Alpha-s 24.4 41.6 20.1 34.7 24.55 42.19 下载链接 配置文件
PP-YOLOE+_SOD-s 25.1 42.8 20.7 36.2 25.16 43.86 下载链接 配置文件
PP-YOLOE-l 29.2 47.3 23.5 39.1 28.00 46.20 下载链接 配置文件
PP-YOLOE-P2-Alpha-l 30.1 48.9 24.3 40.8 28.47 48.16 下载链接 配置文件
PP-YOLOE+_SOD-l 31.9 52.1 25.6 43.5 30.25 51.18 下载链接 配置文件
PP-YOLOE-Alpha-largesize-l 41.9 65.0 32.3 53.0 37.13 61.15 下载链接 配置文件
PP-YOLOE-P2-Alpha-largesize-l 41.3 64.5 32.4 53.1 37.49 51.54 下载链接 配置文件
PP-YOLOE+_largesize-l 43.3 66.7 33.5 54.7 38.24 62.76 下载链接 配置文件
PP-YOLOE+_SOD-largesize-l 42.7 65.9 33.6 55.1 38.4 63.07 下载链接 配置文件

注意:

  • 上表中的模型均为使用原图训练,也使用原图评估预测,AP精度均为原图验证集上评估的结果。
  • VisDrone-DET数据集可使用原图训练,也可使用切图后训练,通过数据集统计分布分析,推荐使用原图训练,推荐直接使用带SOD的模型配置文件去训练评估和预测部署,在显卡算力有限时也可使用切图后训练。
  • 上表中的模型指标均是使用VisDrone-DET的train子集作为训练集,使用VisDrone-DET的val子集和test_dev子集作为验证集。
  • SOD表示使用基于向量的DFL算法和针对小目标的中心先验优化策略,并在模型的Neck结构中加入transformer
  • P2表示增加P2层(1/4下采样层)的特征,共输出4个PPYOLOEHead。
  • Alpha表示对CSPResNet骨干网络增加可一个学习权重参数Alpha参与训练。
  • largesize表示使用以1600尺度为基础的多尺度训练1920尺度预测,相应的训练batch_size也减小,以速度来换取高精度。
  • MatlabAPI测试是使用官网评测工具VisDrone2018-DET-toolkit
快速开始
# 训练
python -m paddle.distributed.launch --log_dir=logs/ --gpus 0,1,2,3,4,5,6,7 tools/train.py -c configs/smalldet/visdrone/ppyoloe_plus_sod_crn_l_80e_visdrone.yml --amp --eval
# 评估
python tools/eval.py -c configs/smalldet/visdrone/ppyoloe_plus_sod_crn_l_80e_visdrone.yml -o weights=https://paddledet.bj.bcebos.com/models/ppyoloe_plus_sod_crn_l_80e_visdrone.pdparams
# 预测
python tools/infer.py -c configs/smalldet/visdrone/ppyoloe_plus_sod_crn_l_80e_visdrone.yml -o weights=https://paddledet.bj.bcebos.com/models/ppyoloe_plus_sod_crn_l_80e_visdrone.pdparams --infer_img=demo/visdrone_0000315_01601_d_0000509.jpg --draw_threshold=0.25

子图训练,原图评估和拼图评估:

模型 数据集 SLICE_SIZE OVERLAP_RATIO 类别数 mAPval
0.5:0.95
APval
0.5
下载链接 配置文件
PP-YOLOE-l(子图直接评估) VisDrone-DET 640 0.25 10 38.5(子图val) 60.2 下载链接 配置文件
PP-YOLOE-l(原图直接评估) VisDrone-DET 640 0.25 10 29.7(原图val) 48.5 下载链接 配置文件
PP-YOLOE-l (切图拼图评估) VisDrone-DET 640 0.25 10 37.3(原图val) 59.5 下载链接 配置文件

注意:

  • 上表中的模型均为使用切图后的子图训练,评估预测时分为两种,直接使用原图评估预测,和使用子图自动拼成原图评估预测,AP精度均为原图验证集上评估的结果。。
  • SLICE_SIZE表示使用SAHI工具切图后子图的边长大小,OVERLAP_RATIO表示切图的子图之间的重叠率。
  • VisDrone-DET的模型与切图模型表格中的VisDrone-DET是同一个模型权重,但此处AP精度是在原图验证集上评估的结果,需要提前修改ppyoloe_crn_l_80e_sliced_visdrone_640_025.yml里的EvalDataset的默认的子图验证集路径为以下原图验证集路径
EvalDataset:
  !COCODataSet
    image_dir: VisDrone2019-DET-val
    anno_path: val.json
    dataset_dir: dataset/visdrone
快速开始
# 训练
python -m paddle.distributed.launch --log_dir=logs/ --gpus 0,1,2,3,4,5,6,7 tools/train.py -c configs/smalldet/ppyoloe_crn_l_80e_sliced_visdrone_640_025.yml --amp --eval
# 子图直接评估
python tools/eval.py -c configs/smalldet/ppyoloe_crn_l_80e_sliced_visdrone_640_025.yml -o weights=https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_80e_sliced_visdrone_640_025.pdparams
# 原图直接评估,注意需要提前修改此yml中的 `EvalDataset` 的默认的子图验证集路径 为 原图验证集路径:
python tools/eval.py -c configs/smalldet/ppyoloe_crn_l_80e_sliced_visdrone_640_025.yml -o weights=https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_80e_sliced_visdrone_640_025.pdparams
# 切图拼图评估,加上 --slice_infer,注意是使用的带 _slice_infer 后缀的yml配置文件
python tools/eval.py -c configs/smalldet/ppyoloe_crn_l_80e_sliced_visdrone_640_025_slice_infer.yml -o weights=https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_80e_sliced_visdrone_640_025.pdparams --slice_infer
# 切图拼图预测,加上 --slice_infer
python tools/infer.py -c configs/smalldet/ppyoloe_crn_l_80e_sliced_visdrone_640_025.yml -o weights=https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_80e_sliced_visdrone_640_025.pdparams --infer_img=demo/visdrone_0000315_01601_d_0000509.jpg --draw_threshold=0.25 --slice_infer

注意事项:

  • PP-YOLOE模型训练过程中使用8 GPUs进行混合精度训练,如果GPU卡数或者batch size发生了改变,你需要按照公式 lrnew = lrdefault * (batch_sizenew * GPU_numbernew) / (batch_sizedefault * GPU_numberdefault) 调整学习率。
  • 具体使用教程请参考ppyoloe
  • MatlabAPI测试是使用官网评测工具VisDrone2018-DET-toolkit

PP-YOLOE+_SOD 部署模型

网络模型 输入尺寸 导出后的权重(w/o NMS) ONNX(w/o NMS)
PP-YOLOE+_SOD-s 640 ( w/ nms) | ( w/o nms) ( w/ nms) | ( w/o nms)
PP-YOLOE+_SOD-l 640 ( w/ nms) | ( w/o nms) ( w/ nms) | ( w/o nms)
PP-YOLOE+_SOD-largesize-l 1920 ( w/ nms) | ( w/o nms) ( w/ nms) | ( w/o nms)

测速

1.参考Paddle Inference文档,下载并安装与你的CUDA, CUDNN和TensorRT相应的wheel包。 测速需要设置--run_benchmark=True, 你需要安装以下依赖pip install pynvml psutil GPUtil。 导出ONNX,你需要安装以下依赖pip install paddle2onnx

2.运行以下命令导出带NMS的模型和ONNX,并使用TensorRT FP16进行推理和测速

注意:

  • 由于NMS参数设置对速度影响极大,部署测速时可调整keep_top_knms_top_k,在只低约0.1 mAP精度的情况下加快预测速度,导出模型的时候也可这样设置:
    nms:
      name: MultiClassNMS
      nms_top_k: 1000 # 10000
      keep_top_k: 100 # 500
      score_threshold: 0.01
      nms_threshold: 0.6
    
# 导出带NMS的模型
python tools/export_model.py -c configs/smalldet/visdrone/ppyoloe_plus_sod_crn_l_largesize_80e_visdrone.yml -o weights=https://paddledet.bj.bcebos.com/models/ppyoloe_plus_sod_crn_l_largesize_80e_visdrone.pdparams trt=True

# 导出带NMS的ONNX
paddle2onnx --model_dir output_inference/ppyoloe_plus_sod_crn_l_largesize_80e_visdrone --model_filename model.pdmodel --params_filename model.pdiparams --opset_version 12 --save_file ppyoloe_plus_sod_crn_l_largesize_80e_visdrone.onnx

# 推理单张图片
CUDA_VISIBLE_DEVICES=0 python deploy/python/infer.py --model_dir=output_inference/ppyoloe_plus_sod_crn_l_largesize_80e_visdrone --image_file=demo/visdrone_0000315_01601_d_0000509.jpg --device=gpu --run_mode=trt_fp16

# 推理文件夹下的所有图片
CUDA_VISIBLE_DEVICES=0 python deploy/python/infer.py --model_dir=output_inference/ppyoloe_plus_sod_crn_l_largesize_80e_visdrone --image_dir=demo/ --device=gpu --run_mode=trt_fp16

# 单张图片普通测速
CUDA_VISIBLE_DEVICES=0 python deploy/python/infer.py --model_dir=output_inference/ppyoloe_plus_sod_crn_l_largesize_80e_visdrone --image_file=demo/visdrone_0000315_01601_d_0000509.jpg --device=gpu --run_benchmark=True

# 单张图片TensorRT FP16测速
CUDA_VISIBLE_DEVICES=0 python deploy/python/infer.py --model_dir=output_inference/ppyoloe_plus_sod_crn_l_largesize_80e_visdrone --image_file=demo/visdrone_0000315_01601_d_0000509.jpg --device=gpu --run_benchmark=True --run_mode=trt_fp16

3.运行以下命令导出不带NMS的模型和ONNX,并使用TensorRT FP16进行推理和测速,以及ONNX下FP16测速

# 导出带NMS的模型
python tools/export_model.py -c configs/smalldet/visdrone/ppyoloe_plus_sod_crn_l_largesize_80e_visdrone.yml -o weights=https://paddledet.bj.bcebos.com/models/ppyoloe_plus_sod_crn_l_largesize_80e_visdrone.pdparams trt=True exclude_nms=True

# 导出带NMS的ONNX
paddle2onnx --model_dir output_inference/ppyoloe_plus_sod_crn_l_largesize_80e_visdrone --model_filename model.pdmodel --params_filename model.pdiparams --opset_version 12 --save_file ppyoloe_plus_sod_crn_l_largesize_80e_visdrone.onnx

# 推理单张图片
CUDA_VISIBLE_DEVICES=0 python deploy/python/infer.py --model_dir=output_inference/ppyoloe_plus_sod_crn_l_largesize_80e_visdrone --image_file=demo/visdrone_0000315_01601_d_0000509.jpg --device=gpu --run_mode=trt_fp16

# 推理文件夹下的所有图片
CUDA_VISIBLE_DEVICES=0 python deploy/python/infer.py --model_dir=output_inference/ppyoloe_plus_sod_crn_l_largesize_80e_visdrone --image_dir=demo/ --device=gpu --run_mode=trt_fp16

# 单张图片普通测速
CUDA_VISIBLE_DEVICES=0 python deploy/python/infer.py --model_dir=output_inference/ppyoloe_plus_sod_crn_l_largesize_80e_visdrone --image_file=demo/visdrone_0000315_01601_d_0000509.jpg --device=gpu --run_benchmark=True

# 单张图片TensorRT FP16测速
CUDA_VISIBLE_DEVICES=0 python deploy/python/infer.py --model_dir=output_inference/ppyoloe_plus_sod_crn_l_largesize_80e_visdrone --image_file=demo/visdrone_0000315_01601_d_0000509.jpg --device=gpu --run_benchmark=True --run_mode=trt_fp16

# 单张图片ONNX TensorRT FP16测速
/usr/local/TensorRT-8.0.3.4/bin/trtexec --onnx=ppyoloe_plus_sod_crn_l_largesize_80e_visdrone.onnx --workspace=4096 --avgRuns=10 --shapes=input:1x3x1920x1920 --fp16

注意:

  • TensorRT会根据网络的定义,执行针对当前硬件平台的优化,生成推理引擎并序列化为文件。该推理引擎只适用于当前软硬件平台。如果你的软硬件平台没有发生变化,你可以设置enable_tensorrt_engine的参数use_static=True,这样生成的序列化文件将会保存在output_inference文件夹下,下次执行TensorRT时将加载保存的序列化文件。
  • PaddleDetection release/2.4及其之后的版本将支持NMS调用TensorRT,需要依赖PaddlePaddle release/2.3及其之后的版本

引用

@ARTICLE{9573394,
  author={Zhu, Pengfei and Wen, Longyin and Du, Dawei and Bian, Xiao and Fan, Heng and Hu, Qinghua and Ling, Haibin},
  journal={IEEE Transactions on Pattern Analysis and Machine Intelligence},
  title={Detection and Tracking Meet Drones Challenge},
  year={2021},
  volume={},
  number={},
  pages={1-1},
  doi={10.1109/TPAMI.2021.3119563}
}