Skip to content

Latest commit

 

History

History
253 lines (208 loc) · 16.1 KB

File metadata and controls

253 lines (208 loc) · 16.1 KB

PP-Tracking Python端预测部署

在PaddlePaddle中预测引擎和训练引擎底层有着不同的优化方法, 预测引擎使用了AnalysisPredictor,专门针对推理进行了优化,是基于C++预测库的Python接口,该引擎可以对模型进行多项图优化,减少不必要的内存拷贝。如果用户在部署已训练模型的过程中对性能有较高的要求,我们提供了独立于PaddleDetection的预测脚本,方便用户直接集成部署。

主要包含两个步骤:

  • 导出预测模型
  • 基于Python进行预测

PaddleDetection在训练过程包括网络的前向和优化器相关参数,而在部署过程中,我们只需要前向参数,具体参考:导出模型 导出后目录下,包括infer_cfg.yml, model.pdiparams, model.pdiparams.info, model.pdmodel四个文件。

PP-Tracking也提供了AI Studio公开项目案例,教程请参考PP-Tracking之手把手玩转多目标跟踪

1. 对FairMOT模型的导出和预测

1.1 导出预测模型

# 命令行导出PaddleDetection发布的权重
CUDA_VISIBLE_DEVICES=0 python tools/export_model.py -c configs/mot/fairmot/fairmot_hrnetv2_w18_dlafpn_30e_576x320.yml -o weights=https://paddledet.bj.bcebos.com/models/mot/fairmot_hrnetv2_w18_dlafpn_30e_576x320.pdparams

# 命令行导出训完保存的checkpoint权重
CUDA_VISIBLE_DEVICES=0 python tools/export_model.py -c configs/mot/fairmot/fairmot_hrnetv2_w18_dlafpn_30e_576x320.yml -o weights=output/fairmot_hrnetv2_w18_dlafpn_30e_576x320/model_final.pdparams

# 或下载PaddleDetection发布的已导出的模型
wget https://bj.bcebos.com/v1/paddledet/models/mot/fairmot_hrnetv2_w18_dlafpn_30e_576x320.tar
tar -xvf fairmot_hrnetv2_w18_dlafpn_30e_576x320.tar

注意: 导出的模型默认会保存在output_inference目录下,如新下载请存放于对应目录下。

1.2 用导出的模型基于Python去预测

# 下载行人跟踪demo视频:
wget https://bj.bcebos.com/v1/paddledet/data/mot/demo/mot17_demo.mp4

# Python预测视频
python deploy/pptracking/python/mot_jde_infer.py --model_dir=output_inference/fairmot_hrnetv2_w18_dlafpn_30e_576x320 --video_file=mot17_demo.mp4 --device=GPU --threshold=0.5 --save_mot_txts --save_images

注意:

  • 跟踪模型是对视频进行预测,不支持单张图的预测,默认保存跟踪结果可视化后的视频,可添加--save_mot_txts表示保存跟踪结果的txt文件,或--save_images表示保存跟踪结果可视化图片。
  • 跟踪结果txt文件每行信息是frame,id,x1,y1,w,h,score,-1,-1,-1
  • --threshold表示结果可视化的置信度阈值,默认为0.5,低于该阈值的结果会被过滤掉,为了可视化效果更佳,可根据实际情况自行修改。
  • 对于多类别或车辆的FairMOT模型的导出和Python预测只需更改相应的config和模型权重即可。如:
job_name=mcfairmot_hrnetv2_w18_dlafpn_30e_576x320_visdrone
model_type=mot/mcfairmot
config=configs/${model_type}/${job_name}.yml
# 命令行导出模型
CUDA_VISIBLE_DEVICES=0 python tools/export_model.py -c ${config} -o weights=https://paddledet.bj.bcebos.com/models/mot/${job_name}.pdparams
# Python预测视频
python deploy/pptracking/python/mot_jde_infer.py --model_dir=output_inference/${job_name} --video_file={your video name}.mp4 --device=GPU --threshold=0.5 --save_mot_txts --save_images
  • 多类别跟踪结果txt文件每行信息是frame,id,x1,y1,w,h,score,cls_id,-1,-1
  • visdrone多类别跟踪demo视频可从此链接下载:wget https://bj.bcebos.com/v1/paddledet/data/mot/demo/visdrone_demo.mp4
  • bdd100k车辆跟踪和多类别demo视频可从此链接下载:wget https://bj.bcebos.com/v1/paddledet/data/mot/demo/bdd100k_demo.mp4

2. 对DeepSORT模型的导出和预测

2.1 导出预测模型

Step 1:导出检测模型

