Skip to content

Latest commit

 

History

History
277 lines (223 loc) · 15.8 KB

README_cn.md

File metadata and controls

277 lines (223 loc) · 15.8 KB

简体中文 | English

多目标跟踪 (Multi-Object Tracking)

内容

简介

当前主流的多目标追踪(MOT)算法主要由两部分组成:Detection+Embedding。Detection部分即针对视频,检测出每一帧中的潜在目标。Embedding部分则将检出的目标分配和更新到已有的对应轨迹上(即ReID重识别任务)。根据这两部分实现的不同,又可以划分为SDE系列和JDE系列算法。

  • SDE(Separate Detection and Embedding)这类算法完全分离Detection和Embedding两个环节,最具代表性的就是DeepSORT算法。这样的设计可以使系统无差别的适配各类检测器,可以针对两个部分分别调优,但由于流程上是串联的导致速度慢耗时较长,在构建实时MOT系统中面临较大挑战。

  • JDE(Joint Detection and Embedding)这类算法完是在一个共享神经网络中同时学习Detection和Embedding,使用一个多任务学习的思路设置损失函数。代表性的算法有JDEFairMOT。这样的设计兼顾精度和速度,可以实现高精度的实时多目标跟踪。

PaddleDetection实现了这两个系列的3种多目标跟踪算法。

  • DeepSORT(Deep Cosine Metric Learning SORT) 扩展了原有的SORT(Simple Online and Realtime Tracking)算法,增加了一个CNN模型用于在检测器限定的人体部分图像中提取特征,在深度外观描述的基础上整合外观信息,将检出的目标分配和更新到已有的对应轨迹上即进行一个ReID重识别任务。DeepSORT所需的检测框可以由任意一个检测器来生成,然后读入保存的检测结果和视频图片即可进行跟踪预测。ReID模型此处选择PaddleClas提供的PCB+Pyramid ResNet101模型。

  • JDE(Joint Detection and Embedding)是在一个单一的共享神经网络中同时学习目标检测任务和embedding任务,并同时输出检测结果和对应的外观embedding匹配的算法。JDE原论文是基于Anchor Base的YOLOv3检测器新增加一个ReID分支学习embedding,训练过程被构建为一个多任务联合学习问题,兼顾精度和速度。

  • FairMOT以Anchor Free的CenterNet检测器为基础,克服了Anchor-Based的检测框架中anchor和特征不对齐问题,深浅层特征融合使得检测和ReID任务各自获得所需要的特征,并且使用低维度ReID特征,提出了一种由两个同质分支组成的简单baseline来预测像素级目标得分和ReID特征,实现了两个任务之间的公平性,并获得了更高水平的实时多目标跟踪精度。

安装依赖

一键安装MOT相关的依赖:

pip install lap sklearn motmetrics openpyxl cython_bbox
或者
pip install -r requirements.txt

注意:

  • cython_bbox在windows上安装:pip install -e git+https://github.com/samson-wang/cython_bbox.git#egg=cython-bbox。可参考这个教程
  • Windows cuda 11环境下可能无法正常评估,会尽快修复,可换到cuda 10.2或cuda 10.1环境下进行正常评估。

模型库

DeepSORT在MOT-16 Training Set上结果

骨干网络 输入尺寸 MOTA IDF1 IDS FP FN FPS 下载链接 配置文件
ResNet-101 1088x608 72.2 60.5 998 8054 21644 - 下载链接 配置文件

DeepSORT在MOT-16 Test Set上结果

骨干网络 输入尺寸 MOTA IDF1 IDS FP FN FPS 下载链接 配置文件
ResNet-101 1088x608 64.1 53.0 1024 12457 51919 - 下载链接 配置文件

注意: DeepSORT不需要训练MOT数据集,只用于评估。在使用DeepSORT模型评估之前,应该首先通过一个检测模型得到检测结果,然后像这样准备好结果文件:

det_results_dir
   |——————MOT16-02.txt
   |——————MOT16-04.txt
   |——————MOT16-05.txt
   |——————MOT16-09.txt
   |——————MOT16-10.txt
   |——————MOT16-11.txt
   |——————MOT16-13.txt

