Creating a custom dataset

This tutorial shows how to create a minimal dataset in the default toolkit format and use it inside a workspace. Note that this is only needed if you want to use your own dataset. If you just want to use one of the VOT challenges or benchmarks, the dataset will be automatically downloaded and prepared for you when you initialize the workspace with the appropriate stack.

Goal

At the end, you will have:

  • one sequence in the correct format,

  • a dataset index file,

  • an initialized workspace that uses your local data.

Step 1: Prepare directories

Create a workspace root and a sequence directory:

mkdir -p myworkspace/sequences/mysequence/color

The sequence name is the directory name (mysequence).

Step 2: Add frames

Put all images into the channel folder and name them with 8-digit indices:

myworkspace/sequences/mysequence/color/00000001.jpg
myworkspace/sequences/mysequence/color/00000002.jpg
myworkspace/sequences/mysequence/color/00000003.jpg
...

The default loader expects this numeric ordering. Supported channels are typically color, depth, and ir.

Step 3: Add annotations

For a single-object sequence, create groundtruth.txt in the sequence root:

myworkspace/sequences/mysequence/groundtruth.txt

Write one region per frame (for example rectangle format x,y,w,h), one line per frame:

120,80,64,92
121,81,64,92
122,81,65,93

For multi-object sequences, use one file per object:

groundtruth_target1.txt
groundtruth_target2.txt

Step 4: Create sequence metadata

Create a file named sequence inside the sequence directory:

myworkspace/sequences/mysequence/sequence

Use key-value entries:

channel.default=color
channels.color=color/%08d.jpg
fps=30

Optional fields such as width, height, and length can be added, but are not required for a basic setup.

Step 5: (Optional) Add tags and values

You can attach per-frame metadata:

  • <name>.tag (binary flags, one line per frame, values 0 or 1)

  • <name>.value (floating-point values, one line per frame)

Example:

myworkspace/sequences/mysequence/occlusion.tag
myworkspace/sequences/mysequence/confidence.value

Step 6: Index the dataset

Create list.txt in sequences and list one sequence name per line:

myworkspace/sequences/list.txt
mysequence

Step 7: Initialize workspace using local dataset

Initialize the workspace with a stack and disable dataset download:

vot initialize <stack-name> --workspace myworkspace --nodownload

This creates workspace configuration while keeping your local dataset in sequences/.

Step 8: Verify

Check that files exist:

myworkspace/
├── config.yaml
├── sequences/
│   ├── list.txt
│   └── mysequence/
│       ├── sequence
│       ├── groundtruth.txt
│       └── color/
│           ├── 00000001.jpg
│           └── ...
├── results/
├── analysis/
└── cache/

See dataset specification for more details on the expected format.