# 导出JDE YOLOv3行人检测模型
CUDA_VISIBLE_DEVICES=0 python tools/export_model.py -c configs/mot/deepsort/detector/jde_yolov3_darknet53_30e_1088x608_mix.yml -o weights=https://paddledet.bj.bcebos.com/models/mot/deepsort/jde_yolov3_darknet53_30e_1088x608_mix.pdparams
# 或导出PPYOLOv2行人检测模型
CUDA_VISIBLE_DEVICES=0 python tools/export_model.py -c configs/mot/deepsort/detector/ppyolov2_r50vd_dcn_365e_640x640_mot17half.yml -o weights=https://paddledet.bj.bcebos.com/models/mot/deepsort/ppyolov2_r50vd_dcn_365e_640x640_mot17half.pdparams

Step 2:导出行人ReID模型

# 导出PCB Pyramid ReID模型
CUDA_VISIBLE_DEVICES=0 python tools/export_model.py -c configs/mot/deepsort/reid/deepsort_pcb_pyramid_r101.yml -o reid_weights=https://paddledet.bj.bcebos.com/models/mot/deepsort/deepsort_pcb_pyramid_r101.pdparams
# 或者导出PPLCNet ReID模型
CUDA_VISIBLE_DEVICES=0 python tools/export_model.py -c configs/mot/deepsort/reid/deepsort_pplcnet.yml -o reid_weights=https://paddledet.bj.bcebos.com/models/mot/deepsort/deepsort_pplcnet.pdparams

2.2 用导出的模型基于Python去预测行人跟踪

# 下载行人跟踪demo视频:
wget https://bj.bcebos.com/v1/paddledet/data/mot/demo/mot17_demo.mp4

# 用导出的JDE YOLOv3行人检测模型和PCB Pyramid ReID模型
python deploy/pptracking/python/mot_sde_infer.py --model_dir=output_inference/jde_yolov3_darknet53_30e_1088x608_mix/ --reid_model_dir=output_inference/deepsort_pcb_pyramid_r101/ --video_file=mot17_demo.mp4 --device=GPU --threshold=0.5 --save_mot_txts --save_images

# 或用导出的PPYOLOv2行人检测模型和PPLCNet ReID模型
python deploy/pptracking/python/mot_sde_infer.py --model_dir=output_inference/ppyolov2_r50vd_dcn_365e_640x640_mot17half/ --reid_model_dir=output_inference/deepsort_pplcnet/ --video_file=mot17_demo.mp4 --device=GPU --threshold=0.5 --scaled=True --save_mot_txts --save_images

2.3 用导出的模型基于Python去预测车辆跟踪

# 下载车辆检测PicoDet导出的模型:
wget https://paddledet.bj.bcebos.com/models/mot/deepsort/picodet_l_640_aic21mtmct_vehicle.tar
tar -xvf picodet_l_640_aic21mtmct_vehicle.tar
# 或者车辆检测PP-YOLOv2导出的模型:
wget https://paddledet.bj.bcebos.com/models/mot/deepsort/ppyolov2_r50vd_dcn_365e_aic21mtmct_vehicle.tar
tar -xvf ppyolov2_r50vd_dcn_365e_aic21mtmct_vehicle.tar

# 下载车辆ReID导出的模型:
wget https://paddledet.bj.bcebos.com/models/mot/deepsort/deepsort_pplcnet_vehicle.tar
tar -xvf deepsort_pplcnet_vehicle.tar

# 用导出的PicoDet车辆检测模型和PPLCNet车辆ReID模型
python deploy/pptracking/python/mot_sde_infer.py --model_dir=picodet_l_640_aic21mtmct_vehicle/ --reid_model_dir=deepsort_pplcnet_vehicle/ --device=GPU --scaled=True --threshold=0.5 --video_file={your video}.mp4 --save_mot_txts --save_images

# 用导出的PP-YOLOv2车辆检测模型和PPLCNet车辆ReID模型
python deploy/pptracking/python/mot_sde_infer.py --model_dir=ppyolov2_r50vd_dcn_365e_aic21mtmct_vehicle/ --reid_model_dir=deepsort_pplcnet_vehicle/ --device=GPU --scaled=True --threshold=0.5 --video_file={your video}.mp4 --save_mot_txts --save_images