对于MOT16数据集,可以下载PaddleDetection提供的一个检测结果det_results_dir.zip并解压:

wget https://dataset.bj.bcebos.com/mot/det_results_dir.zip

其中每个txt是每个视频中所有图片的检测结果,每行都描述一个边界框,格式如下:

[frame_id],[identity],[bb_left],[bb_top],[width],[height],[conf]

注意:

  • frame_id是图片帧的序号
  • identity是目标id采用默认值为-1
  • bb_left是目标框的左边界的x坐标
  • bb_top是目标框的上边界的y坐标
  • width,height是真实的像素宽高
  • conf是目标得分设置为1(已经按检测的得分阈值筛选出的检测结果)

JDE在MOT-16 Training Set上结果

骨干网络 输入尺寸 MOTA IDF1 IDS FP FN FPS 下载链接 配置文件
DarkNet53 1088x608 72.0 66.9 1397 7274 22209 - 下载链接 配置文件
DarkNet53 864x480 69.1 64.7 1539 7544 25046 - 下载链接 配置文件
DarkNet53 576x320 63.7 64.4 1310 6782 31964 - 下载链接 配置文件

JDE在MOT-16 Test Set上结果

骨干网络 输入尺寸 MOTA IDF1 IDS FP FN FPS 下载链接 配置文件
DarkNet53(paper) 1088x608 64.4 55.8 1544 - - - - -
DarkNet53 1088x608 64.6 58.5 1864 10550 52088 - 下载链接 配置文件
DarkNet53(paper) 864x480 62.1 56.9 1608 - - - - -
DarkNet53 864x480 63.2 57.7 1966 10070 55081 - 下载链接 配置文件
DarkNet53 576x320 59.1 56.4 1911 10923 61789 - 下载链接 配置文件

注意: JDE使用8个GPU进行训练,每个GPU上batch size为4,训练了30个epoch。

FairMOT在MOT-16 Training Set上结果

骨干网络 输入尺寸 MOTA IDF1 IDS FP FN FPS 下载链接 配置文件
DLA-34(paper) 1088x608 83.3 81.9 544 3822 14095 - - -
DLA-34 1088x608 83.7 83.3 435 3829 13764 - 下载链接 配置文件

FairMOT在MOT-16 Test Set上结果

骨干网络 输入尺寸 MOTA IDF1 IDS FP FN FPS 下载链接 配置文件
DLA-34(paper) 1088x608 74.9 72.8 1074 - - 25.9 - -
DLA-34 1088x608 74.8 74.4 930 7038 37994 - 下载链接 配置文件

注意: FairMOT使用8个GPU进行训练,每个GPU上batch size为6,训练30个epoch。

数据集准备

MOT数据集

PaddleDetection使用和JDE 还有FairMOT相同的数据集。请参照数据准备文档去下载并准备好所有的数据集包括Caltech Pedestrian, CityPersons, CUHK-SYSU, PRW, ETHZ, MOT17和MOT16。使用前6者作为联合数据集参与训练,MOT16作为评测数据集。此外还可以使用MOT15和MOT20进行finetune。所有的行人都有检测框标签,部分有ID标签。如果您想使用这些数据集,请遵循他们的License

数据格式

这几个相关数据集都遵循以下结构:

Caltech
   |——————images
   |        └——————00001.jpg
   |        |—————— ...
   |        └——————0000N.jpg
   └——————labels_with_ids
            └——————00001.txt
            |—————— ...
            └——————0000N.txt
MOT17
   |——————images
   |        └——————train
   |        └——————test
   └——————labels_with_ids
            └——————train

所有数据集的标注是以统一数据格式提供的。各个数据集中每张图片都有相应的标注文本。给定一个图像路径,可以通过将字符串images替换为labels_with_ids并将.jpg替换为.txt来生成标注文本路径。在标注文本中,每行都描述一个边界框,格式如下:

[class] [identity] [x_center] [y_center] [width] [height]

注意:

  • class0,目前仅支持单类别多目标跟踪。
  • identity是从0num_identifies-1的整数(num_identifies是数据集中不同物体实例的总数),如果此框没有identity标注,则为-1
  • [x_center] [y_center] [width] [height]是中心点坐标和宽高,注意他们的值是由图片的宽度/高度标准化的,因此它们是从0到1的浮点数。

