文章相关内容资料已经取得百度BML允许,仅用于交流学习,请不要用于商业传播。
跨镜头多目标跟踪是对同一场景下的不同摄像头拍摄的视频进行多目标跟踪,是监控视频领域一个非常重要的研究课题。相较于单镜头跟踪,跨镜跟踪将不同镜头获取到的跟踪轨迹进行融合,得到跨镜跟踪的输出轨迹。PP-Tracking选用DeepSORT方案实现跨镜跟踪,为了达到实时性选用了PaddleDetection自研的PP-YOLOv2和PP-PicoDet作为检测器,选用PaddleClas自研的轻量级网络PP-LCNet作为ReID模型。
2.配置选择
开发语言:Python3.7
AI框架:PaddlePaddle2.0.0
资源规格:GPU V100
4.上传本次Notebook操作模型
这次要用的资料请点击链接下载:https://aistudio.baidu.com/aistudio/datasetdetail/119110
第一步:环境准备
1.下载PaddleDetection
!git clone https://gitee.com/paddlepaddle/PaddleDetection.git -b develop
2.镜像升级
!pip install --upgrade pip -i https://mirror.baidu.com/pypi/simple
3.安装paddlepaddle-gpu2.2.0
!pip install paddlepaddle-gpu==2.2.0rc0.post101 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html -i https://mirror.baidu.com/pypi/simple
4.安装PaddleDetection的相关依赖
!cd PaddleDetection/ && pip install -r requirements.txt && python setup.py install
)
第三步:准备数据集
可提前阅读并参考MOT数据准备文档
:https://github.com/PaddlePaddle/PaddleDetection/blob/develop/docs/tutorials/PrepareMOTDataSet_cn.md
1.下载数据集MOT16,并将其解压至PaddleDetection的dataset文件夹内
!cd ./data && wget https://bj.bcebos.com/v1/paddledet/data/mot/demo/MOT16.zip
!mv ./data/MOT16.zip ./PaddleDetection/dataset/mot
!cd ./PaddleDetection/dataset/mot && unzip MOT16.zip
Q:若遇到:mv: 无法获取’./data/MOT16.zip’ 的文件状态(stat): 没有那个文件或目录
A:mv命令是将某文件移动至另一个文件夹下,若遇到此报错,先检查新文件夹下是否有相应文件,如果已经存在相应文件,直接进行之后的命令(当前命令重复操作会造成这个报错)
2.生成相应的label文件(labels_with_ids)
!cd ./PaddleDetection/dataset/mot/MOT16 && mkdir -p images
!cd ./PaddleDetection/dataset/mot/MOT16 && mv ./train ./images && mv ./test ./images
!cd ./PaddleDetection/dataset/mot && python gen_labels_MOT.py
3.生成mot16.train文件,并复制到image_lists下
import glob
import os.path as osp
image_list = []
for seq in sorted(glob.glob(‘PaddleDetection/dataset/mot/MOT16/images/train/’)):
for image in glob.glob(osp.join(seq, “img1”)+’/.jpg’):
image = image.replace(‘PaddleDetection/dataset/mot/’,’’)
image_list.append(image)
with open(‘mot16.train’,‘w’) as image_list_file:
image_list_file.write(str.join(’\n’,image_list))
!mkdir -p ./PaddleDetection/dataset/mot/image_lists && cp -r mot16.train ./PaddleDetection/dataset/mot/image_lists
4.打开路径PaddleDetection/configs/mot/fairmot下的yml文件(如图所示)
将以下数据配置添加至文件中,添加完后如图中所示
TrainDataset:训练数据集的路径
EvalMOTDataset:评估数据集的路径
TestMOTDataset:测试数据集的路径
# for MOT training
TrainDataset:
!MOTDataSet
dataset_dir: dataset/mot
image_lists: ['mot16.train']
data_fields: ['image', 'gt_bbox', 'gt_class', 'gt_ide']
# for MOT evaluation
# If you want to change the MOT evaluation dataset, please modify 'data_root'
EvalMOTDataset:
!MOTImageFolder
dataset_dir: dataset/mot
data_root: MOT16/images/train
keep_ori_im: False # set True if save visualization images or video, or used in DeepSORT
# for MOT video inference
TestMOTDataset:
!MOTImageFolder
dataset_dir: dataset/mot
keep_ori_im: True # set True if save visualization images or video
结果如下图
第二步:设置训练的epoch
打开路径PaddleDetection/configs/mot/fairmot/base/optimizer_30e.yml
在这个yml文件中可修改epoch数,大家可设置为30
第三步:模型训练
使用MOT16-02序列作为训练数据,epoch为30,V100环境下大概训练30分钟
!cd PaddleDetection/ && python -m paddle.distributed.launch --log_dir=./fairmot_dla34_30e_1088x608/ --gpus 0 tools/train.py -c configs/mot/fairmot/fairmot_dla34_30e_1088x608.yml
第四步:模型评估
评估模型路径在PaddleDetection/output/fairmot_dla34_30e_1088x608/model_final.pdparams
!cd PaddleDetection && CUDA_VISIBLE_DEVICES=0 python tools/eval_mot.py -c configs/mot/fairmot/fairmot_dla34_30e_1088x608.yml -o weights=output/fairmot_dla34_30e_1088x608/model_final.pdparams
第二步:模型预测
使用下载好的模型进行推理,为了方便我们只推理了dataset/mot/MOT16/images/test/MOT16-01/img1下面的数据
跟踪输出视频保存在output/mot_outputs/img1_vis.mp4
txt文件结果保存在output/mot_results/img1.txt,输出格式表示为frame_id, id, bbox_left, bbox_top, bbox_width, bbox_height, score, x, y, z
!cd PaddleDetection/ && CUDA_VISIBLE_DEVICES=0 python tools/infer_mot.py -c configs/mot/fairmot/fairmot_dla34_30e_1088x608.yml -o weights=output/fairmot_dla34_30e_1088x608/model_final.pdparams --image_dir=dataset/mot/MOT16/images/test/MOT16-01/img1 --save_videos
第三步:查看预测结果
预测结果路径:PaddleDetection/output/mot_outputs/img1_vis.mp4
下载至本地并打开
第四步:MTMCT 跨镜跟踪体验
本项目展示城市主干道场景下的车辆跨镜跟踪预测流程,数据来自AIC21开源数据集
1.下载预测部署模型 首先我们下载目标检测和ReID预测模型,下载地址,然后统一放在~/PaddleDetection/output_inference下
!wget https://paddledet.bj.bcebos.com/models/mot/deepsort/ppyolov2_r50vd_dcn_365e_aic21mtmct_vehicle.tar
!wget https://paddledet.bj.bcebos.com/models/mot/deepsort/deepsort_pplcnet_vehicle.tar
!cd ~/PaddleDetection/ && mkdir -p output_inference
!mv ppyolov2_r50vd_dcn_365e_aic21mtmct_vehicle.tar ~/PaddleDetection/output_inference
!mv deepsort_pplcnet_vehicle.tar ~/PaddleDetection/output_inference
!cd ~/PaddleDetection/output_inference && tar -xvf ppyolov2_r50vd_dcn_365e_aic21mtmct_vehicle.tar && tar -xvf deepsort_pplcnet_vehicle.tar
2.跨镜跟踪预测
在完成模型下载后,需要修改PaddleDetection/deploy/pptracking/python路径下的mtmct_cfg.yml,这份配置文件中包含了跨镜跟踪中轨迹融合的相关参数。首先需要确定cameras_bias中对应的名称与输入视频名称对应;其次,我们本次项目使用轨迹融合中的通用方法,将zone和camera相关的方法设置为False。
设置参数如下:
MTMCT: True
cameras_bias:
c003: 0
c004: 0
use_zone: False #True
zone_path: dataset/mot/aic21mtmct_vehicle/S06/zone
use_ff: True
use_rerank: False #True
use_camera: False #True
use_st_filter: False
use_roi: False #True
roi_dir: dataset/mot/aic21mtmct_vehicle/S06
3.配置完成后即可运行如下命令,输入视频为c004.mp4和c003.mp4两个不同视角的摄像头拍摄结果
跨镜跟踪输出视频保存在PaddleDetection/output/mtmct.vis
!wget https://bj.bcebos.com/v1/paddledet/data/mot/demo/mtmct-demo.tar && mv mtmct-demo.tar ~/PaddleDetection && cd ~/PaddleDetection && tar xvf mtmct-demo.tar
!cd ~/PaddleDetection && python deploy/pptracking/python/mot_sde_infer.py --model_dir=output_inference/ppyolov2_r50vd_dcn_365e_aic21mtmct_vehicle/ --reid_model_dir=output_inference/deepsort_pplcnet_vehicle/ --mtmct_dir=./mtmct-demo --device=GPU --mtmct_cfg=deploy/pptracking/python/mtmct_cfg.yml --scaled=True --save_mot_txts --save_images