Awesome
<div align="center"> <h1>ReST š (ICCV2023)</h1> <h3>ReST: A Reconfigurable Spatial-Temporal Graph Model for Multi-Camera Multi-Object Tracking</h3>Cheng-Che Cheng<sup>1</sup>Ā Min-Xuan Qiu<sup>1</sup>Ā Chen-Kuo Chiang<sup>2</sup>Ā Shang-Hong Lai<sup>1</sup>Ā
<sup>1</sup>National Tsing Hua University, Taiwan Ā <sup>2</sup>National Chung Cheng University, Taiwan
<!--- [![thecvf](https://img.shields.io/badge/CVF-Paper-7395C5.svg)](https://openaccess.thecvf.com/content/ICCV2023/papers/Cheng_ReST_A_Reconfigurable_Spatial-Temporal_Graph_Model_for_Multi-Camera_Multi-Object_Tracking_ICCV_2023_paper.pdf) [![thecvf](https://img.shields.io/badge/CVF-Supp-7395C5.svg)](https://openaccess.thecvf.com/content/ICCV2023/supplemental/Cheng_ReST_A_Reconfigurable_ICCV_2023_supplemental.pdf) ---> </div>News
- 2023.8 Code release
- 2023.7 Our paper is accepted to ICCV 2023!
Introduction
ReST, a novel reconfigurable graph model, that first associates all detected objects across cameras spatially before reconfiguring it into a temporal graph for Temporal Association. This two-stage association approach enables us to extract robust spatial and temporal-aware features and address the problem with fragmented tracklets. Furthermore, our model is designed for online tracking, making it suitable for real-world applications. Experimental results show that the proposed graph model is able to extract more discriminating features for object tracking, and our model achieves state-of-the-art performance on several public datasets. <img src="https://github.com/chengche6230/ReST/blob/main/docs/method-overview.jpg" width="100%" height="100%"/>
Requirements
Installation
-
Clone the project and create virtual environment
git clone https://github.com/chengche6230/ReST.git conda create --name ReST python=3.8 conda activate ReST
-
Install (follow instructions):
- torchreid
- DGL (also check PyTorch/CUDA compatibility table below)
- warmup_scheduler
- py-motmetrics
- Reference commands:
# torchreid git clone https://github.com/KaiyangZhou/deep-person-reid.git cd deep-person-reid/ pip install -r requirements.txt conda install pytorch torchvision cudatoolkit=9.0 -c pytorch python setup.py develop # other packages (in /ReST) conda install -c dglteam/label/cu117 dgl pip install git+https://github.com/ildoonet/pytorch-gradual-warmup-lr.git pip install motmetrics
-
Install other requirements
pip install -r requirements.txt
-
Download pre-trained ReID model
Datasets
- Place datasets in
./datasets/
as:
./datasets/
āāā CAMPUS/
ā āāā Garden1/
ā ā āāā view-{}.txt
ā āāā Garden2/
ā ā āāā view-HC{}.txt
ā āāā Parkinglot/
ā ā āāā view-GL{}.txt
ā āāā metainfo.json
āāā PETS09/
ā āāā S2L1/
ā ā āāā View_00{}.txt
ā āāā metainfo.json
āāā Wildtrack/
ā āāā sequence1/
ā ā āāā src/
ā ā āāā annotations_positions/
ā ā āāā Image_subsets/
ā āāā metainfo.json
āāā {DATASET_NAME}/ # for customized dataset
āāā {SEQUENCE_NAME}/
ā āāā {ANNOTATION_FILE}.txt
āāā metainfo.json
- Prepare all
metainfo.json
files (e.g. frames, file pattern, homography) - Run for each dataset:
Checkpython ./src/datasets/preprocess.py --dataset {DATASET_NAME}
./datasets/{DATASET_NAME}/{SEQUENCE_NAME}/output
if there is anything missing:/output/ āāā gt_MOT/ # for motmetrics ā āāā c{CAM}.txt āāā gt_train.json āāā gt_eval.json āāā gt_test.json āāā {DETECTOR}_test.json # if you want to use other detector, e.g. yolox_test.json
- Prepare all image frames as
{FRAME}_{CAM}.jpg
in/output/frames
.
Model Zoo
Download trained weights if you need, and modify TEST.CKPT_FILE_SG
& TEST.CKPT_FILE_TG
in ./configs/{DATASET_NAME}.yml
.
Dataset | Spatial Graph | Temporal Graph |
---|---|---|
Wildtrack | sequence1 | sequence1 |
CAMPUS | Garden1<br>Garden2<br>Parkinglot | Garden1<br>Garden2<br>Parkinglot |
PETS-09 | S2L1 | S2L1 |
Training
To train our model, basically run the command:
python main.py --config_file ./configs/{DATASET_NAME}.yml
In {DATASET_NAME}.yml
:
- Modify
MODEL.MODE
to 'train' - Modify
SOLVER.TYPE
to train specific graphs. - Make sure all settings are suitable for your device, e.g.
DEVICE_ID
,BATCH_SIZE
. - You can also directly append attributes after the command for convenience, e.g.:
python main.py --config_file ./configs/Wildtrack.yml MODEL.DEVICE_ID "('1')" SOLVER.TYPE "SG"
Testing
python main.py --config_file ./configs/{DATASET_NAME}.yml
In {DATASET_NAME}.yml
:
- Modify
MODEL.MODE
to 'test'. - Select what input detection you want, and modify
MODEL.DETECTION
.- You need to prepare
{DETECTOR}_test.json
in./datasets/{DATASET_NAME}/{SEQUENCE_NAME}/output/
by your own first.
- You need to prepare
- Make sure all settings in
TEST
are configured.
DEMO
Wildtrack
<img src="https://github.com/chengche6230/ReST/blob/main/docs/ReST_demo_Wildtrack.gif" width="65%" height="65%"/>Acknowledgement
Citation
If you find this code useful for your research, please cite our paper
@InProceedings{Cheng_2023_ICCV,
author = {Cheng, Cheng-Che and Qiu, Min-Xuan and Chiang, Chen-Kuo and Lai, Shang-Hong},
title = {ReST: A Reconfigurable Spatial-Temporal Graph Model for Multi-Camera Multi-Object Tracking},
booktitle = {Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV)},
month = {October},
year = {2023},
pages = {10051-10060}
}