未验证 提交 546cada6 编写于 作者: F Feng Ni 提交者: GitHub

[Doc] add pphuman mot doc (#6347)

* add pphuman mot doc, test=document_fix

* add mot data tutorials, test=document_fix
上级 0a232a00
# 多目标跟踪数据集下载汇总
## 目录
- [行人跟踪](#行人跟踪)
- [车辆跟踪](#车辆跟踪)
- [人头跟踪](#人头跟踪)
- [多类别跟踪](#多类别跟踪)
## 行人跟踪
| 数据集 | 下载链接 | 备注 |
| :-------------| :-------------| :----: |
| MOT17 | [download](https://dataset.bj.bcebos.com/mot/MOT16.zip) | - |
| MOT16 | [download](https://dataset.bj.bcebos.com/mot/MOT16.zip) | - |
| Caltech | [download](https://dataset.bj.bcebos.com/mot/Caltech.zip) | - |
| Cityscapes | [download](https://dataset.bj.bcebos.com/mot/Cityscapes.zip) | - |
| CUHKSYSU | [download](https://dataset.bj.bcebos.com/mot/CUHKSYSU.zip) | - |
| PRW | [download](https://dataset.bj.bcebos.com/mot/PRW.zip) | - |
| ETHZ | [download](https://dataset.bj.bcebos.com/mot/ETHZ.zip) | - |
## 车辆跟踪
| 数据集 | 下载链接 | 备注 |
| :-------------| :-------------| :----: |
| AICity21 | [download](https://bj.bcebos.com/v1/paddledet/data/mot/aic21mtmct_vehicle.zip) | - |
## 人头跟踪
| 数据集 | 下载链接 | 备注 |
| :-------------| :-------------| :----: |
| HT21 | [download](https://bj.bcebos.com/v1/paddledet/data/mot/HT21.zip) | - |
## 多类别跟踪
| 数据集 | 下载链接 | 备注 |
| :-------------| :-------------| :----: |
| VisDrone-MOT | [download](https://bj.bcebos.com/v1/paddledet/data/mot/visdrone_mcmot.zip) | - |
...@@ -5,33 +5,39 @@ ...@@ -5,33 +5,39 @@
## 内容 ## 内容
- [简介](#简介) - [简介](#简介)
- [安装依赖](#安装依赖) - [安装依赖](#安装依赖)
- [模型库](#模型库) - [模型库和选型](#模型库和选型)
- [数据集准备](#数据集准备) - [MOT数据集准备](#MOT数据集准备)
- [SDE数据集](#SDE数据集)
- [JDE数据集](#JDE数据集)
- [用户自定义数据集准备](#用户自定义数据集准备)
- [引用](#引用) - [引用](#引用)
## 简介 ## 简介
当前主流的Tracking By Detecting方式的多目标追踪(Multi-Object Tracking, MOT)算法主要由两部分组成:Detection+Embedding。Detection部分即针对视频,检测出每一帧中的潜在目标。Embedding部分则将检出的目标分配和更新到已有的对应轨迹上(即ReID重识别任务)。根据这两部分实现的不同,又可以划分为**SDE**系列和**JDE**系列算法。 多目标跟踪(Multi-Object Tracking, MOT)是对给定视频或图片序列,定位出多个感兴趣的目标,并在连续帧之间维持个体的ID信息和记录其轨迹。
- SDE(Separate Detection and Embedding)这类算法完全分离Detection和Embedding两个环节,最具代表性的就是**DeepSORT**算法。这样的设计可以使系统无差别的适配各类检测器,可以针对两个部分分别调优,但由于流程上是串联的导致速度慢耗时较长,在构建实时MOT系统中面临较大挑战。 当前主流的做法是Tracking By Detecting方式,算法主要由两部分组成:Detection + Embedding。Detection部分即针对视频,检测出每一帧中的潜在目标。Embedding部分则将检出的目标分配和更新到已有的对应轨迹上(即ReID重识别任务),进行物体间的长时序关联。根据这两部分实现的不同,又可以划分为**SDE**系列和**JDE**系列算法。
- SDE(Separate Detection and Embedding)这类算法完全分离Detection和Embedding两个环节,最具代表性的是**DeepSORT**算法。这样的设计可以使系统无差别的适配各类检测器,可以针对两个部分分别调优,但由于流程上是串联的导致速度慢耗时较长。也有算法如**ByteTrack**算法为了降低耗时,不使用Embedding特征来计算外观相似度,前提是检测器的精度足够高。
- JDE(Joint Detection and Embedding)这类算法完是在一个共享神经网络中同时学习Detection和Embedding,使用一个多任务学习的思路设置损失函数。代表性的算法有**JDE****FairMOT**。这样的设计兼顾精度和速度,可以实现高精度的实时多目标跟踪。 - JDE(Joint Detection and Embedding)这类算法完是在一个共享神经网络中同时学习Detection和Embedding,使用一个多任务学习的思路设置损失函数。代表性的算法有**JDE****FairMOT**。这样的设计兼顾精度和速度,可以实现高精度的实时多目标跟踪。
PaddleDetection实现了这两个系列的3种多目标跟踪算法,分别是SDE系列的[DeepSORT](https://arxiv.org/abs/1812.00442)和JDE系列的[JDE](https://arxiv.org/abs/1909.12605)[FairMOT](https://arxiv.org/abs/2004.01888) PaddleDetection中提供了SDE和JDE两个系列的多种算法实现:
- SDE
- [ByteTrack](./bytetrack)
- [DeepSORT](./deepsort)
- JDE
- [JDE](./jde)
- [FairMOT](./fairmot)
- [MCFairMOT](./mcfairmot)
### PP-Tracking 实时多目标跟踪系统 **注意:**
此外,PaddleDetection还提供了[PP-Tracking](../../deploy/pptracking/README.md)实时多目标跟踪系统。PP-Tracking是基于PaddlePaddle深度学习框架的业界首个开源的实时多目标跟踪系统,具有模型丰富、应用广泛和部署高效三大优势。 - 以上算法原论文均为单类别的多目标跟踪,PaddleDetection团队同时也支持了[ByteTrack](./bytetrack)和FairMOT([MCFairMOT](./mcfairmot))的多类别的多目标跟踪;
PP-Tracking支持单镜头跟踪(MOT)和跨镜头跟踪(MTMCT)两种模式,针对实际业务的难点和痛点,提供了行人跟踪、车辆跟踪、多类别跟踪、小目标跟踪、流量统计以及跨镜头跟踪等各种多目标跟踪功能和应用,部署方式支持API调用和GUI可视化界面,部署语言支持Python和C++,部署平台环境支持Linux、NVIDIA Jetson等。 - [DeepSORT](./deepsort)[JDE](./jde)均只支持单类别的多目标跟踪;
- [DeepSORT](./deepsort)需要额外添加ReID权重一起执行,[ByteTrack](./bytetrack)可加可不加ReID权重,默认不加;
### AI Studio公开项目案例
PP-Tracking 提供了AI Studio公开项目案例,教程请参考[PP-Tracking之手把手玩转多目标跟踪](https://aistudio.baidu.com/aistudio/projectdetail/3022582)
### Python端预测部署
PP-Tracking 支持Python预测部署,教程请参考[PP-Tracking Python部署文档](../../deploy/pptracking/python/README.md)
### C++端预测部署
PP-Tracking 支持C++预测部署,教程请参考[PP-Tracking C++部署文档](../../deploy/pptracking/cpp/README.md)
### GUI可视化界面预测部署 ### 实时多目标跟踪系统 PP-Tracking
PP-Tracking 提供了简洁的GUI可视化界面,教程请参考[PP-Tracking可视化界面试用版使用文档](https://github.com/yangyudong2020/PP-Tracking_GUi) PaddleDetection团队提供了实时多目标跟踪系统[PP-Tracking](../../deploy/pptracking),是基于PaddlePaddle深度学习框架的业界首个开源的实时多目标跟踪系统,具有模型丰富、应用广泛和部署高效三大优势。
PP-Tracking支持单镜头跟踪(MOT)和跨镜头跟踪(MTMCT)两种模式,针对实际业务的难点和痛点,提供了行人跟踪、车辆跟踪、多类别跟踪、小目标跟踪、流量统计以及跨镜头跟踪等各种多目标跟踪功能和应用,部署方式支持API调用和GUI可视化界面,部署语言支持Python和C++,部署平台环境支持Linux、NVIDIA Jetson等。
PP-Tracking单镜头跟踪采用的方案是[FairMOT](./fairmot),跨镜头跟踪采用的方案是[DeepSORT](./deepsort)
<div width="1000" align="center"> <div width="1000" align="center">
<img src="../../docs/images/pptracking.png"/> <img src="../../docs/images/pptracking.png"/>
...@@ -43,19 +49,46 @@ PP-Tracking 提供了简洁的GUI可视化界面,教程请参考[PP-Tracking ...@@ -43,19 +49,46 @@ PP-Tracking 提供了简洁的GUI可视化界面,教程请参考[PP-Tracking
视频来源:VisDrone和BDD100K公开数据集</div> 视频来源:VisDrone和BDD100K公开数据集</div>
</div> </div>
#### AI Studio公开项目案例
教程请参考[PP-Tracking之手把手玩转多目标跟踪](https://aistudio.baidu.com/aistudio/projectdetail/3022582)
#### Python端预测部署
教程请参考[PP-Tracking Python部署文档](../../deploy/pptracking/python/README.md)
#### C++端预测部署
教程请参考[PP-Tracking C++部署文档](../../deploy/pptracking/cpp/README.md)
#### GUI可视化界面预测部署
教程请参考[PP-Tracking可视化界面使用文档](https://github.com/yangyudong2020/PP-Tracking_GUi)
### 实时行人分析工具 PP-Human
PaddleDetection团队提供了实时行人分析工具[PP-Human](../../deploy/pipeline),是基于PaddlePaddle深度学习框架的业界首个开源的产业级实时行人分析工具,具有模型丰富、应用广泛和部署高效三大优势。
PP-Human支持图片/单镜头视频/多镜头视频多种输入方式,功能覆盖多目标跟踪、属性识别、行为分析及人流量计数与轨迹记录。能够广泛应用于智慧交通、智慧社区、工业巡检等领域。支持服务器端部署及TensorRT加速,T4服务器上可达到实时。
PP-Human跟踪采用的方案是[ByteTrack](./bytetrack)
![](https://user-images.githubusercontent.com/48054808/173030254-ecf282bd-2cfe-43d5-b598-8fed29e22020.gif)
#### AI Studio公开项目案例
PP-Human实时行人分析全流程实战教程[链接](https://aistudio.baidu.com/aistudio/projectdetail/3842982)
PP-Human赋能社区智能精细化管理教程[链接](https://aistudio.baidu.com/aistudio/projectdetail/3679564)
## 安装依赖 ## 安装依赖
一键安装MOT相关的依赖: 一键安装MOT相关的依赖:
``` ```
pip install lap sklearn motmetrics openpyxl
或者
pip install -r requirements.txt pip install -r requirements.txt
# 或手动pip安装MOT相关的库
pip install lap sklearn motmetrics openpyxl
``` ```
**注意:** **注意:**
- 预测需确保已安装[ffmpeg](https://ffmpeg.org/ffmpeg.html), Linux(Ubuntu)平台可以直接用以下命令安装:`apt-get update && apt-get install -y ffmpeg` - 预测需确保已安装[ffmpeg](https://ffmpeg.org/ffmpeg.html), Linux(Ubuntu)平台可以直接用以下命令安装:`apt-get update && apt-get install -y ffmpeg`
## 模型库
## 模型库和选型
- 基础模型 - 基础模型
- [ByteTrack](bytetrack/README_cn.md) - [ByteTrack](bytetrack/README_cn.md)
- [DeepSORT](deepsort/README_cn.md) - [DeepSORT](deepsort/README_cn.md)
...@@ -70,25 +103,75 @@ pip install -r requirements.txt ...@@ -70,25 +103,75 @@ pip install -r requirements.txt
- 跨境头跟踪 - 跨境头跟踪
- [跨境头跟踪](mtmct/README_cn.md) - [跨境头跟踪](mtmct/README_cn.md)
### 模型选型总结
关于模型选型,PaddleDetection团队提供的总结建议如下:
## 数据集准备 | MOT方式 | 经典算法 | 算法流程 | 数据集要求 | 其他特点 |
### MOT数据集 | :--------------| :--------------| :------- | :----: | :----: |
PaddleDetection复现[JDE](https://github.com/Zhongdao/Towards-Realtime-MOT)[FairMOT](https://github.com/ifzhang/FairMOT),是使用的和他们相同的MIX数据集,包括**Caltech Pedestrian, CityPersons, CUHK-SYSU, PRW, ETHZ, MOT17和MOT16**。使用前6者作为联合数据集参与训练,MOT16作为评测数据集。如果您想使用这些数据集,请**遵循他们的License** | SDE系列 | DeepSORT,ByteTrack | 分离式,两个独立模型权重先检测后ReID,也可不加ReID | 检测和ReID数据相对独立,不加ReID时即纯检测数据集 |检测和ReID可分别调优,鲁棒性较高,AI竞赛常用|
| JDE系列 | FairMOT | 联合式,一个模型权重端到端同时检测和ReID | 必须同时具有检测和ReID标注 | 检测和ReID联合训练,不易调优,泛化性不强|
**注意:** **注意:**
- 多目标跟踪数据集一般是用于单类别的多目标跟踪,DeepSORT、JDE和FairMOT均为单类别跟踪模型,MIX数据集以及其子数据集也都是单类别的行人跟踪数据集,可认为相比于行人检测数据集多了id号的标注。 - 由于数据标注的成本较大,建议选型前优先考虑**数据集要求**,如果数据集只有检测框标注而没有ReID标注,是无法使用JDE系列算法训练的,更推荐使用SDE系列;
- 为了训练更多场景的垂类模型例如车辆等,垂类数据集也需要处理成与MIX数据集相同的格式,PaddleDetection也提供了[车辆跟踪](vehicle/README_cn.md)[人头跟踪](headtracking21/README_cn.md)以及更通用的[行人跟踪](pedestrian/README_cn.md)的垂类数据集和模型。用户自定义数据集也可参照[数据准备文档](../../docs/tutorials/PrepareMOTDataSet_cn.md)去准备。 - SDE系列算法在检测器精度足够高时,也可以不使用ReID权重进行物体间的长时序关联,可以参照[ByteTrack](bytetrack)
- 多类别跟踪模型是[MCFairMOT](mcfairmot/README_cn.md),多类别数据集是VisDrone数据集的整合版,可参照[MCFairMOT](mcfairmot/README_cn.md)的文档说明。 - 耗时速度和模型权重参数量计算量有一定关系,耗时从理论上看`不使用ReID的SDE系列 < JDE系列 < 使用ReID的SDE系列`
- 跨镜头跟踪模型,是选用的[AIC21 MTMCT](https://www.aicitychallenge.org) (CityFlow)车辆跨镜头跟踪数据集,数据集和模型可参照[跨境头跟踪](mtmct/README_cn.md)的文档说明。
## MOT数据集准备
PaddleDetection团队提供了众多公开数据集或整理后数据集的下载链接,参考[数据集下载汇总](DataDownload.md),用户可以自行下载使用。
### 数据集目录 根据模型选型总结,MOT数据集可以分为两类:一类纯检测框标注的数据集,仅SDE系列可以使用;另一类是同时有检测和ReID标注的数据集,SDE系列和JDE系列都可以使用。
首先按照以下命令下载image_lists.zip并解压放在`PaddleDetection/dataset/mot`目录下:
### SDE数据集
SDE数据集是纯检测标注的数据集,用户自定义数据集可以参照[DET数据准备文档](../../docs/tutorials/data/PrepareDetDataSet.md)准备。
以MOT17数据集为例,下载并解压放在`PaddleDetection/dataset/mot`目录下:
```
wget https://dataset.bj.bcebos.com/mot/MOT17.zip
```
并修改数据集部分的配置文件如下:
```
num_classes: 1
TrainDataset:
!COCODataSet
dataset_dir: dataset/mot/MOT17
anno_path: annotations/train_half.json
image_dir: images/train
data_fields: ['image', 'gt_bbox', 'gt_class', 'is_crowd']
EvalDataset:
!COCODataSet
dataset_dir: dataset/mot/MOT17
anno_path: annotations/val_half.json
image_dir: images/train
TestDataset:
!ImageFolder
dataset_dir: dataset/mot/MOT17
anno_path: annotations/val_half.json
```
数据集目录为:
```
dataset/mot
|——————MOT17
|——————annotations
|——————images
```
### JDE数据集
JDE数据集是同时有检测和ReID标注的数据集,首先按照以下命令`image_lists.zip`并解压放在`PaddleDetection/dataset/mot`目录下:
``` ```
wget https://dataset.bj.bcebos.com/mot/image_lists.zip wget https://dataset.bj.bcebos.com/mot/image_lists.zip
``` ```
然后按照以下命令可以快速下载MIX数据集的各个子数据集,并解压放在`PaddleDetection/dataset/mot`目录下: 然后按照以下命令可以快速下载各个公开数据集,也解压放在`PaddleDetection/dataset/mot`目录下:
``` ```
# MIX数据,同JDE,FairMOT论文使用的数据集
wget https://dataset.bj.bcebos.com/mot/MOT17.zip wget https://dataset.bj.bcebos.com/mot/MOT17.zip
wget https://dataset.bj.bcebos.com/mot/Caltech.zip wget https://dataset.bj.bcebos.com/mot/Caltech.zip
wget https://dataset.bj.bcebos.com/mot/CUHKSYSU.zip wget https://dataset.bj.bcebos.com/mot/CUHKSYSU.zip
...@@ -97,24 +180,17 @@ wget https://dataset.bj.bcebos.com/mot/Cityscapes.zip ...@@ -97,24 +180,17 @@ wget https://dataset.bj.bcebos.com/mot/Cityscapes.zip
wget https://dataset.bj.bcebos.com/mot/ETHZ.zip wget https://dataset.bj.bcebos.com/mot/ETHZ.zip
wget https://dataset.bj.bcebos.com/mot/MOT16.zip wget https://dataset.bj.bcebos.com/mot/MOT16.zip
``` ```
数据集目录为:
最终目录为:
``` ```
dataset/mot dataset/mot
|——————image_lists |——————image_lists
|——————caltech.10k.val
|——————caltech.all |——————caltech.all
|——————caltech.train
|——————caltech.val
|——————citypersons.train |——————citypersons.train
|——————citypersons.val
|——————cuhksysu.train |——————cuhksysu.train
|——————cuhksysu.val
|——————eth.train |——————eth.train
|——————mot16.train |——————mot16.train
|——————mot17.train |——————mot17.train
|——————prw.train |——————prw.train
|——————prw.val
|——————Caltech |——————Caltech
|——————Cityscapes |——————Cityscapes
|——————CUHKSYSU |——————CUHKSYSU
...@@ -124,7 +200,7 @@ dataset/mot ...@@ -124,7 +200,7 @@ dataset/mot
|——————PRW |——————PRW
``` ```
### 数据格式 #### JDE数据集的格式
这几个相关数据集都遵循以下结构: 这几个相关数据集都遵循以下结构:
``` ```
MOT17 MOT17
...@@ -138,11 +214,20 @@ MOT17 ...@@ -138,11 +214,20 @@ MOT17
``` ```
[class] [identity] [x_center] [y_center] [width] [height] [class] [identity] [x_center] [y_center] [width] [height]
``` ```
**注意**: - `class`为类别id,支持单类别和多类别,从`0`开始计,单类别即为`0`
- `class`为类别id,支持单类别和多类别,从`0`开始计,单类别即为`0` - `identity`是从`1``num_identities`的整数(`num_identities`是数据集中所有视频或图片序列的不同物体实例的总数),如果此框没有`identity`标注,则为`-1`
- `identity`是从`1``num_identities`的整数(`num_identities`是数据集中所有视频或图片序列的不同物体实例的总数),如果此框没有`identity`标注,则为`-1` - `[x_center] [y_center] [width] [height]`是中心点坐标和宽高,注意他们的值是由图片的宽度/高度标准化的,因此它们是从0到1的浮点数。
- `[x_center] [y_center] [width] [height]`是中心点坐标和宽高,注意他们的值是由图片的宽度/高度标准化的,因此它们是从0到1的浮点数。
**注意:**
- MIX数据集是[JDE](https://github.com/Zhongdao/Towards-Realtime-MOT)[FairMOT](https://github.com/ifzhang/FairMOT)原论文使用的数据集,包括**Caltech Pedestrian, CityPersons, CUHK-SYSU, PRW, ETHZ, MOT17和MOT16**。使用前6者作为联合数据集参与训练,MOT16作为评测数据集。如果您想使用这些数据集,请**遵循他们的License**
- MIX数据集以及其子数据集都是单类别的行人跟踪数据集,可认为相比于行人检测数据集多了id号的标注。
- 更多场景的垂类模型例如车辆行人人头跟踪等,垂类数据集也需要处理成与MIX数据集相同的格式,参照[数据集下载汇总](DataDownload.md)[车辆跟踪](vehicle/README_cn.md)[人头跟踪](headtracking21/README_cn.md)以及更通用的[行人跟踪](pedestrian/README_cn.md)
- 用户自定义数据集可参照[MOT数据集准备教程](../../docs/tutorials/PrepareMOTDataSet_cn.md)去准备。
### 用户自定义数据集准备
用户自定义数据集准备请参考[MOT数据集准备教程](../../docs/tutorials/PrepareMOTDataSet_cn.md)去准备。
## 引用 ## 引用
``` ```
......
...@@ -144,7 +144,7 @@ PP-Human整体方案如下图所示 ...@@ -144,7 +144,7 @@ PP-Human整体方案如下图所示
### 2. 行人跟踪 ### 2. 行人跟踪
- 采用SDE方案完成行人跟踪 - 采用SDE方案完成行人跟踪
- 检测模型使用PP-YOLOE L - 检测模型使用PP-YOLOE L(高精度)和S(轻量级)
- 跟踪模块采用Bytetrack方案 - 跟踪模块采用Bytetrack方案
- 详细文档参考[Bytetrack](../../../../configs/mot/bytetrack)[检测跟踪文档](mot.md) - 详细文档参考[Bytetrack](../../../../configs/mot/bytetrack)[检测跟踪文档](mot.md)
......
...@@ -54,8 +54,8 @@ python deploy/pipeline/pipeline.py --config deploy/pipeline/config/infer_cfg_pph ...@@ -54,8 +54,8 @@ python deploy/pipeline/pipeline.py --config deploy/pipeline/config/infer_cfg_pph
## 方案说明 ## 方案说明
1. 目标检测/多目标跟踪获取图片/视频输入中的行人检测框,模型方案为PP-YOLOE,详细文档参考[PP-YOLOE](../../../configs/ppyoloe) 1. 目标检测/多目标跟踪获取图片/视频输入中的行人检测框,模型方案为PP-YOLOE,详细文档参考[PP-YOLOE](../../../../configs/ppyoloe/)
2. 多目标跟踪模型方案基于[ByteTrack](https://arxiv.org/pdf/2110.06864.pdf),采用PP-YOLOE替换原文的YOLOX作为检测器,采用BYTETracker作为跟踪器,详细文档参考[ByteTrack](../../../configs/mot/bytetrack) 2. 多目标跟踪模型方案基于[ByteTrack](https://arxiv.org/pdf/2110.06864.pdf),采用PP-YOLOE替换原文的YOLOX作为检测器,采用BYTETracker作为跟踪器,详细文档参考[ByteTrack](../../../../configs/mot/bytetrack)
## 参考文献 ## 参考文献
``` ```
......
...@@ -56,9 +56,9 @@ Data source and copyright owner:Skyinfor Technology. Thanks for the provision ...@@ -56,9 +56,9 @@ Data source and copyright owner:Skyinfor Technology. Thanks for the provision
## Introduction to the Solution ## Introduction to the Solution
1. Get the pedestrian detection box of the image/ video input through object detection and multi-object tracking. The adopted model is PP-YOLOE, and for details, please refer to [PP-YOLOE](../../../configs/ppyoloe). 1. Get the pedestrian detection box of the image/ video input through object detection and multi-object tracking. The adopted model is PP-YOLOE, and for details, please refer to [PP-YOLOE](../../../../configs/ppyoloe).
2. The multi-object tracking model solution is based on [ByteTrack](https://arxiv.org/pdf/2110.06864.pdf), and replace the original YOLOX with P-YOLOE as the detector,and BYTETracker as the tracker, please refer to [ByteTrack](../../../configs/mot/bytetrack). 2. The multi-object tracking model solution is based on [ByteTrack](https://arxiv.org/pdf/2110.06864.pdf), and replace the original YOLOX with P-YOLOE as the detector,and BYTETracker as the tracker, please refer to [ByteTrack](../../../../configs/mot/bytetrack).
## Reference ## Reference
``` ```
......
# 多目标跟踪任务二次开发 # 多目标跟踪任务二次开发
在产业落地过程中应用多目标跟踪算法,不可避免地会出现希望自定义类型的多目标跟踪的需求,或是对已有多目标跟踪模型的优化,以提升在特定场景下模型的效果。我们在本文档通过案例来介绍如何根据期望识别的行为来进行多目标跟踪方案的选择,以及使用PaddleDetection进行多目标跟踪算法二次开发工作,包括:数据准备、模型优化思路和跟踪类别修改的开发流程。
## 数据准备 ## 数据准备
多目标跟踪模型方案采用[ByteTrack](https://arxiv.org/pdf/2110.06864.pdf),其中使用PP-YOLOE替换原文的YOLOX作为检测器,使用BYTETracker作为跟踪器,详细文档参考[ByteTrack](../../../configs/mot/bytetrack)。原文的ByteTrack只支持行人单类别,PaddleDetection中也支持多类别同时进行跟踪。训练ByteTrack也就是训练检测器的过程,只需要准备好检测标注即可,不需要ReID标注信息,即当成纯检测来做即可。数据集最好是连续视频中抽取出来的而不是无关联的图片集合。
二次开发首先需要进行数据集的准备,针对场景特点采集合适的数据从而提升模型效果和泛化性能。然后使用Labeme,LabelImg等标注工具标注目标检测框,并将标注结果转化为COCO或VOC数据格式。详细文档可以参考[数据准备文档](../../tutorials/data/README.md)
## 模型优化 ## 模型优化
### 1. 使用自定义数据集训练
ByteTrack跟踪方案采用的数据集只需要有检测标注即可。参照[MOT数据集准备](../../../configs/mot)[MOT数据集教程](docs/tutorials/data/PrepareMOTDataSet.md)
```
# 单卡训练
CUDA_VISIBLE_DEVICES=0 python tools/train.py -c configs/ppyoloe/ppyoloe_crn_l_300e_coco.yml --eval --amp
# 多卡训练
python -m paddle.distributed.launch --log_dir=log_dir --gpus 0,1,2,3,4,5,6,7 tools/train.py -c configs/ppyoloe/ppyoloe_crn_l_300e_coco.yml --eval --amp
```
更详细的命令参考[30分钟快速上手PaddleDetection](../../tutorials/GETTING_STARTED_cn.md)[ByteTrack](../../../configs/mot/bytetrack/detector)
### 2. 加载COCO模型作为预训练
目前PaddleDetection提供的配置文件加载的预训练模型均为ImageNet数据集的权重,加载到检测算法的骨干网络中,实际使用时,建议加载COCO数据集训练好的权重,通常能够对模型精度有较大提升,使用方法如下:
#### 1) 设置预训练权重路径
COCO数据集训练好的模型权重均在各算法配置文件夹下,例如`configs/ppyoloe`下提供了PP-YOLOE-l COCO数据集权重:[链接](https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_300e_coco.pdparams) 。配置文件中设置`pretrain_weights: https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_300e_coco.pdparams`
#### 2) 修改超参数
加载COCO预训练权重后,需要修改学习率超参数,例如`configs/ppyoloe/_base_/optimizer_300e.yml`中:
```
epoch: 120 # 原始配置为300epoch,加载COCO权重后可以适当减少迭代轮数
LearningRate:
base_lr: 0.005 # 原始配置为0.025,加载COCO权重后需要降低学习率
schedulers:
- !CosineDecay
max_epochs: 144 # 依据epoch数进行修改,一般为epoch数的1.2倍
- !LinearWarmup
start_factor: 0.
epochs: 5
```
## 跟踪类别修改 ## 跟踪类别修改
当实际使用场景类别发生变化时,需要修改数据配置文件,例如`configs/datasets/coco_detection.yml`中:
```
metric: COCO
num_classes: 10 # 原始类别1
```
配置修改完成后,同样可以加载COCO预训练权重,PaddleDetection支持自动加载shape匹配的权重,对于shape不匹配的权重会自动忽略,因此无需其他修改。
...@@ -2,31 +2,98 @@ ...@@ -2,31 +2,98 @@
# 多目标跟踪数据集准备 # 多目标跟踪数据集准备
## 目录 ## 目录
- [MOT数据集](#MOT数据集) - [简介和模型选型](#简介和模型选型)
- [数据集目录](#数据集目录) - [MOT数据集准备](#MOT数据集准备)
- [数据格式](#数据格式) - [SDE数据集](#SDE数据集)
- [用户数据准备](#用户数据准备) - [JDE数据集](#JDE数据集)
- [数据格式转换](#数据格式转换) - [用户自定义数据集准备](#用户自定义数据集准备)
- [自定义数据训练](#自定义数据训练) - [SDE数据集](#SDE数据集)
- [JDE数据集](#JDE数据集)
- [引用](#引用) - [引用](#引用)
### MOT数据集 ## 简介和模型选型
PaddleDetection复现[JDE](https://github.com/Zhongdao/Towards-Realtime-MOT)[FairMOT](https://github.com/ifzhang/FairMOT),是使用的和他们相同的MIX数据集,包括**Caltech Pedestrian, CityPersons, CUHK-SYSU, PRW, ETHZ, MOT17和MOT16**。使用前6者作为联合数据集参与训练,MOT16作为评测数据集。如果您想使用这些数据集,请**遵循他们的License** PaddleDetection中提供了SDE和JDE两个系列的多种算法实现:
- SDE(Separate Detection and Embedding)
- [ByteTrack](../../../configs/mot/bytetrack)
- [DeepSORT](../../../configs/mot/deepsort)
- JDE(Joint Detection and Embedding)
- [JDE](../../../configs/mot/jde)
- [FairMOT](../../../configs/mot/fairmot)
- [MCFairMOT](../../../configs/mot/mcfairmot)
**注意:**
- 以上算法原论文均为单类别的多目标跟踪,PaddleDetection团队同时也支持了[ByteTrack](./bytetrack)和FairMOT([MCFairMOT](./mcfairmot))的多类别的多目标跟踪;
- [DeepSORT](../../../configs/mot/deepsort)[JDE](../../../configs/mot/jde)均只支持单类别的多目标跟踪;
- [DeepSORT](../../../configs/mot/deepsort)需要额外添加ReID权重一起执行,[ByteTrack](../../../configs/mot/bytetrack)可加可不加ReID权重,默认不加;
关于模型选型,PaddleDetection团队提供的总结建议如下:
| MOT方式 | 经典算法 | 算法流程 | 数据集要求 | 其他特点 |
| :--------------| :--------------| :------- | :----: | :----: |
| SDE系列 | DeepSORT,ByteTrack | 分离式,两个独立模型权重先检测后ReID,也可不加ReID | 检测和ReID数据相对独立,不加ReID时即纯检测数据集 |检测和ReID可分别调优,鲁棒性较高,AI竞赛常用|
| JDE系列 | FairMOT | 联合式,一个模型权重端到端同时检测和ReID | 必须同时具有检测和ReID标注 | 检测和ReID联合训练,不易调优,泛化性不强|
**注意:** **注意:**
- 多目标跟踪数据集一般是用于单类别的多目标跟踪,DeepSORT、JDE和FairMOT均为单类别跟踪模型,MIX数据集以及其子数据集也都是单类别的行人跟踪数据集,可认为相比于行人检测数据集多了id号的标注。 - 由于数据标注的成本较大,建议选型前优先考虑**数据集要求**,如果数据集只有检测框标注而没有ReID标注,是无法使用JDE系列算法训练的,更推荐使用SDE系列;
- 为了训练更多场景的垂类模型例如车辆等,垂类数据集也需要处理成与MIX数据集相同的格式,PaddleDetection也提供了[车辆跟踪](../../configs/mot/vehicle/README_cn.md)[人头跟踪](../../configs/mot/headtracking21/README_cn.md)以及更通用的[行人跟踪](../../configs/mot/pedestrian/README_cn.md)的垂类数据集和模型。用户自定义数据集也可参照本文档准备。 - SDE系列算法在检测器精度足够高时,也可以不使用ReID权重进行物体间的长时序关联,可以参照[ByteTrack](bytetrack)
- 多类别跟踪模型是[MCFairMOT](../../configs/mot/mcfairmot/README_cn.md),多类别数据集是VisDrone数据集的整合版,可参照[MCFairMOT](../../configs/mot/mcfairmot/README_cn.md)的文档说明。 - 耗时速度和模型权重参数量计算量有一定关系,耗时从理论上看`不使用ReID的SDE系列 < JDE系列 < 使用ReID的SDE系列`
- 跨镜头跟踪模型,是选用的[AIC21 MTMCT](https://www.aicitychallenge.org) (CityFlow)车辆跨镜头跟踪数据集,数据集和模型可参照[跨境头跟踪](../../configs/mot/mtmct/README_cn.md)的文档说明。
## MOT数据集准备
PaddleDetection团队提供了众多公开数据集或整理后数据集的下载链接,参考[数据集下载汇总](../../../configs/mot/DataDownload.md),用户可以自行下载使用。
根据模型选型总结,MOT数据集可以分为两类:一类纯检测框标注的数据集,仅SDE系列可以使用;另一类是同时有检测和ReID标注的数据集,SDE系列和JDE系列都可以使用。
### SDE数据集
SDE数据集是纯检测标注的数据集,用户自定义数据集可以参照[DET数据准备文档](./PrepareDetDataSet.md)准备。
以MOT17数据集为例,下载并解压放在`PaddleDetection/dataset/mot`目录下:
```
wget https://dataset.bj.bcebos.com/mot/MOT17.zip
```
并修改数据集部分的配置文件如下:
```
num_classes: 1
TrainDataset:
!COCODataSet
dataset_dir: dataset/mot/MOT17
anno_path: annotations/train_half.json
image_dir: images/train
data_fields: ['image', 'gt_bbox', 'gt_class', 'is_crowd']
EvalDataset:
!COCODataSet
dataset_dir: dataset/mot/MOT17
anno_path: annotations/val_half.json
image_dir: images/train
TestDataset:
!ImageFolder
dataset_dir: dataset/mot/MOT17
anno_path: annotations/val_half.json
```
#### 数据集目录 数据集目录为:
首先按照以下命令下载image_lists.zip并解压放在`PaddleDetection/dataset/mot`目录下: ```
dataset/mot
|——————MOT17
|——————annotations
|——————images
```
### JDE数据集
JDE数据集是同时有检测和ReID标注的数据集,首先按照以下命令`image_lists.zip`并解压放在`PaddleDetection/dataset/mot`目录下:
``` ```
wget https://dataset.bj.bcebos.com/mot/image_lists.zip wget https://dataset.bj.bcebos.com/mot/image_lists.zip
``` ```
然后按照以下命令可以快速下载MIX数据集的各个子数据集,并解压放在`PaddleDetection/dataset/mot`目录下: 然后按照以下命令可以快速下载各个公开数据集,也解压放在`PaddleDetection/dataset/mot`目录下:
``` ```
# MIX数据,同JDE,FairMOT论文使用的数据集
wget https://dataset.bj.bcebos.com/mot/MOT17.zip wget https://dataset.bj.bcebos.com/mot/MOT17.zip
wget https://dataset.bj.bcebos.com/mot/Caltech.zip wget https://dataset.bj.bcebos.com/mot/Caltech.zip
wget https://dataset.bj.bcebos.com/mot/CUHKSYSU.zip wget https://dataset.bj.bcebos.com/mot/CUHKSYSU.zip
...@@ -35,24 +102,17 @@ wget https://dataset.bj.bcebos.com/mot/Cityscapes.zip ...@@ -35,24 +102,17 @@ wget https://dataset.bj.bcebos.com/mot/Cityscapes.zip
wget https://dataset.bj.bcebos.com/mot/ETHZ.zip wget https://dataset.bj.bcebos.com/mot/ETHZ.zip
wget https://dataset.bj.bcebos.com/mot/MOT16.zip wget https://dataset.bj.bcebos.com/mot/MOT16.zip
``` ```
数据集目录为:
最终目录为:
``` ```
dataset/mot dataset/mot
|——————image_lists |——————image_lists
|——————caltech.10k.val
|——————caltech.all |——————caltech.all
|——————caltech.train
|——————caltech.val
|——————citypersons.train |——————citypersons.train
|——————citypersons.val
|——————cuhksysu.train |——————cuhksysu.train
|——————cuhksysu.val
|——————eth.train |——————eth.train
|——————mot16.train |——————mot16.train
|——————mot17.train |——————mot17.train
|——————prw.train |——————prw.train
|——————prw.val
|——————Caltech |——————Caltech
|——————Cityscapes |——————Cityscapes
|——————CUHKSYSU |——————CUHKSYSU
...@@ -62,7 +122,7 @@ dataset/mot ...@@ -62,7 +122,7 @@ dataset/mot
|——————PRW |——————PRW
``` ```
#### 数据格式 #### JDE数据集的格式
这几个相关数据集都遵循以下结构: 这几个相关数据集都遵循以下结构:
``` ```
MOT17 MOT17
...@@ -76,18 +136,26 @@ MOT17 ...@@ -76,18 +136,26 @@ MOT17
``` ```
[class] [identity] [x_center] [y_center] [width] [height] [class] [identity] [x_center] [y_center] [width] [height]
``` ```
**注意**: - `class`为类别id,支持单类别和多类别,从`0`开始计,单类别即为`0`
- `class`为类别id,支持单类别和多类别,从`0`开始计,单类别即为`0` - `identity`是从`1``num_identities`的整数(`num_identities`是数据集中所有视频或图片序列的不同物体实例的总数),如果此框没有`identity`标注,则为`-1`
- `identity`是从`1``num_identities`的整数(`num_identities`是数据集中所有视频或图片序列的不同物体实例的总数),如果此框没有`identity`标注,则为`-1` - `[x_center] [y_center] [width] [height]`是中心点坐标和宽高,注意他们的值是由图片的宽度/高度标准化的,因此它们是从0到1的浮点数。
- `[x_center] [y_center] [width] [height]`是中心点坐标和宽高,注意他们的值是由图片的宽度/高度标准化的,因此它们是从0到1的浮点数。
**注意:**
- MIX数据集是[JDE](https://github.com/Zhongdao/Towards-Realtime-MOT)[FairMOT](https://github.com/ifzhang/FairMOT)原论文使用的数据集,包括**Caltech Pedestrian, CityPersons, CUHK-SYSU, PRW, ETHZ, MOT17和MOT16**。使用前6者作为联合数据集参与训练,MOT16作为评测数据集。如果您想使用这些数据集,请**遵循他们的License**
- MIX数据集以及其子数据集都是单类别的行人跟踪数据集,可认为相比于行人检测数据集多了id号的标注。
- 更多场景的垂类模型例如车辆行人人头跟踪等,垂类数据集也需要处理成与MIX数据集相同的格式,参照[数据集下载汇总](DataDownload.md)[车辆跟踪](vehicle/README_cn.md)[人头跟踪](headtracking21/README_cn.md)以及更通用的[行人跟踪](pedestrian/README_cn.md)
- 用户自定义数据集可参照[MOT数据集准备教程](../../docs/tutorials/PrepareMOTDataSet_cn.md)去准备。
### 用户数据准备
#### 数据格式转换 ## 用户自定义数据集准备
为了规范地进行训练和评测,用户数据需要转成和MOT-16数据集相同的目录和格式: ### SDE数据集
如果用户选择SDE系列方案,是准备准检测标注的自定义数据集,则可以参照[DET数据准备文档](./PrepareDetDataSet.md)准备。
### JDE数据集
如果用户选择JDE系列方案,则需要同时具有检测和ReID标注,且符合MOT-17数据集的格式。
为了规范地进行训练和评测,用户数据需要转成和MOT-17数据集相同的目录和格式:
``` ```
custom_data custom_data
|——————images |——————images
...@@ -114,33 +182,37 @@ custom_data ...@@ -114,33 +182,37 @@ custom_data
``` ```
##### images文件夹 ##### images文件夹
- `gt.txt`是原始标注文件,而训练所用标注是`labels_with_ids`文件夹。 - `gt.txt`是原始标注文件,而训练所用标注是`labels_with_ids`文件夹。
- `img1`文件夹里是按照一定帧率抽好的图片。 - `gt.txt`里是当前视频中所有图片的原始标注文件,每行都描述一个边界框,格式如下:
- `seqinfo.ini`文件是视频信息描述文件,需要如下格式的信息: ```
``` [frame_id],[identity],[bb_left],[bb_top],[width],[height],[score],[label],[vis_ratio]
[Sequence] ```
name=MOT16-02 - `img1`文件夹里是按照一定帧率抽好的图片。
imDir=img1 - `seqinfo.ini`文件是视频信息描述文件,需要如下格式的信息:
frameRate=30 ```
seqLength=600 [Sequence]
imWidth=1920 name=MOT17-02
imHeight=1080 imDir=img1
imExt=.jpg frameRate=30
``` seqLength=600
imWidth=1920
imHeight=1080
imExt=.jpg
```
`gt.txt`里是当前视频中所有图片的原始标注文件,每行都描述一个边界框,格式如下: 其中`gt.txt`里是当前视频中所有图片的原始标注文件,每行都描述一个边界框,格式如下:
``` ```
[frame_id],[identity],[bb_left],[bb_top],[width],[height],[score],[label],[vis_ratio] [frame_id],[identity],[bb_left],[bb_top],[width],[height],[score],[label],[vis_ratio]
``` ```
**注意**: **注意**:
- `frame_id`为当前图片帧序号 - `frame_id`为当前图片帧序号
- `identity`是从`1``num_identities`的整数(`num_identities`**当前视频或图片序列**的不同物体实例的总数),如果此框没有`identity`标注,则为`-1` - `identity`是从`1``num_identities`的整数(`num_identities`**当前视频或图片序列**的不同物体实例的总数),如果此框没有`identity`标注,则为`-1`
- `bb_left`是目标框的左边界的x坐标 - `bb_left`是目标框的左边界的x坐标
- `bb_top`是目标框的上边界的y坐标 - `bb_top`是目标框的上边界的y坐标
- `width,height`是真实的像素宽高 - `width,height`是真实的像素宽高
- `score`是当前目标是否进入考虑范围内的标志(值为0表示此目标在计算中被忽略,而值为1则用于将其标记为活动实例),默认为`1` - `score`是当前目标是否进入考虑范围内的标志(值为0表示此目标在计算中被忽略,而值为1则用于将其标记为活动实例),默认为`1`
- `label`是当前目标的种类标签,由于目前仅支持单类别跟踪,默认为`1`,MOT-16数据集中会有其他类别标签,但都是当作ignore类别计算 - `label`是当前目标的种类标签,由于目前仅支持单类别跟踪,默认为`1`,MOT-16数据集中会有其他类别标签,但都是当作ignore类别计算
- `vis_ratio`是当前目标被其他目标包含或覆挡后的可见率,是从0到1的浮点数,默认为`1` - `vis_ratio`是当前目标被其他目标包含或覆挡后的可见率,是从0到1的浮点数,默认为`1`
##### labels_with_ids文件夹 ##### labels_with_ids文件夹
...@@ -149,9 +221,9 @@ imExt=.jpg ...@@ -149,9 +221,9 @@ imExt=.jpg
[class] [identity] [x_center] [y_center] [width] [height] [class] [identity] [x_center] [y_center] [width] [height]
``` ```
**注意**: **注意**:
- `class`为类别id,支持单类别和多类别,从`0`开始计,单类别即为`0` - `class`为类别id,支持单类别和多类别,从`0`开始计,单类别即为`0`
- `identity`是从`1``num_identities`的整数(`num_identities`是数据集中所有视频或图片序列的不同物体实例的总数),如果此框没有`identity`标注,则为`-1` - `identity`是从`1``num_identities`的整数(`num_identities`是数据集中所有视频或图片序列的不同物体实例的总数),如果此框没有`identity`标注,则为`-1`
- `[x_center] [y_center] [width] [height]`是中心点坐标和宽高,注意是由图片的宽度/高度标准化的,因此它们是从0到1的浮点数。 - `[x_center] [y_center] [width] [height]`是中心点坐标和宽高,注意是由图片的宽度/高度标准化的,因此它们是从0到1的浮点数。
可采用如下脚本生成相应的`labels_with_ids`: 可采用如下脚本生成相应的`labels_with_ids`:
``` ```
...@@ -159,7 +231,6 @@ cd dataset/mot ...@@ -159,7 +231,6 @@ cd dataset/mot
python gen_labels_MOT.py python gen_labels_MOT.py
``` ```
#### 自定义数据训练
### 引用 ### 引用
Caltech: Caltech:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册