# Poly-MOT
**Repository Path**: jw787/Poly-MOT
## Basic Information
- **Project Name**: Poly-MOT
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2023-12-14
- **Last Updated**: 2024-11-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Poly-MOT
This is Official Repo For IROS 2023 Accepted Paper "Poly-MOT: A Polyhedral Framework For 3D Multi-Object Tracking"

> [**Poly-MOT: A Polyhedral Framework For 3D Multi-Object Tracking**](https://arxiv.org/abs/2307.16675),
> Xiaoyu Li\*, Tao Xie\*, Dedong Liu\*, Jinghan Gao, Kun Dai, Zhiqiang Jiang, Lijun Zhao, Ke Wang,
> *arXiv technical report ([arXiv 2307.16675](https://arxiv.org/abs/2307.16675))*,
> IROS 2023
## Citation
If you find this project useful in your research, please consider citing by :smile_cat::
```
@misc{li2023polymot,
title={Poly-MOT: A Polyhedral Framework For 3D Multi-Object Tracking},
author={Xiaoyu Li and Tao Xie and Dedong Liu and Jinghan Gao and Kun Dai and Zhiqiang Jiang and Lijun Zhao and Ke Wang},
year={2023},
eprint={2307.16675},
archivePrefix={arXiv},
primaryClass={cs.RO}
}
```
## Abstract
We propose Poly-MOT, an efficient 3D MOT method based on the Tracking-By-Detection framework that enables the tracker to choose the most appropriate tracking criteria for each object category.
Specifically, Poly-MOT leverages different motion models for various object categories to characterize distinct types of motion accurately.
We also introduce the constraint of the rigid structure of objects into a specific motion model to accurately describe the highly nonlinear motion of the object.
Additionally, we introduce a two-stage data association strategy to ensure that objects can find the optimal similarity metric from three custom metrics for their categories and reduce missing matches.
## News
- 2023-03-01. Our method ranks first among all methods on the NuScenes tracking [benchmark](https://www.nuscenes.org/tracking?externalData=all&mapData=all&modalities=Any) :fire:.
- 2023-07-01. Poly-MOT is accepted at IROS 2023 :zap:.
- 2023-08-01. Warm-up :fire:! The official repo and paper have been released. We will release our code in early-September.
- 2023-09-08. **Version 1.0 has been released.**
## Release notes
### Implemented functions
- 2023-09-08. In this version, we implemented API for the `nuScenes` dataset, five Similarity metrics(giou3d, gioubev, iou3d, ioubev, eucl), three Motion models(CTRA, Bicycle, CA), one NMS method(Classic NMS), three matching methods(Greedy, Hungarian, MNN).
### TODO list
- 2023-09-08. Two motion models(CV, CTRV), more NMS method, make d_eucl parallel;
## Highlights
- **Best-performance(75.4 AMOTA).:chart_with_upwards_trend:**
- Poly-MOT enables the tracker to choose the most appropriate tracking criteria for each object category.
- With the powerful detector [Largerkernel3D](https://github.com/dvlab-research/LargeKernel3D), Poly-MOT achieves 75.4 AMOTA on the NuScenes test set.
- Poly-MOT achieves 73.1 AMOTA on the val set with [CenterPoint](https://github.com/tianweiy/CenterPoint) for a fair comparison.
- **Real-time(0.3s per frame).:zap:**
- Poly-MOT follows the Tracking-By-Detection(TBD) framework, and is learning-free.
- During online tracking, No any additional input(including dataset, images, map, ...) needed besides the detector.
- We first proposed the *half-parallel GIOU operator* under the `Python` implementation.
- On the NuScenes, Poly-MOT can run at 3 FPS (Frame Per Second) on Intel 9940X.
- **Strong-scalability(one-config-fit-all).:ledger:**
- Poly-MOT has integrated a variety of tracking technologies in the code, and uses `yaml` to manage these hyperparameters in a unified way, you can customize your own tracker arbitrarily.
- **Well-readability(many comments).:clipboard:**
- We have recorded each tracking module's design reasons, effects, and ideas in the code.
- You can grasp our insight and even start discussing any comments with us.
## Main Results
### 3D Multi-object tracking on NuScenes test set
Method | Detector | AMOTA | AMOTP | IDS |
--------------|---------------|----------|----------|----------|
Poly-MOT | LargeKernel3D | 75.4 | 42.2 | 292 |
You can find detailed results on the NuScenes test set on this [website](https://eval.ai/web/challenges/challenge-page/476/leaderboard/1321).
### 3D Multi-object tracking on NuScenes val set
Method | Detector | AMOTA | AMOTP | IDS |
---------------|-----------------|----------|----------|----------|
Poly-MOT | Centerpoint | 73.1 | 52.1 | 281 |
Poly-MOT | LargeKernel3D-L | 75.2 | 54.1 | 252 |
## Use Poly-MOT
### 1. Create and activate environment
```
conda env create -f environment.yaml
conda activate polymot
```
### 2. Required Data
#### Download 3D detector
We strongly recommend that you download the detector file `.json` from official websites of Pioneer detector works ([CenterPoint](https://github.com/tianweiy/CenterPoint), etc.).
In online tracking, we need to use detector files in `.json` format.
#### Prepare the token table for online inference
`sample token table` is used to identify the first frame of each scene.
```shell
cd Poly-MOT/data/script
python first_frame.py
```
The file path(detector path, database path, etc.) within the function `extract_first_token` needs to be modified.
The result will be output in `data/utils/first_token_table/{version}/nusc_first_token.json`.
#### Prepare the detector for online inference
The tracker requires that the detectors must be arranged in chronological order.
`reorder_detection.py` is used to reorganize detectors in chronological order.
```shell
cd Poly-MOT/data/script
python reorder_detection.py
```
The file path(detector path, database path, token path, etc.) within the function `reorder_detection` needs to be modified.
The result will be output in `data/detector/first_token_table/{version}/{version}_{detector_name}.json`.
#### Prepare the database for evaluation
Although Poly-MOT does not need the database during online inference, in order to evaluate the tracking effect, the database is still necessary.
Download data and organize it as follows:
```
# For nuScenes Dataset
└── NUSCENES_DATASET_ROOT
├── samples <-- keyframes
├── sweeps <-- frames without annotation
├── maps <-- map infos
├── v1.0-trainval <-- train/val set metadata
├── v1.0-test <-- test set metadata
```
### 3. Running and Evaluation
#### Config
All hyperparameters are encapsulated in `config/nusc_config.yaml`, you can change the `yaml` file to customize your own tracker.
**The accuracy with `CenterPoint` in the paper can be reproduced through the parameters above the current `nusc_config.yaml`.**
#### Running
After downloading and organizing the detection files, you can simply run:
```
python test.py
```
The file path(detector path, token path, database path, etc.) within the file needs to be modified.
Besides, you can also specify the file path using the terminal command, as following:
```
python test.py --eval_path
```
#### Evaluation
Tracking evaluation will be performed automatically after tracking all scenarios.
## Visualization
Give the box to render in the specified format and the token of the background to get the trajectory rendering map. For example, `black` boxes represent detection results, and `other colored` boxes represent existing trajectories, see the following:
You can run the Jupyer notebook [Visualization.ipynb](https://github.com/lixiaoyu2000/Poly-MOT/blob/main/utils/Visualization.ipynb).
## Contact
Any questions or suggestions about the paper/code are welcome :open_hands:!
Please feel free to submit PRs to us if you find any problems or develop better features :raised_hands:!
Xiaoyu Li(李效宇) lixiaoyu12349@icloud.com.
## License
Poly-MOT is released under the MIT license.
## Acknowledgement
This project is not possible without the following excellent open-source codebases :fist:.
In the detection part, many thanks to the following open-sourced codebases:
- [CenterPoint](https://github.com/tianweiy/CenterPoint)
- [Largerkernel3D](https://github.com/dvlab-research/LargeKernel3D)
In the tracking part, many thanks to the following open-sourced codebases:
- [AB3DMOT](https://github.com/gideontong/AB3DMOT)
- [EagerMOT](https://github.com/aleksandrkim61/EagerMOT)
- [SimpleTrack](https://github.com/tusen-ai/SimpleTrack)
- [CBMOT](https://github.com/cogsys-tuebingen/CBMOT)