ECCV'26 accepted paper Motion-aware Sparse Pipeline for Lightweight Object Tracking [Arxiv]
Training code of MaST is comming soon. For now, the code supports multi-process ONNX Runtime inference on several benchmarks without PyTorch required.
| Model | Search Size | Template Size | Backbone Depth | ONNX Size |
|---|---|---|---|---|
MaST_small |
384×384 | 192×192 | 12 layers | ~23 MB |
MaST_tiny |
256×256 | 128×128 | 12 layers | ~22 MB |
MaST_nano |
256×256 | 128×128 | 8 layers | ~16 MB |
Python >= 3.8 required.
# GPU inference (recommended)
pip install onnxruntime-gpu>=1.16.0 numpy opencv-python tqdm
# CPU-only inference
pip install onnxruntime>=1.16.0 numpy opencv-python tqdmFull dependency list:
| Package | Version | Required |
|---|---|---|
onnxruntime-gpu |
>= 1.16.0 | Yes (or onnxruntime for CPU) |
numpy |
any recent | Yes |
opencv-python |
any recent | Yes |
tqdm |
any | Optional (progress bars) |
Note: CUDA 11.x or 12.x must be installed for GPU inference with onnxruntime-gpu.
Edit config.py to set your local dataset paths:
DATASET_PATHS = {
"nfs_path": "/path/to/NFS",
"lasot_path": "/path/to/LaSOT",
"got10k_path": "/path/to/GOT-10k",
"trackingnet_path": "/path/to/TrackingNet",
"uav_path": "/path/to/UAV123",
"vasttrack_test_path": "/path/to/VastTrack/test",
...
}Only set paths for datasets you plan to evaluate on.
python eval.py <model_name> --dataset <dataset_name> [--threads N] [--num_gpus N]# LaSOT with 4 threads
python eval.py MaST_nano --dataset lasot --threads 4 --num_gpus 1
# NFS with 8 threads, 2 GPUs
python eval.py MaST_tiny --dataset nfs_30 --threads 8 --num_gpus 2
python eval.py MaST_tiny --dataset nfs_240 --threads 8 --num_gpus 2
# Single sequence (debug)
python eval.py MaST_tiny --dataset got10k_val --sequence Basketball --debug 1| Name | Description |
|---|---|
nfs / nfs_30 |
NFS at 30 FPS |
nfs_60 / nfs_120 / nfs_240 |
NFS at other frame rates |
lasot |
LaSOT test set (280 sequences) |
lasot_extension_subset |
LaSOT extension (150 sequences) |
got10k_test |
GOT-10K test set |
got10k_val |
GOT-10K validation set |
trackingnet |
TrackingNet test set |
uav |
UAV123 (123 sequences) |
vasttrack_test |
VastTrack test split |
| Argument | Default | Description |
|---|---|---|
model_name |
(required) | One of: MaST_small, MaST_tiny, MaST_nano |
--dataset |
(required) | Dataset name from the table above |
--threads |
0 | Number of parallel worker processes. 0 = sequential |
--num_gpus |
1 | Number of GPUs. Workers are distributed across GPUs round-robin |
--debug |
0 | Set to 1 to skip saving results |
--sequence |
None | Run only this sequence (by name) |
NFS/
├── airboard_1/
│ └── 240/
│ ├── airboard_1/ # 240fps frames
│ │ ├── 00001.jpg
│ │ └── ...
│ └── airboard_1.txt # annotation
├── basketball_1/
│ └── 240/
│ └── ...
└── ...
LaSOT/
├── airplane/
│ ├── airplane-1/
│ │ ├── img/
│ │ │ ├── 00000001.jpg
│ │ │ └── ...
│ │ ├── groundtruth.txt
│ │ ├── full_occlusion.txt
│ │ └── out_of_view.txt
│ └── airplane-9/
│ └── ...
├── basketball/
│ └── ...
└── ...
GOT-10k/
├── test/
│ ├── list.txt
│ ├── GOT-10k_Test_000001/
│ │ ├── 00000001.jpg
│ │ └── groundtruth.txt
│ └── ...
└── val/
├── list.txt
└── ...
TrackingNet/
└── TEST/
├── anno/
│ ├── 0BRwBMTKkS_OG3kCk8Lk.txt
│ └── ...
└── frames/
├── 0BRwBMTKkS_OG3kCk8Lk/
│ ├── 0.jpg
│ └── ...
└── ...
UAV123/
├── anno/
│ └── UAV123/
│ ├── bike1.txt
│ └── ...
└── data_seq/
└── UAV123/
├── bike1/
│ ├── 000001.jpg
│ └── ...
└── ...
VastTrack/
├── class_name/
│ ├── class_name-1/
│ │ ├── imgs/
│ │ │ ├── 00001.jpg
│ │ │ └── ...
│ │ └── Groundtruth.txt
│ └── ...
└── ...
Results are saved to results/<model_name>/<dataset_name>/:
results/
└── MaST_tiny/
└── nfs_30/
└── nfs/
├── airboard_1.txt # bounding boxes (x y w h per line)
├── airboard_1_time.txt # per-frame time
└── ...
spato_release/
├── README.md # This file
├── eval.py # Entry point CLI
├── tracker.py # ONNX tracker (preprocessing + inference + postprocessing)
├── datasets/ # Dataset loaders for supported benchmarks
├── config.py # Model configs + dataset paths (edit this!)
└── models/
├── MaST-tiny.onnx
└── ...
The idea and code are based on OSTrack, and the prediction head is developed from LoRATv2.