数据集目录

首先按照以下命令下载image_lists.zip并解压放在dataset/mot目录下:

wget https://dataset.bj.bcebos.com/mot/image_lists.zip

然后依次下载各个数据集并解压,最终目录为:

dataset/mot
  |——————image_lists
            |——————caltech.10k.val  
            |——————caltech.all  
            |——————caltech.train  
            |——————caltech.val  
            |——————citypersons.train  
            |——————citypersons.val  
            |——————cuhksysu.train  
            |——————cuhksysu.val  
            |——————eth.train  
            |——————mot15.train  
            |——————mot16.train  
            |——————mot17.train  
            |——————mot20.train  
            |——————prw.train  
            |——————prw.val
  |——————Caltech
  |——————Cityscapes
  |——————CUHKSYSU
  |——————ETHZ
  |——————MOT15
  |——————MOT16
  |——————MOT17
  |——————MOT20
  |——————PRW

快速开始

1. 训练

FairMOT使用8GPU通过如下命令一键式启动训练

python -m paddle.distributed.launch --log_dir=./fairmot_dla34_30e_1088x608/ --gpus 0,1,2,3,4,5,6,7 tools/train.py -c configs/mot/fairmot/fairmot_dla34_30e_1088x608.yml

2. 评估

FairMOT使用单张GPU通过如下命令一键式启动评估

# 使用PaddleDetection发布的权重
CUDA_VISIBLE_DEVICES=0 python tools/eval_mot.py -c configs/mot/fairmot/fairmot_dla34_30e_1088x608.yml -o weights=https://paddledet.bj.bcebos.com/models/mot/fairmot_dla34_30e_1088x608.pdparams

# 使用训练保存的checkpoint
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

注意: 默认评估的是MOT-16 Train Set数据集, 如需换评估数据集可参照以下代码修改configs/datasets/mot.yml

EvalMOTDataset:
  !MOTImageFolder
    task: MOT17_train
    dataset_dir: dataset/mot
    data_root: MOT17/images/train
    keep_ori_im: False # set True if save visualization images or video

3. 预测

使用单个GPU通过如下命令预测一个视频,并保存为视频

# 预测一个视频
CUDA_VISIBLE_DEVICES=0 python tools/infer_mot.py -c configs/mot/fairmot/fairmot_dla34_30e_1088x608.yml -o weights=https://paddledet.bj.bcebos.com/models/mot/fairmot_dla34_30e_1088x608.pdparams --video_file={your video name}.mp4  --save_videos

注意: 请先确保已经安装了ffmpeg, Linux(Ubuntu)平台可以直接用以下命令安装:apt-get update && apt-get install -y ffmpeg

引用

@inproceedings{Wojke2017simple,
  title={Simple Online and Realtime Tracking with a Deep Association Metric},
  author={Wojke, Nicolai and Bewley, Alex and Paulus, Dietrich},
  booktitle={2017 IEEE International Conference on Image Processing (ICIP)},
  year={2017},
  pages={3645--3649},
  organization={IEEE},
  doi={10.1109/ICIP.2017.8296962}
}

@inproceedings{Wojke2018deep,
  title={Deep Cosine Metric Learning for Person Re-identification},
  author={Wojke, Nicolai and Bewley, Alex},
  booktitle={2018 IEEE Winter Conference on Applications of Computer Vision (WACV)},
  year={2018},
  pages={748--756},
  organization={IEEE},
  doi={10.1109/WACV.2018.00087}
}

@article{wang2019towards,
  title={Towards Real-Time Multi-Object Tracking},
  author={Wang, Zhongdao and Zheng, Liang and Liu, Yixuan and Wang, Shengjin},
  journal={arXiv preprint arXiv:1909.12605},
  year={2019}
}

@article{zhang2020fair,
  title={FairMOT: On the Fairness of Detection and Re-Identification in Multiple Object Tracking},
  author={Zhang, Yifu and Wang, Chunyu and Wang, Xinggang and Zeng, Wenjun and Liu, Wenyu},
  journal={arXiv preprint arXiv:2004.01888},
  year={2020}
}