注意:

  • 跟踪模型是对视频进行预测,不支持单张图的预测,默认保存跟踪结果可视化后的视频,可添加--save_mot_txts(对每个视频保存一个txt)或--save_images表示保存跟踪结果可视化图片。
  • 跟踪结果txt文件每行信息是frame,id,x1,y1,w,h,score,-1,-1,-1
  • --threshold表示结果可视化的置信度阈值,默认为0.5,低于该阈值的结果会被过滤掉,为了可视化效果更佳,可根据实际情况自行修改。
  • --scaled表示在模型输出结果的坐标是否已经是缩放回原图的,如果使用的检测模型是JDE的YOLOv3则为False,如果使用通用检测模型则为True。
  • DeepSORT算法不支持多类别跟踪,只支持单类别跟踪,且ReID模型最好是与检测模型同一类别的物体训练过的,比如行人跟踪最好使用行人ReID模型,车辆跟踪最好使用车辆ReID模型。

3. 跨境跟踪模型的导出和预测

3.1 导出预测模型

Step 1:下载导出的检测模型

wget https://paddledet.bj.bcebos.com/models/mot/deepsort/picodet_l_640_aic21mtmct_vehicle.tar
tar -xvf picodet_l_640_aic21mtmct_vehicle.tar
# 或者
wget https://paddledet.bj.bcebos.com/models/mot/deepsort/ppyolov2_r50vd_dcn_365e_aic21mtmct_vehicle.tar
tar -xvf ppyolov2_r50vd_dcn_365e_aic21mtmct_vehicle.tar

Step 2:下载导出的ReID模型

wget https://paddledet.bj.bcebos.com/models/mot/deepsort/deepsort_pplcnet_vehicle.tar
tar -xvf deepsort_pplcnet_vehicle.tar

3.2 用导出的模型基于Python去做跨镜头跟踪

# 下载demo测试视频
wget https://paddledet.bj.bcebos.com/data/mot/demo/mtmct-demo.tar
tar -xvf mtmct-demo.tar

# 用导出的PicoDet车辆检测模型和PPLCNet车辆ReID模型
python deploy/pptracking/python/mot_sde_infer.py --model_dir=picodet_l_640_aic21mtmct_vehicle/ --reid_model_dir=deepsort_pplcnet_vehicle/ --mtmct_dir=mtmct-demo --mtmct_cfg=mtmct_cfg --device=GPU --scaled=True --threshold=0.5 --save_mot_txts --save_images

# 用导出的PP-YOLOv2车辆检测模型和PPLCNet车辆ReID模型
python deploy/pptracking/python/mot_sde_infer.py --model_dir=ppyolov2_r50vd_dcn_365e_aic21mtmct_vehicle/ --reid_model_dir=deepsort_pplcnet_vehicle/ --mtmct_dir=mtmct-demo --mtmct_cfg=mtmct_cfg --device=GPU --scaled=True --threshold=0.5 --save_mot_txts --save_images

注意:

  • 跟踪模型是对视频进行预测,不支持单张图的预测,默认保存跟踪结果可视化后的视频,可添加--save_mot_txts(对每个视频保存一个txt),或--save_images表示保存跟踪结果可视化图片。
  • 跨镜头跟踪结果txt文件每行信息是camera_id,frame,id,x1,y1,w,h,-1,-1
  • --threshold表示结果可视化的置信度阈值,默认为0.5,低于该阈值的结果会被过滤掉,为了可视化效果更佳,可根据实际情况自行修改。
  • --scaled表示在模型输出结果的坐标是否已经是缩放回原图的,如果使用的检测模型是JDE的YOLOv3则为False,如果使用通用检测模型则为True。
  • DeepSORT算法不支持多类别跟踪,只支持单类别跟踪,且ReID模型最好是与检测模型同一类别的物体训练过的,比如行人跟踪最好使用行人ReID模型,车辆跟踪最好使用车辆ReID模型。
  • --mtmct_dir是MTMCT预测的某个场景的文件夹名字,里面包含该场景不同摄像头拍摄视频的图片文件夹,其数量至少为两个。
  • --mtmct_cfg是MTMCT预测的某个场景的配置文件,里面包含该一些trick操作的开关和该场景摄像头相关设置的文件路径,用户可以自行更改相关路径以及设置某些操作是否启用。

4. API调用方式:

4.1 FairMOT模型API调用

import mot_jde_infer

# 1.model config and weights
model_dir = 'fairmot_hrnetv2_w18_dlafpn_30e_576x320/'

# 2.inference data
video_file = 'test.mp4'
image_dir = None

# 3.other settings
device = 'CPU' # device should be CPU, GPU or XPU
threshold = 0.3
output_dir = 'output'

# mot predict
mot_jde_infer.predict_naive(model_dir, video_file, image_dir, device, threshold, output_dir)

