PbTrack Configuration

This framework uses Hydra for its configuration.

Hydra combines commandline arguments with configuration directories, to create a configuration dictionary. The config tree is determined by the directory structure, and each file in a directory is a configuration choice.

By default, the main configuration file looks like this :

The defaults list in this file contains the default value for every category. You can change these defaults either through the commandline. For example, to change the dataset and the image detector, you could do:

python -m tracklab.main dataset=posetrack18 detect_multiple=openpifpaf

If you want to change a single value inside a category, for example the bbox extension factor:

python -m tracklab.main detect_multiple=openpifpaf "detect_multiple.cfg.bbox.extension_factor=[0.05,0.05,0.05]"

This will both change the detector to openpifpaf and change a parameter inside the openpifpaf configuration.

You can find out which values you can change by looking at the configuration directory or running:

python -m tracklab.main --help

Thanks to Hydra, we can also run a grid-search (or other kind of hyper-parameter searches). The default grid-search is activated with the -m flag, and by passing a comma-separated list of values, either at the category-level or at the key-level:

python -m tracklab.main -m dataset=posetrack18,posetrack21 detect_multiple=openpifpaf,yolox track.cfg.max_dist=0.2,0.5,0.7

This command will run tracking multiple times, to test two datasets, two image-level detectors with three different tracking hyper-parameters (combining to 12 runs).

Hint

The first -m is a python flag to run a module, while the second -m is the multirun flag from hydra

Configuration directory

The configuration for tracklab is located in the configs/ directory, with the following structure:

configs
├── dataset
├── detect_multiple
├── detect_single
├── reid
├── track
├── engine
├── eval
├── machine
├── state
├── visualization
└── config.yaml

For example, when adding a new dataset, you should add a new file inside configs/dataset/, which will be the basis for your new dataset.

Automatic initialization

In the code, we use hydra.initialize() in order to find the right class to initialize or function to call. This requires the configuration to have a specific key, _target_, which must contain the full name (including modules) of