MCMT多摄像头多目标跟踪效果复现

概况

本文目标

复现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

http://openaccess.thecvf.com/content_CVPR_2019/papers/Tang_CityFlow_A_City-Scale_Benchmark_for_Multi-Target_Multi-Camera_Vehicle_Tracking_and_CVPR_2019_paper.pdf

无人机数据集及参考文献:

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 结果形式:

含义可对照官网的解释:

参考: 2021 Data and Evaluation – AI CITY CHALLENGE

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值