注意:

  • 以上代码必须进入目录PaddleDetection/deploy/pptracking/python下执行。
  • 支持对视频和图片文件夹进行预测,不支持单张图的预测,video_fileimage_dir不能同时为None,推荐使用video_file,而image_dir需直接存放命名顺序规范的图片。
  • 默认会保存跟踪结果可视化后的图片和视频,以及跟踪结果txt文件,默认不会进行轨迹可视化和流量统计。

4.2 DeepSORT模型API调用

import mot_sde_infer

# 1.model config and weights
model_dir = 'ppyolov2_r50vd_dcn_365e_aic21mtmct_vehicle/'
reid_model_dir = 'deepsort_pplcnet_vehicle/'

# 2.inference data
video_file = 'test.mp4'
image_dir = None

# 3.other settings
scaled = True # set False only when use JDE YOLOv3
device = 'CPU' # device should be CPU, GPU or XPU
threshold = 0.3
output_dir = 'output'

# 4. MTMCT settings, default None
mtmct_dir = None
mtmct_cfg = None

# mot predict
mot_sde_infer.predict_naive(model_dir,
                            reid_model_dir,
                            video_file,
                            image_dir,
                            mtmct_dir,
                            mtmct_cfg,
                            scaled,
                            device,
                            threshold,
                            output_dir)

注意:

  • 以上代码必须进入目录PaddleDetection/deploy/pptracking/python下执行。
  • 支持对视频和图片文件夹进行预测,不支持单张图的预测,video_fileimage_dir--mtmct_dir不能同时为None,推荐使用video_file,而image_dir需直接存放命名顺序规范的图片,--mtmct_dir不为None表示是进行的MTMCT跨镜头跟踪任务。
  • 默认会保存跟踪结果可视化后的图片和视频,以及跟踪结果txt文件,默认不会进行轨迹可视化和流量统计。
  • --scaled表示在模型输出结果的坐标是否已经是缩放回原图的,如果使用的检测模型是JDE的YOLOv3则为False,如果使用通用检测模型则为True。
  • --mtmct_dir是MTMCT预测的某个场景的文件夹名字,里面包含该场景不同摄像头拍摄视频的图片文件夹,其数量至少为两个。
  • --mtmct_cfg是MTMCT预测的某个场景的配置文件,里面包含该一些trick操作的开关和该场景摄像头相关设置的文件路径,用户可以自行更改相关路径以及设置某些操作是否启用。
  • 开启MTMCT预测必须将video_fileimage_dir同时设置为None,且--mtmct_dir--mtmct_cfg都必须不为None。

5. 参数说明:

参数 是否必须 含义
--model_dir Yes 上述导出的模型路径
--image_file Option 需要预测的图片
--image_dir Option 要预测的图片文件夹路径
--video_file Option 需要预测的视频
--camera_id Option 用来预测的摄像头ID,默认为-1(表示不使用摄像头预测,可设置为:0 - (摄像头数目-1) ),预测过程中在可视化界面按q退出输出预测结果到:output/output.mp4
--device Option 运行时的设备,可选择CPU/GPU/XPU,默认为CPU
--run_mode Option 使用GPU时,默认为paddle, 可选(paddle/trt_fp32/trt_fp16/trt_int8)
--batch_size Option 预测时的batch size,在指定image_dir时有效,默认为1
--threshold Option 预测得分的阈值,默认为0.5
--output_dir Option 可视化结果保存的根目录,默认为output/
--run_benchmark Option 是否运行benchmark,同时需指定--image_file--image_dir,默认为False
--enable_mkldnn Option CPU预测中是否开启MKLDNN加速,默认为False
--cpu_threads Option 设置cpu线程数,默认为1
--trt_calib_mode Option TensorRT是否使用校准功能,默认为False。使用TensorRT的int8功能时,需设置为True,使用PaddleSlim量化后的模型时需要设置为False
--do_entrance_counting Option 是否统计出入口流量,默认为False
--draw_center_traj Option 是否绘制跟踪轨迹,默认为False
--mtmct_dir Option 需要进行MTMCT跨境头跟踪预测的图片文件夹路径,默认为None
--mtmct_cfg Option 需要进行MTMCT跨境头跟踪预测的配置文件路径,默认为None

说明:

  • 参数优先级顺序:camera_id > video_file > image_dir > image_file
  • run_mode:paddle代表使用AnalysisPredictor,精度float32来推理,其他参数指用AnalysisPredictor,TensorRT不同精度来推理。
  • 如果安装的PaddlePaddle不支持基于TensorRT进行预测,需要自行编译,详细可参考预测库编译教程
  • --run_benchmark如果设置为True,则需要安装依赖pip install pynvml psutil GPUtil