概况
本文目标
复现PaddleDetection中多摄像头多目标跟踪项目,实现车辆跨境跟踪
任务描述
多目标跟踪(Multiple Object Tracking,MOT)是单摄像头或传感器下对多个目标进行连续跟踪和关联的任务。
多摄像头多目标跟踪(Multi-Camera Multi-Object Tracking,MCMT)是在多个摄像头或传感器下,实现跨摄像头对多个目标进行连续跟踪和关联的任务。
其中关键技术包括目标检测、目标重识别、数据关联、轨迹跟踪等。
数据集
数据集根据任务对象,主要分为行人、车辆和无人机。目前研究较为成熟的是行人和车辆重识别,部分数据集如下图所示。其中,MTMC行人数据集主要是MARS、DukeMTMC(由于涉及隐私目前已关闭下载链接停止使用)和NLPR_MCT,MTMC车辆数据集有CityFlow(19年)和CityFlow v2(22年)。
上图来源于参考文献:
CityFlow: A City-Scale Benchmark for Multi-TargetMulti-Camera Vehicle Tracking and Re-dentification
无人机数据集及参考文献:
UAV-ReID: A Benchmark on Unmanned Aerial Vehicle Re-identification in Video Imagery
https://arxiv.org/pdf/2104.06219.pdf
CityFlow数据集是AI City Challenge人工智能城市挑战赛发布的一个数据集,在 2021 Challenge 中对应 Track 1: City-Scale Multi-Camera Vehicle Tracking,后来官方更新了数据集CityFlow v2,对应 2022 Challenge Track 1: City-Scale Multi-Camera Vehicle Tracking。
挑战赛官方网站为 https://www.aicitychallenge.org/
可查看每年各个任务和对应数据集及验证等情况。
数据集下载需要密码,先填写相关信息,之后官网会把下载密码发送到邮箱。
本文复现的项目
目前找到的AI City Challenge的一些文章和开源的代码,复现的时候存在问题较多,比如文件不全等等,因此,本文暂时选择复现飞桨框架 https://github.com/PaddlePaddle/PaddleDetection
复现情况和问题解决方法
首先,根据 https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.6/configs/mot/mtmct下载模型和数据集,整理目录结构,运行预测脚本
# 用导出的PicoDet车辆检测模型和PPLCNet车辆ReID模型去基于Python预测
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 --save_mot_txts --save_images
报错1:AssertionError: Note that tracker_config should be set.
File "/home/xxx/PaddleDetection/deploy/pptracking/python/mot_sde_infer.py", line 137, in __init__
assert tracker_config is not None, 'Note that tracker_config should be set.'
AssertionError: Note that tracker_config should be set.
解决方法:
命令后面增加 --tracker_config=deploy/pptracking/python/tracker_config.yml
# 用导出的PicoDet车辆检测模型和PPLCNet车辆ReID模型去基于Python预测
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 --save_mot_txts --save_images --tracker_config=deploy/pptracking/python/tracker_config.yml
参考:pptracking提示AssertionError: Note that tracker_config should be set.
运行后,上面问题解决,但出现新的报错
报错2:IndexError: boolean index did not match indexed array along dimension 1; dimension is 6400 but corresponding boolean dimension is 80
deploy/pptracking/python/mot_sde_infer.py", line 264, in postprocess
result['boxes'] = result['boxes'][keep_idx]
IndexError: boolean index did not match indexed array along dimension 1; dimension is 6400 but corresponding boolean dimension is 80
解决方法:
目前暂时没找到这个问题的直接解决方法,所以后来换了个教程跑通了 PP-Tracking之手把手玩转多目标跟踪 - 飞桨AI Studio星河社区
其中也遇到了一些问题,解决方法如下
报错3:AssertionError: MTMCT only support single class.
File "deploy/pptracking/python/mot_sde_infer.py", line 312, in tracking
assert self.num_classes == 1, 'MTMCT only support single class.'
AssertionError: MTMCT only support single class.
解决方法:在ppyolov2_r50vd_dcn_365e_aic21mtmct_vehicle文件夹中的infer_cfg.yml 文件中,删除label_list中除car以外的类别,一共八十类,但是我们只需要一类。注意,注释掉别的类别还是会报同样的错,所以建议直接删除其他的类别
参考:https://github.com/PaddlePaddle/PaddleDetection/issues/5967
报错4: 'BOTSORTTracker' object has no attribute 'input_size'
File "deploy/pptracking/python/mot_sde_infer.py", line 288, in reidprocess
w, h = self.tracker.input_size
AttributeError: 'BOTSORTTracker' object has no attribute 'input_size'
解决方法:把 tracker_config.yml 中的 type: BOTSORTTracker 改成 type: DeepSORTTracker,这是用于MCMT任务的
参考:./mtmct-demo/c003 has no images. · Issue #8550 · PaddlePaddle/PaddleDetection · GitHub
报错5:忘了,可能还是之前的一些未解决的错误,反正把版本换成2.3捣鼓捣鼓后能跑通
解决方法:
参考:https://github.com/PaddlePaddle/PaddleDetection/issues/5967
报错6: IndexError: list index out of range
File "PaddleDetection-release-2.3/deploy/pptracking/python/mot/mtmct/postprocess.py", line 142, in gen_res
cid = scene_cluster[idx]
IndexError: list index out of range
解决方法:报错处增加数组越界处理,修改如下
for idx, mot_feature in enumerate(mot_list_breaks):
if idx < len(scene_cluster):
cid = scene_cluster[idx]
参考:https://github.com/PaddlePaddle/PaddleDetection/issues/6649#issuecomment-1218980217
复现结果
在可视化的视频结果中,两个摄像头视频中的绿车ID一致,实现了基本的跨境跟踪
mtmct_result.txt 结果形式:
含义可对照官网的解释: