Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ jobs:
run: |
source .venv/bin/activate
# reuse first set of generated det and prod
boxmot tune --yolo-model yolov8n.pt --reid-model osnet_x0_25_msmt17.pt --n-trials 3 --tracking-method strongsort --source ./assets/MOT17-mini/train --ci
boxmot tune --yolo-model yolov8n.pt --reid-model osnet_x0_25_msmt17.pt --n-trials 3 --tracking-method strongsort --source ./assets/MOT17-mini/train --ci --classes 0
mot-metrics-benchmark:
runs-on: ${{ matrix.os }}
strategy:
Expand Down Expand Up @@ -118,7 +118,7 @@ jobs:
source .venv/bin/activate
echo "Format,Status❔,HOTA,MOTA,IDF1" > results.csv
for tracker in $TRACKERS; do
if boxmot eval --yolo-model yolov8n.pt --reid-model osnet_x0_25_msmt17.pt --tracking-method $tracker --verbose --source ./assets/MOT17-mini/train --ci; then
if boxmot eval --yolo-model yolov8n.pt --reid-model osnet_x0_25_msmt17.pt --tracking-method $tracker --verbose --source ./assets/MOT17-mini/train --ci --classes 0; then
STATUS="✅"
else
STATUS="❌"
Expand Down
4 changes: 2 additions & 2 deletions boxmot/configs/datasets/MOT17-ablation.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
download:
runs_url: "https://github.com/mikel-brostrom/boxmot/releases/download/v12.0.7/runs.zip"
dataset_url: "https://github.com/mikel-brostrom/boxmot/releases/download/v13.0.9/MOT17-ablation.zip"
dataset_dest: "boxmot/engine/trackeval/MOT17-ablation.zip"

benchmark:
name: "MOT17-ablation"
source: "boxmot/engine/trackeval/MOT17-ablation"
split: "train"
classes: "person"
6 changes: 3 additions & 3 deletions boxmot/configs/datasets/MOT20-ablation.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# https://motchallenge.net/data/MOT20/
download:
runs_url: null
runs_url: "https://github.com/mikel-brostrom/boxmot/releases/download/v12.0.7/runs.zip"
dataset_url: "https://github.com/mikel-brostrom/boxmot/releases/download/v13.0.9/MOT20-ablation.zip"
dataset_dest: "boxmot/engine/trackeval/MOT20-ablation.zip"

benchmark:
name: "MOT20-ablation"
source: "boxmot/engine/trackeval/MOT20-ablation"
split: "train"
classes: "person"
12 changes: 6 additions & 6 deletions boxmot/configs/datasets/SportsMOT.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# https://motchallenge.net/data/MOT20/
# https://github.com/SportsMOT/SportsMOT
download:
runs_url: null
dataset_url: "https://onedrive.live.com/?redeem=aHR0cHM6Ly8xZHJ2Lm1zL3UvcyFBdGplTHE3WW5ZR1JnUVJybXFHcjRCLWsteHNDP2U9N1BuZFU4&cid=91819DD8AE2EDED8&id=91819DD8AE2EDED8%21132&parId=91819DD8AE2EDED8%21129&o=OneUp"
dataset_dest: "boxmot/engine/trackeval/SportsMOT.zip"
runs_url: ""
dataset_url: "https://github.com/mikel-brostrom/boxmot/releases/download/v13.0.9/SportsMOT.zip"

benchmark:
name: "SportsMOT"
split: "train"
source: "boxmot/engine/trackeval/SportsMOT"
split: "val"
classes: "person"
9 changes: 9 additions & 0 deletions boxmot/configs/datasets/custom.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# https://motchallenge.net/data/MOT17/
download:
runs_url: ""
dataset_url: ""

benchmark:
source: "assets/MOT17-mini"
split: "train"
classes: "person"
6 changes: 3 additions & 3 deletions boxmot/configs/datasets/dancetrack-ablation.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# https://huggingface.co/datasets/noahcao/dancetrack/tree/main
download:
runs_url: null
dataset_url: "https://huggingface.co/datasets/noahcao/dancetrack/resolve/main/val.zip?download=true"
dataset_dest: "boxmot/engine/trackeval/dancetrack-ablation.zip"
dataset_url: "https://github.com/mikel-brostrom/boxmot/releases/download/v13.0.9/dancetrack-ablation.zip"

benchmark:
name: "dancetrack-ablation"
source: "boxmot/engine/trackeval/dancetrack-ablation"
split: "val"
classes: "person"
12 changes: 6 additions & 6 deletions boxmot/configs/datasets/vizdrone-ablation.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# https://motchallenge.net/data/MOT20/
# https://github.com/VisDrone/VisDrone-Dataset
download:
runs_url: null
dataset_url: "https://drive.google.com/uc?export=download&id=1rqnKe9IgU_crMaxRoel9_nuUsMEBBVQu"
dataset_dest: "boxmot/engine/trackeval/vizdrone-ablation.zip"
runs_url: ""
dataset_url: "https://github.com/mikel-brostrom/boxmot/releases/download/v13.0.9/vizdrone-ablation.zip"

benchmark:
name: "VisDrone2019-MOT-val"
split: ""
source: "boxmot/engine/trackeval/vizdrone-ablation"
split: "train"
classes: "person car truck bus van"
39 changes: 31 additions & 8 deletions boxmot/engine/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,29 @@ def core_options(func):
return func


def parse_classes(classes_input):
"""
Parse classes input which can be a tuple of ints (from multiple=True),
a string (comma/space separated), or None.
Returns a list of integers or None.
"""
if classes_input is None:
return None

if isinstance(classes_input, (list, tuple)):
# If it's already a list/tuple of ints (from multiple=True)
if not classes_input:
return None
return list(classes_input)

if isinstance(classes_input, str):
# Handle string input: "0,1" or "0 1"
classes_input = classes_input.replace(',', ' ')
return [int(x) for x in classes_input.split()]

return [int(classes_input)]


def singular_model_options(func):
options = [
click.option('--yolo-model', type=Path,
Expand All @@ -107,8 +130,8 @@ def singular_model_options(func):
click.option('--reid-model', type=Path,
default=WEIGHTS / 'osnet_x0_25_msmt17.pt',
help='path to ReID model weights'),
click.option('--classes', type=int, multiple=True,
help='filter by class indices')
click.option('--classes', type=str, default=None,
help='filter by class indices, e.g. 0 or "0,1"')
]
for opt in reversed(options):
func = opt(func)
Expand All @@ -123,8 +146,8 @@ def plural_model_options(func):
click.option('--reid-model', type=Path, multiple=True,
default=[WEIGHTS / 'osnet_x0_25_msmt17.pt'],
help='one or more ReID model weights'),
click.option('--classes', type=int, multiple=True,
default=[0], help='filter by class indices')
click.option('--classes', type=str, default=None,
help='filter by class indices, e.g. 0 or "0,1"')
]
for opt in reversed(options):
func = opt(func)
Expand Down Expand Up @@ -291,7 +314,7 @@ def track(ctx, detector, reid, tracker, yolo_model, reid_model, classes, **kwarg
params = {**kwargs,
'yolo_model': yolo_model,
'reid_model': reid_model,
'classes': list(classes) if classes else None,
'classes': parse_classes(classes),
'source': src,
'benchmark': bench,
'split': split}
Expand Down Expand Up @@ -324,7 +347,7 @@ def generate(ctx, detector, reid, yolo_model, reid_model, classes, **kwargs):
params = {**kwargs,
'yolo_model': list(yolo_model),
'reid_model': list(reid_model),
'classes': list(classes),
'classes': parse_classes(classes),
'source': src,
'benchmark': bench,
'split': split}
Expand Down Expand Up @@ -360,7 +383,7 @@ def eval(ctx, detector, reid, tracker, yolo_model, reid_model, classes, **kwargs
params = {**kwargs,
'yolo_model': list(yolo_model),
'reid_model': list(reid_model),
'classes': [0],
'classes': parse_classes(classes),
'source': src,
'benchmark': bench,
'split': split}
Expand Down Expand Up @@ -397,7 +420,7 @@ def tune(ctx, detector, reid, tracker, yolo_model, reid_model, classes, **kwargs
params = {**kwargs,
'yolo_model': list(yolo_model),
'reid_model': list(reid_model),
'classes': list(classes),
'classes': parse_classes(classes),
'source': src,
'benchmark': bench,
'split': split}
Expand Down
Loading
Loading