Showing preview only (2,902K chars total). Download the full file or copy to clipboard to get everything.
Repository: mikel-brostrom/boxmot
Branch: master
Commit: a35982f74c12
Files: 230
Total size: 2.7 MB
Directory structure:
gitextract_wj9e62ae/
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug.yml
│ │ ├── enhancement.yml
│ │ └── question.yml
│ ├── scripts/
│ │ └── uv_ci_install.sh
│ └── workflows/
│ ├── benchmark.yml
│ ├── ci.yml
│ ├── docker.yml
│ ├── docs.yml
│ ├── label.yml
│ ├── publish.yml
│ ├── stale.yml
│ └── update.yml
├── .gitignore
├── .pre-commit-config.yaml
├── AGENTS.md
├── CITATION.cff
├── CONTRIBUTING.md
├── Dockerfile
├── LICENSE
├── MANIFEST.in
├── README.md
├── assets/
│ ├── DOTA8-MOT/
│ │ └── train/
│ │ ├── P0861__1024__0___1648/
│ │ │ ├── det/
│ │ │ │ ├── det.txt
│ │ │ │ └── det_obb.txt
│ │ │ ├── gt/
│ │ │ │ ├── gt.txt
│ │ │ │ └── gt_obb.txt
│ │ │ └── seqinfo.ini
│ │ ├── P1053__1024__0___90/
│ │ │ ├── det/
│ │ │ │ ├── det.txt
│ │ │ │ └── det_obb.txt
│ │ │ ├── gt/
│ │ │ │ ├── gt.txt
│ │ │ │ └── gt_obb.txt
│ │ │ └── seqinfo.ini
│ │ └── P1142__1024__0___824/
│ │ ├── det/
│ │ │ ├── det.txt
│ │ │ └── det_obb.txt
│ │ ├── gt/
│ │ │ ├── gt.txt
│ │ │ └── gt_obb.txt
│ │ └── seqinfo.ini
│ ├── MOT17-mini/
│ │ └── train/
│ │ ├── MOT17-02-FRCNN/
│ │ │ ├── det/
│ │ │ │ └── det.txt
│ │ │ ├── gt/
│ │ │ │ ├── gt.txt
│ │ │ │ └── gt_temp.txt
│ │ │ └── seqinfo.ini
│ │ └── MOT17-04-FRCNN/
│ │ ├── det/
│ │ │ └── det.txt
│ │ ├── gt/
│ │ │ ├── gt.txt
│ │ │ └── gt_temp.txt
│ │ └── seqinfo.ini
│ └── file_banner.txt
├── boxmot/
│ ├── __init__.py
│ ├── configs/
│ │ ├── datasets/
│ │ │ ├── FastTracker-Benchmark-MOT.yaml
│ │ │ ├── MOT17-ablation.yaml
│ │ │ ├── MOT20-ablation.yaml
│ │ │ ├── SportsMOT.yaml
│ │ │ ├── custom.yaml
│ │ │ ├── dancetrack-ablation.yaml
│ │ │ └── visdrone-ablation.yaml
│ │ └── trackers/
│ │ ├── __init__.py
│ │ ├── boosttrack.yaml
│ │ ├── botsort.yaml
│ │ ├── bytetrack.yaml
│ │ ├── deepocsort.yaml
│ │ ├── hybridsort.yaml
│ │ ├── imprassoc.yaml
│ │ ├── ocsort.yaml
│ │ ├── sfsort.yaml
│ │ └── strongsort.yaml
│ ├── detectors/
│ │ ├── __init__.py
│ │ ├── detector.py
│ │ ├── rtdetr.py
│ │ ├── ultralytics.py
│ │ └── yolox.py
│ ├── engine/
│ │ ├── __init__.py
│ │ ├── cli.py
│ │ ├── evaluator.py
│ │ ├── export.py
│ │ ├── inference.py
│ │ ├── results.py
│ │ ├── tracker.py
│ │ └── tuner.py
│ ├── motion/
│ │ ├── __init__.py
│ │ ├── cmc/
│ │ │ ├── __init__.py
│ │ │ ├── base_cmc.py
│ │ │ ├── ecc.py
│ │ │ ├── orb.py
│ │ │ ├── sift.py
│ │ │ └── sof.py
│ │ └── kalman_filters/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── xyah.py
│ │ ├── xyhr.py
│ │ ├── xysr.py
│ │ └── xywh.py
│ ├── postprocessing/
│ │ ├── __init__.py
│ │ ├── gbrc.py
│ │ └── gsi.py
│ ├── reid/
│ │ ├── __init__.py
│ │ ├── backbones/
│ │ │ ├── __init__.py
│ │ │ ├── clip/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── clip/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── clip.py
│ │ │ │ │ ├── model.py
│ │ │ │ │ └── simple_tokenizer.py
│ │ │ │ ├── config/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── defaults.py
│ │ │ │ │ └── defaults_base.py
│ │ │ │ ├── make_model.py
│ │ │ │ └── make_model_clipreid.py
│ │ │ ├── hacnn.py
│ │ │ ├── lmbn/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── attention.py
│ │ │ │ ├── bnneck.py
│ │ │ │ └── lmbn_n.py
│ │ │ ├── mlfn.py
│ │ │ ├── mobilenetv2.py
│ │ │ ├── osnet.py
│ │ │ ├── osnet_ain.py
│ │ │ └── resnet.py
│ │ ├── backends/
│ │ │ ├── base_backend.py
│ │ │ ├── onnx_backend.py
│ │ │ ├── openvino_backend.py
│ │ │ ├── pytorch_backend.py
│ │ │ ├── tensorrt_backend.py
│ │ │ ├── tflite_backend.py
│ │ │ └── torchscript_backend.py
│ │ ├── core/
│ │ │ ├── __init__.py
│ │ │ ├── auto_backend.py
│ │ │ ├── config.py
│ │ │ ├── factory.py
│ │ │ ├── registry.py
│ │ │ └── reid_handler.py
│ │ └── exporters/
│ │ ├── base_exporter.py
│ │ ├── onnx_exporter.py
│ │ ├── openvino_exporter.py
│ │ ├── tensorrt_exporter.py
│ │ ├── tflite_exporter.py
│ │ └── torchscript_exporter.py
│ ├── trackers/
│ │ ├── __init__.py
│ │ ├── basetracker.py
│ │ ├── boosttrack/
│ │ │ ├── __init__.py
│ │ │ ├── assoc.py
│ │ │ └── boosttrack.py
│ │ ├── botsort/
│ │ │ ├── __init__.py
│ │ │ ├── basetrack.py
│ │ │ ├── botsort.py
│ │ │ ├── botsort_track.py
│ │ │ └── botsort_utils.py
│ │ ├── bytetrack/
│ │ │ ├── __init__.py
│ │ │ ├── basetrack.py
│ │ │ └── bytetrack.py
│ │ ├── deepocsort/
│ │ │ ├── __init__.py
│ │ │ └── deepocsort.py
│ │ ├── detection_layout.py
│ │ ├── hybridsort/
│ │ │ ├── __init__.py
│ │ │ ├── association.py
│ │ │ ├── hybridsort.py
│ │ │ ├── kalmanfilter_score.py
│ │ │ └── kalmanfilter_score_new.py
│ │ ├── ocsort/
│ │ │ ├── __init__.py
│ │ │ └── ocsort.py
│ │ ├── sfsort/
│ │ │ ├── __init__.py
│ │ │ └── sfsort.py
│ │ ├── strongsort/
│ │ │ ├── __init__.py
│ │ │ ├── sort/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── detection.py
│ │ │ │ ├── iou_matching.py
│ │ │ │ ├── linear_assignment.py
│ │ │ │ ├── track.py
│ │ │ │ └── tracker.py
│ │ │ ├── strongsort.py
│ │ │ └── strongsort_kf.py
│ │ └── tracker_zoo.py
│ └── utils/
│ ├── __init__.py
│ ├── analysis/
│ │ ├── mot_ds_kf_tuning.py
│ │ ├── mot_seq_bb_plot.py
│ │ └── ray_results.py
│ ├── association.py
│ ├── checks.py
│ ├── clean.py
│ ├── custom_mot_challenge_2d_box.py
│ ├── dataloaders/
│ │ ├── dataset.py
│ │ └── video.py
│ ├── download.py
│ ├── iou.py
│ ├── matching.py
│ ├── misc.py
│ ├── mot_utils.py
│ ├── ops.py
│ ├── plots.py
│ ├── run_mot_challenge.py
│ ├── timing.py
│ ├── torch_utils.py
│ └── visualization.py
├── docs/
│ ├── modes/
│ │ ├── eval.md
│ │ ├── generate.md
│ │ ├── track.md
│ │ └── tune.md
│ └── trackers/
│ ├── boosttrack.md
│ ├── botsort.md
│ ├── bytetrack.md
│ ├── deepocsort.md
│ ├── ocsort.md
│ ├── sfsort.md
│ └── strongsort.md
├── examples/
│ ├── det/
│ │ ├── efficientdet_boxmot.ipynb
│ │ ├── obb.ipynb
│ │ ├── rfdetr_boxmot.ipynb
│ │ ├── torchvision_boxmot.ipynb
│ │ └── yolox_boxmot.ipynb
│ ├── pose/
│ │ └── torchvision_boxmot.ipynb
│ └── seg/
│ └── torchvision_boxmot.ipynb
├── mkdocs.yml
├── pyproject.toml
└── tests/
├── __init__.py
├── performance/
│ ├── __init__.py
│ ├── test_cmcs_p.py
│ └── test_tracking_p.py
├── test_config.py
└── unit/
├── __init__.py
├── test_base_backend.py
├── test_cmcs_u.py
├── test_cuda.py
├── test_dataloader.py
├── test_exporters_dynamic.py
├── test_inference.py
├── test_kalman_filters_modes.py
├── test_postprocessing.py
├── test_reidbackend.py
├── test_tflite_backend.py
├── test_tflite_exporter.py
├── test_trackers.py
├── test_visualization.py
└── test_yolox_batch.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: mikel.brostrom
thanks_dev: # Replace with a single thanks.dev username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
================================================
FILE: .github/ISSUE_TEMPLATE/bug.yml
================================================
name: Bug
# title: " "
description: Report a BoxMOT bug
labels: [bug]
body:
- type: checkboxes
attributes:
label: Search before asking
description: >
Please search the [issues](https://github.com/mikel-brostrom/boxmot/issues) and [discussions](https://github.com/mikel-brostrom/boxmot/discussions) to see if a similar question already exists.
options:
- label: >
I have searched the BoxMOT [issues](https://github.com/mikel-brostrom/boxmot/issues) and [discussions](https://github.com/mikel-brostrom/boxmot/discussions) and found no similar questions.
required: true
- type: textarea
attributes:
label: Bug
description: Provide console output with error messages and/or screenshots of the bug.
placeholder: |
💡 ProTip! Include as much information as possible (screenshots, logs, tracebacks etc.) to receive the most helpful response.
validations:
required: true
- type: textarea
attributes:
label: Environment
description: Please specify the environment information you used to produce the bug.
placeholder: |
- boxmot v12.0.0
- Python 3.11.5
- torch-2.6.0MPS
validations:
required: true
- type: textarea
attributes:
label: Minimal Reproducible Example
description: >
When asking a question, people will be better able to provide help if you provide code that they can easily understand and use to [**reproduce**](https://stackoverflow.com/help/minimal-reproducible-example) the problem.
placeholder: |
```
# Code to reproduce your issue here
```
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/enhancement.yml
================================================
name: Enhancement
description: Suggest a BoxMOT enhancement
# title: " "
labels: [enhancement]
body:
- type: checkboxes
attributes:
label: Search before asking
description: >
Please search the [issues](https://github.com/mikel-brostrom/boxmot/issues) to see if a similar enhancement request already exists.
options:
- label: >
I have searched the BoxMOT [issues](https://github.com/mikel-brostrom/boxmot/issues) and found no similar enhancement requests.
required: true
- type: textarea
attributes:
label: Description
description: A short description of your enhancement.
placeholder: |
What new enhancement would you like to see in BoxMOT?
validations:
required: true
- type: textarea
attributes:
label: Use case
description: |
Describe the use case of your feature request. It will help us understand and prioritize the feature request.
placeholder: |
How would this feature be used, and who would use it?
- type: checkboxes
attributes:
label: Are you willing to submit a PR?
description: >
(Optional) If you have a good understanding of this package and feel like contributing to it we will gladly review your [Pull Request](https://github.com/mikel-brostrom/boxmot/pulls) (PR).
options:
- label: Yes I'd like to help by submitting a PR!
================================================
FILE: .github/ISSUE_TEMPLATE/question.yml
================================================
name: Question
description: Ask a BoxMOT question
# title: " "
labels: [question]
body:
- type: checkboxes
attributes:
label: Search before asking
description: >
Please search the [issues](https://github.com/mikel-brostrom/boxmot/issues) to see if a similar question already exists.
options:
- label: >
I have searched the BoxMOT [issues](https://github.com/mikel-brostrom/boxmot/issues) and found no similar bug report.
required: true
- type: textarea
attributes:
label: Question
description: What is your question?
placeholder: |
💡 ProTip! Include as much information as possible (screenshots, logs, tracebacks etc.) to receive the most helpful response.
validations:
required: true
================================================
FILE: .github/scripts/uv_ci_install.sh
================================================
#!/usr/bin/env bash
set -euo pipefail
if [[ $# -lt 1 ]]; then
echo "Usage: $0 <editable-spec> [additional uv pip install args...]" >&2
echo "Example: $0 '.[yolo]' --group test" >&2
exit 1
fi
editable_spec="$1"
shift
python -m pip install --upgrade pip setuptools wheel uv
uv venv
uv pip install \
--python .venv/bin/python \
--no-sources \
--torch-backend "${UV_TORCH_BACKEND:-cpu}" \
--index-strategy "${UV_INDEX_STRATEGY:-unsafe-best-match}" \
-e "${editable_spec}" \
"$@"
================================================
FILE: .github/workflows/benchmark.yml
================================================
name: Benchmark
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
env:
UV_TORCH_BACKEND: cpu
UV_INDEX_STRATEGY: unsafe-best-match
permissions:
contents: write
pull-requests: write
jobs:
mot-metrics-benchmark:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
python-version: ['3.12']
tracker: ["ocsort", "bytetrack", "botsort", "deepocsort", "hybridsort", "strongsort", "boosttrack", "sfsort"]
timeout-minutes: 50
env:
SMOKE_SOURCE: assets/DOTA8-MOT/train/P0861__1024__0___1648/img1
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Install requirements
run: |
sudo apt-get update
sudo apt-get install -y jq curl unzip
bash .github/scripts/uv_ci_install.sh ".[yolo]"
- name: Restore MOT17 dataset cache
id: cache-restore
uses: actions/cache@v4
with:
path: boxmot/engine/TrackEval/MOT17-ablation.zip
key: mot17-ablation-dataset-cache-v3
- name: Cache MOT17.zip if not already cached
if: steps.cache-restore.outputs.cache-hit != 'true'
uses: actions/cache@v4
with:
path: boxmot/engine/TrackEval/MOT17-ablation.zip
key: mot17-ablation-dataset-cache-v3
- name: DOTA8-MOT OBB smoke tracking
id: obb_smoke
run: |
source .venv/bin/activate
if boxmot track --yolo-model yolo11n-obb.pt --reid-model lmbn_n_duke.pt --tracking-method ${{ matrix.tracker }} --source "$SMOKE_SOURCE" --project runs/benchmark_ci --name ${{ matrix.tracker }} --exist-ok --save-txt; then
echo "obb_status=✅" >> $GITHUB_OUTPUT
else
echo "obb_status=❌" >> $GITHUB_OUTPUT
fi
- name: Evaluation and summarize MOT metrics
run: |
source .venv/bin/activate
OBB_STATUS="${{ steps.obb_smoke.outputs.obb_status }}"
if boxmot eval --classes 0 --yolo-model yolox_x_MOT17_ablation.pt --reid-model lmbn_n_duke.pt --tracking-method ${{ matrix.tracker }} --ci --verbose --source MOT17-ablation; then
STATUS="✅"
else
STATUS="❌"
fi
if [ -f ${{ matrix.tracker }}_output.json ]; then
HOTA=$(jq -r '.HOTA' ${{ matrix.tracker }}_output.json)
MOTA=$(jq -r '.MOTA' ${{ matrix.tracker }}_output.json)
IDF1=$(jq -r '.IDF1' ${{ matrix.tracker }}_output.json)
else
HOTA=""
MOTA=""
IDF1=""
fi
mkdir -p results
TRACKER_NAME=$(echo "${{ matrix.tracker }}" | awk '{print tolower($0)}')
if [ "$STATUS" = "❌" ]; then
fps=""
else
declare -A tracker_fps
tracker_fps["deepocsort"]=12
tracker_fps["bytetrack"]=720
tracker_fps["ocsort"]=890
tracker_fps["strongsort"]=11
tracker_fps["botsort"]=12
tracker_fps["hybridsort"]=25
tracker_fps["boosttrack"]=13
tracker_fps["sfsort"]="6000"
fps=${tracker_fps[$TRACKER_NAME]}
fi
echo "$TRACKER_NAME,$STATUS,$OBB_STATUS,$HOTA,$MOTA,$IDF1,$fps" > results/${{ matrix.tracker }}.txt
- name: Show Results
run: cat results/${{ matrix.tracker }}.txt
- name: Upload Results
uses: actions/upload-artifact@v4
with:
name: results-${{ github.run_id }}-${{ matrix.tracker }}
path: results/${{ matrix.tracker }}.txt
combine-results:
runs-on: ubuntu-latest
needs: mot-metrics-benchmark
steps:
- uses: actions/checkout@v4
- name: Download all results artifacts
uses: actions/download-artifact@v4
with:
path: results
- name: Check downloaded files
run: |
echo "Downloaded files in the results directory:"
ls -la results/*/ || true
- name: Combine results
run: |
: > combined_results.csv
for file in results/*/*; do
if [ -f "$file" ]; then
cat "$file" >> combined_results.csv
fi
done
sort -t, -k4 -nr combined_results.csv > sorted_results.csv
- name: Show Combined Results
run: cat sorted_results.csv
- name: Set up Git
run: |
git config --local user.email "yolov5.deepsort.pytorch@gmail.com"
git config --local user.name "mikel-brostrom"
- name: Update README with tracker results
run: |
RESULTS_FILE="sorted_results.csv"
README_FILE="README.md"
cp "$README_FILE" "${README_FILE}.bak"
declare -A paper_links
paper_links["boosttrack"]="https://arxiv.org/abs/2408.13003"
paper_links["deepocsort"]="https://arxiv.org/abs/2302.11813"
paper_links["bytetrack"]="https://arxiv.org/abs/2110.06864"
paper_links["ocsort"]="https://arxiv.org/abs/2203.14360"
paper_links["strongsort"]="https://arxiv.org/abs/2202.13514"
paper_links["botsort"]="https://arxiv.org/abs/2206.14651"
paper_links["hybridsort"]="https://arxiv.org/abs/2308.00783"
paper_links["sfsort"]="https://arxiv.org/pdf/2404.07553"
new_table="| Tracker | Status | OBB | HOTA↑ | MOTA↑ | IDF1↑ | FPS |\n"
new_table+="| :-----: | :----: | :---: | :---: | :---: | :---: | :---: |\n"
while IFS=, read -r tracker status obb hota mota idf1 fps; do
paper_url=${paper_links[$tracker]}
tracker_link="[$tracker](${paper_url:-#})"
new_table+="| $tracker_link | $status | $obb | $hota | $mota | $idf1 | $fps |\n"
done < "$RESULTS_FILE"
start_marker="<!-- START TRACKER TABLE -->"
end_marker="<!-- END TRACKER TABLE -->"
awk -v start_marker="$start_marker" -v end_marker="$end_marker" -v new_table="$new_table" '
$0 == start_marker { print $0; print new_table; in_table=1; next }
$0 == end_marker { in_table=0; print $0; next }
!in_table
' "$README_FILE" > temp_readme.md
mv temp_readme.md "$README_FILE"
- name: Sync docs benchmark table
run: cp README.md docs/index.md
- name: Check for changes in benchmark docs
id: check_changes
run: |
if git diff --quiet README.md docs/index.md; then
echo "changed=false" >> $GITHUB_OUTPUT
else
BRANCH_NAME="update-tracker-results-$(date +%Y%m%d%H%M%S)"
echo "branch_name=$BRANCH_NAME" >> $GITHUB_OUTPUT
echo "changed=true" >> $GITHUB_OUTPUT
fi
- name: Create Pull Request
if: steps.check_changes.outputs.changed == 'true'
uses: peter-evans/create-pull-request@v7
with:
add-paths: |
README.md
docs/index.md
token: ${{ secrets.GITHUB_TOKEN }}
branch: ${{ steps.check_changes.outputs.branch_name }}
commit-message: "docs: update benchmark results"
title: "docs: update benchmark results"
body: "This PR updates the benchmark tables in the README and docs index."
================================================
FILE: .github/workflows/ci.yml
================================================
# name of the workflow, what it is doing (optional)
name: BoxMOT CI
# events that trigger the workflow (required)
on:
push:
# pushes to the following branches
branches:
- master
pull_request:
# pull request where master is target
branches:
- master
env:
UV_TORCH_BACKEND: cpu
UV_INDEX_STRATEGY: unsafe-best-match
jobs:
trackers:
runs-on: ${{ matrix.os }}
outputs:
status: ${{ job.status }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-14] # skip windows-latest for
python-version: ['3.12']
env:
TRACKERS: "ocsort bytetrack botsort deepocsort strongsort boosttrack hybridsort sfsort"
IMG: ./assets/MOT17-mini/train/MOT17-02-FRCNN/img1/000001.jpg
# Timeout: https://stackoverflow.com/a/59076067/4521646
timeout-minutes: 50
steps:
- uses: actions/checkout@v4 # Check out the repository
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip' # caching pip dependencies
- name: Install requirements
shell: bash # for Windows compatibility
run: |
bash .github/scripts/uv_ci_install.sh ".[yolo]"
- name: Run tracking method
run: |
source .venv/bin/activate
for tracker in $TRACKERS; do
boxmot track --yolo-model yolov10n.pt --reid-model osnet_x0_25_msmt17.pt --imgsz 320 --tracking-method $tracker --source $IMG --verbose
done
tune:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest] # skip windows-latest for
python-version: ['3.9', '3.12']
outputs:
status: ${{ job.status }}
# Timeout: https://stackoverflow.com/a/59076067/4521646
timeout-minutes: 50
steps:
- uses: actions/checkout@v4 # Check out the repository
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip' # caching pip dependencies
- name: Install requirements
shell: bash # for Windows compatibility
run: |
bash .github/scripts/uv_ci_install.sh ".[yolo,evolve]"
- name: Evolve set of parameters for selected tracking method
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 --classes 0
metrics:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest] # skip windows-latest for
python-version: ['3.9', '3.12']
outputs:
status: ${{ job.status }}
env:
TRACKERS: "ocsort bytetrack botsort deepocsort strongsort boosttrack hybridsort sfsort"
# Timeout: https://stackoverflow.com/a/59076067/4521646
timeout-minutes: 50
steps:
- uses: actions/checkout@v4 # Check out the repository
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip' # caching pip dependencies
- name: Install requirements
shell: bash # for Windows compatibility
run: |
sudo apt-get update
sudo apt-get install -y jq
bash .github/scripts/uv_ci_install.sh ".[yolo]"
- name: Generate detections and embeddings
run: |
source .venv/bin/activate
boxmot generate --source ./assets/MOT17-mini/train --yolo-model yolov10n.pt --reid-model osnet_x0_25_msmt17.pt --imgsz 320 --classes 0
- name: Evaluate MOT17-mini metrics
shell: bash
run: |
source .venv/bin/activate
echo "Format,Status❔,HOTA,MOTA,IDF1" > metrics.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 --classes 0; then
STATUS="✅"
else
STATUS="❌"
fi
if [ -f ${tracker}_output.json ]; then
cat ${tracker}_output.json
HOTA=$(jq -r '.HOTA' ${tracker}_output.json)
MOTA=$(jq -r '.MOTA' ${tracker}_output.json)
IDF1=$(jq -r '.IDF1' ${tracker}_output.json)
else
HOTA=""
MOTA=""
IDF1=""
fi
TRACKER_NAME=$(echo $tracker | awk '{print toupper(substr($0,1,1)) tolower(substr($0,2))}')
echo "$TRACKER_NAME,$STATUS,$HOTA,$MOTA,$IDF1" >> metrics.csv
done
- name: Sort MOT metrics results
shell: bash
run: |
cp metrics.csv results.csv
(head -n 1 results.csv && tail -n +2 results.csv | sort -t, -k3 -nr) > sorted_results.csv
column -s, -t sorted_results.csv > pretty_results.txt
- name: Show Results
shell: bash
run: |
cat pretty_results.txt
obb:
runs-on: ubuntu-latest
outputs:
status: ${{ job.status }}
env:
TRACKERS: "ocsort bytetrack botsort deepocsort strongsort boosttrack hybridsort sfsort"
SMOKE_SOURCE: ./assets/DOTA8-MOT/train/P1142__1024__0___824/img1
timeout-minutes: 50
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
cache: 'pip'
- name: Install requirements
shell: bash
run: |
bash .github/scripts/uv_ci_install.sh ".[yolo]"
- name: Run obb tracking method
shell: bash
run: |
source .venv/bin/activate
echo "Format,OBB" > obb.csv
for tracker in $TRACKERS; do
if boxmot track --yolo-model yolo11s-obb.pt --reid-model lmbn_n_duke.pt --tracking-method $tracker --source "$SMOKE_SOURCE" --project runs/ci_smoke --name "$tracker" --exist-ok --save-txt; then
OBB_STATUS="✅"
else
OBB_STATUS="❌"
fi
TRACKER_NAME=$(echo $tracker | awk '{print toupper(substr($0,1,1)) tolower(substr($0,2))}')
echo "$TRACKER_NAME,$OBB_STATUS" >> obb.csv
done
- name: Show OBB Results
shell: bash
run: |
column -s, -t obb.csv
pose:
runs-on: ubuntu-latest
outputs:
status: ${{ job.status }}
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: |
bash .github/scripts/uv_ci_install.sh ".[yolo]"
- name: Test tracking with pose models
env:
IMG: ./assets/MOT17-mini/train/MOT17-02-FRCNN/img1/000001.jpg
run: |
source .venv/bin/activate
boxmot track --yolo-model yolov8n-pose.pt --imgsz 320 --source $IMG
yolos:
runs-on: ubuntu-latest
outputs:
status: ${{ job.status }}
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- run: |
bash .github/scripts/uv_ci_install.sh ".[yolo]"
# Export so that setuptools picks up clang instead of gcc
echo "CC=clang" >> $GITHUB_ENV
echo "CXX=clang++" >> $GITHUB_ENV
- name: Test tracking with pose models
env:
IMG: ./assets/MOT17-mini/train/MOT17-02-FRCNN/img1/000001.jpg
run: |
source .venv/bin/activate
uv pip list
boxmot track --yolo-model yolov10n.pt --imgsz 320 --source $IMG
boxmot track --yolo-model yolox_n.pt --imgsz 320 --source $IMG
boxmot track --yolo-model rtdetr_v2_r18vd --imgsz 320 --source $IMG
seg:
runs-on: ubuntu-latest
outputs:
status: ${{ job.status }}
steps:
- id: set_result
run: echo "::set-output name=result::success"
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install dependencies
run: |
bash .github/scripts/uv_ci_install.sh ".[yolo]"
- name: Test tracking with seg models
env:
IMG: ./assets/MOT17-mini/train/MOT17-02-FRCNN/img1/000001.jpg
run: |
source .venv/bin/activate
boxmot track --tracking-method bytetrack --yolo-model yolov8n-seg.pt --source $IMG
export:
runs-on: ubuntu-latest
outputs:
status: ${{ job.status }}
steps:
- id: set_result
run: echo "::set-output name=result::success"
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install dependencies
run: |
sed -i'' -e 's/index = "torch-gpu"/index = "torch-cpu"/g' pyproject.toml
python -m pip install --upgrade pip setuptools wheel uv
uv sync --extra yolo --extra onnx --extra openvino --extra tflite
- name: Test export models
run: |
source .venv/bin/activate
boxmot export --include torchscript --include onnx --include openvino --include tflite --device cpu --batch-size 3 --dynamic
- name: Smoke test exported engines
if: always()
env:
IMG: ./assets/MOT17-mini/train/MOT17-02-FRCNN/img1/000001.jpg
run: |
source .venv/bin/activate
TFLITE_MODEL=$(find models -name '*_float32.tflite' | head -n 1)
engines=(torchscript onnx openvino tflite)
model_paths=(
"models/osnet_x0_25_msmt17.torchscript"
"models/osnet_x0_25_msmt17.onnx"
"models/osnet_x0_25_msmt17_openvino_model"
"$TFLITE_MODEL"
)
echo "Engine,Export,Inference,Model" > engine_results.csv
failed=0
for i in "${!engines[@]}"; do
engine="${engines[$i]}"
model_path="${model_paths[$i]}"
export_status="❌"
inference_status="❌"
if [ -n "$model_path" ] && [ -e "$model_path" ]; then
export_status="✅"
if boxmot track --reid-model "$model_path" --imgsz 320 --source "$IMG"; then
inference_status="✅"
else
failed=1
fi
else
failed=1
fi
echo "$engine,$export_status,$inference_status,$model_path" >> engine_results.csv
done
column -s, -t engine_results.csv
exit "$failed"
- name: Summarize exported engines
if: always()
run: |
if [ ! -f engine_results.csv ]; then
echo "## Export and inference engines" >> "$GITHUB_STEP_SUMMARY"
echo >> "$GITHUB_STEP_SUMMARY"
echo "No engine summary was generated." >> "$GITHUB_STEP_SUMMARY"
exit 0
fi
successful_engines=$(awk -F, 'NR > 1 && $2 == "✅" && $3 == "✅" {print $1}' engine_results.csv)
{
echo "## Export and inference engines"
echo
if [ -n "$successful_engines" ]; then
echo "Successful export and inference engines:"
echo
while IFS= read -r engine; do
[ -n "$engine" ] && echo "- $engine"
done <<< "$successful_engines"
else
echo "No engines completed both export and inference successfully."
fi
echo
echo "| Engine | Export | Inference | Model |"
echo "| --- | --- | --- | --- |"
while IFS=, read -r engine export_status inference_status model_path; do
if [ "$engine" = "Engine" ]; then
continue
fi
echo "| $engine | $export_status | $inference_status | \`$model_path\` |"
done < engine_results.csv
} >> "$GITHUB_STEP_SUMMARY"
tests:
runs-on: ubuntu-latest
outputs:
status: ${{ job.status }}
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: |
bash .github/scripts/uv_ci_install.sh ".[yolo,evolve,onnx,openvino,tflite]" --group dev --group test --group docs
- name: Pytest tests # after tracking options as this does not download models
env:
# directory of PyPi package to be tested
PACKAGE_DIR: boxmot
# minimum acceptable test coverage
COVERAGE_FAIL_UNDER: 25
run: |
uv run python -m pytest --cov="$PACKAGE_DIR" --cov-report=html -v -s tests
uv run python -m coverage report --fail-under="$COVERAGE_FAIL_UNDER"
# test-gpu:
# runs-on: gpu-latest
# outputs:
# status: ${{ job.status }}
# steps:
# - uses: actions/checkout@v4
# - name: Set up Python
# uses: actions/setup-python@v5
# with:
# python-version: '3.12'
# - run: |
# python -m pip install --upgrade pip setuptools wheel poetry
# poetry config virtualenvs.create false
# poetry install --with test
# - name: Pytest tests # after tracking options as this does not download models
# env:
# # directory of PyPi package to be tested
# PACKAGE_DIR: boxmot
# # minimum acceptable test coverage
# COVERAGE_FAIL_UNDER: 25
# shell: bash # for Windows compatibility
# run: |
# pytest --cov=$PACKAGE_DIR --cov-report=html -v tests/test_cuda.py
check-failures:
needs:
- trackers
- metrics
- obb
- tune
- export
- tests
- pose
- seg
- yolos
if: always() # This ensures the job runs regardless of previous job failures
runs-on: ubuntu-latest
steps:
- name: Prepare environment variables
run: |
echo "trackers_STATUS=${{ needs.trackers.result }}" >> $GITHUB_ENV
echo "metrics_STATUS=${{ needs.metrics.result }}" >> $GITHUB_ENV
echo "obb_STATUS=${{ needs.obb.result }}" >> $GITHUB_ENV
echo "tune_STATUS=${{ needs.tune.result }}" >> $GITHUB_ENV
echo "export_STATUS=${{ needs.export.result }}" >> $GITHUB_ENV
echo "tests_STATUS=${{ needs.tests.result }}" >> $GITHUB_ENV
echo "pose_STATUS=${{ needs.pose.result }}" >> $GITHUB_ENV
echo "seg_STATUS=${{ needs.seg.result }}" >> $GITHUB_ENV
echo "yolos_STATUS=${{ needs.yolos.result }}" >> $GITHUB_ENV
- name: Check for failures and create summary
run: |
summary=""
failed=false
# Print all environment variables, grep for those ending with _STATUS, then loop
for var in $(printenv | grep '_STATUS$'); do
job_status="${var##*=}" # Extract the status part
job_name="${var%%=*}" # Extract the job name part
if [[ "$job_status" != "success" ]]; then
summary+="$job_name failed with status: $job_status\n"
failed=true
fi
done
if [[ "$failed" = false ]]; then
summary="All jobs succeeded."
fi
echo "Summary: $summary"
================================================
FILE: .github/workflows/docker.yml
================================================
name: Docker Image CI
on:
push:
branches:
- main
workflow_dispatch:
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Extract version from pyproject.toml
id: extract_version
run: |
version=$(python3 -c 'import tomllib, sys; data = tomllib.loads(open("pyproject.toml","r", encoding="utf-8").read()); sys.stdout.write(data["project"]["version"])')
echo "VERSION=$version" >> "$GITHUB_ENV"
- name: Build and push Docker image
uses: docker/build-push-action@v6
with:
push: true
tags: |
boxmot/boxmot:${{ env.VERSION }}
boxmot/boxmot:latest
================================================
FILE: .github/workflows/docs.yml
================================================
# name: Deploy MkDocs Docs
# on:
# push:
# branches: [master]
# permissions:
# contents: write
# jobs:
# deploy:
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v4
# - uses: actions/setup-python@v4
# with:
# python-version: '3.10'
# - name: Install MkDocs and plugins
# run: |
# python -m pip install --upgrade pip setuptools wheel uv
# uv sync --group dev --group test --group docs
# - name: Symlink README into docs
# run: cp --remove-destination README.md docs/index.md
# - name: Extract code examples (with section titles) from README
# run: |
# cat <<'AWK' > /tmp/extract_examples.awk
# /^##[[:space:]]*.*Code Examples/ { insec=1; next }
# insec && /^##[[:space:]]/ { exit }
# insec {
# # capture text inside <summary> ... </summary>
# if ($0 ~ /<summary>/) {
# t=$0
# sub(/.*<summary>[[:space:]]*/, "", t)
# sub(/[[:space:]]*<\/summary>.*/, "", t)
# title=t
# }
# # start of fenced code block
# if ($0 ~ /^[[:space:]]*```(bash|python)/) {
# if (title != "") { print "# " title }
# code=1; print; next
# }
# # end of fenced code block
# if (code && $0 ~ /^[[:space:]]*```[[:space:]]*$/) { code=0; print; next }
# if (code) print
# }
# AWK
# awk -f /tmp/extract_examples.awk README.md > docs/quickstart.md
# - name: Expose project on PYTHONPATH
# run: echo "PYTHONPATH=${GITHUB_WORKSPACE}" >> "$GITHUB_ENV"
# - name: Deploy to GitHub Pages
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# run: |
# source .venv/bin/activate
# git config --local user.email yolov5.deepsort.pytorch@gmail.com
# git config --local user.name mikel-brostrom
# mkdocs gh-deploy --clean --force --verbose
================================================
FILE: .github/workflows/label.yml
================================================
name: Label issues
on:
issues:
types:
- opened
- reopened
jobs:
label_issues:
name: "Issue: add labels"
if: ${{ github.event.action == 'opened' || github.event.action == 'reopened' }}
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: Label new issues
uses: actions/github-script@v6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
// Combine title + body
const title = context.payload.issue.title || ''
const body = context.payload.issue.body || ''
const content = `${title}\n${body}`
// Always start with triage
const labels = ['triage']
// Map each directory/tracker → regex
const mapping = {
'reid' : /\b(?:appearance|re[- ]?id|re[- ]?identification)\b/i,
'kf' : /\b(?:kf|kalman[- ]?filter)s?\b/i,
'postprocessing' : /\bpostprocessing\b/i,
// engine-related categories
'engine' : /\b(engine|cli|detectors|track|val)\b/i,
'tuning' : /\b(?:tuning|hyperparameter(?:s)?|evolution|evolve)\b/i,
'evaluation' : /\b(?:evaluation|eval(?:uation)?|val(?:idation)?)\b/i,
'tracking' : /\b(?:track(?:ing)?|track)\b/i,
// individual tracker labels
'boosttrack' : /\bboosttrack\b/i,
'botsort' : /\bbotsort\b/i,
'bytetrack' : /\bbytetrack\b/i,
'deepocsort' : /\bdeepocsort\b/i,
'hybridsort' : /\bhybridsort\b/i,
'ocsort' : /\bocsort\b/i,
'strongsort' : /\bstrongsort\b/i,
'tracktrack' : /\btracktrack\b/i,
// per-dataset labels
'datasets' : /\dataset?\b/i,
'mot17' : /\bMOT17\b/i,
'mot20' : /\bMOT20\b/i,
'dancetrack' : /\bDanceTrack\b/i,
}
// Add any matching labels
for (const [label, regex] of Object.entries(mapping)) {
if (regex.test(content)) {
labels.push(label)
}
}
// Apply them in one call
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
labels
})
================================================
FILE: .github/workflows/publish.yml
================================================
name: Publish to PyPI
on:
push:
branches: [main]
workflow_dispatch:
inputs:
pypi:
description: 'Target repository'
required: true
type: choice
default: 'pypi'
options:
- pypi
- testpypi
bump_type:
description: 'Version bump type'
required: true
type: choice
default: 'patch'
options:
- patch
- minor
- major
jobs:
pypi-upload:
name: Publish
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
# Personal Access Token (PAT) so that git push
# is authenticated such that you and can bypass the protected ref
token: ${{ secrets.RELEASE_PAT }}
- name: Set up Python environment
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Install dependencies
run: |
python -m pip install --upgrade pip setuptools wheel uv poetry
uv sync
- name: Increase uv path version and add
id: get_version
run: |
source .venv/bin/activate
git config --local user.email yolov5.deepsort.pytorch@gmail.com
git config --local user.name mikel-brostrom
bump_type=${{ github.event.inputs.bump_type }}
commit_message=$(poetry version $bump_type)
new_version=$(echo $commit_message | grep -oE '[0-9]+\.[0-9]+\.[0-9]+$')
git add pyproject.toml
uv build --no-sources
echo "commit_message=$commit_message" >> $GITHUB_OUTPUT
echo "new_version=$new_version" >> $GITHUB_OUTPUT
du -sh dist/*
if: ${{ success() }}
- name: Update __init__.py version and add
run: |
sed -i "s/__version__ = '.*'/__version__ = '${{ steps.get_version.outputs.new_version }}'/" boxmot/__init__.py
git add boxmot/__init__.py
if: ${{ success() }}
- name: Update citation pkg version and add
run: |
sed -i "s/version: .*/version: ${{ steps.get_version.outputs.new_version }}/" CITATION.cff
git add CITATION.cff
if: ${{ success() }}
- name: Commit and push updated version
run: |
if [ "${{ github.event.inputs.pypi }}" == "pypi" ]; then
git commit -m "${{ steps.get_version.outputs.commit_message }}"
git push
fi
if: ${{ success() }}
- name: Publish to PyPI
run: |
if [ "${{ github.event.inputs.pypi }}" == "pypi" ]; then
uv publish --token ${{ secrets.PYPI_TOKEN }}
else
uv publish --index testpypi --token ${{ secrets.TEST_PYPI_TOKEN }}
fi
if: ${{ success() }}
- name: Create code release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v${{ steps.get_version.outputs.new_version }}
release_name: Release v${{ steps.get_version.outputs.new_version }}
draft: false
prerelease: false
if: ${{ success() }}
================================================
FILE: .github/workflows/stale.yml
================================================
name: Close stale issues
on:
schedule:
- cron: "0 0 * * *" # At the end of every day
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-message: |
👋 Hello, this issue has been automatically marked as stale because it has not had recent activity. Please note it will be closed if no further activity occurs.
Feel free to inform us of any other **issues** you discover or **feature requests** that come to mind in the future. Pull Requests (PRs) are also always welcomed!
stale-pr-message: 'This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.'
days-before-stale: 10
days-before-close: 3
exempt-issue-labels: 'documentation,tutorial'
operations-per-run: 100 # The maximum number of operations per run, used to control rate limiting.
================================================
FILE: .github/workflows/update.yml
================================================
name: Update Dependencies
on:
workflow_dispatch: # Allows you to manually trigger the workflow
jobs:
update-dependencies:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.8'
- name: Install Poetry
run: pip install poetry
- name: Update dependencies
run: |
poetry install
poetry update
poetry lock
- name: Commit changes
run: |
git config --local user.email yolov5.deepsort.pytorch@gmail.com
git config --local user.name mikel-brostrom
git add .
git commit -m "Update dependencies"
- name: Push changes
run: git push origin HEAD:dependabot/update-dependencies
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
branch: dependabot/update-dependencies
title: "Update dependencies"
body: "This is an automated pull request to update dependencies."
delete-branch: true
# - name: Auto-merge Pull Request
# uses: pascalgn/automerge-action@v0.16.3
# with:
# token: ${{ secrets.GITHUB_TOKEN }}
# merge-method: squash
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .gitignore
================================================
.vscode/
.venv/
.eggs/
env/
*.DS_Store
.coverage
htmlcov/
# interpreter bytecode
__pycache__/
__MACOSX/
# experiment results
runs/
videos/
# experiment files
*.pkl
# partial downlaods
*.part
# Downloaded weights
weights/*.pt
weights/*.torchscript
weights/*.onnx
weights/*_openvino_model
weights/*.engine
weights/*.tflite
# evaluation tools folder
boxmot/engine/trackeval/
# zip files
*.zip
# exports
*_openvino_model
*.torchscript
*.pt
*.pth
*.pth
*.onnx
*.engine
*.data
# interactive plots
*.html
*.gif
*.pdf
# tf models
*saved_model/
tf_models/
# distribution / packaging
build/
dist/
*.egg-info/
# cmc debug images
boxmot/motion/cmc/*.jpg
# json outputs
*_output.json
================================================
FILE: .pre-commit-config.yaml
================================================
# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: check-added-large-files # prevents giant files from being committed.
exclude: '.*vocab*.'
- id: check-case-conflict # checks for files that would conflict in case-insensitive filesystems.
- id: check-merge-conflict # checks for files that contain merge conflict strings.
- id: check-yaml # checks yaml files for parseable syntax.
- id: detect-private-key # detects the presence of private keys.
- id: end-of-file-fixer # ensures that a file is either empty, or ends with one newline.
- id: fix-byte-order-marker # removes utf-8 byte order marker.
- id: mixed-line-ending # replaces or checks mixed line ending.
- id: requirements-txt-fixer # sorts entries in requirements.txt.
- id: trailing-whitespace # trims trailing whitespace.
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.8.4
hooks:
- id: ruff
args: [ --fix ]
- id: ruff-format
- repo: https://github.com/Lucas-C/pre-commit-hooks
rev: v1.5.5
hooks:
- id: insert-license
files: .*\.py$
args:
- --license-filepath
- assets/file_banner.txt
================================================
FILE: AGENTS.md
================================================
# AGENTS.md – Working Guidelines for **BoxMOT**
> These instructions apply to all directories in this repository. \
> Nested `AGENTS.md` files (if added later) override rules for their subtrees.
---
## 1. Environment & Tooling
### Python & `uv`
- Use **Python 3.11** (or the version configured in `pyproject.toml`).
- Install `uv` (safe to rerun even if present):
```bash
pip install uv
```
- Install dependencies using the existing workflow:
```bash
uv sync --all-extras --all-groups
```
- `uv` will create a `.venv` in the project root. Prefer running everything through `uv` so you don’t have to manage activation manually:
```bash
# Generic command wrapper
uv run <command> [args...]
```
#### Running with the package context
Always run Python entry points as modules from the repo root, not as loose scripts, so that `from boxmot...` imports work correctly:
```bash
# ✅ Good – uses package context
uv run python -m boxmot.engine.cli --help
# ❌ Avoid – can break imports (e.g., ModuleNotFoundError: boxmot)
python boxmot/engine/cli.py --help
PYTHONPATH=. python boxmot/engine/cli.py --help
```
If you really need to use the virtualenv directly:
```bash
source .venv/bin/activate
python -m boxmot.engine.cli --help
```
## 2. Workflow
- Create feature branches for work:
```bash
git checkout -b codex/<short-topic>
```
- Keep changes focused: one logical change per PR / task.
- Follow the existing structure and conventions of the modules you touch.
## 3. Coding Conventions
- Prefer Python type hints and docstrings for any new or modified functions/classes.
- Keep imports:
- Sorted.
- Minimal (remove unused).
- Do not wrap imports in `try/except` unless there is a very specific reason and it’s clearly documented.
**Logging**
- Use the existing logger (e.g., `LOGGER`) rather than `print` in library code.
- It’s fine to `print` in CLI entry points when it improves UX, but prefer consistent logging style.
**Match the surrounding style**
- Naming, spacing, line wrapping, click option style, etc.
- Reuse helper patterns (e.g., decorators like `core_options`, shared parsing helpers).
## 4. CLI-Specific Guidelines
When editing `boxmot/engine/cli.py` or other CLIs:
- Group options logically (e.g., input, inference, output, display), but maintain backwards-compatible option names and defaults where possible.
- Prefer reusable decorators for option groups (`core_options`, `plural_model_options`, etc.).
- Use parsing helpers (e.g., `parse_tuple`, `parse_hw_tuple`) rather than ad-hoc parsing in every command.
- Keep help text accurate and concise; if you change behavior, update:
- The option help strings.
- Any CLI examples in `README.md`, `docs/`, or `examples/`.
When adding a new command:
- Reuse `make_args` to build argparse-like namespaces.
- Align with existing subcommands’ style (`track`, `generate`, `eval`, `tune`, `export`).
## 5. Commit & PR Expectations
Commit messages should start with one of:
- `feat:` – new feature
- `fix:` – bug fix
- `refactor:` – internal-only changes / cleanup
- `docs:` – documentation only
- `ci:` – CI / tooling changes
- `perf:` – performance improvements
Each commit should represent a coherent change; avoid mixing unrelated edits.
PR / task descriptions should include:
- A short summary of user-facing changes.
- A Testing section (see below).
- Any follow-up work or known limitations.
## 6. Testing & Verification
**What to run**
- Default: run the pytest suite from the repo root:
```bash
uv run pytest
```
- If the full suite is too heavy, at least run the tests relevant to your change, e.g.:
```bash
uv run pytest tests/test_cli.py
uv run pytest tests/path/to/affected_module_tests.py
```
- When touching CLI / engine entry points, it’s useful to smoke-test common commands:
```bash
uv run python -m boxmot.engine.cli --help
# Example invocations (adjust source/paths as available in your env)
uv run python -m boxmot.engine.cli track --source <path-or-url> ...
uv run python -m boxmot.engine.cli generate --source <path-or-url> ...
uv run python -m boxmot.engine.cli eval --source <path-or-url> ...
uv run python -m boxmot.engine.cli tune --source <path-or-url> ...
```
**If tests or commands cannot be run**
Sometimes the provided environment is missing GPUs, large datasets, or external services. In that case:
1. Try the following first:
```bash
uv sync --all-extras --all-groups
uv run python -m boxmot.engine.cli --help
uv run pytest
```
2. If something still fails for reasons outside your control (e.g., missing CUDA runtime, no network for model downloads, etc.), do not fake test results. Instead, document clearly in your Testing section, for example:
```text
Testing
- uv run python -m boxmot.engine.cli --help ✅
- uv run pytest ❌ (not run)
Reason: pytest requires GPU / CUDA dependencies that are not available in the current container.
Please run `uv sync --all-extras --all-groups` and `uv run pytest` in a fully configured environment.
```
- Include the exact commands you ran and a brief reason why anything couldn’t be completed.
## 7. Documentation & Examples
- Update docs or examples when behavior or interfaces change, especially:
- CLI options or defaults.
- New or removed commands.
- Keep README snippets and CLI help text in sync with code updates.
- When changing data formats or output directories, update any references in:
- `docs/`
- `examples/`
- `tests/`
## 8. Performance & Safety
- Be mindful of model weights and large assets:
- Do not commit generated artifacts or large binaries.
- Prefer referencing weights via URLs or documented download steps.
- Where practical:
- Use deterministic or seeded behavior for tests/examples.
- Avoid unnecessary heavy computation in unit tests.
## 9. Integrating a New Tracker (Checklist)
1) Implement the tracker
- Add a new module under `boxmot/trackers/<name>/` (e.g., `sfsort.py`).
- Implement a tracker class that subclasses `BaseTracker` and defines `update()`.
2) Register the tracker
- Add the tracker to `TRACKER_MAPPING` in `boxmot/trackers/tracker_zoo.py`.
- Export it in `boxmot/trackers/__init__.py` and `boxmot/__init__.py`.
- Add the tracker name to the `TRACKERS` list in `boxmot/__init__.py`.
3) Add default configuration
- Create `boxmot/configs/trackers/<name>.yaml` with default parameters and tuning ranges.
4) Update docs
- Add a tracker doc page in `docs/trackers/<name>.md`.
- Add the tracker to `mkdocs.yml` nav.
- Mention it in `docs/index.md` and `README.md` where trackers are listed.
5) Update tests
- Register the tracker in `tests/test_config.py` lists so it’s covered by unit tests.
6) Update CI/benchmarks
- Add the tracker name to workflow matrices/lists in `.github/workflows/`.
7) Commit new files
- Ensure new tracker code, config, and docs are staged and pushed.
## 10. Integrating OBB Support for New Trackers
When adding oriented bounding box (OBB) support, follow this generic implementation guide.
### Core requirements
- Set `supports_obb = True` on the tracker class.
- Keep `@BaseTracker.setup_decorator` enabled so detection shape can trigger OBB mode automatically.
- Reuse shared detection plumbing from:
- `boxmot/trackers/basetracker.py`
- `boxmot/trackers/detection_layout.py`
- Do not hardcode column indices if layout helpers already provide them:
- `self.detection_layout.boxes(...)`
- `self.detection_layout.confidences(...)`
- `self.detection_layout.classes(...)`
- `self.detection_layout.with_detection_indices(...)`
### Data contract
- Input detections:
- AABB: `(x1, y1, x2, y2, conf, cls)` (6 columns)
- OBB: `(cx, cy, w, h, angle, conf, cls)` (7 columns)
- Output tracks:
- AABB: 8 columns
- OBB: 9 columns `(cx, cy, w, h, angle, id, conf, cls, det_ind)`
### Implementation checklist
1) Split AABB and OBB parsing paths
- Add explicit detection parsing/init branches for each mode.
- Preserve `conf`, `cls`, and `det_ind` in both paths.
2) Use a motion model that supports OBB state
- Keep AABB and OBB state/measurement handling explicit.
- If OBB adds dimensions (for example angle), ensure `initiate`, `predict`, and `update` all use matching state sizes.
- For KF-based trackers, keep angle dynamics explicit (`theta`, `v_theta`/`omega`) and prefer damping over hard resets.
- For non-KF trackers, maintain per-track angular velocity state and apply damping during OBB updates.
3) Keep mode-dependent predict/update logic
- If velocity/state reset behavior differs between AABB and OBB, implement separate branches.
- Avoid combining incompatible state assumptions in one path.
- Do not hard-zero OBB angular velocity after every update unless there is a tracker-specific reason.
- Preferred default: damp angular velocity each update (for example `omega *= 0.8` or equivalent blend).
4) Wire OBB-aware association
- Ensure association uses OBB geometry in OBB mode.
- For IoU distance matching, pass `is_obb=self.is_obb` where applicable.
- If using `self.asso_func`, verify the OBB association mode is selected in OBB mode.
5) Preserve geometry accessors for downstream consumers
- Expose `xywha` in OBB mode.
- Keep `xyxy` available as enclosing AABB for compatibility where needed.
- Maintain `history_observations` and `id` for plotting and lifecycle logic.
6) Keep OBB plotting/history stable
- Append post-update OBB geometry to `history_observations`.
- If angles are used for plotting, add angle continuity handling to avoid wrap/flip artifacts.
- Before OBB update, resolve equivalent rectangle forms relative to current state:
- `(w, h, theta)`
- `(w, h, theta + pi)`
- `(h, w, theta + pi/2)`
- `(h, w, theta - pi/2)`
- Choose the candidate closest to the reference state, then apply damped angular update.
7) Emit schema-correct outputs
- AABB outputs must remain 8 columns.
- OBB outputs must remain 9 columns in the exact order:
`(cx, cy, w, h, angle, id, conf, cls, det_ind)`.
### Testing expectations
At minimum, add or update tests to cover:
- tracker accepts OBB detections
- tracker returns 9-column OBB outputs
- OBB association path uses oriented geometry
- OBB plotting/history path remains stable across frames
- OBB angle update is smooth:
- track angle moves toward the new detection
- track angle does not jump the full detection delta when damping is enabled
If shared OBB plumbing changes, also consider extending:
- `tests/unit/test_inference.py`
- `tests/unit/test_base_backend.py`
### Design rule
Use shared OBB plumbing for detection mode/layout and keep tracker-specific OBB internals limited to algorithm-specific motion and association details.
================================================
FILE: CITATION.cff
================================================
cff-version: 16.0.11
message: >-
If you use this software, please cite it using the
metadata from this file.
authors:
- given-names: Mikel
family-names: Broström
orcid: "https://orcid.org/0009-0009-0540-9829"
abstract: >-
BoxMOT is a pluggable collection of state-of-the-art multi-object tracking modules
for segmentation, object detection, and pose estimation models.
title: "BoxMOT: pluggable state-of-the-art multi-object tracking modules"
repository-code: "https://github.com/mikel-brostrom/boxmot"
license: AGPL-3.0
version: 16.0.11
type: software
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
Thank you for improving this project! Please follow these guidelines.
# Pull Requests
Proposed workflow
```bash
# Fork the repository on GitHub
# Then clone your fork locally
git clone https://github.com/your-username/boxmot.git
cd boxmot
pip install uv
uv sync # builds & installs boxmot in editable mode
# Create a branch
git checkout -b feature/short-desc
# Develop
# ...
# Run functionality where changes were introduced
python boxmot/engine/cli.py track --yolo-model yolov8x.pt --tracking-method bytetrack --source my_video.mp4 --classes 0
python boxmot/engine/cli.py generate --yolo-model yolov8x.pt --tracking-method bytetrack --source my_video.mp4 --classes 0
python boxmot/engine/cli.py eval --yolo-model yolov8x.pt --tracking-method bytetrack --source my_video.mp4 --classes 0
python boxmot/engine/cli.py tune --yolo-model yolov8x.pt --tracking-method bytetrack --source my_video.mp4 --classes 0
# Run tests
uv run pytest
# Commit & push
git add .
git commit -m "type: summary"
git push origin feature/short-desc
# Open a pull request
# 1. On GitHub, go to your fork: https://github.com/your-username/boxmot
# 2. Click contribute
```
================================================
FILE: Dockerfile
================================================
# Build the image and tag it for easier later reference
# Example:
# docker build -t mikel-brostrom/boxmot .
# Base image: Nvidia PyTorch https://ngc.nvidia.com/catalog/containers/nvidia:pytorch
FROM pytorch/pytorch:2.3.1-cuda11.8-cudnn8-runtime
# Update and install necessary packages
RUN apt update && apt install -y git
# Set the parent working directory
WORKDIR /usr/src
# Clone the repository with submodules into a subdirectory 'boxmot'
RUN git clone https://github.com/mikel-brostrom/boxmot.git -b master boxmot
# Set the working directory to the cloned repository
WORKDIR /usr/src/boxmot
# Install pip packages and Poetry dependencies
RUN python3 -m pip install --upgrade pip poetry && \
pip install uv && \
uv sync --all-extras --all-groups
# ------------------------------------------------------------------------------
# A Docker container exits when its main process finishes, which in this case is bash.
# To avoid this, use detach mode.
# Run interactively with all GPUs accessible:
# docker run -it --gpus all mikel-brostrom/boxmot bash
# Run interactively with specific GPUs accessible (e.g., first and third GPU):
# docker run -it --gpus '"device=0,2"' mikel-brostrom/boxmot bash
# Run in detached mode (if you exit the container, it won't stop):
# Create a detached Docker container from an image:
# docker run -it --gpus all -d mikel-brostrom/boxmot
# Access the running container:
# docker exec -it <container_id> bash
# When you are done with the container, stop it by:
# docker stop <container_id>
================================================
FILE: LICENSE
================================================
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.
================================================
FILE: MANIFEST.in
================================================
include requirements.txt
include LICENSE
include setup.py
include boxmot/reid/backbones/clip/clip/bpe_simple_vocab_16e6.txt.gz
recursive-include boxmot *.yaml
recursive-exclude __pycache__ *
================================================
FILE: README.md
================================================
<div align="center" markdown="1">
<img width="640"
src="https://github.com/mikel-brostrom/boxmot/releases/download/v12.0.0/output_640.gif"
alt="BoxMOT demo">
<br>
<a href="https://trendshift.io/repositories/13239" target="_blank"><img src="https://trendshift.io/api/badge/repositories/13239" alt="mikel-brostrom%2Fboxmot | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"></a>
[](https://github.com/mikel-brostrom/boxmot/actions/workflows/ci.yml)
[](https://badge.fury.io/py/boxmot)
[](https://pepy.tech/project/boxmot)
[](https://github.com/mikel-brostrom/boxmot/blob/master/LICENSE)
[](https://badge.fury.io/py/boxmot)
[](https://colab.research.google.com/drive/18nIqkBr68TkK8dHdarxTco6svHUJGggY?usp=sharing)
[](https://doi.org/10.5281/zenodo.8132989)
[](https://hub.docker.com/r/boxmot/boxmot)
[](https://discord.gg/tUmFEcYU4q)
[](https://deepwiki.com/mikel-brostrom/boxmot)
</div>
BoxMOT gives you one CLI and one Python API for running, evaluating, tuning, and exporting modern multi-object tracking pipelines. Swap trackers without rewriting your detector stack, reuse cached detections and embeddings across experiments, and benchmark locally on MOT-style datasets.
<div align="center" markdown="1">
[Installation](#installation) • [Metrics](#benchmark-results-mot17-ablation-split) • [CLI](#cli) • [Python API](#python-api) • [Detection Layouts](#detection-layouts) • [Examples](#examples) • [Contributing](#contributing)
</div>
## Why BoxMOT
- One interface for `track`, `generate`, `eval`, `tune`, and `export`.
- Works with detection, segmentation, and pose models as long as they emit boxes.
- Supports both motion-only trackers and motion + appearance trackers.
- Reuses saved detections and embeddings to speed up repeated evaluation and tuning.
- Handles both AABB and OBB detection layouts natively.
- Includes local benchmarking workflows for MOT17, MOT20, and DanceTrack ablation splits.
## Installation
BoxMOT supports Python `3.9` through `3.12`.
```bash
pip install boxmot
boxmot --help
```
## Benchmark Results (MOT17 ablation split)
<div align="center" markdown="1">
<!-- START TRACKER TABLE -->
| Tracker | Status | OBB | HOTA↑ | MOTA↑ | IDF1↑ | FPS |
| :-----: | :-----: | :-: | :---: | :---: | :---: | :---: |
| [botsort](https://arxiv.org/abs/2206.14651) | ✅ | ✅ | 69.418 | 78.232 | 81.812 | 12 |
| [boosttrack](https://arxiv.org/abs/2408.13003) | ✅ | ❌ | 69.253 | 75.914 | 83.206 | 13 |
| [strongsort](https://arxiv.org/abs/2202.13514) | ✅ | ❌ | 68.05 | 76.185 | 80.763 | 11 |
| [deepocsort](https://arxiv.org/abs/2302.11813) | ✅ | ❌ | 67.796 | 75.868 | 80.514 | 12 |
| [bytetrack](https://arxiv.org/abs/2110.06864) | ✅ | ✅ | 67.68 | 78.039 | 79.157 | 720 |
| [hybridsort](https://arxiv.org/abs/2308.00783) | ✅ | ❌ | 67.39 | 74.127 | 79.105 | 25 |
| [ocsort](https://arxiv.org/abs/2203.14360) | ✅ | ✅ | 66.441 | 74.548 | 77.899 | 890 |
| [sfsort](https://arxiv.org/pdf/2404.07553) | ✅ | ✅ | 62.653 | 76.87 | 69.184 | 6000 |
<!-- END TRACKER TABLE -->
<sub>Evaluation was run on the second half of the MOT17 training set because the validation split is not public and the ablation detector was trained on the first half. Results used [pre-generated detections and embeddings](https://github.com/mikel-brostrom/boxmot/releases/download/v11.0.9/runs2.zip) with each tracker configured from its default repository settings.</sub>
</div>
## CLI
BoxMOT provides a unified CLI with a simple syntax:
```bash
boxmot MODE [OPTIONS] [DETECTOR] [REID] [TRACKER]
```
Modes:
```text
track run detector + tracker on webcam, images, videos, directories, or streams
generate precompute detections and embeddings for later reuse
eval benchmark on MOT-style datasets and apply optional postprocessing
tune optimize tracker hyperparameters with multi-objective search
export export ReID models to deployment formats
```
Use `boxmot MODE --help` for mode-specific flags.
Quick examples:
```bash
# Track a webcam feed
boxmot track yolov8n osnet_x0_25_msmt17 deepocsort --source 0 --show
# Track a video, draw trajectories, and save the result
boxmot track yolov8n osnet_x0_25_msmt17 botsort --source video.mp4 --show-trajectories --save
# Evaluate on the MOT17 ablation split with GBRC postprocessing
boxmot eval yolox_x_MOT17_ablation lmbn_n_duke boosttrack --source MOT17-ablation --postprocessing gbrc --verbose
# Generate reusable detections and embeddings
boxmot generate yolov8n osnet_x0_25_msmt17 --source ./assets/MOT17-mini/train
# Tune tracker hyperparameters on a MOT-style dataset
boxmot tune yolov8n osnet_x0_25_msmt17 ocsort --source ./assets/MOT17-mini/train --n-trials 10
# Export a ReID model to ONNX and TensorRT with dynamic input
boxmot export --weights osnet_x0_25_msmt17.pt --include onnx --include engine --dynamic
```
Common `--source` values include `0`, `img.jpg`, `video.mp4`, `path/`, `path/*.jpg`, YouTube URLs, and RTSP / RTMP / HTTP streams.
If you want to track only selected classes, pass a comma-separated list:
```bash
boxmot track yolov8s --source 0 --classes 16,17
```
## Python API
If you already have detections from your own model, call `tracker.update(...)` once per frame inside your video loop:
```python
from pathlib import Path
import cv2
import numpy as np
from boxmot import BotSort
tracker = BotSort(
reid_weights=Path("osnet_x0_25_msmt17.pt"),
device="cpu",
half=False,
)
cap = cv2.VideoCapture("video.mp4")
while True:
ok, frame = cap.read()
if not ok:
break
# Replace this with your detector output for the current frame.
# Expected AABB shape: (N, 6) = (x1, y1, x2, y2, conf, cls)
detections = np.empty((0, 6), dtype=np.float32)
# detections = your_detector(frame)
tracks = tracker.update(detections, frame)
tracker.plot_results(frame, show_trajectories=True)
print(tracks)
# AABB output: (N, 8) = (x1, y1, x2, y2, id, conf, cls, det_ind)
cv2.imshow("BoxMOT", frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
```
For end-to-end detector integrations, see the notebooks in [examples](examples).
## Detection Layouts
BoxMOT switches tracking mode from the detection tensor shape:
| Geometry | Input detections | Output tracks |
| --- | --- | --- |
| AABB | `(N, 6)` = `(x1, y1, x2, y2, conf, cls)` | `(N, 8)` = `(x1, y1, x2, y2, id, conf, cls, det_ind)` |
| OBB | `(N, 7)` = `(cx, cy, w, h, angle, conf, cls)` | `(N, 9)` = `(cx, cy, w, h, angle, id, conf, cls, det_ind)` |
OBB-specific tracking paths are enabled automatically when OBB detections are provided. Current OBB-capable trackers: `bytetrack`, `botsort`, `ocsort`, and `sfsort`.
## Examples
The short commands above are enough to get started. The sections below keep the longer recipe list available without turning the README into a wall of commands.
<details>
<summary><strong>Tracking recipes</strong></summary>
Track from common sources:
```bash
# Webcam
boxmot track yolov8n osnet_x0_25_msmt17 deepocsort --source 0 --show
# Video file
boxmot track yolov8n osnet_x0_25_msmt17 botsort --source video.mp4 --save
# Image directory
boxmot track yolov8n osnet_x0_25_msmt17 bytetrack --source path/to/images --save-txt
# Stream or URL
boxmot track yolov8n osnet_x0_25_msmt17 ocsort --source 'rtsp://example.com/media.mp4'
# YouTube
boxmot track yolov8n osnet_x0_25_msmt17 boosttrack --source 'https://youtu.be/Zgi9g1ksQHc'
```
</details>
<details>
<summary><strong>Detector backends</strong></summary>
Swap detectors without changing the overall CLI:
```bash
# Ultralytics detection
boxmot track yolov8n
boxmot track yolo11n
# Segmentation and pose variants
boxmot track yolov8n-seg
boxmot track yolov8n-pose
# YOLOX
boxmot track yolox_s
# RF-DETR
boxmot track rf-detr-base
```
</details>
<details>
<summary><strong>Tracker swaps</strong></summary>
Use the same detector and ReID model while changing only the tracker:
```bash
boxmot track yolov8n osnet_x0_25_msmt17 deepocsort
boxmot track yolov8n osnet_x0_25_msmt17 strongsort
boxmot track yolov8n osnet_x0_25_msmt17 botsort
boxmot track yolov8n osnet_x0_25_msmt17 boosttrack
boxmot track yolov8n osnet_x0_25_msmt17 hybridsort
# Motion-only trackers
boxmot track yolov8n osnet_x0_25_msmt17 bytetrack
boxmot track yolov8n osnet_x0_25_msmt17 ocsort
boxmot track yolov8n osnet_x0_25_msmt17 sfsort
```
</details>
<details>
<summary><strong>Filtering and visualization</strong></summary>
Useful flags for inspection and debugging:
```bash
# Draw trajectories and show lost tracks
boxmot track yolov8n osnet_x0_25_msmt17 botsort --source video.mp4 --show-trajectories --show-lost --save
# Track only selected classes
boxmot track yolov8s --source 0 --classes 16,17
# Track each class independently
boxmot track yolov8n --source video.mp4 --per-class --save-txt
# Highlight one target ID
boxmot track yolov8n osnet_x0_25_msmt17 deepocsort --source video.mp4 --target-id 7 --show
```
</details>
<details>
<summary><strong>Evaluation and tuning</strong></summary>
Benchmark on built-in MOT-style dataset shortcuts or your own data:
```bash
# Reproduce README-style MOT17 results
boxmot eval yolox_x_MOT17_ablation lmbn_n_duke boosttrack --source MOT17-ablation --verbose
# MOT20 ablation split
boxmot eval yolox_x_MOT20_ablation lmbn_n_duke boosttrack --source MOT20-ablation --verbose
# DanceTrack ablation split
boxmot eval yolox_x_dancetrack_ablation lmbn_n_duke boosttrack --source dancetrack-ablation --verbose
# VisDrone ablation split
boxmot eval yolox_x_visdrone lmbn_n_duke botsort --source visdrone-ablation --verbose
# Apply postprocessing
boxmot eval yolox_x_MOT17_ablation lmbn_n_duke boosttrack --source MOT17-ablation --postprocessing gsi
boxmot eval yolox_x_MOT17_ablation lmbn_n_duke boosttrack --source MOT17-ablation --postprocessing gbrc
# Generate detections and embeddings once
boxmot generate yolov8n osnet_x0_25_msmt17 --source ./assets/MOT17-mini/train
# Tune a tracker on a custom MOT-style dataset
boxmot tune yolov8n osnet_x0_25_msmt17 botsort --source ./assets/MOT17-mini/train --n-trials 9
```
</details>
<details>
<summary><strong>Export and OBB</strong></summary>
Deployment and oriented-box examples:
```bash
# Export to ONNX
boxmot export --weights osnet_x0_25_msmt17.pt --include onnx --device cpu
# Export to OpenVINO
boxmot export --weights osnet_x0_25_msmt17.pt --include openvino --device cpu
# Export to TensorRT with dynamic input
boxmot export --weights osnet_x0_25_msmt17.pt --include engine --device 0 --dynamic
```
OBB references:
- Notebook: [examples/det/obb.ipynb](examples/det/obb.ipynb)
- Script: [examples/det/run_obb_kalman.py](examples/det/run_obb_kalman.py)
- OBB-capable trackers: `bytetrack`, `botsort`, `ocsort`, `sfsort`
</details>
## Contributing
If you want to contribute, start with [CONTRIBUTING.md](CONTRIBUTING.md).
## Contributors
<a href="https://github.com/mikel-brostrom/boxmot/graphs/contributors">
<img src="https://contrib.rocks/image?repo=mikel-brostrom/boxmot" alt="BoxMOT contributors">
</a>
## Support and Citation
- Bugs and feature requests: [GitHub Issues](https://github.com/mikel-brostrom/boxmot/issues)
- Questions and discussion: [GitHub Discussions](https://github.com/mikel-brostrom/boxmot/discussions) or [Discord](https://discord.gg/tUmFEcYU4q)
- Citation metadata: [CITATION.cff](CITATION.cff)
- Commercial support: `box-mot@outlook.com`
================================================
FILE: assets/DOTA8-MOT/train/P0861__1024__0___1648/det/det.txt
================================================
1.000000,-1.000000,831.967285,528.233704,60.625854,22.047729,1.000000
1.000000,-1.000000,839.141479,456.383881,54.965515,20.873291,1.000000
1.000000,-1.000000,834.387634,430.224792,58.523438,22.974701,1.000000
1.000000,-1.000000,838.257507,405.379669,56.559814,20.873352,1.000000
1.000000,-1.000000,838.026550,382.357697,60.555969,23.011597,1.000000
1.000000,-1.000000,846.292053,337.558960,54.929626,22.907837,1.000000
1.000000,-1.000000,846.164673,294.585327,54.490234,21.803345,1.000000
1.000000,-1.000000,850.453430,275.667358,52.931946,17.806061,1.000000
1.000000,-1.000000,851.731384,251.717392,53.388855,19.803665,1.000000
1.000000,-1.000000,852.464294,229.732193,54.457336,21.835266,1.000000
1.000000,-1.000000,853.197205,208.778687,56.896423,20.943146,1.000000
1.000000,-1.000000,849.004761,186.581085,59.452515,17.981491,1.000000
1.000000,-1.000000,852.700256,166.700241,48.495300,18.664276,1.000000
1.000000,-1.000000,854.397095,144.782761,61.557800,20.047974,1.000000
1.000000,-1.000000,853.167114,123.689697,57.523682,17.910675,1.000000
1.000000,-1.000000,860.895874,102.948746,56.524780,18.943359,1.000000
1.000000,-1.000000,858.362305,77.824478,62.858521,26.113701,1.000000
1.000000,-1.000000,859.362122,58.870956,55.595825,21.870117,1.000000
1.000000,-1.000000,859.095215,38.882580,56.490906,20.873138,1.000000
1.000000,-1.000000,572.301575,89.701027,43.162354,50.864403,1.000000
1.000000,-1.000000,582.375977,172.615738,61.440002,46.439072,1.000000
1.000000,-1.000000,593.102173,151.049347,63.472412,48.400818,1.000000
1.000000,-1.000000,838.709412,479.438690,55.523926,20.873291,1.000000
1.000000,-1.000000,835.162903,553.358093,60.521118,22.012756,1.000000
1.000000,-1.000000,634.696960,76.422066,62.576294,44.438896,1.000000
1.000000,-1.000000,831.360718,576.241455,59.522339,20.012024,1.000000
1.000000,-1.000000,782.010132,503.433960,38.395264,15.318787,1.000000
1.000000,-1.000000,782.603516,481.446716,43.601746,19.488556,1.000000
1.000000,-1.000000,774.983398,409.143158,55.628601,25.904297,1.000000
1.000000,-1.000000,777.447937,389.189423,52.932983,20.803528,1.000000
1.000000,-1.000000,773.589172,362.065430,60.929749,26.113800,1.000000
1.000000,-1.000000,776.495178,339.185150,59.559326,24.009369,1.000000
1.000000,-1.000000,774.300476,315.060638,61.624634,24.114014,1.000000
1.000000,-1.000000,779.206238,294.246765,51.422913,19.698883,1.000000
1.000000,-1.000000,777.903442,269.157288,59.626953,24.974335,1.000000
1.000000,-1.000000,767.783813,245.789429,70.479492,23.428284,1.000000
1.000000,-1.000000,780.473755,224.219925,57.593384,23.977539,1.000000
1.000000,-1.000000,784.310791,203.336258,54.489258,19.876495,1.000000
1.000000,-1.000000,780.115417,177.212051,63.520569,26.116867,1.000000
1.000000,-1.000000,793.841125,160.642838,50.527771,19.697983,1.000000
1.000000,-1.000000,815.028503,107.339630,35.221191,12.179245,1.000000
1.000000,-1.000000,804.370117,119.982964,44.392212,18.524651,1.000000
1.000000,-1.000000,790.540710,141.514465,57.929199,19.013214,1.000000
1.000000,-1.000000,826.038269,611.078857,72.512024,26.427734,1.000000
1.000000,-1.000000,621.726807,105.879517,60.579712,41.442337,1.000000
1.000000,-1.000000,647.350952,57.852261,57.720703,42.230007,1.000000
1.000000,-1.000000,390.695862,11.696652,53.176300,33.443741,1.000000
1.000000,-1.000000,209.511597,133.404327,51.039062,27.415375,1.000000
1.000000,-1.000000,208.280777,109.314743,61.136978,32.831329,1.000000
1.000000,-1.000000,220.320831,84.714233,49.005524,23.383911,1.000000
1.000000,-1.000000,222.017670,60.869053,60.069366,30.656307,1.000000
1.000000,-1.000000,237.649490,15.280258,55.072311,29.589363,1.000000
1.000000,-1.000000,246.516571,0.000000,55.107239,20.164230,1.000000
1.000000,-1.000000,399.528076,0.000000,56.176788,22.539318,1.000000
1.000000,-1.000000,385.827087,36.506924,51.213501,33.376743,1.000000
1.000000,-1.000000,681.148254,8.895086,48.726318,38.093826,1.000000
1.000000,-1.000000,373.367126,81.058304,52.072845,32.449257,1.000000
1.000000,-1.000000,265.976013,180.366852,69.781433,31.182739,1.000000
1.000000,-1.000000,188.756271,158.621048,36.117416,17.039291,1.000000
1.000000,-1.000000,221.421478,165.803604,47.969727,27.380539,1.000000
1.000000,-1.000000,335.443329,198.766235,35.048798,20.997574,1.000000
1.000000,-1.000000,369.039642,208.911285,36.152283,21.140320,1.000000
1.000000,-1.000000,403.333832,201.174271,53.106567,24.590439,1.000000
1.000000,-1.000000,412.061401,179.466202,42.149261,24.136765,1.000000
1.000000,-1.000000,418.756409,160.686874,46.145538,24.346146,1.000000
1.000000,-1.000000,423.415771,139.838089,47.146454,25.348969,1.000000
1.000000,-1.000000,434.039246,121.199333,39.184662,24.068947,1.000000
1.000000,-1.000000,436.909363,99.318474,37.152130,22.962723,1.000000
1.000000,-1.000000,443.569427,78.539574,46.075836,27.241158,1.000000
1.000000,-1.000000,456.236755,32.883881,55.002411,28.621883,1.000000
1.000000,-1.000000,459.899353,7.108705,56.208557,33.551331,1.000000
1.000000,-1.000000,329.287140,171.572433,70.919861,31.180695,1.000000
1.000000,-1.000000,338.049591,148.901505,66.924591,33.005829,1.000000
1.000000,-1.000000,338.852264,122.987793,73.955292,37.105820,1.000000
1.000000,-1.000000,843.434143,318.500397,46.494629,17.562775,1.000000
1.000000,-1.000000,986.584106,484.603821,36.415894,20.914215,1.000000
1.000000,-1.000000,996.441650,421.852051,26.558350,18.576721,1.000000
1.000000,-1.000000,1007.476440,237.173203,15.523560,12.500122,1.000000
1.000000,-1.000000,991.441711,507.728455,31.558289,15.111755,1.000000
1.000000,-1.000000,993.706238,528.821533,29.293762,14.292969,1.000000
1.000000,-1.000000,998.041321,547.984802,24.958679,16.514160,1.000000
1.000000,-1.000000,986.859375,567.658203,36.140625,15.972168,1.000000
1.000000,-1.000000,961.814392,619.787537,61.185608,21.151917,1.000000
1.000000,-1.000000,979.130798,586.367798,43.869202,18.366882,1.000000
1.000000,-1.000000,754.256042,23.342646,161.644165,607.749329,1.000000
1.000000,-1.000000,576.883484,337.644623,186.100159,292.126617,1.000000
1.000000,-1.000000,569.801941,0.000000,194.495789,219.054810,1.000000
1.000000,-1.000000,343.276703,0.000000,177.038971,223.079285,1.000000
1.000000,-1.000000,193.660919,0.000000,110.544922,164.923798,1.000000
1.000000,-1.000000,600.218506,340.504517,56.140930,41.787109,1.000000
1.000000,-1.000000,608.551941,371.346649,34.081848,23.147217,1.000000
1.000000,-1.000000,610.955139,387.544281,38.046204,25.042236,1.000000
1.000000,-1.000000,620.459778,404.850525,36.942749,22.042694,1.000000
1.000000,-1.000000,627.864197,417.086731,37.081238,28.143311,1.000000
1.000000,-1.000000,638.367676,436.319794,32.945496,22.252075,1.000000
1.000000,-1.000000,642.806396,448.660645,37.012512,27.109741,1.000000
1.000000,-1.000000,656.715942,481.025116,34.944214,27.249298,1.000000
1.000000,-1.000000,666.219727,497.398193,34.874207,25.216736,1.000000
1.000000,-1.000000,671.658264,513.634766,34.944031,24.147156,1.000000
1.000000,-1.000000,679.059570,529.971985,36.977661,24.112183,1.000000
1.000000,-1.000000,688.494385,548.100525,31.017639,21.290222,1.000000
1.000000,-1.000000,691.934387,560.409546,38.011353,28.179321,1.000000
1.000000,-1.000000,699.266907,577.747620,40.150635,28.038757,1.000000
1.000000,-1.000000,652.250671,532.261292,25.077148,36.152222,1.000000
1.000000,-1.000000,627.767822,486.451385,26.109863,37.116241,1.000000
1.000000,-1.000000,606.492859,437.641022,26.178650,32.189880,1.000000
1.000000,-1.000000,569.643433,376.318268,21.359070,26.089233,1.000000
1.000000,-1.000000,189.606094,92.697327,18.721802,28.226471,1.000000
1.000000,-1.000000,198.578949,65.027817,18.756622,27.089500,1.000000
1.000000,-1.000000,203.518463,32.326542,21.894791,34.050220,1.000000
2.000000,-1.000000,832.302307,525.025269,60.454346,21.465515,1.000000
2.000000,-1.000000,838.570557,453.124023,54.981934,20.340668,1.000000
2.000000,-1.000000,833.745422,427.007019,58.381226,22.412720,1.000000
2.000000,-1.000000,837.367004,402.114594,56.406982,20.340698,1.000000
2.000000,-1.000000,836.916382,379.095734,60.404419,22.439636,1.000000
2.000000,-1.000000,844.535706,334.233673,54.955994,22.365845,1.000000
2.000000,-1.000000,844.158813,291.247223,54.356812,21.290955,1.000000
2.000000,-1.000000,848.079651,272.303680,52.957703,17.292450,1.000000
2.000000,-1.000000,849.278137,248.336578,53.284973,19.290680,1.000000
2.000000,-1.000000,849.801697,226.344818,54.333923,21.312851,1.000000
2.000000,-1.000000,850.325256,205.375076,56.933350,20.390549,1.000000
2.000000,-1.000000,845.902039,183.230698,59.330505,17.418076,1.000000
2.000000,-1.000000,849.399048,163.313995,48.360107,18.190842,1.000000
2.000000,-1.000000,850.896790,141.370026,61.406555,19.465179,1.000000
2.000000,-1.000000,849.446960,120.300583,57.381165,17.367188,1.000000
2.000000,-1.000000,856.968445,99.483582,56.381958,18.390175,1.000000
2.000000,-1.000000,854.014954,74.391754,62.907288,25.512741,1.000000
2.000000,-1.000000,855.015076,55.422588,55.432800,21.337757,1.000000
2.000000,-1.000000,854.538513,35.428242,56.358093,20.340485,1.000000
2.000000,-1.000000,568.507507,88.876404,42.835938,50.909546,1.000000
2.000000,-1.000000,579.133789,171.825851,61.607971,46.033813,1.000000
2.000000,-1.000000,589.653564,150.133270,63.631104,48.006104,1.000000
2.000000,-1.000000,838.547485,476.165771,55.380859,20.340637,1.000000
2.000000,-1.000000,835.728394,550.117188,60.379517,21.440552,1.000000
2.000000,-1.000000,630.512329,75.104507,62.704773,44.033035,1.000000
2.000000,-1.000000,832.154602,573.037354,59.380432,19.439209,1.000000
2.000000,-1.000000,782.040833,500.737000,38.286987,14.944153,1.000000
2.000000,-1.000000,782.464722,478.743195,43.435181,19.065277,1.000000
2.000000,-1.000000,774.163757,406.517853,55.455627,25.363190,1.000000
2.000000,-1.000000,776.209900,386.548187,52.958801,20.290833,1.000000
2.000000,-1.000000,772.310120,359.456024,60.957886,25.512817,1.000000
2.000000,-1.000000,774.957520,336.538971,59.407410,23.437714,1.000000
2.000000,-1.000000,772.532654,312.447174,61.453369,23.512482,1.000000
2.000000,-1.000000,777.180420,291.577179,51.308533,19.215790,1.000000
2.000000,-1.000000,775.677612,266.510162,59.455200,24.412964,1.000000
2.000000,-1.000000,765.305542,243.245087,70.350769,22.736725,1.000000
2.000000,-1.000000,777.799622,221.549408,57.430969,23.415863,1.000000
2.000000,-1.000000,781.398315,200.629547,54.355835,19.343567,1.000000
2.000000,-1.000000,776.972168,174.537476,63.379883,25.515915,1.000000
2.000000,-1.000000,790.492371,157.843552,50.383240,19.214874,1.000000
2.000000,-1.000000,811.057434,104.334824,35.161865,11.843605,1.000000
2.000000,-1.000000,800.585449,117.081741,44.285706,18.091095,1.000000
2.000000,-1.000000,786.991455,138.749405,57.956421,18.440094,1.000000
2.000000,-1.000000,827.209778,607.925049,72.374023,25.737122,1.000000
2.000000,-1.000000,617.817749,104.720444,60.707581,41.035583,1.000000
2.000000,-1.000000,642.980530,56.409397,57.807800,41.883366,1.000000
2.000000,-1.000000,385.909515,12.864549,53.132294,33.034595,1.000000
2.000000,-1.000000,205.898621,136.384857,51.034363,27.014435,1.000000
2.000000,-1.000000,204.447891,112.318024,61.105362,32.312241,1.000000
2.000000,-1.000000,216.192169,87.600403,49.010162,22.991722,1.000000
2.000000,-1.000000,217.689926,63.708187,60.057358,30.186443,1.000000
2.000000,-1.000000,232.857391,17.996002,55.058807,29.139160,1.000000
2.000000,-1.000000,241.477661,0.000000,55.083740,22.342558,1.000000
2.000000,-1.000000,394.504883,0.000000,56.133698,23.181561,1.000000
2.000000,-1.000000,381.288788,37.732132,51.158936,32.987526,1.000000
2.000000,-1.000000,676.269043,7.148215,48.810730,37.785873,1.000000
2.000000,-1.000000,369.244232,82.416550,52.058441,32.039833,1.000000
2.000000,-1.000000,262.808990,182.792587,69.852173,30.563354,1.000000
2.000000,-1.000000,185.356644,161.828659,36.088287,16.744995,1.000000
2.000000,-1.000000,218.121429,168.674057,47.984039,26.989548,1.000000
2.000000,-1.000000,332.436768,200.508896,35.039307,20.714447,1.000000
2.000000,-1.000000,366.152893,210.327682,36.113190,20.817291,1.000000
2.000000,-1.000000,400.367523,202.229080,53.082458,24.138733,1.000000
2.000000,-1.000000,408.888123,180.434723,42.111938,23.814636,1.000000
2.000000,-1.000000,415.385529,161.589905,46.109436,23.964203,1.000000
2.000000,-1.000000,419.856659,140.694962,47.110657,24.967361,1.000000
2.000000,-1.000000,430.303711,121.950859,39.136475,23.766777,1.000000
2.000000,-1.000000,432.925201,100.033516,37.113312,22.690178,1.000000
2.000000,-1.000000,439.397644,79.188560,46.059662,26.890030,1.000000
2.000000,-1.000000,451.589722,33.429405,55.008881,28.161411,1.000000
2.000000,-1.000000,455.063843,7.586673,56.155518,33.112263,1.000000
2.000000,-1.000000,326.039246,173.366852,70.951019,30.561325,1.000000
2.000000,-1.000000,334.584778,150.599335,66.954529,32.436905,1.000000
2.000000,-1.000000,335.158142,124.657928,73.977386,36.508163,1.000000
2.000000,-1.000000,841.637024,315.189392,46.358826,17.118958,1.000000
2.000000,-1.000000,986.476318,479.855499,36.523682,20.570496,1.000000
2.000000,-1.000000,995.518494,417.025116,27.481506,18.347412,1.000000
2.000000,-1.000000,1004.830139,232.231277,18.169861,12.424683,1.000000
2.000000,-1.000000,991.375244,502.947113,31.624756,14.794220,1.000000
2.000000,-1.000000,993.850037,524.016602,29.149963,14.020691,1.000000
2.000000,-1.000000,998.376038,543.135681,24.623962,16.218750,1.000000
2.000000,-1.000000,987.530090,562.904785,35.469910,15.594238,1.000000
2.000000,-1.000000,963.066284,615.289124,59.933716,20.536255,1.000000
2.000000,-1.000000,980.008667,581.699768,42.991333,17.894287,1.000000
2.000000,-1.000000,755.356262,20.612152,155.764709,606.753174,1.000000
2.000000,-1.000000,575.495789,336.295288,188.381042,291.555176,1.000000
2.000000,-1.000000,566.436279,0.000000,191.286682,217.859665,1.000000
2.000000,-1.000000,340.032990,0.000000,175.335480,223.591782,1.000000
2.000000,-1.000000,190.003311,0.000000,109.672379,167.474655,1.000000
2.000000,-1.000000,598.737976,339.195953,56.107788,42.138855,1.000000
2.000000,-1.000000,607.263550,370.087189,34.062073,23.393646,1.000000
2.000000,-1.000000,609.837097,386.229797,38.037598,25.319122,1.000000
2.000000,-1.000000,619.484253,403.451385,36.963745,22.318726,1.000000
2.000000,-1.000000,627.060547,415.621368,37.062378,28.391235,1.000000
2.000000,-1.000000,637.706848,434.790314,32.965332,22.468292,1.000000
2.000000,-1.000000,642.306580,447.035095,37.013611,27.367279,1.000000
2.000000,-1.000000,656.529663,479.299438,34.964539,27.466980,1.000000
2.000000,-1.000000,666.175903,495.567627,34.914612,25.443787,1.000000
2.000000,-1.000000,671.775757,511.739227,34.964478,24.393829,1.000000
2.000000,-1.000000,679.348999,527.981506,36.988647,24.368896,1.000000
2.000000,-1.000000,688.946289,546.075500,31.016907,21.496216,1.000000
2.000000,-1.000000,692.546936,558.298462,38.012756,28.417236,1.000000
2.000000,-1.000000,700.071289,575.541870,40.112671,28.316528,1.000000
2.000000,-1.000000,652.482178,530.760437,25.344055,36.113159,1.000000
2.000000,-1.000000,627.562866,485.176392,26.367126,37.087402,1.000000
2.000000,-1.000000,605.792603,436.590942,26.415955,32.139648,1.000000
2.000000,-1.000000,568.323425,375.639099,21.545044,26.067078,1.000000
2.000000,-1.000000,185.677826,95.875267,18.517822,28.165047,1.000000
2.000000,-1.000000,194.373932,68.107681,18.542709,27.067657,1.000000
2.000000,-1.000000,199.045502,35.316822,21.641861,34.040417,1.000000
3.000000,-1.000000,832.605469,521.815491,60.276794,20.881165,1.000000
3.000000,-1.000000,837.967102,449.870026,54.992920,19.806000,1.000000
3.000000,-1.000000,833.071167,423.797729,58.233276,21.848511,1.000000
3.000000,-1.000000,836.444092,398.860443,56.248596,19.806000,1.000000
3.000000,-1.000000,835.773926,375.846954,60.246826,21.865479,1.000000
3.000000,-1.000000,842.746277,330.926117,54.976929,21.821594,1.000000
3.000000,-1.000000,842.119934,287.931091,54.217957,20.776428,1.000000
3.000000,-1.000000,845.672424,268.963837,52.978210,16.777130,1.000000
3.000000,-1.000000,846.791321,244.981979,53.175903,18.775742,1.000000
3.000000,-1.000000,847.105469,222.985840,54.205078,20.788345,1.000000
3.000000,-1.000000,847.419678,202.001953,56.964661,19.835938,1.000000
3.000000,-1.000000,842.766113,179.913025,59.202637,16.852905,1.000000
3.000000,-1.000000,846.064270,159.962433,48.220093,17.715576,1.000000
3.000000,-1.000000,847.362793,137.994156,61.249207,18.880447,1.000000
3.000000,-1.000000,845.693237,116.950432,57.232910,17.000587,1.000000
3.000000,-1.000000,853.006653,96.059448,56.233643,17.835159,1.000000
3.000000,-1.000000,849.633606,71.002548,62.949707,24.909256,1.000000
3.000000,-1.000000,850.633911,52.019630,55.264282,20.803284,1.000000
3.000000,-1.000000,849.947754,32.021305,56.219666,19.805809,1.000000
3.000000,-1.000000,564.707764,88.093872,42.505310,50.949600,1.000000
3.000000,-1.000000,575.884949,171.069809,61.769836,45.623978,1.000000
3.000000,-1.000000,586.197327,149.253204,63.783386,47.606613,1.000000
3.000000,-1.000000,838.353088,472.896393,55.232239,19.806000,1.000000
3.000000,-1.000000,836.261719,546.872498,60.231873,20.866211,1.000000
3.000000,-1.000000,626.315979,73.830414,62.826965,43.622787,1.000000
3.000000,-1.000000,832.916687,569.827148,59.232605,18.864502,1.000000
3.000000,-1.000000,782.044678,498.041168,38.174927,14.568085,1.000000
3.000000,-1.000000,782.299011,476.042999,43.264282,18.640076,1.000000
3.000000,-1.000000,773.318054,403.903015,55.277100,24.819550,1.000000
3.000000,-1.000000,774.945618,383.919434,52.979309,19.776093,1.000000
3.000000,-1.000000,771.005127,356.861786,60.979980,24.909332,1.000000
3.000000,-1.000000,773.393677,333.910217,59.249634,22.863770,1.000000
3.000000,-1.000000,770.738831,309.853546,61.276123,22.908630,1.000000
3.000000,-1.000000,775.128174,288.929504,51.189026,18.730835,1.000000
3.000000,-1.000000,773.425598,263.887451,59.277405,23.849152,1.000000
3.000000,-1.000000,762.802002,240.727478,70.215149,22.042938,1.000000
3.000000,-1.000000,775.099060,218.907776,57.262817,22.851883,1.000000
3.000000,-1.000000,778.459106,197.953812,54.216980,18.808701,1.000000
3.000000,-1.000000,773.802612,171.896469,63.232788,24.912415,1.000000
3.000000,-1.000000,787.115967,155.079498,50.233643,18.729858,1.000000
3.000000,-1.000000,807.056580,101.370567,35.099060,11.506775,1.000000
3.000000,-1.000000,796.772095,114.219795,44.174805,17.655739,1.000000
3.000000,-1.000000,783.414856,135.873810,57.977905,18.012802,1.000000
3.000000,-1.000000,828.349976,604.761719,72.228699,25.043884,1.000000
3.000000,-1.000000,613.898193,103.601875,60.829407,40.624748,1.000000
3.000000,-1.000000,638.597107,55.011852,57.889160,41.532558,1.000000
3.000000,-1.000000,381.135742,14.082091,53.083008,32.622162,1.000000
3.000000,-1.000000,202.316101,139.402740,51.024551,26.610794,1.000000
3.000000,-1.000000,200.645584,115.361061,61.067642,31.789940,1.000000
3.000000,-1.000000,212.092926,90.528778,49.009949,22.597260,1.000000
3.000000,-1.000000,213.391449,66.591911,60.039398,29.713577,1.000000
3.000000,-1.000000,228.093079,20.760881,55.039825,28.686060,1.000000
3.000000,-1.000000,236.465637,0.000000,55.054810,24.569590,1.000000
3.000000,-1.000000,389.493378,0.000000,56.085022,23.872423,1.000000
3.000000,-1.000000,376.763489,39.004517,51.099304,32.595024,1.000000
3.000000,-1.000000,671.373413,5.451560,48.890320,37.474163,1.000000
3.000000,-1.000000,365.135559,83.817528,52.038849,31.627213,1.000000
3.000000,-1.000000,259.666779,185.251083,69.915955,29.940933,1.000000
3.000000,-1.000000,181.989502,165.071106,36.055557,16.449036,1.000000
3.000000,-1.000000,214.850601,171.578659,47.993576,26.595871,1.000000
3.000000,-1.000000,329.448090,202.282532,35.026306,20.429276,1.000000
3.000000,-1.000000,363.280609,211.774078,36.070526,20.492203,1.000000
3.000000,-1.000000,397.412292,203.314713,53.053131,23.684616,1.000000
3.000000,-1.000000,405.725098,181.436203,42.070435,23.490158,1.000000
3.000000,-1.000000,412.024261,162.527771,46.068726,23.579910,1.000000
3.000000,-1.000000,416.306732,141.588776,47.070129,24.583267,1.000000
3.000000,-1.000000,426.576294,122.741180,39.084412,23.462250,1.000000
3.000000,-1.000000,428.948914,100.789536,37.070801,22.415375,1.000000
3.000000,-1.000000,435.233093,79.880600,46.038879,26.536224,1.000000
3.000000,-1.000000,446.948730,34.022530,55.009857,27.698135,1.000000
3.000000,-1.000000,450.233948,8.114814,56.096893,32.669903,1.000000
3.000000,-1.000000,322.809875,175.194962,70.975098,29.938889,1.000000
3.000000,-1.000000,331.137573,152.333130,66.977844,31.864731,1.000000
3.000000,-1.000000,331.481628,126.366600,73.992126,35.906883,1.000000
3.000000,-1.000000,839.807129,311.897980,46.218384,16.673431,1.000000
3.000000,-1.000000,986.321289,475.110382,36.678711,20.224701,1.000000
3.000000,-1.000000,994.547241,412.207642,28.452759,18.103546,1.000000
3.000000,-1.000000,1002.134888,227.317154,20.865112,12.296097,1.000000
3.000000,-1.000000,991.261108,498.166687,31.738892,14.477600,1.000000
3.000000,-1.000000,993.945923,519.210449,29.054077,14.013489,1.000000
3.000000,-1.000000,998.662354,538.283447,24.337646,15.935852,1.000000
3.000000,-1.000000,988.153442,558.146301,34.846558,15.230347,1.000000
3.000000,-1.000000,964.273376,610.780457,58.726624,19.997559,1.000000
3.000000,-1.000000,980.840027,577.024780,42.159973,17.439636,1.000000
3.000000,-1.000000,756.432251,17.930534,149.869812,605.696716,1.000000
3.000000,-1.000000,574.101807,334.963409,190.643250,290.954742,1.000000
3.000000,-1.000000,563.065186,0.000000,188.153931,216.693787,1.000000
3.000000,-1.000000,336.806366,0.000000,173.614563,224.132965,1.000000
3.000000,-1.000000,186.377731,0.000000,108.757370,170.059769,1.000000
3.000000,-1.000000,597.248840,337.904572,56.069092,42.486420,1.000000
3.000000,-1.000000,605.965637,368.841858,34.038879,23.637756,1.000000
3.000000,-1.000000,608.709290,384.927795,38.025208,25.593536,1.000000
3.000000,-1.000000,618.498047,402.063019,36.981079,22.592529,1.000000
3.000000,-1.000000,626.245422,414.165619,37.039856,28.636322,1.000000
3.000000,-1.000000,637.033508,433.268524,32.981873,22.682281,1.000000
3.000000,-1.000000,641.793762,445.415985,37.011047,27.622131,1.000000
3.000000,-1.000000,656.328979,477.576996,34.981445,27.681946,1.000000
3.000000,-1.000000,666.116821,493.738708,34.951477,25.668335,1.000000
3.000000,-1.000000,671.877380,509.843658,34.981445,24.638153,1.000000
3.000000,-1.000000,679.621704,525.989441,36.996033,24.623169,1.000000
3.000000,-1.000000,689.380554,544.047119,31.013062,21.700012,1.000000
3.000000,-1.000000,693.141541,556.182739,38.010315,28.652344,1.000000
3.000000,-1.000000,700.856934,573.329834,40.070801,28.591492,1.000000
3.000000,-1.000000,652.699707,529.257751,25.608459,36.070496,1.000000
3.000000,-1.000000,627.346436,483.904083,26.621765,37.054901,1.000000
3.000000,-1.000000,605.083008,435.548401,26.650696,32.086151,1.000000
3.000000,-1.000000,566.997803,374.973480,21.728943,26.042358,1.000000
3.000000,-1.000000,181.782013,99.094604,18.312012,28.100815,1.000000
3.000000,-1.000000,190.200516,71.231705,18.326920,27.043106,1.000000
3.000000,-1.000000,194.603668,38.354515,21.386795,34.027229,1.000000
4.000000,-1.000000,832.876770,518.604797,60.093262,20.294739,1.000000
4.000000,-1.000000,837.331299,446.622192,54.998352,19.269379,1.000000
4.000000,-1.000000,832.365051,420.597198,58.079407,21.282135,1.000000
4.000000,-1.000000,835.488953,395.617523,56.084595,19.269348,1.000000
4.000000,-1.000000,834.599243,372.611725,60.083252,21.289154,1.000000
4.000000,-1.000000,840.923950,327.636536,54.992371,21.275208,1.000000
4.000000,-1.000000,840.048157,284.637238,54.073792,20.259827,1.000000
4.000000,-1.000000,843.231995,265.648163,52.993469,16.260132,1.000000
4.000000,-1.000000,844.271240,241.653946,53.061462,18.258957,1.000000
4.000000,-1.000000,844.375977,219.655624,54.070801,20.261749,1.000000
4.000000,-1.000000,844.480713,198.659668,56.990234,19.279343,1.000000
4.000000,-1.000000,839.597290,176.628372,59.068848,16.286072,1.000000
4.000000,-1.000000,842.696289,156.645874,48.075256,17.238586,1.000000
4.000000,-1.000000,843.795471,134.655487,61.085693,18.293839,1.000000
4.000000,-1.000000,841.906311,113.639572,57.078979,17.002274,1.000000
4.000000,-1.000000,849.010986,92.676689,56.079651,17.278374,1.000000
4.000000,-1.000000,845.218689,67.657211,62.985840,24.303284,1.000000
4.000000,-1.000000,846.219116,48.662426,55.090210,20.266735,1.000000
4.000000,-1.000000,845.323425,28.662113,56.075623,19.269161,1.000000
4.000000,-1.000000,560.902832,87.353500,42.170410,50.984604,1.000000
4.000000,-1.000000,572.629700,170.347687,61.925598,45.209579,1.000000
4.000000,-1.000000,582.733643,148.409210,63.929382,47.202408,1.000000
4.000000,-1.000000,838.126221,469.630920,55.078186,19.269348,1.000000
4.000000,-1.000000,836.762817,543.624329,60.078247,20.289795,1.000000
4.000000,-1.000000,622.108276,72.599899,62.942871,43.208206,1.000000
4.000000,-1.000000,833.646790,566.611267,59.078918,18.287842,1.000000
4.000000,-1.000000,782.021667,495.346741,38.059021,14.190460,1.000000
4.000000,-1.000000,782.106506,473.346375,43.088989,18.213043,1.000000
4.000000,-1.000000,772.446350,401.298950,55.093079,24.273438,1.000000
4.000000,-1.000000,773.655151,381.303406,52.994568,19.259399,1.000000
4.000000,-1.000000,769.674438,354.282959,60.995972,24.303375,1.000000
4.000000,-1.000000,771.803894,331.299194,59.085938,22.287506,1.000000
4.000000,-1.000000,768.919373,307.280029,61.092651,22.302490,1.000000
4.000000,-1.000000,773.049744,286.304016,51.064514,18.243988,1.000000
4.000000,-1.000000,771.147522,261.289429,59.093872,23.282990,1.000000
4.000000,-1.000000,760.273560,238.236847,70.072510,21.346954,1.000000
4.000000,-1.000000,772.372375,216.295288,57.088989,22.285629,1.000000
4.000000,-1.000000,775.493347,195.309311,54.072693,18.271973,1.000000
4.000000,-1.000000,770.606934,169.289276,63.079529,24.306458,1.000000
4.000000,-1.000000,783.712158,152.350937,50.079041,18.242981,1.000000
4.000000,-1.000000,803.026428,98.447151,35.032715,11.168808,1.000000
4.000000,-1.000000,792.930359,111.397415,44.059570,17.218628,1.000000
4.000000,-1.000000,779.811218,132.614716,57.993652,18.004623,1.000000
4.000000,-1.000000,829.458618,601.589172,72.076355,24.348206,1.000000
4.000000,-1.000000,609.968506,102.523933,60.945129,40.209862,1.000000
4.000000,-1.000000,634.201050,53.659763,57.964783,41.177616,1.000000
4.000000,-1.000000,376.374969,15.349161,53.028442,32.206482,1.000000
4.000000,-1.000000,198.764389,142.457703,51.009674,26.204498,1.000000
4.000000,-1.000000,196.874252,118.443550,61.023849,31.264473,1.000000
4.000000,-1.000000,208.023514,93.499084,49.004837,22.200539,1.000000
4.000000,-1.000000,209.122681,69.519936,60.015472,29.237762,1.000000
4.000000,-1.000000,223.356979,23.574625,55.015366,28.230104,1.000000
4.000000,-1.000000,231.481033,0.000000,55.020340,26.845104,1.000000
4.000000,-1.000000,384.494049,0.000000,56.030762,24.611839,1.000000
4.000000,-1.000000,372.251617,40.323948,51.034607,32.199284,1.000000
4.000000,-1.000000,666.461975,3.805288,48.964966,37.158730,1.000000
4.000000,-1.000000,361.041504,85.261086,52.014069,31.211464,1.000000
4.000000,-1.000000,256.549622,187.742081,69.972809,29.315521,1.000000
4.000000,-1.000000,178.655182,168.348053,36.019257,16.151443,1.000000
4.000000,-1.000000,211.609329,174.517136,47.998367,26.199524,1.000000
4.000000,-1.000000,326.477539,204.086975,35.009857,20.142059,1.000000
4.000000,-1.000000,360.423157,213.250336,36.024231,20.165085,1.000000
4.000000,-1.000000,394.468475,204.431061,53.018494,23.228134,1.000000
4.000000,-1.000000,402.572632,182.470581,42.024780,23.163315,1.000000
4.000000,-1.000000,408.672943,163.500412,46.023438,23.193237,1.000000
4.000000,-1.000000,412.766327,142.519424,47.024933,24.196716,1.000000
4.000000,-1.000000,422.857391,123.570213,39.028442,23.155388,1.000000
4.000000,-1.000000,424.980865,101.586456,37.024658,22.138344,1.000000
4.000000,-1.000000,431.076172,80.615616,46.013519,26.179787,1.000000
4.000000,-1.000000,442.314178,34.663200,55.005402,27.232101,1.000000
4.000000,-1.000000,445.410248,8.693073,56.032654,32.224297,1.000000
4.000000,-1.000000,319.599304,177.056564,70.992126,29.313492,1.000000
4.000000,-1.000000,327.708374,154.102692,66.994507,31.289398,1.000000
4.000000,-1.000000,327.823059,128.113617,73.999481,35.302032,1.000000
4.000000,-1.000000,837.944641,308.626465,46.073303,16.226227,1.000000
4.000000,-1.000000,986.119141,470.368958,36.880859,19.875244,1.000000
4.000000,-1.000000,993.528015,407.400085,29.471985,17.843567,1.000000
4.000000,-1.000000,999.390808,222.431366,23.609192,12.112839,1.000000
4.000000,-1.000000,991.099304,493.387634,31.900696,14.160400,1.000000
4.000000,-1.000000,993.993896,514.403564,29.006104,14.004944,1.000000
4.000000,-1.000000,998.900269,533.428589,24.099731,15.664001,1.000000
4.000000,-1.000000,988.729492,553.383179,34.270508,14.879028,1.000000
4.000000,-1.000000,965.435486,606.261963,57.564514,19.999512,1.000000
4.000000,-1.000000,981.624756,572.343384,41.375244,17.001282,1.000000
4.000000,-1.000000,757.483948,15.298059,143.959961,604.580017,1.000000
4.000000,-1.000000,572.701599,333.649139,192.886475,290.325409,1.000000
4.000000,-1.000000,559.688965,0.000000,185.094666,215.557266,1.000000
4.000000,-1.000000,333.597198,0.000000,171.876343,224.702774,1.000000
4.000000,-1.000000,182.784531,0.000000,107.798660,172.678909,1.000000
4.000000,-1.000000,595.751221,336.630493,56.024780,42.829742,1.000000
4.000000,-1.000000,604.658386,367.610748,34.012329,23.879517,1.000000
4.000000,-1.000000,607.571838,383.638428,38.009094,25.865417,1.000000
4.000000,-1.000000,617.501221,400.685608,36.994751,22.864105,1.000000
4.000000,-1.000000,625.418945,412.719574,37.013611,28.878601,1.000000
4.000000,-1.000000,636.347778,431.754578,32.995056,22.894012,1.000000
4.000000,-1.000000,641.268066,443.803528,37.004761,27.874207,1.000000
4.000000,-1.000000,656.113953,475.857971,34.994873,27.894196,1.000000
4.000000,-1.000000,666.042358,491.911591,34.984924,25.890350,1.000000
4.000000,-1.000000,671.963074,507.948334,34.994934,24.879974,1.000000
4.000000,-1.000000,679.877747,523.995972,36.999695,24.874939,1.000000
4.000000,-1.000000,689.797180,542.015564,31.006165,21.901672,1.000000
4.000000,-1.000000,693.718140,554.062622,38.004089,28.884583,1.000000
4.000000,-1.000000,701.623779,571.111694,40.024902,28.863647,1.000000
4.000000,-1.000000,652.903198,527.753357,25.870361,36.024231,1.000000
4.000000,-1.000000,627.118530,482.634552,26.873779,37.018646,1.000000
4.000000,-1.000000,604.364136,434.513428,26.882751,32.029541,1.000000
4.000000,-1.000000,565.666687,374.321503,21.910645,26.015015,1.000000
4.000000,-1.000000,177.919052,102.355011,18.104370,28.033783,1.000000
4.000000,-1.000000,186.059097,74.399574,18.109329,27.015869,1.000000
4.000000,-1.000000,190.193420,41.439320,21.129562,34.010654,1.000000
5.000000,-1.000000,833.116089,515.099182,60.003540,20.000549,1.000000
5.000000,-1.000000,836.663086,443.106598,54.998352,19.005096,1.000000
5.000000,-1.000000,831.532288,417.405731,58.014587,20.713684,1.000000
5.000000,-1.000000,834.501587,392.386200,55.915039,19.005066,1.000000
5.000000,-1.000000,833.392517,369.390381,59.913635,20.710693,1.000000
5.000000,-1.000000,839.068909,324.365295,55.102051,20.726685,1.000000
5.000000,-1.000000,837.943787,281.365997,53.924194,19.741211,1.000000
5.000000,-1.000000,840.758606,262.356964,53.003479,15.741547,1.000000
5.000000,-1.000000,841.638306,238.352814,53.021545,17.740356,1.000000
5.000000,-1.000000,841.528625,216.354492,54.015930,19.733139,1.000000
5.000000,-1.000000,841.508667,195.348557,57.010254,18.720825,1.000000
5.000000,-1.000000,836.316040,173.377075,59.009094,16.001846,1.000000
5.000000,-1.000000,839.215637,153.364670,48.085205,16.759857,1.000000
5.000000,-1.000000,840.195129,131.354340,60.916138,18.004623,1.000000
5.000000,-1.000000,838.001770,110.368332,57.004211,17.002274,1.000000
5.000000,-1.000000,844.897034,89.335640,56.084595,16.999115,1.000000
5.000000,-1.000000,840.770630,64.356071,63.015747,23.694901,1.000000
5.000000,-1.000000,841.676270,45.351311,55.005432,19.728172,1.000000
5.000000,-1.000000,840.665894,25.350996,55.926025,18.730597,1.000000
5.000000,-1.000000,557.093079,86.655365,41.831299,51.014542,1.000000
5.000000,-1.000000,569.368469,169.659531,62.075195,44.790710,1.000000
5.000000,-1.000000,579.262939,147.601379,64.069031,46.793488,1.000000
5.000000,-1.000000,837.866882,466.369659,55.003418,18.730804,1.000000
5.000000,-1.000000,837.231567,540.373047,59.918640,19.711365,1.000000
5.000000,-1.000000,617.889526,71.413086,63.052612,42.789322,1.000000
5.000000,-1.000000,834.344971,563.389893,59.004028,17.709351,1.000000
5.000000,-1.000000,781.906982,492.653961,38.069031,13.811493,1.000000
5.000000,-1.000000,781.797302,470.439148,43.089050,18.213043,1.000000
5.000000,-1.000000,771.439087,398.705902,55.117981,23.724915,1.000000
5.000000,-1.000000,772.338684,378.700378,53.004517,18.740784,1.000000
5.000000,-1.000000,768.203369,351.719849,61.120605,23.694977,1.000000
5.000000,-1.000000,770.188232,328.706116,59.011108,21.709076,1.000000
5.000000,-1.000000,766.969604,304.726868,61.107544,21.694153,1.000000
5.000000,-1.000000,770.945374,283.701019,50.934875,17.755280,1.000000
5.000000,-1.000000,768.739014,258.716339,59.009033,22.714508,1.000000
5.000000,-1.000000,757.625671,235.773438,70.102417,20.648834,1.000000
5.000000,-1.000000,769.515015,213.712219,57.108948,21.717148,1.000000
5.000000,-1.000000,772.411621,192.696304,54.087646,18.002716,1.000000
5.000000,-1.000000,767.385559,166.716187,62.919983,23.698074,1.000000
5.000000,-1.000000,780.196594,149.658157,50.004211,17.754288,1.000000
5.000000,-1.000000,798.927368,95.564873,35.002869,10.829727,1.000000
5.000000,-1.000000,788.990906,108.614883,44.084473,16.779793,1.000000
5.000000,-1.000000,776.101135,129.393356,58.083374,17.994659,1.000000
5.000000,-1.000000,830.535767,598.407654,71.916748,23.650146,1.000000
5.000000,-1.000000,606.029114,101.486717,61.054810,39.790977,1.000000
5.000000,-1.000000,629.792908,52.353260,58.034546,40.818584,1.000000
5.000000,-1.000000,371.627686,16.665630,52.968597,31.787601,1.000000
5.000000,-1.000000,195.243835,145.549408,50.989716,25.795609,1.000000
5.000000,-1.000000,193.134262,121.565178,60.973999,30.735893,1.000000
5.000000,-1.000000,203.984344,96.511009,48.994858,21.801613,1.000000
5.000000,-1.000000,204.884033,72.491974,59.985565,28.759033,1.000000
5.000000,-1.000000,218.649612,26.436949,54.985428,27.771345,1.000000
5.000000,-1.000000,226.524323,0.000000,54.980438,29.168877,1.000000
5.000000,-1.000000,379.507416,0.000000,55.970917,25.399733,1.000000
5.000000,-1.000000,367.753662,41.690296,50.964813,31.800335,1.000000
5.000000,-1.000000,661.535217,2.209565,49.034790,36.839592,1.000000
5.000000,-1.000000,356.962433,86.747093,51.984131,30.792603,1.000000
5.000000,-1.000000,253.457916,190.265320,70.022644,28.687195,1.000000
5.000000,-1.000000,175.354034,171.659180,35.979355,15.852249,1.000000
5.000000,-1.000000,208.397934,177.489182,47.998367,25.800583,1.000000
5.000000,-1.000000,323.525452,205.922058,34.989899,19.852829,1.000000
5.000000,-1.000000,357.580780,214.756317,35.974365,19.835938,1.000000
5.000000,-1.000000,391.536377,205.577988,52.978546,22.769363,1.000000
5.000000,-1.000000,399.431061,183.537720,41.974915,22.834198,1.000000
5.000000,-1.000000,405.331879,164.507721,45.973572,22.804260,1.000000
5.000000,-1.000000,409.235809,143.486816,46.975067,23.807785,1.000000
5.000000,-1.000000,419.147339,124.437889,38.968597,22.846230,1.000000
5.000000,-1.000000,421.021484,102.424194,36.974792,21.859116,1.000000
5.000000,-1.000000,426.927307,81.393547,45.983551,25.820740,1.000000
5.000000,-1.000000,437.686584,35.351349,54.995422,26.763363,1.000000
5.000000,-1.000000,440.593140,9.321395,55.962860,31.775482,1.000000
5.000000,-1.000000,316.407867,178.951492,71.002106,28.685150,1.000000
5.000000,-1.000000,324.297516,155.907852,67.004456,30.710968,1.000000
5.000000,-1.000000,324.182831,129.898834,73.999481,34.693649,1.000000
5.000000,-1.000000,836.049744,305.150757,46.003479,16.001862,1.000000
5.000000,-1.000000,985.869812,465.631653,37.130188,19.520721,1.000000
5.000000,-1.000000,992.460876,402.602936,30.539124,17.566040,1.000000
5.000000,-1.000000,996.598328,217.447403,26.401672,12.132050,1.000000
5.000000,-1.000000,990.889893,488.610443,32.110107,13.996002,1.000000
5.000000,-1.000000,993.993896,509.596436,29.006104,13.994995,1.000000
5.000000,-1.000000,999.089783,528.571594,23.910217,15.401672,1.000000
5.000000,-1.000000,989.258057,548.615967,33.741943,14.538696,1.000000
5.000000,-1.000000,966.452759,601.452148,56.547241,20.281494,1.000000
5.000000,-1.000000,982.283020,567.655945,40.716980,16.578003,1.000000
5.000000,-1.000000,758.511169,12.714990,138.035889,603.403137,1.000000
5.000000,-1.000000,571.295349,332.352631,195.110535,289.667145,1.000000
5.000000,-1.000000,556.308044,0.000000,182.106140,214.450241,1.000000
5.000000,-1.000000,330.405762,0.000000,170.121033,225.301163,1.000000
5.000000,-1.000000,179.224091,0.000000,106.795105,175.331787,1.000000
5.000000,-1.000000,594.245239,335.373871,55.974915,43.168823,1.000000
5.000000,-1.000000,603.341919,366.394012,33.982422,24.118866,1.000000
5.000000,-1.000000,606.424927,382.361847,37.989136,26.134674,1.000000
5.000000,-1.000000,616.493958,399.319244,37.004700,23.133392,1.000000
5.000000,-1.000000,624.581177,411.283417,36.983765,29.117981,1.000000
5.000000,-1.000000,635.649658,430.248596,33.005066,23.103455,1.000000
5.000000,-1.000000,640.729553,442.197815,36.994751,28.123566,1.000000
5.000000,-1.000000,655.884583,474.142578,35.004822,28.103607,1.000000
5.000000,-1.000000,665.952576,490.086487,35.014832,26.109741,1.000000
5.000000,-1.000000,672.032898,506.053436,35.004883,25.119354,1.000000
5.000000,-1.000000,680.117126,522.001343,36.999695,25.124268,1.000000
5.000000,-1.000000,690.196106,539.981018,30.996216,22.101135,1.000000
5.000000,-1.000000,694.276611,551.938293,37.994141,29.114014,1.000000
5.000000,-1.000000,702.371765,568.887634,39.975037,29.132935,1.000000
5.000000,-1.000000,653.092712,526.247375,26.129700,35.974365,1.000000
5.000000,-1.000000,626.879211,481.367950,27.123108,36.978790,1.000000
5.000000,-1.000000,603.636108,433.486176,27.112122,31.969696,1.000000
5.000000,-1.000000,564.330261,373.683197,22.090149,25.985138,1.000000
5.000000,-1.000000,174.089310,105.656158,17.894928,27.963974,1.000000
5.000000,-1.000000,181.950104,77.610962,17.889938,26.985947,1.000000
5.000000,-1.000000,185.815155,44.570930,20.870270,33.990700,1.000000
6.000000,-1.000000,833.323547,511.299042,60.007507,19.998566,1.000000
6.000000,-1.000000,835.962585,439.323608,54.992859,19.013184,1.000000
6.000000,-1.000000,830.572998,414.223694,58.038696,20.143127,1.000000
6.000000,-1.000000,833.482178,389.166779,55.739929,19.013123,1.000000
6.000000,-1.000000,832.153748,366.183197,59.738220,20.130188,1.000000
6.000000,-1.000000,837.181335,321.112701,55.306030,20.176147,1.000000
6.000000,-1.000000,835.807007,278.117706,53.769226,19.220642,1.000000
6.000000,-1.000000,838.252502,259.090637,53.008179,15.221375,1.000000
6.000000,-1.000000,838.892761,235.078888,53.056152,17.219986,1.000000
6.000000,-1.000000,838.563721,213.082764,54.040405,19.202576,1.000000
6.000000,-1.000000,838.503845,192.068939,57.024536,18.160461,1.000000
6.000000,-1.000000,832.922791,170.159470,59.023132,16.000259,1.000000
6.000000,-1.000000,835.622620,150.119141,48.250000,16.279449,1.000000
6.000000,-1.000000,836.562134,128.091064,60.740540,18.012802,1.000000
6.000000,-1.000000,833.979980,107.137047,57.008545,17.000580,1.000000
6.000000,-1.000000,840.665161,86.036629,56.248596,16.997429,1.000000
6.000000,-1.000000,836.289856,61.099461,63.039368,23.084156,1.000000
6.000000,-1.000000,837.005920,42.086609,55.009888,19.187645,1.000000
6.000000,-1.000000,835.975708,22.088284,55.770874,18.190174,1.000000
6.000000,-1.000000,553.278748,85.999535,41.488098,51.039406,1.000000
6.000000,-1.000000,566.101501,169.005447,62.218567,44.367355,1.000000
6.000000,-1.000000,575.785522,146.829788,64.202271,46.379929,1.000000
6.000000,-1.000000,837.575195,463.112946,55.007874,18.190369,1.000000
6.000000,-1.000000,837.667969,537.118958,59.753113,19.130920,1.000000
6.000000,-1.000000,613.660339,70.270103,63.156006,42.366180,1.000000
6.000000,-1.000000,835.010986,560.163391,59.008179,17.129211,1.000000
6.000000,-1.000000,781.700623,489.963104,38.204834,13.431122,1.000000
6.000000,-1.000000,781.371521,467.321655,43.264282,18.640076,1.000000
6.000000,-1.000000,770.296265,396.124115,55.351868,23.174042,1.000000
6.000000,-1.000000,770.996338,376.110596,53.009216,18.220337,1.000000
6.000000,-1.000000,766.592163,349.172638,61.353882,23.084259,1.000000
6.000000,-1.000000,768.546875,326.131317,59.025208,21.128448,1.000000
6.000000,-1.000000,764.889709,302.194336,61.320923,21.083618,1.000000
6.000000,-1.000000,768.815247,281.120697,50.800110,17.264832,1.000000
6.000000,-1.000000,766.200195,256.168457,59.023132,22.143738,1.000000
6.000000,-1.000000,754.858582,233.337524,70.304932,19.948669,1.000000
6.000000,-1.000000,766.527344,211.158813,57.322693,21.146515,1.000000
6.000000,-1.000000,769.214172,190.115067,54.261902,18.000916,1.000000
6.000000,-1.000000,764.138794,164.177444,62.754150,23.087326,1.000000
6.000000,-1.000000,776.569580,147.001419,50.009216,17.263824,1.000000
6.000000,-1.000000,794.759949,92.724014,35.009338,10.489571,1.000000
6.000000,-1.000000,784.954163,105.872475,44.249573,16.339302,1.000000
6.000000,-1.000000,772.285034,126.210052,58.247131,17.982895,1.000000
6.000000,-1.000000,831.581177,595.217590,71.750061,22.949646,1.000000
6.000000,-1.000000,602.080322,100.490334,61.158447,39.368141,1.000000
6.000000,-1.000000,625.372986,51.092480,58.098572,40.455486,1.000000
6.000000,-1.000000,366.894348,18.031368,52.903503,31.365559,1.000000
6.000000,-1.000000,191.754791,148.677567,50.964676,25.384155,1.000000
6.000000,-1.000000,189.425995,124.725647,60.918076,30.204269,1.000000
6.000000,-1.000000,199.975800,99.564270,48.980011,21.400520,1.000000
6.000000,-1.000000,200.675919,75.507729,59.949692,28.277443,1.000000
6.000000,-1.000000,213.971405,29.347569,54.950043,27.309822,1.000000
6.000000,-1.000000,221.596008,1.217553,54.935059,30.323120,1.000000
6.000000,-1.000000,374.533966,0.000000,55.905487,26.236027,1.000000
6.000000,-1.000000,363.270050,43.103424,50.889954,31.398224,1.000000
6.000000,-1.000000,656.593506,0.664549,49.099731,36.516792,1.000000
6.000000,-1.000000,352.898804,88.275406,51.949036,30.370674,1.000000
6.000000,-1.000000,250.391907,192.820557,70.065582,28.056030,1.000000
6.000000,-1.000000,172.086349,175.004150,35.935898,15.551468,1.000000
6.000000,-1.000000,205.216751,180.494492,47.993591,25.399078,1.000000
6.000000,-1.000000,320.592133,207.787582,34.966461,19.561630,1.000000
6.000000,-1.000000,354.753754,216.291855,35.920929,19.504837,1.000000
6.000000,-1.000000,388.616211,206.755386,52.933380,22.308319,1.000000
6.000000,-1.000000,396.300659,184.637543,41.920898,22.502777,1.000000
6.000000,-1.000000,402.001434,165.549591,45.919159,22.413025,1.000000
6.000000,-1.000000,405.715485,144.490875,46.920532,23.416458,1.000000
6.000000,-1.000000,415.446503,125.344116,38.904907,22.534775,1.000000
6.000000,-1.000000,417.071136,103.302681,36.921265,21.577698,1.000000
6.000000,-1.000000,422.786896,82.214302,45.949066,25.459129,1.000000
6.000000,-1.000000,433.066345,36.086906,54.980042,26.291962,1.000000
6.000000,-1.000000,435.783142,9.999717,55.887512,31.323505,1.000000
6.000000,-1.000000,313.235870,180.879547,71.005035,28.053970,1.000000
6.000000,-1.000000,320.905334,157.748444,67.007751,30.129456,1.000000
6.000000,-1.000000,320.561279,131.722046,73.992126,34.081833,1.000000
6.000000,-1.000000,834.122559,301.471252,46.008911,16.000244,1.000000
6.000000,-1.000000,985.573364,460.898956,37.426636,19.159607,1.000000
6.000000,-1.000000,991.345947,397.816681,31.654053,17.269470,1.000000
6.000000,-1.000000,993.757568,212.321442,29.242432,12.439087,1.000000
6.000000,-1.000000,990.632812,483.835571,32.367188,13.984619,1.000000
6.000000,-1.000000,993.945923,504.789581,29.054077,13.983612,1.000000
6.000000,-1.000000,999.230835,523.712952,23.769165,15.147339,1.000000
6.000000,-1.000000,989.739197,543.845093,33.260803,14.207947,1.000000
6.000000,-1.000000,967.325073,596.364380,55.674927,20.830505,1.000000
6.000000,-1.000000,982.814697,562.962952,40.185303,16.168152,1.000000
6.000000,-1.000000,759.513916,10.181582,132.098022,602.166260,1.000000
6.000000,-1.000000,569.883179,331.073975,197.315186,288.980103,1.000000
6.000000,-1.000000,552.922729,0.000000,179.185669,213.372803,1.000000
6.000000,-1.000000,327.232391,0.000000,168.348816,225.928070,1.000000
6.000000,-1.000000,175.696747,0.000000,105.745575,178.018158,1.000000
6.000000,-1.000000,592.731079,334.134827,55.919556,43.503601,1.000000
6.000000,-1.000000,602.016357,365.191742,33.949097,24.355865,1.000000
6.000000,-1.000000,605.268616,381.098145,37.965393,26.401367,1.000000
6.000000,-1.000000,615.476257,397.964111,37.010986,23.400360,1.000000
6.000000,-1.000000,623.732239,409.857269,36.950134,29.354462,1.000000
6.000000,-1.000000,634.939209,428.750763,33.011780,23.310608,1.000000
6.000000,-1.000000,640.178223,440.599091,36.981079,28.370056,1.000000
6.000000,-1.000000,655.640869,472.430908,35.011292,28.310272,1.000000
6.000000,-1.000000,665.847534,488.263550,35.041260,26.326599,1.000000
6.000000,-1.000000,672.086792,504.159088,35.011353,25.356171,1.000000
6.000000,-1.000000,680.339722,520.005676,36.996033,25.371094,1.000000
6.000000,-1.000000,690.577332,537.943665,30.983154,22.298401,1.000000
6.000000,-1.000000,694.817017,549.810059,37.980347,29.340454,1.000000
6.000000,-1.000000,703.100830,566.657898,39.921204,29.399353,1.000000
6.000000,-1.000000,653.268127,524.739990,26.386414,35.920959,1.000000
6.000000,-1.000000,626.628418,480.104401,27.369751,36.935211,1.000000
6.000000,-1.000000,602.898987,432.466736,27.338745,31.906677,1.000000
6.000000,-1.000000,562.988647,373.058685,22.267456,25.952606,1.000000
6.000000,-1.000000,170.293182,108.997726,17.683716,27.891373,1.000000
6.000000,-1.000000,177.873932,80.865562,17.668762,26.953339,1.000000
6.000000,-1.000000,181.469360,47.749035,20.608887,33.967365,1.000000
7.000000,-1.000000,833.498962,507.498993,60.005554,20.490326,1.000000
7.000000,-1.000000,835.229858,435.547852,54.981934,19.019379,1.000000
7.000000,-1.000000,829.581970,411.051392,58.057129,19.570557,1.000000
7.000000,-1.000000,832.430725,385.959564,55.559326,19.019318,1.000000
7.000000,-1.000000,830.883179,362.990540,59.556763,20.019440,1.000000
7.000000,-1.000000,835.261414,317.508148,55.504517,19.994537,1.000000
7.000000,-1.000000,833.638000,274.892670,53.608948,18.698151,1.000000
7.000000,-1.000000,835.713989,255.528290,53.007629,15.020844,1.000000
7.000000,-1.000000,836.114746,231.832520,53.085449,16.697891,1.000000
7.000000,-1.000000,835.566284,209.840759,54.059631,18.670090,1.000000
7.000000,-1.000000,835.466553,188.821136,57.033142,17.598282,1.000000
7.000000,-1.000000,829.497620,166.975861,59.031372,15.997070,1.000000
7.000000,-1.000000,831.997437,146.710999,48.409912,16.192596,1.000000
7.000000,-1.000000,832.896851,124.370201,60.558960,18.514946,1.000000
7.000000,-1.000000,829.926208,103.525116,57.007202,17.418114,1.000000
7.000000,-1.000000,836.400635,82.383995,56.406921,17.390038,1.000000
7.000000,-1.000000,831.776855,57.887695,63.056763,22.471115,1.000000
7.000000,-1.000000,832.303284,38.494701,55.008850,19.368053,1.000000
7.000000,-1.000000,831.253296,18.874302,55.610107,18.018909,1.000000
7.000000,-1.000000,549.460388,85.386078,41.140747,51.059189,1.000000
7.000000,-1.000000,562.829163,168.385468,62.355774,43.939606,1.000000
7.000000,-1.000000,572.301819,146.094528,64.329163,45.961746,1.000000
7.000000,-1.000000,837.251099,459.861084,55.006897,18.019165,1.000000
7.000000,-1.000000,838.071960,533.391602,59.581665,19.019348,1.000000
7.000000,-1.000000,609.421021,69.171051,63.253174,41.938835,1.000000
7.000000,-1.000000,835.644958,556.483215,59.006409,17.467957,1.000000
7.000000,-1.000000,781.467468,487.274414,38.336853,13.049469,1.000000
7.000000,-1.000000,780.918945,464.208618,43.435181,19.065247,1.000000
7.000000,-1.000000,769.127747,393.553864,55.580261,22.620850,1.000000
7.000000,-1.000000,769.628235,373.213165,53.008606,18.290527,1.000000
7.000000,-1.000000,764.955566,346.641663,61.581055,22.994965,1.000000
7.000000,-1.000000,766.880005,323.574951,59.033386,20.545746,1.000000
7.000000,-1.000000,762.784729,299.682648,61.528137,20.991638,1.000000
7.000000,-1.000000,766.659546,278.563324,50.660400,16.772705,1.000000
7.000000,-1.000000,763.636108,253.645996,59.031372,21.570801,1.000000
7.000000,-1.000000,752.067383,230.929321,70.500366,19.246506,1.000000
7.000000,-1.000000,763.514343,208.635345,57.530762,20.993668,1.000000
7.000000,-1.000000,765.991211,187.565842,54.430603,17.997330,1.000000
7.000000,-1.000000,760.866943,161.673294,62.582092,22.474289,1.000000
7.000000,-1.000000,772.916199,144.133560,50.009277,17.240524,1.000000
7.000000,-1.000000,790.564392,89.924866,35.012329,10.148369,1.000000
7.000000,-1.000000,780.890198,103.170464,44.410400,15.897179,1.000000
7.000000,-1.000000,768.443054,123.065125,58.405090,18.417221,1.000000
7.000000,-1.000000,832.594849,592.019226,71.576111,22.246887,1.000000
7.000000,-1.000000,598.122559,99.534882,61.255981,38.941391,1.000000
7.000000,-1.000000,620.941833,49.877541,58.156860,40.088364,1.000000
7.000000,-1.000000,362.175476,19.446239,52.833099,30.940395,1.000000
7.000000,-1.000000,188.297592,151.841858,50.934586,24.970169,1.000000
7.000000,-1.000000,185.749817,127.924637,60.856079,29.669632,1.000000
7.000000,-1.000000,195.998291,102.658546,48.960297,20.997299,1.000000
7.000000,-1.000000,196.498795,78.566902,59.907852,27.793045,1.000000
7.000000,-1.000000,209.322861,32.306198,54.909164,26.845581,1.000000
7.000000,-1.000000,216.696594,4.092010,54.884216,29.868248,1.000000
7.000000,-1.000000,369.574158,0.000000,55.834534,27.120638,1.000000
7.000000,-1.000000,358.801239,44.563190,50.810028,30.992992,1.000000
7.000000,-1.000000,651.637451,0.000000,49.159790,35.360756,1.000000
7.000000,-1.000000,348.850983,89.845856,51.908752,29.945732,1.000000
7.000000,-1.000000,247.351929,195.407562,70.101501,27.422058,1.000000
7.000000,-1.000000,168.852493,178.382660,35.888840,15.249146,1.000000
7.000000,-1.000000,202.066071,183.532776,47.984039,24.995056,1.000000
7.000000,-1.000000,317.677826,209.683365,34.939545,19.268494,1.000000
7.000000,-1.000000,351.942352,217.856812,35.863922,19.171783,1.000000
7.000000,-1.000000,385.708344,207.963165,52.882935,21.845047,1.000000
7.000000,-1.000000,393.181793,185.769928,41.862671,22.169144,1.000000
7.000000,-1.000000,398.681946,166.625916,45.860138,22.019562,1.000000
7.000000,-1.000000,402.205750,145.531494,46.861298,23.022812,1.000000
7.000000,-1.000000,411.755280,126.288795,38.837341,22.221107,1.000000
7.000000,-1.000000,413.130249,104.221809,36.864044,21.294151,1.000000
7.000000,-1.000000,418.655334,83.077805,45.910004,25.094986,1.000000
7.000000,-1.000000,428.453979,36.869801,54.959137,25.817947,1.000000
7.000000,-1.000000,430.980713,10.727969,55.806610,30.868416,1.000000
7.000000,-1.000000,310.083649,182.840530,71.000916,27.420013,1.000000
7.000000,-1.000000,317.532135,159.624268,67.004425,29.544952,1.000000
7.000000,-1.000000,316.958771,133.583084,73.977386,33.466629,1.000000
7.000000,-1.000000,832.163391,297.812683,46.009705,16.143738,1.000000
7.000000,-1.000000,985.229797,456.171356,37.770203,19.019318,1.000000
7.000000,-1.000000,990.183350,393.041779,32.816650,16.969208,1.000000
7.000000,-1.000000,990.868958,207.164917,32.131042,12.805267,1.000000
7.000000,-1.000000,990.328064,479.026978,32.671936,14.008392,1.000000
7.000000,-1.000000,993.850037,499.967773,29.149963,13.986511,1.000000
7.000000,-1.000000,999.323425,518.853149,23.676575,14.899414,1.000000
7.000000,-1.000000,990.172791,538.953552,32.827209,14.139282,1.000000
7.000000,-1.000000,968.152100,591.284302,54.847900,21.361328,1.000000
7.000000,-1.000000,983.299561,558.264893,39.700439,15.994080,1.000000
7.000000,-1.000000,758.503296,7.698089,133.023132,601.138062,1.000000
7.000000,-1.000000,568.465332,329.813293,199.500183,288.264282,1.000000
7.000000,-1.000000,549.533325,0.000000,176.330688,212.325073,1.000000
7.000000,-1.000000,324.077393,0.000000,166.559875,226.583420,1.000000
7.000000,-1.000000,172.202850,0.000000,104.648865,180.737747,1.000000
7.000000,-1.000000,591.208923,332.913452,55.858521,43.834045,1.000000
7.000000,-1.000000,600.681824,364.004089,33.912415,24.590393,1.000000
7.000000,-1.000000,604.103027,379.847473,37.937927,26.665436,1.000000
7.000000,-1.000000,614.448242,396.620331,37.013672,23.665009,1.000000
7.000000,-1.000000,622.872131,408.441284,36.912903,29.588043,1.000000
7.000000,-1.000000,634.216553,427.261200,33.015137,23.515442,1.000000
7.000000,-1.000000,639.614136,439.007446,36.963684,28.613770,1.000000
7.000000,-1.000000,655.382874,470.723206,35.014343,28.514099,1.000000
7.000000,-1.000000,665.727112,486.442993,35.064270,26.540771,1.000000
7.000000,-1.000000,672.124756,502.265533,35.014404,25.590546,1.000000
7.000000,-1.000000,680.545593,518.009216,36.988708,25.615479,1.000000
7.000000,-1.000000,690.940735,535.903748,30.967041,22.493469,1.000000
7.000000,-1.000000,695.339172,547.678040,37.962830,29.563965,1.000000
7.000000,-1.000000,703.810852,564.422791,39.863403,29.662781,1.000000
7.000000,-1.000000,653.429565,523.231323,26.640503,35.863953,1.000000
7.000000,-1.000000,626.366211,478.844025,27.613708,36.887909,1.000000
7.000000,-1.000000,602.152771,431.455231,27.562744,31.840485,1.000000
7.000000,-1.000000,561.641968,372.447968,22.442566,25.917542,1.000000
7.000000,-1.000000,166.531052,112.379379,17.470734,27.816010,1.000000
7.000000,-1.000000,173.831009,84.163048,17.445831,26.918045,1.000000
7.000000,-1.000000,177.156433,50.973316,20.345444,33.940647,1.000000
8.000000,-1.000000,833.642456,503.699402,59.997620,21.082764,1.000000
8.000000,-1.000000,834.465027,431.779694,54.965515,19.023682,1.000000
8.000000,-1.000000,828.559448,407.889130,58.069702,18.996063,1.000000
8.000000,-1.000000,831.347473,382.764893,55.373108,19.023590,1.000000
8.000000,-1.000000,829.580872,359.812683,59.369385,20.023468,1.000000
8.000000,-1.000000,833.309326,313.745300,55.697449,19.988586,1.000000
8.000000,-1.000000,831.437012,271.691223,53.443298,18.173828,1.000000
8.000000,-1.000000,833.143250,251.783951,53.001770,15.026321,1.000000
8.000000,-1.000000,833.304504,228.613998,53.109497,16.174149,1.000000
8.000000,-1.000000,832.536743,206.628815,54.073364,18.135757,1.000000
8.000000,-1.000000,832.397095,185.605484,57.036072,17.034348,1.000000
8.000000,-1.000000,826.040833,163.767166,59.033691,16.051697,1.000000
8.000000,-1.000000,828.340454,143.058960,48.565063,16.666641,1.000000
8.000000,-1.000000,829.199646,120.585167,60.371277,19.117989,1.000000
8.000000,-1.000000,825.840820,99.806168,57.000183,17.981560,1.000000
8.000000,-1.000000,832.103821,78.611488,56.559692,17.943527,1.000000
8.000000,-1.000000,827.231995,54.721100,63.067871,21.950172,1.000000
8.000000,-1.000000,827.568726,34.775211,55.002441,19.910973,1.000000
8.000000,-1.000000,826.499084,15.709368,55.443909,18.023512,1.000000
8.000000,-1.000000,545.638245,84.815056,40.789307,51.073891,1.000000
8.000000,-1.000000,559.551758,167.799667,62.486816,43.507492,1.000000
8.000000,-1.000000,568.812073,145.395660,64.449646,45.539001,1.000000
8.000000,-1.000000,836.894592,456.614410,55.000549,18.023773,1.000000
8.000000,-1.000000,838.443542,529.544373,59.404236,19.023621,1.000000
8.000000,-1.000000,605.171997,68.116051,63.343994,41.507309,1.000000
8.000000,-1.000000,836.246704,552.669006,58.998779,18.051331,1.000000
8.000000,-1.000000,781.207458,484.261902,38.465149,13.319092,1.000000
8.000000,-1.000000,780.439636,461.100311,43.601807,19.488556,1.000000
8.000000,-1.000000,767.933716,390.995361,55.803101,22.065430,1.000000
8.000000,-1.000000,768.234436,370.122040,53.002869,18.803833,1.000000
8.000000,-1.000000,763.293823,344.127136,61.802124,22.988098,1.000000
8.000000,-1.000000,765.187805,321.037384,59.035706,20.023529,1.000000
8.000000,-1.000000,760.654785,297.059906,61.729248,21.117584,1.000000
8.000000,-1.000000,764.478577,276.029205,50.515564,16.278870,1.000000
8.000000,-1.000000,761.046997,251.089844,59.033691,21.055115,1.000000
8.000000,-1.000000,749.252319,228.549072,70.688782,18.987732,1.000000
8.000000,-1.000000,760.476318,206.142044,57.733093,20.987396,1.000000
8.000000,-1.000000,762.742920,185.048889,54.593994,17.991959,1.000000
8.000000,-1.000000,757.570374,159.203979,62.403809,21.859024,1.000000
8.000000,-1.000000,769.236938,141.050949,50.004272,17.734192,1.000000
8.000000,-1.000000,786.341125,86.946007,35.011902,10.027847,1.000000
8.000000,-1.000000,776.799500,100.509117,44.566711,15.453476,1.000000
8.000000,-1.000000,764.575562,119.958885,58.557251,18.980370,1.000000
8.000000,-1.000000,833.576599,588.812927,71.395142,21.541931,1.000000
8.000000,-1.000000,594.156250,98.620461,61.347412,38.510750,1.000000
8.000000,-1.000000,616.499817,48.708569,58.209351,39.717258,1.000000
8.000000,-1.000000,357.471466,20.910103,52.757507,30.512154,1.000000
8.000000,-1.000000,184.872589,155.041992,50.899414,24.553696,1.000000
8.000000,-1.000000,182.106079,131.161819,60.788055,29.132050,1.000000
8.000000,-1.000000,192.052231,105.793541,48.935684,20.591988,1.000000
8.000000,-1.000000,192.353043,81.669182,59.860077,27.305878,1.000000
8.000000,-1.000000,204.704407,35.312538,54.862854,26.378670,1.000000
8.000000,-1.000000,211.826538,7.016986,54.827911,29.410404,1.000000
8.000000,-1.000000,364.628540,0.000000,55.758026,28.053478,1.000000
8.000000,-1.000000,354.347687,46.069450,50.725037,30.584679,1.000000
8.000000,-1.000000,646.667542,0.000000,49.214905,33.587578,1.000000
8.000000,-1.000000,344.819397,91.458298,51.863312,29.517815,1.000000
8.000000,-1.000000,244.338272,198.026047,70.130447,26.785355,1.000000
8.000000,-1.000000,165.652756,181.794342,35.838226,14.945297,1.000000
8.000000,-1.000000,198.946213,186.603729,47.969727,24.588547,1.000000
8.000000,-1.000000,314.782867,211.609207,34.909149,18.973434,1.000000
8.000000,-1.000000,349.146881,219.451019,35.803345,18.836838,1.000000
8.000000,-1.000000,382.813019,209.201172,52.827240,21.379608,1.000000
8.000000,-1.000000,390.074738,186.934753,41.800323,21.833298,1.000000
8.000000,-1.000000,395.373718,167.736588,45.796600,21.623917,1.000000
8.000000,-1.000000,398.706940,146.608551,46.797424,22.626877,1.000000
8.000000,-1.000000,408.074066,127.271851,38.765869,21.905212,1.000000
8.000000,-1.000000,409.199188,105.181503,36.803162,21.008476,1.000000
8.000000,-1.000000,414.533081,83.983978,45.866364,24.728340,1.000000
8.000000,-1.000000,423.849915,37.699955,54.932800,25.341362,1.000000
8.000000,-1.000000,426.186340,11.506083,55.720154,30.410254,1.000000
8.000000,-1.000000,306.951538,184.834244,70.989685,26.783325,1.000000
8.000000,-1.000000,314.178284,161.535126,66.994415,28.957535,1.000000
8.000000,-1.000000,313.375641,135.481766,73.955322,32.848099,1.000000
8.000000,-1.000000,830.172302,294.175415,46.005981,16.597839,1.000000
8.000000,-1.000000,984.839111,451.449310,38.160889,19.023621,1.000000
8.000000,-1.000000,988.973145,388.278687,34.026855,16.954193,1.000000
8.000000,-1.000000,987.932678,201.976730,35.067322,13.232147,1.000000
8.000000,-1.000000,989.975830,473.928406,33.024170,14.324005,1.000000
8.000000,-1.000000,993.706238,494.870575,29.293762,14.264587,1.000000
8.000000,-1.000000,999.367554,513.992615,23.632446,14.656494,1.000000
8.000000,-1.000000,990.558838,533.859253,32.441162,14.462646,1.000000
8.000000,-1.000000,968.933777,586.210754,54.066223,21.875610,1.000000
8.000000,-1.000000,983.737488,553.562256,39.262512,15.989319,1.000000
8.000000,-1.000000,753.461548,5.264757,139.009094,601.088257,1.000000
8.000000,-1.000000,567.041809,328.570770,201.665344,287.519806,1.000000
8.000000,-1.000000,546.140137,0.000000,173.538757,211.307159,1.000000
8.000000,-1.000000,320.941071,0.000000,164.754364,227.267181,1.000000
8.000000,-1.000000,168.742737,0.000000,103.503784,183.490295,1.000000
8.000000,-1.000000,589.678894,331.709900,55.791931,44.160126,1.000000
8.000000,-1.000000,599.338501,362.831146,33.872375,24.822510,1.000000
8.000000,-1.000000,602.928223,378.609955,37.906677,26.926849,1.000000
8.000000,-1.000000,613.410095,395.287994,37.012573,23.927338,1.000000
8.000000,-1.000000,622.001038,407.035583,36.871948,29.818695,1.000000
8.000000,-1.000000,633.481689,425.780060,33.015320,23.717957,1.000000
8.000000,-1.000000,639.037292,437.423065,36.942749,28.854614,1.000000
8.000000,-1.000000,655.110657,469.019592,35.013794,28.715088,1.000000
8.000000,-1.000000,665.591431,484.624969,35.083740,26.752319,1.000000
8.000000,-1.000000,672.146851,500.372955,35.013855,25.822296,1.000000
8.000000,-1.000000,680.734741,516.012207,36.977661,25.857178,1.000000
8.000000,-1.000000,691.286377,533.861511,30.947815,22.686218,1.000000
8.000000,-1.000000,695.843140,545.542419,37.941467,29.784668,1.000000
8.000000,-1.000000,704.501831,562.182434,39.801636,29.923279,1.000000
8.000000,-1.000000,653.576904,521.721558,26.891907,35.803406,1.000000
8.000000,-1.000000,626.092651,477.586945,27.854858,36.837006,1.000000
8.000000,-1.000000,601.397583,430.451721,27.783997,31.771118,1.000000
8.000000,-1.000000,560.290283,371.851135,22.615479,25.879883,1.000000
8.000000,-1.000000,162.803268,115.800781,17.256027,27.737869,1.000000
8.000000,-1.000000,169.821701,87.503082,17.221176,26.880081,1.000000
8.000000,-1.000000,172.876801,54.243454,20.079987,33.910561,1.000000
================================================
FILE: assets/DOTA8-MOT/train/P0861__1024__0___1648/det/det_obb.txt
================================================
1.000000,-1.000000,862.262878,539.240173,59.999321,20.000832,0.034907,1.000000,2.000000
1.000000,-1.000000,866.292725,466.838013,54.999016,19.000315,0.034907,1.000000,2.000000
1.000000,-1.000000,863.160645,442.187653,58.077854,18.974989,0.086572,1.000000,2.000000
1.000000,-1.000000,866.537476,416.815247,55.346180,19.024078,0.071233,1.000000,2.000000
1.000000,-1.000000,868.306702,394.837402,59.076084,20.025723,0.084835,1.000000,2.000000
1.000000,-1.000000,873.407776,349.012878,55.370876,19.997467,0.053095,1.000000,2.000000
1.000000,-1.000000,873.400452,305.986053,53.084126,18.027664,0.091476,1.000000,2.000000
1.000000,-1.000000,876.515808,284.589661,53.008591,15.016784,0.053781,1.000000,2.000000
1.000000,-1.000000,877.868408,262.474426,53.152523,15.960173,0.106387,1.000000,2.000000
1.000000,-1.000000,879.221252,240.652344,54.084778,17.028685,0.090372,1.000000,2.000000
1.000000,-1.000000,882.240784,219.236176,57.036079,17.024061,0.069995,1.000000,2.000000
1.000000,-1.000000,878.460510,196.587967,59.033798,15.992846,0.068807,1.000000,2.000000
1.000000,-1.000000,876.947876,176.032364,48.344177,15.997558,0.055703,1.000000,2.000000
1.000000,-1.000000,885.176025,155.306732,60.709812,18.014027,0.051579,1.000000,2.000000
1.000000,-1.000000,881.780029,133.672501,57.008713,16.999865,0.052457,1.000000,2.000000
1.000000,-1.000000,889.175781,112.420433,56.000549,16.999321,0.034907,1.000000,2.000000
1.000000,-1.000000,888.888550,91.347893,63.072853,21.926064,0.082463,1.000000,2.000000
1.000000,-1.000000,886.987549,69.823402,55.010101,19.015139,0.053042,1.000000,2.000000
1.000000,-1.000000,887.340637,50.317558,55.101841,18.027332,0.089371,1.000000,2.000000
1.000000,-1.000000,593.882812,115.615814,49.606350,21.429480,2.088240,1.000000,2.000000
1.000000,-1.000000,613.096008,195.835327,61.199314,17.992085,0.558174,1.000000,2.000000
1.000000,-1.000000,624.838440,174.732391,62.312767,20.226809,0.564138,1.000000,2.000000
1.000000,-1.000000,866.652832,489.857544,55.008179,18.015055,0.053095,1.000000,2.000000
1.000000,-1.000000,865.423523,563.366150,59.109718,19.026541,0.085682,1.000000,2.000000
1.000000,-1.000000,665.985046,99.622429,60.683601,20.181610,0.528823,1.000000,2.000000
1.000000,-1.000000,861.266052,586.229065,59.008301,17.013884,0.051844,1.000000,2.000000
1.000000,-1.000000,801.207703,511.093353,38.354958,12.996212,0.061228,1.000000,2.000000
1.000000,-1.000000,804.404419,491.190979,42.999825,17.998850,0.034907,1.000000,2.000000
1.000000,-1.000000,802.815063,422.095276,55.835251,21.984024,0.071271,1.000000,2.000000
1.000000,-1.000000,803.430298,399.609009,53.009628,18.015537,0.053781,1.000000,2.000000
1.000000,-1.000000,804.455383,375.122375,61.385941,22.999037,0.051255,1.000000,2.000000
1.000000,-1.000000,806.752258,351.665863,59.027988,20.025839,0.084938,1.000000,2.000000
1.000000,-1.000000,805.130249,327.117676,61.351162,20.995348,0.051306,1.000000,2.000000
1.000000,-1.000000,804.917725,304.595123,50.130421,16.030073,0.094819,1.000000,2.000000
1.000000,-1.000000,807.359741,281.688690,59.033733,21.053823,0.068807,1.000000,2.000000
1.000000,-1.000000,803.058472,257.503601,70.569466,18.991566,0.063454,1.000000,2.000000
1.000000,-1.000000,809.305359,236.208694,57.377602,20.996964,0.052474,1.000000,2.000000
1.000000,-1.000000,811.607849,213.274521,53.998604,18.002941,0.034907,1.000000,2.000000
1.000000,-1.000000,811.950317,190.273804,62.170509,21.024971,0.083277,1.000000,2.000000
1.000000,-1.000000,818.934875,170.509918,50.009834,17.016006,0.054893,1.000000,2.000000
1.000000,-1.000000,832.460693,113.451881,35.012604,10.023527,0.063482,1.000000,2.000000
1.000000,-1.000000,826.548767,129.245285,44.725975,14.986153,0.080280,1.000000,2.000000
1.000000,-1.000000,819.801941,150.521072,57.999378,17.999857,0.034909,1.000000,2.000000
1.000000,-1.000000,862.294312,624.292725,71.237343,20.025291,0.091168,1.000000,2.000000
1.000000,-1.000000,652.016663,127.152687,59.479515,17.442734,0.498554,1.000000,2.000000
1.000000,-1.000000,676.211304,78.967316,54.838905,20.142973,0.507034,1.000000,2.000000
1.000000,-1.000000,417.448792,29.454943,49.429192,20.878641,0.324377,1.000000,2.000000
1.000000,-1.000000,235.031128,148.112396,48.533703,15.796028,0.310346,1.000000,2.000000
1.000000,-1.000000,238.614426,125.680206,58.660732,19.416946,0.242437,1.000000,2.000000
1.000000,-1.000000,244.823608,96.922417,47.361618,12.606480,0.274636,1.000000,2.000000
1.000000,-1.000000,252.052338,76.162415,57.559616,17.205652,0.275441,1.000000,2.000000
1.000000,-1.000000,265.185669,29.592533,52.476032,16.744930,0.289277,1.000000,2.000000
1.000000,-1.000000,274.099487,4.288618,52.224316,17.918573,0.289272,1.000000,2.000000
1.000000,-1.000000,427.656921,5.608071,52.784229,19.934607,0.284496,1.000000,2.000000
1.000000,-1.000000,411.134674,53.615273,47.803780,20.603170,0.310322,1.000000,2.000000
1.000000,-1.000000,705.373413,28.153364,46.529774,17.474541,0.527357,1.000000,2.000000
1.000000,-1.000000,398.878967,97.439568,49.999153,18.002100,0.318715,1.000000,2.000000
1.000000,-1.000000,300.867279,196.939270,68.848923,13.593743,0.301157,1.000000,2.000000
1.000000,-1.000000,206.814987,168.139023,34.386234,11.382750,0.243929,1.000000,2.000000
1.000000,-1.000000,245.201935,180.421188,46.173180,14.554766,0.342988,1.000000,2.000000
1.000000,-1.000000,352.968750,209.265045,33.330040,11.401583,0.309004,1.000000,2.000000
1.000000,-1.000000,387.632629,219.481461,36.283478,13.139232,0.232330,1.000000,2.000000
1.000000,-1.000000,429.887146,212.952652,51.185623,14.316456,0.232271,1.000000,2.000000
1.000000,-1.000000,433.136017,191.553085,39.629276,14.783235,0.273487,1.000000,2.000000
1.000000,-1.000000,441.671112,172.511948,44.125767,15.295462,0.232276,1.000000,2.000000
1.000000,-1.000000,446.988983,153.012497,44.645840,15.517907,0.263435,1.000000,2.000000
1.000000,-1.000000,453.799622,134.148636,36.380875,16.493107,0.279795,1.000000,2.000000
1.000000,-1.000000,455.485413,110.283691,34.381474,14.557508,0.301132,1.000000,2.000000
1.000000,-1.000000,466.607361,92.660118,43.304150,15.801174,0.319627,1.000000,2.000000
1.000000,-1.000000,483.428436,47.384827,53.366344,15.738785,0.261849,1.000000,2.000000
1.000000,-1.000000,488.003632,24.365341,52.435696,20.863659,0.289277,1.000000,2.000000
1.000000,-1.000000,364.747070,187.164322,69.501144,14.536549,0.255180,1.000000,2.000000
1.000000,-1.000000,371.511902,165.385468,65.125198,15.771894,0.287441,1.000000,2.000000
1.000000,-1.000000,375.829895,142.022675,71.466545,19.198650,0.297349,1.000000,2.000000
1.000000,-1.000000,866.855103,326.774261,46.009975,15.998276,0.056652,1.000000,2.000000
1.000000,-1.000000,1005.303162,495.043732,36.468620,19.015789,0.053781,1.000000,2.000000
1.000000,-1.000000,1009.720825,431.140411,27.612692,16.969957,0.059304,1.000000,2.000000
1.000000,-1.000000,1015.447693,243.405807,15.533021,12.000253,0.034907,1.000000,2.000000
1.000000,-1.000000,1007.220825,515.284302,32.066475,14.001139,0.034908,1.000000,2.000000
1.000000,-1.000000,1008.353027,535.967957,29.424822,14.021163,0.009258,1.000000,2.000000
1.000000,-1.000000,1010.520813,556.241943,26.473803,13.956755,0.099365,1.000000,2.000000
1.000000,-1.000000,1005.319885,575.624634,36.196720,14.018911,0.055680,1.000000,2.000000
1.000000,-1.000000,992.739197,630.848999,61.188980,19.999735,0.034904,1.000000,2.000000
1.000000,-1.000000,1001.344482,595.551270,44.241371,15.996045,0.054145,1.000000,2.000000
1.000000,-1.000000,836.646790,327.217285,601.306213,131.034607,1.627328,1.000000,8.000000
1.000000,-1.000000,676.537537,484.615936,288.578491,79.649887,1.110809,1.000000,8.000000
1.000000,-1.000000,665.061218,89.352242,255.237488,78.617355,2.109764,1.000000,8.000000
1.000000,-1.000000,431.307495,102.688629,215.129593,124.403244,1.845045,1.000000,8.000000
1.000000,-1.000000,248.513901,73.329231,171.285309,67.649216,1.844190,1.000000,8.000000
1.000000,-1.000000,627.639038,361.046204,52.322239,23.703577,2.712759,1.000000,2.000000
1.000000,-1.000000,626.048523,383.126556,32.694611,12.477627,2.767590,1.000000,2.000000
1.000000,-1.000000,630.088257,400.215393,35.848740,13.389809,2.775257,1.000000,2.000000
1.000000,-1.000000,638.931152,415.871307,34.665310,12.974287,2.845398,1.000000,2.000000
1.000000,-1.000000,646.787659,431.213074,34.884701,14.760889,2.700052,1.000000,2.000000
1.000000,-1.000000,654.840454,447.445343,30.184288,13.376986,2.789641,1.000000,2.000000
1.000000,-1.000000,661.963379,462.404327,35.340965,14.800033,2.738110,1.000000,2.000000
1.000000,-1.000000,674.022705,494.760590,31.294300,16.551620,2.739831,1.000000,2.000000
1.000000,-1.000000,683.593628,510.313995,31.383192,16.156836,2.796052,1.000000,2.000000
1.000000,-1.000000,689.280457,525.834290,32.310783,14.299404,2.796016,1.000000,2.000000
1.000000,-1.000000,697.670898,542.448792,34.540127,13.926667,2.790599,1.000000,2.000000
1.000000,-1.000000,704.003235,558.229248,28.381645,12.513310,2.728985,1.000000,2.000000
1.000000,-1.000000,710.940063,574.480225,34.434410,16.100962,2.712797,1.000000,2.000000
1.000000,-1.000000,719.249939,591.583130,38.012333,13.863952,2.712782,1.000000,2.000000
1.000000,-1.000000,664.939148,549.706604,35.340973,12.507252,1.167379,1.000000,2.000000
1.000000,-1.000000,641.119202,505.102509,34.882233,13.415600,1.142056,1.000000,2.000000
1.000000,-1.000000,619.582214,454.220001,33.362797,12.031509,1.086605,1.000000,2.000000
1.000000,-1.000000,580.324463,389.308319,25.940361,11.627506,1.141901,1.000000,2.000000
1.000000,-1.000000,198.465775,106.754128,25.709761,13.340678,1.841234,1.000000,2.000000
1.000000,-1.000000,207.066101,77.792564,26.563457,12.016853,1.927642,1.000000,2.000000
1.000000,-1.000000,214.964661,49.351395,31.624640,12.649006,1.927367,1.000000,2.000000
2.000000,-1.000000,862.696106,535.252380,60.007618,19.998066,0.041606,1.000000,2.000000
2.000000,-1.000000,865.824585,463.306824,54.999031,19.000330,0.024934,1.000000,2.000000
2.000000,-1.000000,862.446960,438.688904,58.077888,18.974991,0.076599,1.000000,2.000000
2.000000,-1.000000,865.570435,413.284027,55.346138,19.024071,0.061259,1.000000,2.000000
2.000000,-1.000000,867.109680,391.315552,59.076122,20.025681,0.075760,1.000000,2.000000
2.000000,-1.000000,871.764465,345.416595,55.370880,19.997446,0.043122,1.000000,2.000000
2.000000,-1.000000,871.327881,302.391998,53.084106,18.027670,0.081503,1.000000,2.000000
2.000000,-1.000000,874.229736,280.965576,53.008560,15.016779,0.043808,1.000000,2.000000
2.000000,-1.000000,875.361694,258.837830,53.152447,15.960182,0.096409,1.000000,2.000000
2.000000,-1.000000,876.496704,237.003464,54.084866,17.028671,0.080398,1.000000,2.000000
2.000000,-1.000000,879.302490,215.558258,57.036057,17.024052,0.060022,1.000000,2.000000
2.000000,-1.000000,875.296631,192.948868,59.033718,15.992846,0.058834,1.000000,2.000000
2.000000,-1.000000,873.579102,172.409424,48.344170,15.997562,0.045730,1.000000,2.000000
2.000000,-1.000000,881.600159,151.602737,60.709827,18.014029,0.041605,1.000000,2.000000
2.000000,-1.000000,877.988586,130.003448,57.008713,16.999874,0.042483,1.000000,2.000000
2.000000,-1.000000,885.171936,108.678680,56.000538,16.999325,0.024933,1.000000,2.000000
2.000000,-1.000000,884.674561,87.610062,63.072933,21.926065,0.072489,1.000000,2.000000
2.000000,-1.000000,882.558899,66.105576,55.010113,19.015137,0.043069,1.000000,2.000000
2.000000,-1.000000,882.717590,46.597183,55.101852,18.027334,0.079398,1.000000,2.000000
2.000000,-1.000000,589.925476,114.818909,49.606312,21.429510,2.078266,1.000000,2.000000
2.000000,-1.000000,609.937744,194.842773,61.199276,17.992050,0.548200,1.000000,2.000000
2.000000,-1.000000,621.469177,173.623779,62.312798,20.226782,0.554164,1.000000,2.000000
2.000000,-1.000000,866.414307,486.321625,55.008167,18.015041,0.043122,1.000000,2.000000
2.000000,-1.000000,865.918152,559.838867,59.109749,19.026541,0.075708,1.000000,2.000000
2.000000,-1.000000,661.864685,98.107216,60.683636,20.181641,0.518850,1.000000,2.000000
2.000000,-1.000000,861.989014,582.742004,59.008316,17.013865,0.041871,1.000000,2.000000
2.000000,-1.000000,801.184326,508.209106,38.354996,12.996180,0.051255,1.000000,2.000000
2.000000,-1.000000,804.182251,488.275818,42.999825,17.998850,0.024933,1.000000,2.000000
2.000000,-1.000000,801.904053,419.199463,55.835209,21.984024,0.061298,1.000000,2.000000
2.000000,-1.000000,802.294739,396.708069,53.009659,18.015574,0.043807,1.000000,2.000000
2.000000,-1.000000,803.075806,372.212494,61.385921,22.999004,0.041282,1.000000,2.000000
2.000000,-1.000000,805.012634,348.248291,59.035671,20.023193,0.058780,1.000000,2.000000
2.000000,-1.000000,803.271729,324.203430,61.351154,20.995340,0.041332,1.000000,2.000000
2.000000,-1.000000,802.834717,301.684174,50.130417,16.030073,0.084845,1.000000,2.000000
2.000000,-1.000000,805.048035,278.754456,59.033783,21.053818,0.058834,1.000000,2.000000
2.000000,-1.000000,800.505859,254.613464,70.569466,18.991571,0.053481,1.000000,2.000000
2.000000,-1.000000,806.540100,233.257355,57.377647,20.996954,0.042501,1.000000,2.000000
2.000000,-1.000000,808.613708,210.301392,53.998589,18.002939,0.024935,1.000000,2.000000
2.000000,-1.000000,808.726807,187.298325,62.170498,21.024977,0.073303,1.000000,2.000000
2.000000,-1.000000,815.513855,167.465790,50.009857,17.016005,0.044919,1.000000,2.000000
2.000000,-1.000000,828.470032,110.275703,35.012573,10.023529,0.053508,1.000000,2.000000
2.000000,-1.000000,822.715820,126.127296,44.726063,14.986153,0.070307,1.000000,2.000000
2.000000,-1.000000,816.181641,147.469360,57.999340,17.999855,0.024934,1.000000,2.000000
2.000000,-1.000000,863.396851,620.793701,71.237358,20.025293,0.081196,1.000000,2.000000
2.000000,-1.000000,648.171570,125.775436,59.479538,17.442738,0.488581,1.000000,2.000000
2.000000,-1.000000,671.884460,77.351143,54.838902,20.143000,0.497061,1.000000,2.000000
2.000000,-1.000000,412.641022,30.421925,49.429218,20.878647,0.314404,1.000000,2.000000
2.000000,-1.000000,231.415787,150.892731,48.533730,15.796033,0.300373,1.000000,2.000000
2.000000,-1.000000,234.775223,128.425858,58.660717,19.416960,0.232466,1.000000,2.000000
2.000000,-1.000000,240.697266,99.607643,47.361607,12.606476,0.264662,1.000000,2.000000
2.000000,-1.000000,247.718613,78.776596,57.559593,17.205652,0.265468,1.000000,2.000000
2.000000,-1.000000,260.386780,32.078041,52.476028,16.744926,0.279304,1.000000,2.000000
2.000000,-1.000000,269.067322,6.618606,52.224308,18.059811,0.279299,1.000000,2.000000
2.000000,-1.000000,422.618378,6.447395,52.784248,19.990767,0.274522,1.000000,2.000000
2.000000,-1.000000,406.568146,54.644012,47.803772,20.603170,0.300349,1.000000,2.000000
2.000000,-1.000000,700.538330,26.248917,46.529804,17.474569,0.517383,1.000000,2.000000
2.000000,-1.000000,394.750092,98.588356,49.999161,18.002096,0.308741,1.000000,2.000000
2.000000,-1.000000,297.736053,199.057114,68.849136,13.593709,0.291083,1.000000,2.000000
2.000000,-1.000000,203.400787,171.199783,34.386242,11.382755,0.233955,1.000000,2.000000
2.000000,-1.000000,242.318985,182.512497,46.152660,14.561249,0.303194,1.000000,2.000000
2.000000,-1.000000,349.957458,210.866104,33.330044,11.401593,0.299031,1.000000,2.000000
2.000000,-1.000000,384.721497,220.736328,36.283478,13.139215,0.222357,1.000000,2.000000
2.000000,-1.000000,426.908752,213.786438,51.185593,14.316444,0.222297,1.000000,2.000000
2.000000,-1.000000,429.944122,192.355530,39.629250,14.783240,0.263513,1.000000,2.000000
2.000000,-1.000000,438.288910,173.230194,44.125748,15.295472,0.222304,1.000000,2.000000
2.000000,-1.000000,443.412018,153.678726,44.645870,15.517918,0.253462,1.000000,2.000000
2.000000,-1.000000,449.608765,135.252121,36.401230,16.483875,0.303268,1.000000,2.000000
2.000000,-1.000000,451.481873,110.867302,34.381454,14.557505,0.291159,1.000000,2.000000
2.000000,-1.000000,462.427460,93.133682,43.304173,15.801174,0.309654,1.000000,2.000000
2.000000,-1.000000,478.796204,47.692863,53.366341,15.738788,0.251877,1.000000,2.000000
2.000000,-1.000000,483.141632,24.628901,52.435703,20.863644,0.279303,1.000000,2.000000
2.000000,-1.000000,361.514771,188.649048,69.501144,14.536556,0.245207,1.000000,2.000000
2.000000,-1.000000,368.062042,166.803818,65.125175,15.771891,0.277468,1.000000,2.000000
2.000000,-1.000000,372.146820,143.399109,71.466560,19.198658,0.287376,1.000000,2.000000
2.000000,-1.000000,864.803955,323.736359,45.999081,16.002045,0.024936,1.000000,2.000000
2.000000,-1.000000,1005.154602,490.126770,36.558750,19.015783,0.043807,1.000000,2.000000
2.000000,-1.000000,1009.259216,426.198853,28.352789,16.969967,0.049330,1.000000,2.000000
2.000000,-1.000000,1014.064758,238.431183,18.175510,12.000236,0.024933,1.000000,2.000000
2.000000,-1.000000,1007.187622,510.344238,31.983768,14.001167,0.024934,1.000000,2.000000
2.000000,-1.000000,1008.429565,531.016785,29.148924,14.021153,3.140875,1.000000,2.000000
2.000000,-1.000000,1010.688110,551.245056,25.973520,13.955774,0.089391,1.000000,2.000000
2.000000,-1.000000,1005.585266,570.685791,35.506992,14.018929,0.045706,1.000000,2.000000
2.000000,-1.000000,993.270630,626.032898,59.928616,19.999746,0.024933,1.000000,2.000000
2.000000,-1.000000,1001.703796,590.646973,43.341103,15.996031,0.044172,1.000000,2.000000
2.000000,-1.000000,834.787720,323.988708,601.306213,131.034561,1.617355,1.000000,8.000000
2.000000,-1.000000,676.256287,482.976349,288.578461,79.649918,1.100836,1.000000,8.000000
2.000000,-1.000000,660.116028,89.095322,252.352402,78.604683,2.099790,1.000000,8.000000
2.000000,-1.000000,427.229431,103.513733,215.129593,124.403229,1.835071,1.000000,8.000000
2.000000,-1.000000,244.434952,74.929924,173.458099,67.649200,1.834217,1.000000,8.000000
2.000000,-1.000000,626.127808,359.900452,52.322212,23.703575,2.702786,1.000000,2.000000
2.000000,-1.000000,624.757568,381.995575,32.694592,12.477595,2.757616,1.000000,2.000000
2.000000,-1.000000,628.967529,399.043213,35.848698,13.389799,2.765284,1.000000,2.000000
2.000000,-1.000000,637.966125,414.610168,34.665295,12.974289,2.835425,1.000000,2.000000
2.000000,-1.000000,645.975220,429.872742,34.884682,14.760861,2.690078,1.000000,2.000000
2.000000,-1.000000,654.189514,446.023987,30.184317,13.376964,2.779669,1.000000,2.000000
2.000000,-1.000000,661.461243,460.911194,35.340942,14.800046,2.728137,1.000000,2.000000
2.000000,-1.000000,674.214233,493.438049,31.305651,16.545555,2.702849,1.000000,2.000000
2.000000,-1.000000,683.568237,508.602753,31.383213,16.156849,2.786077,1.000000,2.000000
2.000000,-1.000000,689.409607,524.065613,32.310791,14.299380,2.786042,1.000000,2.000000
2.000000,-1.000000,697.965393,540.595520,34.540092,13.926679,2.780623,1.000000,2.000000
2.000000,-1.000000,704.454773,556.312134,28.381662,12.513248,2.719013,1.000000,2.000000
2.000000,-1.000000,711.553345,572.493103,34.434444,16.100979,2.702824,1.000000,2.000000
2.000000,-1.000000,720.033325,589.512268,38.012257,13.863986,2.702808,1.000000,2.000000
2.000000,-1.000000,665.307556,548.179504,35.340942,12.507201,1.157405,1.000000,2.000000
2.000000,-1.000000,641.209045,503.642670,34.885105,13.414519,1.119255,1.000000,2.000000
2.000000,-1.000000,619.000610,453.149963,33.362793,12.031473,1.076631,1.000000,2.000000
2.000000,-1.000000,579.097412,388.632935,25.940327,11.627520,1.131931,1.000000,2.000000
2.000000,-1.000000,194.533997,109.985901,25.708771,13.341186,1.822483,1.000000,2.000000
2.000000,-1.000000,202.750824,80.855301,26.563471,12.016870,1.917669,1.000000,2.000000
2.000000,-1.000000,210.365936,52.337303,31.624647,12.649018,1.917439,1.000000,2.000000
3.000000,-1.000000,862.910400,531.753723,60.007626,19.997995,0.031632,1.000000,2.000000
3.000000,-1.000000,865.321533,459.780548,54.999077,19.000341,0.014960,1.000000,2.000000
3.000000,-1.000000,861.698303,435.197479,58.077892,18.974972,0.066626,1.000000,2.000000
3.000000,-1.000000,864.568359,409.762726,55.346134,19.024055,0.051285,1.000000,2.000000
3.000000,-1.000000,865.899109,387.753998,59.076126,20.025721,0.064885,1.000000,2.000000
3.000000,-1.000000,870.085205,341.836945,55.370911,19.997465,0.033148,1.000000,2.000000
3.000000,-1.000000,869.219482,298.818817,53.084110,18.027660,0.071530,1.000000,2.000000
3.000000,-1.000000,871.907532,277.364502,53.008549,15.016768,0.033835,1.000000,2.000000
3.000000,-1.000000,872.818848,255.226700,53.152512,15.960183,0.086440,1.000000,2.000000
3.000000,-1.000000,873.736023,233.381958,54.084820,17.028679,0.070425,1.000000,2.000000
3.000000,-1.000000,876.327881,211.909821,57.036079,17.024057,0.050048,1.000000,2.000000
3.000000,-1.000000,872.096619,189.341522,59.033714,15.992841,0.048860,1.000000,2.000000
3.000000,-1.000000,870.174255,168.820221,48.344135,15.997555,0.035757,1.000000,2.000000
3.000000,-1.000000,877.987427,147.934586,60.709850,18.014019,0.031632,1.000000,2.000000
3.000000,-1.000000,874.317200,125.877045,56.999920,17.002491,0.014959,1.000000,2.000000
3.000000,-1.000000,881.130981,104.977089,56.000542,16.999331,0.014962,1.000000,2.000000
3.000000,-1.000000,880.423584,83.914413,63.072914,21.926058,0.062516,1.000000,2.000000
3.000000,-1.000000,878.093567,62.432117,55.010174,19.015141,0.033095,1.000000,2.000000
3.000000,-1.000000,878.057617,42.923111,55.101864,18.027338,0.069425,1.000000,2.000000
3.000000,-1.000000,585.960449,114.061516,49.606331,21.429544,2.068292,1.000000,2.000000
3.000000,-1.000000,606.769897,193.881821,61.199268,17.992071,0.538227,1.000000,2.000000
3.000000,-1.000000,618.089050,172.548859,62.312752,20.226755,0.544190,1.000000,2.000000
3.000000,-1.000000,866.140503,482.788208,55.008190,18.015079,0.033148,1.000000,2.000000
3.000000,-1.000000,866.377625,556.306763,59.109737,19.026527,0.065735,1.000000,2.000000
3.000000,-1.000000,657.729492,96.633202,60.683620,20.181616,0.508876,1.000000,2.000000
3.000000,-1.000000,862.677124,579.248047,59.008297,17.013889,0.031899,1.000000,2.000000
3.000000,-1.000000,801.132141,505.325195,38.354931,12.996221,0.041282,1.000000,2.000000
3.000000,-1.000000,803.931274,485.363098,42.999863,17.998840,0.014960,1.000000,2.000000
3.000000,-1.000000,800.964111,416.312805,55.835201,21.984045,0.051324,1.000000,2.000000
3.000000,-1.000000,801.130554,393.818634,53.009647,18.015566,0.033834,1.000000,2.000000
3.000000,-1.000000,801.667236,369.316437,61.385891,22.999010,0.031309,1.000000,2.000000
3.000000,-1.000000,803.495789,345.818939,59.027958,20.025831,0.064995,1.000000,2.000000
3.000000,-1.000000,801.384277,321.307831,61.351173,20.995346,0.031359,1.000000,2.000000
3.000000,-1.000000,800.722656,298.794067,50.130383,16.030085,0.074872,1.000000,2.000000
3.000000,-1.000000,802.707153,275.843445,59.033714,21.053814,0.048861,1.000000,2.000000
3.000000,-1.000000,797.924561,251.748947,70.569427,18.991575,0.043508,1.000000,2.000000
3.000000,-1.000000,803.745361,230.333710,57.377636,20.996956,0.032528,1.000000,2.000000
3.000000,-1.000000,805.590088,207.358170,53.998627,18.002928,0.014960,1.000000,2.000000
3.000000,-1.000000,805.473633,184.355194,62.170483,21.024973,0.063330,1.000000,2.000000
3.000000,-1.000000,812.062683,164.455948,50.009903,17.016008,0.034946,1.000000,2.000000
3.000000,-1.000000,824.447876,107.139488,35.012604,10.023522,0.043535,1.000000,2.000000
3.000000,-1.000000,818.851990,123.047668,44.726025,14.986155,0.060334,1.000000,2.000000
3.000000,-1.000000,812.531006,144.453964,57.999325,17.999866,0.014957,1.000000,2.000000
3.000000,-1.000000,864.464294,617.283691,71.237358,20.025259,0.071222,1.000000,2.000000
3.000000,-1.000000,644.312866,124.436554,59.479553,17.442760,0.478608,1.000000,2.000000
3.000000,-1.000000,667.541748,75.778214,54.838928,20.142981,0.487087,1.000000,2.000000
3.000000,-1.000000,407.843079,31.436790,49.429199,20.878649,0.304431,1.000000,2.000000
3.000000,-1.000000,227.828400,153.709000,48.533718,15.796029,0.290400,1.000000,2.000000
3.000000,-1.000000,230.963562,131.209793,58.660728,19.416965,0.222491,1.000000,2.000000
3.000000,-1.000000,236.597916,102.333893,47.361622,12.606482,0.254689,1.000000,2.000000
3.000000,-1.000000,243.411163,81.433853,57.559589,17.205647,0.255494,1.000000,2.000000
3.000000,-1.000000,255.612991,34.611282,52.476032,16.744932,0.269330,1.000000,2.000000
3.000000,-1.000000,264.059662,8.992285,52.224335,18.213871,0.269325,1.000000,2.000000
3.000000,-1.000000,417.589294,7.333008,52.784260,20.054886,0.264549,1.000000,2.000000
3.000000,-1.000000,402.012085,55.718243,47.803795,20.603163,0.290376,1.000000,2.000000
3.000000,-1.000000,695.684509,24.392773,46.529770,17.474550,0.507410,1.000000,2.000000
3.000000,-1.000000,390.632935,99.778275,49.999153,18.002090,0.298768,1.000000,2.000000
3.000000,-1.000000,294.625732,201.209579,68.849129,13.593697,0.281110,1.000000,2.000000
3.000000,-1.000000,200.017273,174.294418,34.386234,11.382749,0.223982,1.000000,2.000000
3.000000,-1.000000,238.641525,185.808533,46.173187,14.554789,0.323042,1.000000,2.000000
3.000000,-1.000000,346.962280,212.497162,33.330048,11.401592,0.289058,1.000000,2.000000
3.000000,-1.000000,381.822998,222.020172,36.283470,13.139223,0.212383,1.000000,2.000000
3.000000,-1.000000,423.938843,214.649887,51.185631,14.316458,0.212324,1.000000,2.000000
3.000000,-1.000000,426.760345,193.189804,39.629242,14.783244,0.253540,1.000000,2.000000
3.000000,-1.000000,435.289490,173.368286,44.147141,15.288073,0.243444,1.000000,2.000000
3.000000,-1.000000,439.841827,154.380585,44.645851,15.517899,0.243489,1.000000,2.000000
3.000000,-1.000000,445.854523,135.893097,36.401222,16.483889,0.293294,1.000000,2.000000
3.000000,-1.000000,447.484314,111.490799,34.381424,14.557503,0.281186,1.000000,2.000000
3.000000,-1.000000,458.252533,93.648903,43.304169,15.801168,0.299680,1.000000,2.000000
3.000000,-1.000000,474.167206,48.047150,53.366356,15.738792,0.241902,1.000000,2.000000
3.000000,-1.000000,478.282410,24.940962,52.435715,20.863653,0.269330,1.000000,2.000000
3.000000,-1.000000,358.297455,190.165939,69.501122,14.536545,0.235234,1.000000,2.000000
3.000000,-1.000000,364.626526,168.256500,65.125183,15.771893,0.267494,1.000000,2.000000
3.000000,-1.000000,368.477692,144.812241,71.466568,19.198656,0.277402,1.000000,2.000000
3.000000,-1.000000,863.090271,319.733459,46.009995,15.998281,0.036706,1.000000,2.000000
3.000000,-1.000000,1004.982239,485.211914,36.699715,19.015800,0.033834,1.000000,2.000000
3.000000,-1.000000,1008.773621,421.259399,29.143066,16.969959,0.039358,1.000000,2.000000
3.000000,-1.000000,1012.657166,233.457733,20.867447,12.000244,0.014960,1.000000,2.000000
3.000000,-1.000000,1007.130615,505.405518,31.951918,14.001187,0.014960,1.000000,2.000000
3.000000,-1.000000,1008.472961,526.217163,29.054077,14.013489,-0.000000,1.000000,2.000000
3.000000,-1.000000,1010.831238,546.251404,25.525181,13.954838,0.079417,1.000000,2.000000
3.000000,-1.000000,1005.827148,565.748779,34.868816,14.018875,0.035734,1.000000,2.000000
3.000000,-1.000000,993.779297,621.218445,58.719238,19.999794,0.014960,1.000000,2.000000
3.000000,-1.000000,1002.039673,585.744507,42.492378,15.996084,0.034199,1.000000,2.000000
3.000000,-1.000000,832.896606,320.778870,601.306152,131.034546,1.607381,1.000000,8.000000
3.000000,-1.000000,675.958618,481.339691,288.578552,79.649857,1.090863,1.000000,8.000000
3.000000,-1.000000,655.203491,88.854752,249.559464,78.592552,2.089817,1.000000,8.000000
3.000000,-1.000000,423.159729,104.379486,215.129623,124.403252,1.825098,1.000000,8.000000
3.000000,-1.000000,240.366867,76.548607,175.671829,67.649200,1.824244,1.000000,8.000000
3.000000,-1.000000,624.605286,358.769867,52.322235,23.703564,2.692812,1.000000,2.000000
3.000000,-1.000000,623.455444,380.877502,32.694580,12.477631,2.747643,1.000000,2.000000
3.000000,-1.000000,627.835205,397.882324,35.848679,13.389812,2.755310,1.000000,2.000000
3.000000,-1.000000,636.988586,413.358734,34.665302,12.974260,2.825451,1.000000,2.000000
3.000000,-1.000000,645.149536,428.540771,34.884651,14.760887,2.680105,1.000000,2.000000
3.000000,-1.000000,653.524475,444.609131,30.184315,13.376965,2.769695,1.000000,2.000000
3.000000,-1.000000,660.944336,459.423157,35.340981,14.800048,2.718163,1.000000,2.000000
3.000000,-1.000000,673.646667,491.532410,31.294241,16.551603,2.719884,1.000000,2.000000
3.000000,-1.000000,683.681885,507.030762,31.385431,16.155714,2.764213,1.000000,2.000000
3.000000,-1.000000,689.521118,522.295654,32.310818,14.299445,2.776070,1.000000,2.000000
3.000000,-1.000000,698.241333,538.739441,34.540119,13.926645,2.770651,1.000000,2.000000
3.000000,-1.000000,704.887085,554.390442,28.381605,12.513287,2.709038,1.000000,2.000000
3.000000,-1.000000,712.146729,570.499939,34.434437,16.100935,2.692850,1.000000,2.000000
3.000000,-1.000000,720.796082,587.433716,38.012268,13.863950,2.692832,1.000000,2.000000
3.000000,-1.000000,665.660767,546.648682,35.340996,12.507224,1.147433,1.000000,2.000000
3.000000,-1.000000,640.955933,502.528595,34.882271,13.415616,1.122110,1.000000,2.000000
3.000000,-1.000000,618.408386,452.085693,33.362808,12.031487,1.066657,1.000000,2.000000
3.000000,-1.000000,577.863831,387.969910,25.940361,11.627544,1.121954,1.000000,2.000000
3.000000,-1.000000,190.445419,113.088287,25.709766,13.340677,1.821287,1.000000,2.000000
3.000000,-1.000000,198.466324,83.960930,26.563454,12.016858,1.907695,1.000000,2.000000
3.000000,-1.000000,205.796082,55.367889,31.624634,12.649022,1.907419,1.000000,2.000000
4.000000,-1.000000,863.090149,528.253052,60.007603,19.998016,0.021659,1.000000,2.000000
4.000000,-1.000000,864.783203,456.259430,54.999031,19.000341,0.004987,1.000000,2.000000
4.000000,-1.000000,860.914856,431.713684,58.077862,18.974974,0.056652,1.000000,2.000000
4.000000,-1.000000,863.531311,406.251617,55.346107,19.024071,0.041313,1.000000,2.000000
4.000000,-1.000000,864.631836,384.256775,59.076122,20.025723,0.055813,1.000000,2.000000
4.000000,-1.000000,868.370361,338.274139,55.370914,19.997459,0.023175,1.000000,2.000000
4.000000,-1.000000,867.075684,295.266754,53.084114,18.027641,0.061556,1.000000,2.000000
4.000000,-1.000000,869.549683,273.786804,53.008556,15.016782,0.023861,1.000000,2.000000
4.000000,-1.000000,870.240051,251.640945,53.152523,15.960174,0.076467,1.000000,2.000000
4.000000,-1.000000,870.939392,229.788177,54.084824,17.028675,0.060452,1.000000,2.000000
4.000000,-1.000000,873.316956,208.291275,57.036026,17.024061,0.040075,1.000000,2.000000
4.000000,-1.000000,868.860657,185.766296,59.033710,15.992852,0.038887,1.000000,2.000000
4.000000,-1.000000,866.733887,165.265167,48.344200,15.997561,0.025783,1.000000,2.000000
4.000000,-1.000000,874.338257,144.302628,60.709812,18.014011,0.021658,1.000000,2.000000
4.000000,-1.000000,870.296692,122.779686,57.008671,16.999865,0.022537,1.000000,2.000000
4.000000,-1.000000,877.053406,101.315872,56.000572,16.999327,0.004987,1.000000,2.000000
4.000000,-1.000000,876.135925,80.261360,63.072880,21.926056,0.052543,1.000000,2.000000
4.000000,-1.000000,873.591736,58.803368,55.010193,19.015142,0.023122,1.000000,2.000000
4.000000,-1.000000,873.361267,39.295696,55.101849,18.027330,0.059451,1.000000,2.000000
4.000000,-1.000000,581.988037,113.343704,49.606312,21.429558,2.058318,1.000000,2.000000
4.000000,-1.000000,603.592529,192.952515,61.199299,17.992062,0.528254,1.000000,2.000000
4.000000,-1.000000,614.698425,171.507690,62.312763,20.226791,0.534217,1.000000,2.000000
4.000000,-1.000000,865.831665,479.257812,55.008179,18.015068,0.023175,1.000000,2.000000
4.000000,-1.000000,866.802002,552.770386,59.109715,19.026510,0.055762,1.000000,2.000000
4.000000,-1.000000,653.579773,95.200470,60.683578,20.181601,0.498903,1.000000,2.000000
4.000000,-1.000000,863.330444,575.747437,59.008324,17.013824,0.021926,1.000000,2.000000
4.000000,-1.000000,801.051208,502.441956,38.354935,12.996209,0.031308,1.000000,2.000000
4.000000,-1.000000,803.651123,482.452911,42.999828,17.998848,0.004986,1.000000,2.000000
4.000000,-1.000000,799.995300,413.435669,55.835213,21.984022,0.041351,1.000000,2.000000
4.000000,-1.000000,799.937439,390.940979,53.009655,18.015547,0.023861,1.000000,2.000000
4.000000,-1.000000,800.229797,366.434692,61.385910,22.999046,0.021335,1.000000,2.000000
4.000000,-1.000000,801.823853,342.919983,59.027927,20.025820,0.055020,1.000000,2.000000
4.000000,-1.000000,799.468201,318.431305,61.351185,20.995331,0.021386,1.000000,2.000000
4.000000,-1.000000,798.581909,295.925201,50.130440,16.030123,0.064899,1.000000,2.000000
4.000000,-1.000000,800.337646,272.955963,59.033760,21.053829,0.038887,1.000000,2.000000
4.000000,-1.000000,795.314819,248.910355,70.569420,18.991577,0.033534,1.000000,2.000000
4.000000,-1.000000,800.921875,227.438110,57.377651,20.996958,0.022554,1.000000,2.000000
4.000000,-1.000000,802.537231,204.445343,53.998596,18.002922,0.004987,1.000000,2.000000
4.000000,-1.000000,802.191406,181.444641,62.170479,21.024992,0.053357,1.000000,2.000000
4.000000,-1.000000,808.581604,161.480667,50.009857,17.016005,0.024973,1.000000,2.000000
4.000000,-1.000000,820.394531,104.043533,35.012577,10.023525,0.033562,1.000000,2.000000
4.000000,-1.000000,814.957703,120.006729,44.726017,14.986160,0.050360,1.000000,2.000000
4.000000,-1.000000,808.850342,141.474930,57.999355,17.999865,0.004986,1.0000
gitextract_wj9e62ae/
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug.yml
│ │ ├── enhancement.yml
│ │ └── question.yml
│ ├── scripts/
│ │ └── uv_ci_install.sh
│ └── workflows/
│ ├── benchmark.yml
│ ├── ci.yml
│ ├── docker.yml
│ ├── docs.yml
│ ├── label.yml
│ ├── publish.yml
│ ├── stale.yml
│ └── update.yml
├── .gitignore
├── .pre-commit-config.yaml
├── AGENTS.md
├── CITATION.cff
├── CONTRIBUTING.md
├── Dockerfile
├── LICENSE
├── MANIFEST.in
├── README.md
├── assets/
│ ├── DOTA8-MOT/
│ │ └── train/
│ │ ├── P0861__1024__0___1648/
│ │ │ ├── det/
│ │ │ │ ├── det.txt
│ │ │ │ └── det_obb.txt
│ │ │ ├── gt/
│ │ │ │ ├── gt.txt
│ │ │ │ └── gt_obb.txt
│ │ │ └── seqinfo.ini
│ │ ├── P1053__1024__0___90/
│ │ │ ├── det/
│ │ │ │ ├── det.txt
│ │ │ │ └── det_obb.txt
│ │ │ ├── gt/
│ │ │ │ ├── gt.txt
│ │ │ │ └── gt_obb.txt
│ │ │ └── seqinfo.ini
│ │ └── P1142__1024__0___824/
│ │ ├── det/
│ │ │ ├── det.txt
│ │ │ └── det_obb.txt
│ │ ├── gt/
│ │ │ ├── gt.txt
│ │ │ └── gt_obb.txt
│ │ └── seqinfo.ini
│ ├── MOT17-mini/
│ │ └── train/
│ │ ├── MOT17-02-FRCNN/
│ │ │ ├── det/
│ │ │ │ └── det.txt
│ │ │ ├── gt/
│ │ │ │ ├── gt.txt
│ │ │ │ └── gt_temp.txt
│ │ │ └── seqinfo.ini
│ │ └── MOT17-04-FRCNN/
│ │ ├── det/
│ │ │ └── det.txt
│ │ ├── gt/
│ │ │ ├── gt.txt
│ │ │ └── gt_temp.txt
│ │ └── seqinfo.ini
│ └── file_banner.txt
├── boxmot/
│ ├── __init__.py
│ ├── configs/
│ │ ├── datasets/
│ │ │ ├── FastTracker-Benchmark-MOT.yaml
│ │ │ ├── MOT17-ablation.yaml
│ │ │ ├── MOT20-ablation.yaml
│ │ │ ├── SportsMOT.yaml
│ │ │ ├── custom.yaml
│ │ │ ├── dancetrack-ablation.yaml
│ │ │ └── visdrone-ablation.yaml
│ │ └── trackers/
│ │ ├── __init__.py
│ │ ├── boosttrack.yaml
│ │ ├── botsort.yaml
│ │ ├── bytetrack.yaml
│ │ ├── deepocsort.yaml
│ │ ├── hybridsort.yaml
│ │ ├── imprassoc.yaml
│ │ ├── ocsort.yaml
│ │ ├── sfsort.yaml
│ │ └── strongsort.yaml
│ ├── detectors/
│ │ ├── __init__.py
│ │ ├── detector.py
│ │ ├── rtdetr.py
│ │ ├── ultralytics.py
│ │ └── yolox.py
│ ├── engine/
│ │ ├── __init__.py
│ │ ├── cli.py
│ │ ├── evaluator.py
│ │ ├── export.py
│ │ ├── inference.py
│ │ ├── results.py
│ │ ├── tracker.py
│ │ └── tuner.py
│ ├── motion/
│ │ ├── __init__.py
│ │ ├── cmc/
│ │ │ ├── __init__.py
│ │ │ ├── base_cmc.py
│ │ │ ├── ecc.py
│ │ │ ├── orb.py
│ │ │ ├── sift.py
│ │ │ └── sof.py
│ │ └── kalman_filters/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── xyah.py
│ │ ├── xyhr.py
│ │ ├── xysr.py
│ │ └── xywh.py
│ ├── postprocessing/
│ │ ├── __init__.py
│ │ ├── gbrc.py
│ │ └── gsi.py
│ ├── reid/
│ │ ├── __init__.py
│ │ ├── backbones/
│ │ │ ├── __init__.py
│ │ │ ├── clip/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── clip/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── clip.py
│ │ │ │ │ ├── model.py
│ │ │ │ │ └── simple_tokenizer.py
│ │ │ │ ├── config/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── defaults.py
│ │ │ │ │ └── defaults_base.py
│ │ │ │ ├── make_model.py
│ │ │ │ └── make_model_clipreid.py
│ │ │ ├── hacnn.py
│ │ │ ├── lmbn/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── attention.py
│ │ │ │ ├── bnneck.py
│ │ │ │ └── lmbn_n.py
│ │ │ ├── mlfn.py
│ │ │ ├── mobilenetv2.py
│ │ │ ├── osnet.py
│ │ │ ├── osnet_ain.py
│ │ │ └── resnet.py
│ │ ├── backends/
│ │ │ ├── base_backend.py
│ │ │ ├── onnx_backend.py
│ │ │ ├── openvino_backend.py
│ │ │ ├── pytorch_backend.py
│ │ │ ├── tensorrt_backend.py
│ │ │ ├── tflite_backend.py
│ │ │ └── torchscript_backend.py
│ │ ├── core/
│ │ │ ├── __init__.py
│ │ │ ├── auto_backend.py
│ │ │ ├── config.py
│ │ │ ├── factory.py
│ │ │ ├── registry.py
│ │ │ └── reid_handler.py
│ │ └── exporters/
│ │ ├── base_exporter.py
│ │ ├── onnx_exporter.py
│ │ ├── openvino_exporter.py
│ │ ├── tensorrt_exporter.py
│ │ ├── tflite_exporter.py
│ │ └── torchscript_exporter.py
│ ├── trackers/
│ │ ├── __init__.py
│ │ ├── basetracker.py
│ │ ├── boosttrack/
│ │ │ ├── __init__.py
│ │ │ ├── assoc.py
│ │ │ └── boosttrack.py
│ │ ├── botsort/
│ │ │ ├── __init__.py
│ │ │ ├── basetrack.py
│ │ │ ├── botsort.py
│ │ │ ├── botsort_track.py
│ │ │ └── botsort_utils.py
│ │ ├── bytetrack/
│ │ │ ├── __init__.py
│ │ │ ├── basetrack.py
│ │ │ └── bytetrack.py
│ │ ├── deepocsort/
│ │ │ ├── __init__.py
│ │ │ └── deepocsort.py
│ │ ├── detection_layout.py
│ │ ├── hybridsort/
│ │ │ ├── __init__.py
│ │ │ ├── association.py
│ │ │ ├── hybridsort.py
│ │ │ ├── kalmanfilter_score.py
│ │ │ └── kalmanfilter_score_new.py
│ │ ├── ocsort/
│ │ │ ├── __init__.py
│ │ │ └── ocsort.py
│ │ ├── sfsort/
│ │ │ ├── __init__.py
│ │ │ └── sfsort.py
│ │ ├── strongsort/
│ │ │ ├── __init__.py
│ │ │ ├── sort/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── detection.py
│ │ │ │ ├── iou_matching.py
│ │ │ │ ├── linear_assignment.py
│ │ │ │ ├── track.py
│ │ │ │ └── tracker.py
│ │ │ ├── strongsort.py
│ │ │ └── strongsort_kf.py
│ │ └── tracker_zoo.py
│ └── utils/
│ ├── __init__.py
│ ├── analysis/
│ │ ├── mot_ds_kf_tuning.py
│ │ ├── mot_seq_bb_plot.py
│ │ └── ray_results.py
│ ├── association.py
│ ├── checks.py
│ ├── clean.py
│ ├── custom_mot_challenge_2d_box.py
│ ├── dataloaders/
│ │ ├── dataset.py
│ │ └── video.py
│ ├── download.py
│ ├── iou.py
│ ├── matching.py
│ ├── misc.py
│ ├── mot_utils.py
│ ├── ops.py
│ ├── plots.py
│ ├── run_mot_challenge.py
│ ├── timing.py
│ ├── torch_utils.py
│ └── visualization.py
├── docs/
│ ├── modes/
│ │ ├── eval.md
│ │ ├── generate.md
│ │ ├── track.md
│ │ └── tune.md
│ └── trackers/
│ ├── boosttrack.md
│ ├── botsort.md
│ ├── bytetrack.md
│ ├── deepocsort.md
│ ├── ocsort.md
│ ├── sfsort.md
│ └── strongsort.md
├── examples/
│ ├── det/
│ │ ├── efficientdet_boxmot.ipynb
│ │ ├── obb.ipynb
│ │ ├── rfdetr_boxmot.ipynb
│ │ ├── torchvision_boxmot.ipynb
│ │ └── yolox_boxmot.ipynb
│ ├── pose/
│ │ └── torchvision_boxmot.ipynb
│ └── seg/
│ └── torchvision_boxmot.ipynb
├── mkdocs.yml
├── pyproject.toml
└── tests/
├── __init__.py
├── performance/
│ ├── __init__.py
│ ├── test_cmcs_p.py
│ └── test_tracking_p.py
├── test_config.py
└── unit/
├── __init__.py
├── test_base_backend.py
├── test_cmcs_u.py
├── test_cuda.py
├── test_dataloader.py
├── test_exporters_dynamic.py
├── test_inference.py
├── test_kalman_filters_modes.py
├── test_postprocessing.py
├── test_reidbackend.py
├── test_tflite_backend.py
├── test_tflite_exporter.py
├── test_trackers.py
├── test_visualization.py
└── test_yolox_batch.py
SYMBOL INDEX (1226 symbols across 117 files)
FILE: boxmot/detectors/__init__.py
function _check_model (line 13) | def _check_model(name, markers):
function is_ultralytics_model (line 18) | def is_ultralytics_model(yolo_name):
function is_yolox_model (line 22) | def is_yolox_model(yolo_name):
function is_rtdetr_model (line 26) | def is_rtdetr_model(yolo_name):
function default_imgsz (line 30) | def default_imgsz(yolo_name):
function get_yolo_inferer (line 39) | def get_yolo_inferer(yolo_model):
FILE: boxmot/detectors/detector.py
function resolve_image (line 9) | def resolve_image(image: Union[np.ndarray, str]) -> np.ndarray:
function load_weights (line 24) | def load_weights(path: str) -> Any:
class Detector (line 35) | class Detector:
method __init__ (line 36) | def __init__(self, path: str):
method _load_model (line 40) | def _load_model(self, path: str):
method preprocess (line 43) | def preprocess(self, frame: np.ndarray, **kwargs):
method process (line 46) | def process(self, frame, **kwargs):
method postprocess (line 49) | def postprocess(self, boxes, **kwargs):
method __call__ (line 52) | def __call__(self, image: Union[np.ndarray, str], **kwargs):
FILE: boxmot/detectors/rtdetr.py
class RTDetrStrategy (line 16) | class RTDetrStrategy:
method __init__ (line 23) | def __init__(self, model, device, args):
method __call__ (line 43) | def __call__(self, im, augment, visualize, embed):
method warmup (line 76) | def warmup(self, imgsz):
method update_im_paths (line 79) | def update_im_paths(self, predictor: DetectionPredictor):
method preprocess (line 89) | def preprocess(self, im) -> torch.Tensor:
method postprocess (line 95) | def postprocess(self, preds, im, im0s):
FILE: boxmot/detectors/ultralytics.py
class Ultralytics (line 10) | class Ultralytics(Detector):
method __init__ (line 11) | def __init__(self, path: str, device='cpu', conf=0.25, iou=0.45, imgsz...
method _load_model (line 21) | def _load_model(self, path: str):
method preprocess (line 25) | def preprocess(self, image: np.ndarray, **kwargs):
method process (line 31) | def process(self, frame, **kwargs):
method postprocess (line 45) | def postprocess(self, results, **kwargs):
method __call__ (line 57) | def __call__(self, image, **kwargs):
FILE: boxmot/detectors/yolox.py
function _coerce_torch_dtype (line 31) | def _coerce_torch_dtype(dtype, fallback: torch.Tensor) -> torch.dtype:
function _patch_yolox_head_decode_outputs_for_mps (line 45) | def _patch_yolox_head_decode_outputs_for_mps() -> None:
class YoloXStrategy (line 86) | class YoloXStrategy:
method __init__ (line 176) | def __init__(self, model, device, args):
method get_model_from_weigths (line 237) | def get_model_from_weigths(self, model_names, weight_path):
method __call__ (line 244) | def __call__(self, im, augment, visualize, embed):
method warmup (line 259) | def warmup(self, imgsz):
method update_im_paths (line 262) | def update_im_paths(self, predictor: DetectionPredictor):
method yolox_preprocess (line 274) | def yolox_preprocess(
method preprocess (line 305) | def preprocess(self, im) -> torch.Tensor:
method postprocess (line 320) | def postprocess(self, preds, im, im0s):
FILE: boxmot/engine/cli.py
function load_dataset_cfg (line 21) | def load_dataset_cfg(name: str) -> dict:
function ensure_model_extension (line 28) | def ensure_model_extension(model_path):
function core_options (line 50) | def core_options(func):
function parse_classes (line 121) | def parse_classes(classes_input):
function singular_model_options (line 144) | def singular_model_options(func):
function plural_model_options (line 160) | def plural_model_options(func):
function export_options (line 176) | def export_options(func):
function tune_options (line 212) | def tune_options(func):
class CommandFirstGroup (line 229) | class CommandFirstGroup(click.Group):
method format_help (line 232) | def format_help(self, ctx, formatter):
function boxmot (line 303) | def boxmot(ctx):
function track (line 317) | def track(ctx, detector, reid, tracker, yolo_model, reid_model, classes,...
function generate (line 378) | def generate(ctx, detector, reid, yolo_model, reid_model, classes, **kwa...
function eval (line 412) | def eval(ctx, detector, reid, tracker, yolo_model, reid_model, classes, ...
function tune (line 450) | def tune(ctx, detector, reid, tracker, yolo_model, reid_model, classes, ...
function export (line 482) | def export(ctx, **kwargs):
function version (line 494) | def version():
function help (line 502) | def help(ctx):
FILE: boxmot/engine/evaluator.py
function load_dataset_cfg (line 53) | def load_dataset_cfg(name: str) -> dict:
function eval_init (line 60) | def eval_init(args,
function parse_mot_results (line 109) | def parse_mot_results(results: str) -> dict:
function _sequence_img_dir (line 186) | def _sequence_img_dir(seq_dir: Path) -> Path:
function _list_sequence_frames (line 191) | def _list_sequence_frames(img_dir: Path) -> list[Path]:
function _sequence_name_from_img_dir (line 195) | def _sequence_name_from_img_dir(img_dir: Path) -> str:
function _read_image_cv2 (line 199) | def _read_image_cv2(p: Path):
function _collect_seq_info (line 206) | def _collect_seq_info(source: Path) -> tuple[list[Path], dict[str, int]]:
function _autotune_batch_size (line 219) | def _autotune_batch_size(yolo, device: str, imgsz, requested: int) -> int:
function _clear_device_cache (line 261) | def _clear_device_cache(device: str) -> None:
function _count_data_lines (line 272) | def _count_data_lines(path: Path, skip_header: bool = False) -> int:
function _max_frame_id (line 283) | def _max_frame_id(path: Path) -> int:
function generate_dets_embs_batched (line 307) | def generate_dets_embs_batched(args: argparse.Namespace, y: Path, source...
function run_generate_dets_embs (line 609) | def run_generate_dets_embs(args: argparse.Namespace, timing_stats: Optio...
function build_dataset_eval_settings (line 631) | def build_dataset_eval_settings(
function trackeval (line 714) | def trackeval(
function process_sequence (line 785) | def process_sequence(seq_name: str,
function _worker_init (line 874) | def _worker_init():
function run_generate_mot_results (line 878) | def run_generate_mot_results(args: argparse.Namespace, evolve_config: di...
function run_trackeval (line 972) | def run_trackeval(args: argparse.Namespace, verbose: bool = True) -> dict:
function main (line 1118) | def main(args):
FILE: boxmot/engine/export.py
function validate_export_formats (line 15) | def validate_export_formats(include):
function setup_model (line 26) | def setup_model(args):
function create_export_tasks (line 70) | def create_export_tasks(args, model, dummy_input):
function perform_exports (line 119) | def perform_exports(export_tasks):
function main (line 131) | def main(args):
FILE: boxmot/engine/inference.py
function resolve_yolo_model_path (line 37) | def resolve_yolo_model_path(yolo_model_path: Union[str, Path]) -> Path:
class TimedReIDModel (line 47) | class TimedReIDModel:
method __init__ (line 55) | def __init__(self, model, timing_stats: Optional[TimingStats] = None):
method get_features (line 66) | def get_features(self, xyxys: np.ndarray, img: np.ndarray) -> np.ndarray:
method __getattr__ (line 86) | def __getattr__(self, name):
class DetectorReIDPipeline (line 91) | class DetectorReIDPipeline:
method __init__ (line 110) | def __init__(
method _init_reid_models (line 171) | def _init_reid_models(self, reid_model_paths: Union[str, Path, List[Un...
method _setup_yolo_callbacks (line 197) | def _setup_yolo_callbacks(self):
method _setup_custom_model (line 211) | def _setup_custom_model(self, predictor):
method _update_custom_paths (line 236) | def _update_custom_paths(self, predictor):
method _on_frame_start (line 241) | def _on_frame_start(self, predictor):
method add_callback (line 245) | def add_callback(self, event: str, callback: Callable):
method get_reid_features (line 260) | def get_reid_features(
method get_all_reid_features (line 285) | def get_all_reid_features(
method predict (line 305) | def predict(
method predict_batch (line 355) | def predict_batch(
method warmup (line 404) | def warmup(self):
method autotune_batch_size (line 426) | def autotune_batch_size(self, requested_batch_size: int) -> int:
method print_timing_summary (line 481) | def print_timing_summary(self):
method custom_model (line 486) | def custom_model(self):
function extract_detections (line 495) | def extract_detections(result) -> np.ndarray:
function filter_detections (line 521) | def filter_detections(
FILE: boxmot/engine/results.py
class Tracks (line 14) | class Tracks:
method __init__ (line 15) | def __init__(self, frame: np.ndarray, tracks: np.ndarray, get_drawer: ...
method show (line 20) | def show(self) -> bool:
method _default_draw (line 34) | def _default_draw(self, frame, tracks):
class Results (line 52) | class Results:
method __init__ (line 53) | def __init__(self, source: Union[str, int, Path], detector: Any, reid:...
method __iter__ (line 72) | def __iter__(self) -> Iterator[Tracks]:
method __next__ (line 77) | def __next__(self) -> Tracks:
method _log_frame_timings (line 84) | def _log_frame_timings(self, frame_num: int, det_time: float, reid_tim...
method _print_summary (line 102) | def _print_summary(self):
method _get_frames (line 124) | def _get_frames(self):
method _process (line 165) | def _process(self):
method show (line 202) | def show(self):
function track (line 209) | def track(source, detector, reid, tracker, verbose: bool = True) -> Resu...
FILE: boxmot/engine/tracker.py
class VideoWriter (line 19) | class VideoWriter:
method __init__ (line 22) | def __init__(self, output_path, fps=30):
method write (line 29) | def write(self, frame):
method release (line 42) | def release(self):
function on_predict_start (line 49) | def on_predict_start(predictor, args, timing_stats=None):
function plot_trajectories (line 88) | def plot_trajectories(predictor, timing_stats=None, video_writer=None):
function main (line 174) | def main(args):
FILE: boxmot/engine/tuner.py
function load_yaml_config (line 20) | def load_yaml_config(tracking_method: str) -> dict:
function yaml_to_search_space (line 29) | def yaml_to_search_space(config: dict, tune) -> dict:
class Tracker (line 57) | class Tracker:
method __init__ (line 61) | def __init__(self, opt):
method objective_function (line 64) | def objective_function(self, config: dict) -> dict:
function main (line 97) | def main(args):
FILE: boxmot/motion/cmc/__init__.py
function _normalize (line 12) | def _normalize(name: str) -> str:
class _LazyLoader (line 18) | class _LazyLoader:
method __call__ (line 23) | def __call__(self) -> Type[BaseCMC]:
function available_cmc_methods (line 41) | def available_cmc_methods() -> tuple[str, ...]:
function get_cmc_method (line 46) | def get_cmc_method(name: Optional[str]) -> Optional[Type[BaseCMC]]:
function create_cmc (line 66) | def create_cmc(name: Optional[str], /, **kwargs) -> Optional[BaseCMC]:
FILE: boxmot/motion/cmc/base_cmc.py
class BaseCMC (line 15) | class BaseCMC(ABC):
method apply (line 29) | def apply(self, img: np.ndarray, dets: Optional[np.ndarray] = None) ->...
method preprocess (line 32) | def preprocess(self, img: np.ndarray) -> np.ndarray:
method generate_mask (line 65) | def generate_mask(self, img_gray: np.ndarray, dets: Optional[np.ndarra...
FILE: boxmot/motion/cmc/ecc.py
class ECC (line 14) | class ECC(BaseCMC):
method __init__ (line 22) | def __init__(
method apply (line 45) | def apply(self, img: np.ndarray, dets: Optional[np.ndarray] = None) ->...
FILE: boxmot/motion/cmc/orb.py
class ORB (line 14) | class ORB(BaseCMC):
method __init__ (line 19) | def __init__(
method apply (line 46) | def apply(self, img: np.ndarray, dets: Optional[np.ndarray] = None) ->...
method _store_state (line 149) | def _store_state(self, img_p: np.ndarray, keypoints, descriptors, dets...
method _draw_matches (line 156) | def _draw_matches(prev_img: np.ndarray, curr_img: np.ndarray, prev_kp,...
FILE: boxmot/motion/cmc/sift.py
class SIFT (line 14) | class SIFT(BaseCMC):
method __init__ (line 19) | def __init__(
method apply (line 48) | def apply(self, img: np.ndarray, dets: Optional[np.ndarray] = None) ->...
method _store_state (line 142) | def _store_state(self, img_p: np.ndarray, keypoints, descriptors, dets...
class ORBLikeDraw (line 149) | class ORBLikeDraw:
method draw (line 151) | def draw(prev: np.ndarray, curr: np.ndarray, prev_kp, curr_kp, matches...
FILE: boxmot/motion/cmc/sof.py
class SOF (line 14) | class SOF(BaseCMC):
method __init__ (line 23) | def __init__(self, scale: float = 0.15) -> None:
method apply (line 46) | def apply(self, img: np.ndarray, dets: Optional[np.ndarray] = None) ->...
method _reset (line 110) | def _reset(self, frame_gray: np.ndarray) -> None:
FILE: boxmot/motion/kalman_filters/base.py
class BaseKalmanFilter (line 25) | class BaseKalmanFilter:
method __init__ (line 30) | def __init__(
method _default_motion_matrix (line 91) | def _default_motion_matrix(dim_x: int, dim_z: int) -> np.ndarray:
method _resolve_matrix (line 99) | def _resolve_matrix(self, matrix: Optional[np.ndarray], fallback: np.n...
method _reshape_measurement (line 103) | def _reshape_measurement(z: np.ndarray, dim_z: int) -> np.ndarray:
method _wrap_angle (line 112) | def _wrap_angle(angle: Union[np.ndarray, float]) -> Union[np.ndarray, ...
method _align_angle_to_reference (line 119) | def _align_angle_to_reference(cls, angle: float, reference_angle: floa...
method _theta_velocity_index (line 123) | def _theta_velocity_index(dim_x: int) -> int:
method _select_obb_candidate (line 127) | def _select_obb_candidate(
method _enforce_state_geometry (line 156) | def _enforce_state_geometry(
method _prepare_gating_inputs (line 179) | def _prepare_gating_inputs(
method _gating_from_residuals (line 193) | def _gating_from_residuals(
method _zero_theta_velocity (line 210) | def _zero_theta_velocity(self, mean: np.ndarray) -> np.ndarray:
method _damp_theta_velocity (line 218) | def _damp_theta_velocity(
method initiate (line 230) | def initiate(self, measurement: np.ndarray) -> Tuple[np.ndarray, np.nd...
method _get_initial_covariance_std (line 242) | def _get_initial_covariance_std(self, measurement: np.ndarray) -> np.n...
method predict (line 249) | def predict(
method _get_process_noise_std (line 266) | def _get_process_noise_std(self, mean: np.ndarray) -> Tuple[np.ndarray...
method _get_measurement_noise_std (line 273) | def _get_measurement_noise_std(
method project (line 282) | def project(
method multi_predict (line 307) | def multi_predict(
method update (line 325) | def update(
method _get_multi_process_noise_std (line 353) | def _get_multi_process_noise_std(
method predict_state (line 362) | def predict_state(
method project_state (line 389) | def project_state(
method update_state (line 410) | def update_state(
method mahalanobis_distance (line 448) | def mahalanobis_distance(
method gating_distance (line 469) | def gating_distance(
FILE: boxmot/motion/kalman_filters/xyah.py
class KalmanFilterXYAH (line 8) | class KalmanFilterXYAH(BaseKalmanFilter):
method __init__ (line 16) | def __init__(self, ndim: int = 4):
method _get_initial_covariance_std (line 22) | def _get_initial_covariance_std(self, measurement: np.ndarray) -> np.n...
method _get_process_noise_std (line 39) | def _get_process_noise_std(self, mean: np.ndarray) -> Tuple[np.ndarray...
method _get_measurement_noise_std (line 57) | def _get_measurement_noise_std(
method _get_multi_process_noise_std (line 70) | def _get_multi_process_noise_std(
method _enforce_xyah_constraints (line 91) | def _enforce_xyah_constraints(cls, mean: np.ndarray, is_obb: bool) -> ...
method initiate (line 99) | def initiate(self, measurement: np.ndarray) -> Tuple[np.ndarray, np.nd...
method predict (line 107) | def predict(self, mean: np.ndarray, covariance: np.ndarray) -> Tuple[n...
method multi_predict (line 112) | def multi_predict(
method update (line 122) | def update(
method gating_distance (line 149) | def gating_distance(
FILE: boxmot/motion/kalman_filters/xyhr.py
class ConstantNoiseXYHR (line 10) | class ConstantNoiseXYHR:
method __init__ (line 13) | def __init__(self, dim_x: int, dim_z: int = 4):
method get_init_state_cov (line 17) | def get_init_state_cov(self) -> np.ndarray:
method get_r (line 23) | def get_r(self) -> np.ndarray:
method get_q (line 28) | def get_q(self) -> np.ndarray:
class KalmanFilterXYHR (line 36) | class KalmanFilterXYHR(BaseKalmanFilter):
method __init__ (line 47) | def __init__(
method covariance (line 98) | def covariance(self) -> np.ndarray:
method covariance (line 102) | def covariance(self, value: np.ndarray) -> None:
method _reshape_measurement_vector (line 105) | def _reshape_measurement_vector(self, z: np.ndarray) -> np.ndarray:
method _enforce_state_constraints (line 122) | def _enforce_state_constraints(self) -> None:
method _get_initial_covariance_std (line 131) | def _get_initial_covariance_std(self, measurement: np.ndarray) -> np.n...
method _get_process_noise_std (line 135) | def _get_process_noise_std(self, mean: np.ndarray) -> Tuple[np.ndarray...
method _get_measurement_noise_std (line 143) | def _get_measurement_noise_std(
method _get_multi_process_noise_std (line 149) | def _get_multi_process_noise_std(
method initiate (line 160) | def initiate(self, measurement: np.ndarray) -> Tuple[np.ndarray, np.nd...
method predict (line 168) | def predict(
method project (line 193) | def project(
method update (line 211) | def update(self, z: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:
FILE: boxmot/motion/kalman_filters/xysr.py
class KalmanFilterXYSR (line 10) | class KalmanFilterXYSR(BaseKalmanFilter):
method __init__ (line 18) | def __init__(self, dim_x: int = 7, dim_z: int = 4, dim_u: int = 0, max...
method _build_motion_matrix (line 54) | def _build_motion_matrix(dim_x: int, dim_z: int) -> np.ndarray:
method _scale_from_measurement (line 79) | def _scale_from_measurement(z: np.ndarray) -> float:
method _measurement_reference_state (line 90) | def _measurement_reference_state(self) -> Optional[np.ndarray]:
method _align_obb_measurement (line 96) | def _align_obb_measurement(
method _prepare_measurement (line 138) | def _prepare_measurement(
method _enforce_state_constraints (line 154) | def _enforce_state_constraints(self) -> None:
method _affine_components (line 164) | def _affine_components(m: np.ndarray) -> Tuple[float, float, float]:
method _get_initial_covariance_std (line 175) | def _get_initial_covariance_std(self, measurement: np.ndarray) -> np.n...
method _get_process_noise_std (line 205) | def _get_process_noise_std(self, mean: np.ndarray) -> Tuple[np.ndarray...
method _get_measurement_noise_std (line 236) | def _get_measurement_noise_std(self, mean: np.ndarray, confidence: flo...
method _get_multi_process_noise_std (line 259) | def _get_multi_process_noise_std(
method initiate (line 295) | def initiate(self, measurement: np.ndarray) -> Tuple[np.ndarray, np.nd...
method apply_affine_correction (line 311) | def apply_affine_correction(self, m: np.ndarray, t: np.ndarray) -> None:
method predict (line 368) | def predict(
method freeze (line 379) | def freeze(self) -> None:
method unfreeze (line 383) | def unfreeze(self) -> None:
method update (line 440) | def update(
method md_for_measurement (line 478) | def md_for_measurement(self, z: np.ndarray) -> float:
FILE: boxmot/motion/kalman_filters/xywh.py
class KalmanFilterXYWH (line 8) | class KalmanFilterXYWH(BaseKalmanFilter):
method __init__ (line 16) | def __init__(self, ndim: int = 4):
method _get_initial_covariance_std (line 22) | def _get_initial_covariance_std(self, measurement: np.ndarray) -> np.n...
method _get_process_noise_std (line 38) | def _get_process_noise_std(self, mean: np.ndarray) -> Tuple[np.ndarray...
method _get_measurement_noise_std (line 56) | def _get_measurement_noise_std(self, mean: np.ndarray, confidence: flo...
method _get_multi_process_noise_std (line 67) | def _get_multi_process_noise_std(
method _align_obb_measurement (line 88) | def _align_obb_measurement(
method _enforce_xywh_constraints (line 128) | def _enforce_xywh_constraints(cls, mean: np.ndarray, is_obb: bool) -> ...
method initiate (line 136) | def initiate(self, measurement: np.ndarray) -> Tuple[np.ndarray, np.nd...
method predict (line 144) | def predict(self, mean: np.ndarray, covariance: np.ndarray) -> Tuple[n...
method multi_predict (line 149) | def multi_predict(
method update (line 162) | def update(
method gating_distance (line 188) | def gating_distance(
FILE: boxmot/postprocessing/gbrc.py
function linear_interpolation (line 12) | def linear_interpolation(data: np.ndarray, interval: int) -> np.ndarray:
function _fit_predict_1d (line 52) | def _fit_predict_1d(regr: GradientBoostingRegressor, t: np.ndarray, y: n...
function gradient_boosting_smooth (line 58) | def gradient_boosting_smooth(
function process_file (line 99) | def process_file(
function gbrc (line 136) | def gbrc(
function main (line 175) | def main():
FILE: boxmot/postprocessing/gsi.py
function linear_interpolation (line 13) | def linear_interpolation(data: np.ndarray, interval: int) -> np.ndarray:
function gaussian_smooth (line 57) | def gaussian_smooth(data: np.ndarray, tau: float) -> np.ndarray:
function process_file (line 96) | def process_file(file_path: Path, interval: int, tau: float):
function gsi (line 115) | def gsi(mot_results_folder: Path, interval: int = 20, tau: float = 10):
function main (line 145) | def main():
FILE: boxmot/reid/backbones/clip/clip/clip.py
function _download (line 39) | def _download(url: str, root: str = os.path.expanduser("~/.cache/clip")):
function _transform (line 86) | def _transform(n_px):
function available_models (line 101) | def available_models() -> List[str]:
function load (line 106) | def load(
function tokenize (line 223) | def tokenize(
FILE: boxmot/reid/backbones/clip/clip/model.py
class Bottleneck (line 12) | class Bottleneck(nn.Module):
method __init__ (line 15) | def __init__(self, inplanes, planes, stride=1):
method forward (line 42) | def forward(self, x: torch.Tensor):
class AttentionPool2d (line 58) | class AttentionPool2d(nn.Module):
method __init__ (line 59) | def __init__(self, spacial_dim: int, embed_dim: int, num_heads: int, o...
method forward (line 70) | def forward(self, x):
class ModifiedResNet (line 100) | class ModifiedResNet(nn.Module):
method __init__ (line 108) | def __init__(self, layers, output_dim, heads, input_resolution=224, wi...
method _make_layer (line 136) | def _make_layer(self, planes, blocks, stride=1):
method forward (line 145) | def forward(self, x):
class LayerNorm (line 167) | class LayerNorm(nn.LayerNorm):
method forward (line 170) | def forward(self, x: torch.Tensor):
class QuickGELU (line 179) | class QuickGELU(nn.Module):
method forward (line 180) | def forward(self, x: torch.Tensor):
class ResidualAttentionBlock (line 184) | class ResidualAttentionBlock(nn.Module):
method __init__ (line 185) | def __init__(self, d_model: int, n_head: int, attn_mask: torch.Tensor ...
method attention (line 198) | def attention(self, x: torch.Tensor):
method forward (line 206) | def forward(self, x: torch.Tensor):
class Transformer (line 212) | class Transformer(nn.Module):
method __init__ (line 213) | def __init__(
method forward (line 223) | def forward(self, x: torch.Tensor):
class VisionTransformer (line 227) | class VisionTransformer(nn.Module):
method __init__ (line 228) | def __init__(
method forward (line 263) | def forward(self, x: torch.Tensor, cv_emb=None):
class CLIP (line 296) | class CLIP(nn.Module):
method __init__ (line 297) | def __init__(self,
method initialize_parameters (line 359) | def initialize_parameters(self):
method build_attention_mask (line 395) | def build_attention_mask(self):
method dtype (line 404) | def dtype(self):
method encode_image (line 407) | def encode_image(self, image):
method encode_text (line 410) | def encode_text(self, text):
method forward (line 423) | def forward(self, image, text):
function convert_weights (line 440) | def convert_weights(model: nn.Module):
function build_model (line 469) | def build_model(
function resize_pos_embed (line 565) | def resize_pos_embed(posemb, posemb_new, hight, width):
FILE: boxmot/reid/backbones/clip/clip/simple_tokenizer.py
function default_bpe (line 14) | def default_bpe():
function bytes_to_unicode (line 19) | def bytes_to_unicode():
function get_pairs (line 45) | def get_pairs(word):
function basic_clean (line 57) | def basic_clean(text):
function whitespace_clean (line 63) | def whitespace_clean(text):
class SimpleTokenizer (line 69) | class SimpleTokenizer(object):
method __init__ (line 70) | def __init__(self, bpe_path: str = default_bpe()):
method bpe (line 93) | def bpe(self, token):
method encode (line 135) | def encode(self, text):
method decode (line 145) | def decode(self, tokens):
FILE: boxmot/reid/backbones/clip/make_model.py
function weights_init_kaiming (line 11) | def weights_init_kaiming(m):
function weights_init_classifier (line 27) | def weights_init_classifier(m):
class build_transformer (line 35) | class build_transformer(nn.Module):
method __init__ (line 36) | def __init__(self, num_classes, camera_num, view_num, cfg):
method forward (line 90) | def forward(self, x, label=None, cam_label=None, view_label=None):
method load_param (line 141) | def load_param(self, trained_path):
method load_param_finetune (line 147) | def load_param_finetune(self, model_path):
function make_model (line 154) | def make_model(cfg, num_class, camera_num, view_num):
function load_clip_to_cpu (line 162) | def load_clip_to_cpu(backbone_name, h_resolution, w_resolution, vision_s...
FILE: boxmot/reid/backbones/clip/make_model_clipreid.py
function weights_init_kaiming (line 11) | def weights_init_kaiming(m):
function weights_init_classifier (line 27) | def weights_init_classifier(m):
class TextEncoder (line 35) | class TextEncoder(nn.Module):
method __init__ (line 36) | def __init__(self, clip_model):
method forward (line 44) | def forward(self, prompts, tokenized_prompts):
class build_transformer (line 57) | class build_transformer(nn.Module):
method __init__ (line 58) | def __init__(self, num_classes, camera_num, view_num, cfg):
method forward (line 120) | def forward(
method load_param (line 190) | def load_param(self, trained_path):
method load_param_finetune (line 196) | def load_param_finetune(self, model_path):
function make_model (line 203) | def make_model(cfg, num_class, camera_num, view_num):
function load_clip_to_cpu (line 211) | def load_clip_to_cpu(backbone_name, h_resolution, w_resolution, vision_s...
class PromptLearner (line 230) | class PromptLearner(nn.Module):
method __init__ (line 231) | def __init__(self, num_class, dataset_name, dtype, token_embedding):
method forward (line 261) | def forward(self, label):
FILE: boxmot/reid/backbones/hacnn.py
class ConvBlock (line 12) | class ConvBlock(nn.Module):
method __init__ (line 25) | def __init__(self, in_c, out_c, k, s=1, p=0):
method forward (line 30) | def forward(self, x):
class InceptionA (line 34) | class InceptionA(nn.Module):
method __init__ (line 35) | def __init__(self, in_channels, out_channels):
method forward (line 56) | def forward(self, x):
class InceptionB (line 65) | class InceptionB(nn.Module):
method __init__ (line 66) | def __init__(self, in_channels, out_channels):
method forward (line 84) | def forward(self, x):
class SpatialAttn (line 92) | class SpatialAttn(nn.Module):
method __init__ (line 95) | def __init__(self):
method forward (line 100) | def forward(self, x):
class ChannelAttn (line 114) | class ChannelAttn(nn.Module):
method __init__ (line 117) | def __init__(self, in_channels, reduction_rate=16):
method forward (line 123) | def forward(self, x):
class SoftAttn (line 132) | class SoftAttn(nn.Module):
method __init__ (line 140) | def __init__(self, in_channels):
method forward (line 146) | def forward(self, x):
class HardAttn (line 154) | class HardAttn(nn.Module):
method __init__ (line 157) | def __init__(self, in_channels):
method init_params (line 162) | def init_params(self):
method forward (line 168) | def forward(self, x):
class HarmAttn (line 177) | class HarmAttn(nn.Module):
method __init__ (line 180) | def __init__(self, in_channels):
method forward (line 185) | def forward(self, x):
class HACNN (line 191) | class HACNN(nn.Module):
method __init__ (line 207) | def __init__(
method init_scale_factors (line 268) | def init_scale_factors(self):
method stn (line 276) | def stn(self, x, theta):
method transform_theta (line 286) | def transform_theta(self, theta_i, region_idx):
method forward (line 296) | def forward(self, x):
FILE: boxmot/reid/backbones/lmbn/attention.py
class BatchRandomErasing (line 24) | class BatchRandomErasing(nn.Module):
method __init__ (line 25) | def __init__(
method forward (line 36) | def forward(self, img):
class BatchDrop (line 64) | class BatchDrop(nn.Module):
method __init__ (line 71) | def __init__(self, h_ratio, w_ratio):
method forward (line 76) | def forward(self, x):
class BatchDropTop (line 89) | class BatchDropTop(nn.Module):
method __init__ (line 97) | def __init__(self, h_ratio):
method forward (line 101) | def forward(self, x, visdrop=False):
class BatchFeatureErase_Top (line 128) | class BatchFeatureErase_Top(nn.Module):
method __init__ (line 136) | def __init__(
method forward (line 151) | def forward(self, x, drop_top=True, bottleneck_features=True, visdrop=...
class SE_Module (line 166) | class SE_Module(Module):
method __init__ (line 167) | def __init__(self, channels, reduction=4):
method forward (line 174) | def forward(self, x):
class PAM_Module (line 183) | class PAM_Module(Module):
method __init__ (line 188) | def __init__(self, in_dim):
method forward (line 203) | def forward(self, x):
class CAM_Module (line 227) | class CAM_Module(Module):
method __init__ (line 230) | def __init__(self, in_dim):
method forward (line 237) | def forward(self, x):
class Dual_Module (line 261) | class Dual_Module(Module):
method __init__ (line 272) | def __init__(self, in_dim):
method forward (line 278) | def forward(self, x):
FILE: boxmot/reid/backbones/lmbn/bnneck.py
class BNNeck (line 6) | class BNNeck(nn.Module):
method __init__ (line 7) | def __init__(self, input_dim, class_num, return_f=False):
method forward (line 16) | def forward(self, x):
method weights_init_kaiming (line 27) | def weights_init_kaiming(self, m):
method weights_init_classifier (line 41) | def weights_init_classifier(self, m):
class BNNeck3 (line 49) | class BNNeck3(nn.Module):
method __init__ (line 50) | def __init__(self, input_dim, class_num, feat_dim, return_f=False):
method forward (line 64) | def forward(self, x):
method weights_init_kaiming (line 77) | def weights_init_kaiming(self, m):
method weights_init_classifier (line 91) | def weights_init_classifier(self, m):
class ClassBlock (line 103) | class ClassBlock(nn.Module):
method __init__ (line 104) | def __init__(
method forward (line 139) | def forward(self, x):
method weights_init_kaiming (line 149) | def weights_init_kaiming(self, m):
method weights_init_classifier (line 162) | def weights_init_classifier(self, m):
FILE: boxmot/reid/backbones/lmbn/lmbn_n.py
class LMBN_n (line 13) | class LMBN_n(nn.Module):
method __init__ (line 14) | def __init__(self, num_classes, loss, pretrained, use_gpu):
method forward (line 71) | def forward(self, x):
method weights_init_kaiming (line 144) | def weights_init_kaiming(self, m):
FILE: boxmot/reid/backbones/mlfn.py
class MLFNBlock (line 18) | class MLFNBlock(nn.Module):
method __init__ (line 19) | def __init__(self, in_channels, out_channels, stride, fsm_channels, gr...
method forward (line 61) | def forward(self, x):
class MLFN (line 95) | class MLFN(nn.Module):
method __init__ (line 106) | def __init__(
method init_params (line 167) | def init_params(self):
method forward (line 181) | def forward(self, x):
function init_pretrained_weights (line 213) | def init_pretrained_weights(model, model_url):
function mlfn (line 229) | def mlfn(num_classes, loss="softmax", pretrained=True, **kwargs):
FILE: boxmot/reid/backbones/mobilenetv2.py
class ConvBlock (line 19) | class ConvBlock(nn.Module):
method __init__ (line 34) | def __init__(self, in_c, out_c, k, s=1, p=0, g=1):
method forward (line 39) | def forward(self, x):
class Bottleneck (line 43) | class Bottleneck(nn.Module):
method __init__ (line 44) | def __init__(self, in_channels, out_channels, expansion_factor, stride...
method forward (line 57) | def forward(self, x):
class MobileNetV2 (line 67) | class MobileNetV2(nn.Module):
method __init__ (line 79) | def __init__(
method _make_layer (line 110) | def _make_layer(self, block, t, c, n, s):
method _construct_fc_layer (line 122) | def _construct_fc_layer(self, fc_dims, input_dim, dropout_p=None):
method _init_params (line 151) | def _init_params(self):
method featuremaps (line 168) | def featuremaps(self, x):
method forward (line 180) | def forward(self, x):
function init_pretrained_weights (line 201) | def init_pretrained_weights(model, model_url):
function mobilenetv2_x1_0 (line 217) | def mobilenetv2_x1_0(num_classes, loss, pretrained=True, **kwargs):
function mobilenetv2_x1_4 (line 233) | def mobilenetv2_x1_4(num_classes, loss, pretrained=True, **kwargs):
FILE: boxmot/reid/backbones/osnet.py
class ConvLayer (line 25) | class ConvLayer(nn.Module):
method __init__ (line 28) | def __init__(
method forward (line 54) | def forward(self, x):
class Conv1x1 (line 61) | class Conv1x1(nn.Module):
method __init__ (line 64) | def __init__(self, in_channels, out_channels, stride=1, groups=1):
method forward (line 78) | def forward(self, x):
class Conv1x1Linear (line 85) | class Conv1x1Linear(nn.Module):
method __init__ (line 88) | def __init__(self, in_channels, out_channels, stride=1):
method forward (line 95) | def forward(self, x):
class Conv3x3 (line 101) | class Conv3x3(nn.Module):
method __init__ (line 104) | def __init__(self, in_channels, out_channels, stride=1, groups=1):
method forward (line 118) | def forward(self, x):
class LightConv3x3 (line 125) | class LightConv3x3(nn.Module):
method __init__ (line 131) | def __init__(self, in_channels, out_channels):
method forward (line 148) | def forward(self, x):
class ChannelGate (line 159) | class ChannelGate(nn.Module):
method __init__ (line 162) | def __init__(
method forward (line 195) | def forward(self, x):
class OSBlock (line 210) | class OSBlock(nn.Module):
method __init__ (line 213) | def __init__(
method forward (line 244) | def forward(self, x):
class OSNet (line 264) | class OSNet(nn.Module):
method __init__ (line 273) | def __init__(
method _make_layer (line 319) | def _make_layer(
method _construct_fc_layer (line 337) | def _construct_fc_layer(self, fc_dims, input_dim, dropout_p=None):
method _init_params (line 358) | def _init_params(self):
method featuremaps (line 378) | def featuremaps(self, x):
method forward (line 387) | def forward(self, x, return_featuremaps=False):
function init_pretrained_weights (line 406) | def init_pretrained_weights(model, key=""):
function osnet_x1_0 (line 486) | def osnet_x1_0(num_classes=1000, pretrained=True, loss="softmax", **kwar...
function osnet_x0_75 (line 501) | def osnet_x0_75(num_classes=1000, pretrained=True, loss="softmax", **kwa...
function osnet_x0_5 (line 516) | def osnet_x0_5(num_classes=1000, pretrained=True, loss="softmax", **kwar...
function osnet_x0_25 (line 531) | def osnet_x0_25(num_classes=1000, pretrained=True, loss="softmax", **kwa...
function osnet_ibn_x1_0 (line 546) | def osnet_ibn_x1_0(num_classes=1000, pretrained=True, loss="softmax", **...
FILE: boxmot/reid/backbones/osnet_ain.py
class ConvLayer (line 24) | class ConvLayer(nn.Module):
method __init__ (line 27) | def __init__(
method forward (line 53) | def forward(self, x):
class Conv1x1 (line 59) | class Conv1x1(nn.Module):
method __init__ (line 62) | def __init__(self, in_channels, out_channels, stride=1, groups=1):
method forward (line 76) | def forward(self, x):
class Conv1x1Linear (line 82) | class Conv1x1Linear(nn.Module):
method __init__ (line 85) | def __init__(self, in_channels, out_channels, stride=1, bn=True):
method forward (line 94) | def forward(self, x):
class Conv3x3 (line 101) | class Conv3x3(nn.Module):
method __init__ (line 104) | def __init__(self, in_channels, out_channels, stride=1, groups=1):
method forward (line 118) | def forward(self, x):
class LightConv3x3 (line 124) | class LightConv3x3(nn.Module):
method __init__ (line 130) | def __init__(self, in_channels, out_channels):
method forward (line 147) | def forward(self, x):
class LightConvStream (line 154) | class LightConvStream(nn.Module):
method __init__ (line 157) | def __init__(self, in_channels, out_channels, depth):
method forward (line 168) | def forward(self, x):
class ChannelGate (line 175) | class ChannelGate(nn.Module):
method __init__ (line 178) | def __init__(
method forward (line 211) | def forward(self, x):
class OSBlock (line 226) | class OSBlock(nn.Module):
method __init__ (line 229) | def __init__(self, in_channels, out_channels, reduction=4, T=4, **kwar...
method forward (line 245) | def forward(self, x):
class OSBlockINin (line 259) | class OSBlockINin(nn.Module):
method __init__ (line 262) | def __init__(self, in_channels, out_channels, reduction=4, T=4, **kwar...
method forward (line 279) | def forward(self, x):
class OSNet (line 297) | class OSNet(nn.Module):
method __init__ (line 306) | def __init__(
method _make_layer (line 347) | def _make_layer(self, blocks, layer, in_channels, out_channels):
method _construct_fc_layer (line 354) | def _construct_fc_layer(self, fc_dims, input_dim, dropout_p=None):
method _init_params (line 375) | def _init_params(self):
method featuremaps (line 399) | def featuremaps(self, x):
method forward (line 410) | def forward(self, x, return_featuremaps=False):
function init_pretrained_weights (line 429) | def init_pretrained_weights(model, key=""):
function osnet_ain_x1_0 (line 509) | def osnet_ain_x1_0(num_classes=1000, pretrained=True, loss="softmax", **...
function osnet_ain_x0_75 (line 528) | def osnet_ain_x0_75(num_classes=1000, pretrained=True, loss="softmax", *...
function osnet_ain_x0_5 (line 547) | def osnet_ain_x0_5(num_classes=1000, pretrained=True, loss="softmax", **...
function osnet_ain_x0_25 (line 566) | def osnet_ain_x0_25(num_classes=1000, pretrained=True, loss="softmax", *...
FILE: boxmot/reid/backbones/resnet.py
function conv3x3 (line 33) | def conv3x3(in_planes, out_planes, stride=1, groups=1, dilation=1):
function conv1x1 (line 47) | def conv1x1(in_planes, out_planes, stride=1):
class BasicBlock (line 52) | class BasicBlock(nn.Module):
method __init__ (line 55) | def __init__(
method forward (line 82) | def forward(self, x):
class Bottleneck (line 101) | class Bottleneck(nn.Module):
method __init__ (line 104) | def __init__(
method forward (line 130) | def forward(self, x):
class ResNet (line 153) | class ResNet(nn.Module):
method __init__ (line 171) | def __init__(
method _make_layer (line 242) | def _make_layer(self, block, planes, blocks, stride=1, dilate=False):
method _construct_fc_layer (line 283) | def _construct_fc_layer(self, fc_dims, input_dim, dropout_p=None):
method _init_params (line 312) | def _init_params(self):
method featuremaps (line 329) | def featuremaps(self, x):
method forward (line 340) | def forward(self, x):
function init_pretrained_weights (line 361) | def init_pretrained_weights(model, model_url):
function resnet18 (line 380) | def resnet18(num_classes, loss="softmax", pretrained=True, **kwargs):
function resnet34 (line 396) | def resnet34(num_classes, loss="softmax", pretrained=True, **kwargs):
function resnet50 (line 412) | def resnet50(num_classes, loss="softmax", pretrained=True, **kwargs):
function resnet101 (line 428) | def resnet101(num_classes, loss="softmax", pretrained=True, **kwargs):
function resnet152 (line 444) | def resnet152(num_classes, loss="softmax", pretrained=True, **kwargs):
function resnext50_32x4d (line 463) | def resnext50_32x4d(num_classes, loss="softmax", pretrained=True, **kwar...
function resnext101_32x8d (line 481) | def resnext101_32x8d(num_classes, loss="softmax", pretrained=True, **kwa...
function resnet50_fc512 (line 504) | def resnet50_fc512(num_classes, loss="softmax", pretrained=True, **kwargs):
FILE: boxmot/reid/backends/base_backend.py
class BaseModelBackend (line 17) | class BaseModelBackend:
method __init__ (line 18) | def __init__(self, weights, device, half):
method _obb_to_xyxy (line 60) | def _obb_to_xyxy(box: np.ndarray) -> np.ndarray:
method _order_corners (line 71) | def _order_corners(corners: np.ndarray) -> np.ndarray:
method _crop_obb (line 84) | def _crop_obb(box: np.ndarray, img: np.ndarray) -> np.ndarray:
method _is_obb_box (line 107) | def _is_obb_box(box: np.ndarray) -> bool:
method _boxes_to_xyxy (line 112) | def _boxes_to_xyxy(cls, boxes: np.ndarray) -> np.ndarray:
method get_crops (line 135) | def get_crops(self, xyxys, img):
method get_features (line 191) | def get_features(self, xyxys, img):
method warmup (line 202) | def warmup(self, imgsz=[(256, 128, 3)]):
method to_numpy (line 212) | def to_numpy(self, x):
method inference_preprocess (line 215) | def inference_preprocess(self, x):
method inference_postprocess (line 231) | def inference_postprocess(self, features):
method forward (line 240) | def forward(self, im_batch):
method load_model (line 244) | def load_model(self, w):
method download_model (line 248) | def download_model(self, w):
FILE: boxmot/reid/backends/onnx_backend.py
class ONNXBackend (line 4) | class ONNXBackend(BaseModelBackend):
method __init__ (line 6) | def __init__(self, weights, device, half):
method load_model (line 11) | def load_model(self, w):
method forward (line 30) | def forward(self, im_batch):
FILE: boxmot/reid/backends/openvino_backend.py
class OpenVinoBackend (line 7) | class OpenVinoBackend(BaseModelBackend):
method __init__ (line 9) | def __init__(self, weights, device, half):
method load_model (line 14) | def load_model(self, w):
method forward (line 45) | def forward(self, im_batch):
FILE: boxmot/reid/backends/pytorch_backend.py
class PyTorchBackend (line 5) | class PyTorchBackend(BaseModelBackend):
method __init__ (line 7) | def __init__(self, weights, device, half):
method load_model (line 12) | def load_model(self, w):
method forward (line 19) | def forward(self, im_batch):
FILE: boxmot/reid/backends/tensorrt_backend.py
class TensorRTBackend (line 10) | class TensorRTBackend(BaseModelBackend):
method __init__ (line 11) | def __init__(self, weights, device, half):
method load_model (line 21) | def load_model(self, w):
method forward (line 102) | def forward(self, im_batch):
FILE: boxmot/reid/backends/tflite_backend.py
class TFLiteBackend (line 12) | class TFLiteBackend(BaseModelBackend):
method __init__ (line 23) | def __init__(self, weights: Path, device: str, half: bool):
method _get_interpreter_class (line 38) | def _get_interpreter_class(self) -> type[Any]:
method load_model (line 47) | def load_model(self, w):
method forward (line 63) | def forward(self, im_batch: torch.Tensor) -> np.ndarray:
FILE: boxmot/reid/backends/torchscript_backend.py
class TorchscriptBackend (line 7) | class TorchscriptBackend(BaseModelBackend):
method __init__ (line 9) | def __init__(self, weights, device, half):
method load_model (line 14) | def load_model(self, w):
method forward (line 20) | def forward(self, im_batch):
FILE: boxmot/reid/core/__init__.py
function export_formats (line 6) | def export_formats():
FILE: boxmot/reid/core/auto_backend.py
class ReidAutoBackend (line 18) | class ReidAutoBackend:
method __init__ (line 19) | def __init__(
method get_backend (line 49) | def get_backend(
method check_suffix (line 88) | def check_suffix(
method model_type (line 113) | def model_type(self, p: Path) -> Tuple[bool, ...]:
FILE: boxmot/reid/core/registry.py
class ReIDModelRegistry (line 11) | class ReIDModelRegistry:
method show_downloadable_models (line 15) | def show_downloadable_models():
method get_model_name (line 20) | def get_model_name(model):
method get_model_url (line 27) | def get_model_url(model):
method load_pretrained_weights (line 31) | def load_pretrained_weights(model, weight_path):
method show_available_models (line 75) | def show_available_models():
method get_nr_classes (line 80) | def get_nr_classes(weights):
method build_model (line 86) | def build_model(name, weights, num_classes, loss="softmax", pretrained...
FILE: boxmot/reid/core/reid_handler.py
class ReID (line 9) | class ReID:
method __init__ (line 10) | def __init__(self, weights: Union[str, Path], device='cpu', half=False):
method __call__ (line 20) | def __call__(self, frame: np.ndarray, dets: np.ndarray) -> np.ndarray:
FILE: boxmot/reid/exporters/base_exporter.py
function export_decorator (line 7) | def export_decorator(export_func):
class BaseExporter (line 37) | class BaseExporter:
method __init__ (line 38) | def __init__(self, model, im, file, optimize=True, dynamic=True, half=...
method file_size (line 50) | def file_size(path):
method export (line 59) | def export(self):
method __init_subclass__ (line 62) | def __init_subclass__(cls, **kwargs):
FILE: boxmot/reid/exporters/onnx_exporter.py
class ONNXExporter (line 9) | class ONNXExporter(BaseExporter):
method __init__ (line 12) | def __init__(self, model, im, file, opset=None, dynamic=False, half=Fa...
method export (line 17) | def export(self):
method simplify_model (line 102) | def simplify_model(self, model_onnx):
method _best_onnx_opset (line 115) | def _best_onnx_opset(self, onnx, cuda: bool = False) -> int:
method _infer_output_names (line 149) | def _infer_output_names(self):
method _build_dynamic_axes (line 162) | def _build_dynamic_axes(self, output_names):
method _try_fp16_convert_cpu (line 187) | def _try_fp16_convert_cpu(self, model_onnx):
FILE: boxmot/reid/exporters/openvino_exporter.py
class OpenVINOExporter (line 6) | class OpenVINOExporter(BaseExporter):
method export (line 9) | def export(self) -> str:
FILE: boxmot/reid/exporters/tensorrt_exporter.py
class EngineExporter (line 6) | class EngineExporter(BaseExporter):
method export (line 10) | def export(self):
method export_onnx (line 79) | def export_onnx(self):
FILE: boxmot/reid/exporters/tflite_exporter.py
class TFLiteExporter (line 13) | class TFLiteExporter(BaseExporter):
method __init__ (line 16) | def __init__(self, model, im, file, opset=None, dynamic=False, half=Fa...
method export (line 20) | def export(self) -> str:
method _ensure_onnx_file (line 48) | def _ensure_onnx_file(self) -> Path:
method _build_convert_kwargs (line 68) | def _build_convert_kwargs(self, onnx2tf_module, onnx_path: Path, outpu...
method _set_if_supported (line 86) | def _set_if_supported(kwargs: dict, sig, name: str, value) -> None:
method _select_tflite_artifact (line 90) | def _select_tflite_artifact(self, export_dir: Path) -> Optional[Path]:
method _matches_any_token (line 109) | def _matches_any_token(path: Path, tokens: Tuple[str, ...]) -> bool:
FILE: boxmot/reid/exporters/torchscript_exporter.py
class TorchScriptExporter (line 6) | class TorchScriptExporter(BaseExporter):
method export (line 7) | def export(self):
FILE: boxmot/trackers/basetracker.py
class BaseTracker (line 15) | class BaseTracker(VisualizationMixin):
method __init__ (line 18) | def __init__(
method update (line 118) | def update(
method get_class_dets_n_embs (line 137) | def get_class_dets_n_embs(self, dets, embs, cls_id):
method _set_detection_mode (line 168) | def _set_detection_mode(self, is_obb: bool) -> None:
method empty_detections (line 181) | def empty_detections(self, dtype=np.float32) -> np.ndarray:
method empty_output (line 184) | def empty_output(self, dtype=float) -> np.ndarray:
method setup_decorator (line 188) | def setup_decorator(method):
method per_class_decorator (line 234) | def per_class_decorator(update_method):
method check_inputs (line 287) | def check_inputs(self, dets, img, embs=None):
method reset (line 305) | def reset(self):
FILE: boxmot/trackers/boosttrack/assoc.py
function shape_similarity (line 9) | def shape_similarity(detects: np.ndarray, tracks: np.ndarray, s_sim_corr...
function shape_similarity_v1 (line 15) | def shape_similarity_v1(detects: np.ndarray, tracks: np.ndarray) -> np.n...
function shape_similarity_v2 (line 26) | def shape_similarity_v2(detects: np.ndarray, tracks: np.ndarray) -> np.n...
function MhDist_similarity (line 37) | def MhDist_similarity(mahalanobis_distance: np.ndarray, softmax_temp: fl...
function iou_batch (line 50) | def iou_batch(bboxes1, bboxes2):
function soft_biou_batch (line 69) | def soft_biou_batch(bboxes1, bboxes2):
function match (line 106) | def match(cost_matrix: np.ndarray, threshold: float) -> np.ndarray:
function linear_assignment (line 117) | def linear_assignment(
function associate (line 156) | def associate(
FILE: boxmot/trackers/boosttrack/boosttrack.py
function convert_bbox_to_z (line 15) | def convert_bbox_to_z(bbox):
function convert_x_to_bbox (line 27) | def convert_x_to_bbox(x, score=None):
class KalmanBoxTracker (line 41) | class KalmanBoxTracker:
method __init__ (line 48) | def __init__(self, det, max_obs, emb: Optional[np.ndarray] = None):
method get_confidence (line 62) | def get_confidence(self, coef: float = 0.9) -> float:
method update (line 68) | def update(self, det: np.ndarray):
method camera_update (line 77) | def camera_update(self, transform: np.ndarray):
method predict (line 101) | def predict(self):
method get_state (line 109) | def get_state(self):
method update_emb (line 112) | def update_emb(self, emb, alpha=0.9):
method get_emb (line 116) | def get_emb(self):
class BoostTrack (line 120) | class BoostTrack(BaseTracker):
method __init__ (line 163) | def __init__(
method update (line 230) | def update(self, dets: np.ndarray, img: np.ndarray, embs: Optional[np....
method filter_outputs (line 345) | def filter_outputs(self, outputs: np.ndarray) -> np.ndarray:
method get_iou_matrix (line 355) | def get_iou_matrix(self, detections: np.ndarray, buffered: bool = Fals...
method get_mh_dist_matrix (line 363) | def get_mh_dist_matrix(self, detections: np.ndarray, n_dims: int = 4) ...
method duo_confidence_boost (line 379) | def duo_confidence_boost(self, detections: np.ndarray) -> np.ndarray:
method dlo_confidence_boost (line 421) | def dlo_confidence_boost(self, detections: np.ndarray) -> np.ndarray:
FILE: boxmot/trackers/botsort/basetrack.py
class TrackState (line 6) | class TrackState:
class BaseTrack (line 25) | class BaseTrack:
method end_frame (line 62) | def end_frame(self) -> int:
method next_id (line 72) | def next_id() -> int:
method activate (line 82) | def activate(self, *args):
method predict (line 94) | def predict(self):
method update (line 103) | def update(self, *args, **kwargs):
method mark_lost (line 116) | def mark_lost(self):
method mark_long_lost (line 122) | def mark_long_lost(self):
method mark_removed (line 128) | def mark_removed(self):
method clear_count (line 135) | def clear_count():
FILE: boxmot/trackers/botsort/botsort.py
class BotSort (line 21) | class BotSort(BaseTracker):
method __init__ (line 64) | def __init__(
method _kalman_ndim (line 112) | def _kalman_ndim(self) -> int:
method _detection_boxes (line 115) | def _detection_boxes(self, dets: np.ndarray) -> np.ndarray:
method update (line 120) | def update(
method _split_detections (line 195) | def _split_detections(self, dets, embs):
method _create_detections (line 207) | def _create_detections(self, dets_first, features_high):
method _separate_tracks (line 220) | def _separate_tracks(self):
method _first_association (line 229) | def _first_association(
method _second_association (line 280) | def _second_association(
method _handle_unconfirmed_tracks (line 323) | def _handle_unconfirmed_tracks(
method _initialize_new_tracks (line 372) | def _initialize_new_tracks(self, u_detections, activated_stracks, dete...
method _update_tracks (line 381) | def _update_tracks(
method _update_track_states (line 411) | def _update_track_states(self, removed_stracks):
method _prepare_output (line 417) | def _prepare_output(
FILE: boxmot/trackers/botsort/botsort_track.py
class STrack (line 11) | class STrack(BaseTrack):
method __init__ (line 15) | def __init__(self, det, feat=None, feat_history=50, max_obs=50, is_obb...
method _init_from_aabb_detection (line 45) | def _init_from_aabb_detection(self, det: np.ndarray) -> None:
method _init_from_obb_detection (line 51) | def _init_from_obb_detection(self, det: np.ndarray) -> None:
method update_features (line 57) | def update_features(self, feat):
method update_cls (line 68) | def update_cls(self, cls, conf):
method predict (line 83) | def predict(self):
method multi_predict (line 96) | def multi_predict(stracks):
method multi_gmc (line 117) | def multi_gmc(stracks, H=np.eye(2, 3)):
method activate (line 133) | def activate(self, kalman_filter, frame_id):
method re_activate (line 145) | def re_activate(self, new_track, frame_id, new_id=False):
method update (line 163) | def update(self, new_track, frame_id):
method _wrap_pi_periodic (line 186) | def _wrap_pi_periodic(delta: float) -> float:
method _state_obb_for_plot (line 189) | def _state_obb_for_plot(self) -> np.ndarray:
method xyxy (line 212) | def xyxy(self):
method xywha (line 225) | def xywha(self):
FILE: boxmot/trackers/botsort/botsort_utils.py
function joint_stracks (line 10) | def joint_stracks(tlista: List["STrack"], tlistb: List["STrack"]) -> Lis...
function sub_stracks (line 34) | def sub_stracks(tlista: List["STrack"], tlistb: List["STrack"]) -> List[...
function remove_duplicate_stracks (line 53) | def remove_duplicate_stracks(
FILE: boxmot/trackers/bytetrack/basetrack.py
class TrackState (line 8) | class TrackState(object):
class BaseTrack (line 15) | class BaseTrack(object):
method end_frame (line 34) | def end_frame(self):
method next_id (line 38) | def next_id():
method activate (line 42) | def activate(self, *args):
method predict (line 45) | def predict(self):
method update (line 48) | def update(self, *args, **kwargs):
method mark_lost (line 51) | def mark_lost(self):
method mark_removed (line 54) | def mark_removed(self):
method clear_count (line 58) | def clear_count():
FILE: boxmot/trackers/bytetrack/bytetrack.py
class STrack (line 16) | class STrack(BaseTrack):
method __init__ (line 20) | def __init__(self, det, max_obs, is_obb: bool = False):
method _init_from_aabb_detection (line 36) | def _init_from_aabb_detection(self, det: np.ndarray) -> None:
method _init_from_obb_detection (line 44) | def _init_from_obb_detection(self, det: np.ndarray) -> None:
method predict (line 52) | def predict(self):
method multi_predict (line 64) | def multi_predict(stracks):
method activate (line 83) | def activate(self, kalman_filter, frame_id):
method re_activate (line 99) | def re_activate(self, new_track, frame_id, new_id=False):
method update (line 115) | def update(self, new_track, frame_id):
method _wrap_pi_periodic (line 143) | def _wrap_pi_periodic(delta: float) -> float:
method _state_obb_for_plot (line 146) | def _state_obb_for_plot(self) -> np.ndarray:
method xyxy (line 169) | def xyxy(self):
method xywha (line 189) | def xywha(self):
class ByteTrack (line 197) | class ByteTrack(BaseTracker):
method __init__ (line 231) | def __init__(
method update (line 266) | def update(
function joint_stracks (line 415) | def joint_stracks(tlista, tlistb):
function sub_stracks (line 429) | def sub_stracks(tlista, tlistb):
function remove_duplicate_stracks (line 440) | def remove_duplicate_stracks(stracksa, stracksb):
FILE: boxmot/trackers/deepocsort/deepocsort.py
function k_previous_obs (line 17) | def k_previous_obs(observations, cur_age, k):
function convert_x_to_bbox (line 28) | def convert_x_to_bbox(x, score=None):
function speed_direction (line 43) | def speed_direction(bbox1, bbox2):
class KalmanBoxTracker (line 51) | class KalmanBoxTracker:
method __init__ (line 58) | def __init__(
method update (line 143) | def update(self, det):
method update_emb (line 182) | def update_emb(self, emb, alpha=0.9):
method get_emb (line 186) | def get_emb(self):
method apply_affine_correction (line 189) | def apply_affine_correction(self, affine):
method predict (line 208) | def predict(self):
method get_state (line 225) | def get_state(self):
method mahalanobis (line 231) | def mahalanobis(self, bbox):
class DeepOcSort (line 236) | class DeepOcSort(BaseTracker):
method __init__ (line 274) | def __init__(
method update (line 319) | def update(
FILE: boxmot/trackers/detection_layout.py
class DetectionLayout (line 9) | class DetectionLayout:
method box_with_conf_cols (line 21) | def box_with_conf_cols(self) -> int:
method association_mode_name (line 24) | def association_mode_name(self, base_name: str) -> str:
method empty_dets (line 27) | def empty_dets(self, dtype=np.float32) -> np.ndarray:
method empty_output (line 30) | def empty_output(self, dtype=float) -> np.ndarray:
method boxes (line 33) | def boxes(self, dets: np.ndarray) -> np.ndarray:
method confidences (line 38) | def confidences(self, dets: np.ndarray) -> np.ndarray:
method classes (line 43) | def classes(self, dets: np.ndarray) -> np.ndarray:
method with_detection_indices (line 48) | def with_detection_indices(self, dets: np.ndarray) -> np.ndarray:
method validate_dets (line 54) | def validate_dets(self, dets: np.ndarray) -> None:
class AxisAlignedDetections (line 61) | class AxisAlignedDetections(DetectionLayout):
method __init__ (line 62) | def __init__(self) -> None:
class OrientedDetections (line 74) | class OrientedDetections(DetectionLayout):
method __init__ (line 75) | def __init__(self) -> None:
function get_detection_layout (line 91) | def get_detection_layout(is_obb: bool) -> DetectionLayout:
function infer_detection_layout (line 95) | def infer_detection_layout(dets: np.ndarray) -> DetectionLayout | None:
FILE: boxmot/trackers/hybridsort/association.py
function intersection_batch (line 5) | def intersection_batch(bboxes1, bboxes2):
function box_area (line 18) | def box_area(bbox):
function iou_batch (line 22) | def iou_batch(bboxes1, bboxes2):
function cal_score_dif_batch (line 41) | def cal_score_dif_batch(bboxes1, bboxes2):
function cal_score_dif_batch_two_score (line 53) | def cal_score_dif_batch_two_score(bboxes1, bboxes2):
function hmiou (line 65) | def hmiou(bboxes1, bboxes2):
function giou_batch (line 90) | def giou_batch(bboxes1, bboxes2):
function giou_batch_true (line 123) | def giou_batch_true(bboxes1, bboxes2):
function diou_batch (line 157) | def diou_batch(bboxes1, bboxes2):
function ciou_batch (line 196) | def ciou_batch(bboxes1, bboxes2):
function ct_dist (line 249) | def ct_dist(bboxes1, bboxes2):
function speed_direction_batch (line 273) | def speed_direction_batch(dets, tracks):
function linear_assignment (line 291) | def linear_assignment(cost_matrix, thresh=0.):
function associate_detections_to_trackers (line 305) | def associate_detections_to_trackers(detections,trackers,iou_threshold =...
function associate (line 349) | def associate(detections, trackers, iou_threshold, velocities, previous_...
function cost_vel (line 408) | def cost_vel(Y, X, trackers, velocities, detections, previous_obs, vdc_w...
function speed_direction_batch_lt (line 431) | def speed_direction_batch_lt(dets, tracks):
function speed_direction_batch_rt (line 442) | def speed_direction_batch_rt(dets, tracks):
function speed_direction_batch_lb (line 453) | def speed_direction_batch_lb(dets, tracks):
function speed_direction_batch_rb (line 464) | def speed_direction_batch_rb(dets, tracks):
function associate_4_points (line 475) | def associate_4_points(detections, trackers, iou_threshold, lt, rt, lb, ...
function associate_4_points_with_score (line 525) | def associate_4_points_with_score(detections, trackers, iou_threshold, l...
function associate_4_points_with_score_with_reid (line 578) | def associate_4_points_with_score_with_reid(detections, trackers, iou_th...
function associate_kitti (line 658) | def associate_kitti(detections, trackers, det_cates, iou_threshold,
function embedding_distance (line 740) | def embedding_distance(tracks_feat, detections_feat, metric='cosine'):
function fuse_motion (line 770) | def fuse_motion(cost_matrix, tracks, detections, only_position=False, la...
function linear_assignment_appearance (line 785) | def linear_assignment_appearance(cost_matrix, thresh):
function fuse_score (line 798) | def fuse_score(cost_matrix, det_scores):
FILE: boxmot/trackers/hybridsort/hybridsort.py
function k_previous_obs (line 26) | def k_previous_obs(observations, cur_age, k):
function convert_bbox_to_z (line 37) | def convert_bbox_to_z(bbox):
function convert_x_to_bbox (line 52) | def convert_x_to_bbox(x, score=None):
function speed_direction_lt (line 63) | def speed_direction_lt(bbox1, bbox2):
function speed_direction_rt (line 71) | def speed_direction_rt(bbox1, bbox2):
function speed_direction_lb (line 79) | def speed_direction_lb(bbox1, bbox2):
function speed_direction_rb (line 87) | def speed_direction_rb(bbox1, bbox2):
class KalmanBoxTracker (line 95) | class KalmanBoxTracker(object):
method __init__ (line 103) | def __init__(
method update_features (line 217) | def update_features(self, feat, score: float = -1.0):
method camera_update (line 238) | def camera_update(self, warp_matrix):
method update (line 262) | def update(self, bbox, id_feature, update_feature: bool = True, *, cls...
method predict (line 318) | def predict(self):
class HybridSort (line 356) | class HybridSort(BaseTracker):
method __init__ (line 367) | def __init__(
method update (line 455) | def update(self, dets: np.ndarray, img: np.ndarray, embs: np.ndarray =...
FILE: boxmot/trackers/hybridsort/kalmanfilter_score.py
class KalmanFilterNew_score (line 111) | class KalmanFilterNew_score(object):
method __init__ (line 285) | def __init__(self, dim_x, dim_z, dim_u=0, args=None):
method predict (line 342) | def predict(self, u=None, B=None, F=None, Q=None):
method freeze (line 385) | def freeze(self):
method unfreeze (line 392) | def unfreeze(self):
method update (line 443) | def update(self, z, R=None, H=None, confidence=0.0):
method predict_steadystate (line 537) | def predict_steadystate(self, u=0, B=None):
method update_steadystate (line 566) | def update_steadystate(self, z):
method update_correlated (line 633) | def update_correlated(self, z, R=None, H=None):
method batch_filter (line 710) | def batch_filter(self, zs, Fs=None, Qs=None, Hs=None,
method rts_smoother (line 846) | def rts_smoother(self, Xs, Ps, Fs=None, Qs=None, inv=np.linalg.inv):
method get_prediction (line 910) | def get_prediction(self, u=None, B=None, F=None, Q=None):
method get_update (line 953) | def get_update(self, z=None):
method residual_of (line 998) | def residual_of(self, z):
method measurement_of_state (line 1006) | def measurement_of_state(self, x):
method log_likelihood (line 1023) | def log_likelihood(self):
method likelihood (line 1032) | def likelihood(self):
method mahalanobis (line 1047) | def mahalanobis(self):
method alpha (line 1060) | def alpha(self):
method log_likelihood_of (line 1070) | def log_likelihood_of(self, z):
method alpha (line 1081) | def alpha(self, value):
method __repr__ (line 1087) | def __repr__(self):
method test_matrix_dimensions (line 1117) | def test_matrix_dimensions(self, z=None, H=None, R=None, F=None, Q=None):
function update (line 1217) | def update(x, P, z, R, H=None, return_all=False):
function update_steadystate (line 1309) | def update_steadystate(x, z, K, H=None):
function predict (line 1357) | def predict(x, P, F=1, Q=0, u=0, B=1, alpha=1.):
function predict_steadystate (line 1398) | def predict_steadystate(x, F=1, u=0, B=1):
function batch_filter (line 1430) | def batch_filter(x, P, zs, Fs, Qs, Hs, Rs, Bs=None, us=None,
function rts_smoother (line 1538) | def rts_smoother(Xs, Ps, Fs, Qs):
FILE: boxmot/trackers/hybridsort/kalmanfilter_score_new.py
class KalmanFilterNew_score_new (line 110) | class KalmanFilterNew_score_new(object):
method __init__ (line 284) | def __init__(self, dim_x, dim_z, dim_u=0, args=None):
method predict (line 341) | def predict(self, u=None, B=None, F=None, Q=None):
method freeze (line 385) | def freeze(self):
method unfreeze (line 392) | def unfreeze(self):
method update (line 450) | def update(self, z, R=None, H=None):
method predict_steadystate (line 547) | def predict_steadystate(self, u=0, B=None):
method update_steadystate (line 576) | def update_steadystate(self, z):
method update_correlated (line 643) | def update_correlated(self, z, R=None, H=None):
method batch_filter (line 720) | def batch_filter(self, zs, Fs=None, Qs=None, Hs=None,
method rts_smoother (line 856) | def rts_smoother(self, Xs, Ps, Fs=None, Qs=None, inv=np.linalg.inv):
method get_prediction (line 920) | def get_prediction(self, u=None, B=None, F=None, Q=None):
method get_update (line 963) | def get_update(self, z=None):
method residual_of (line 1008) | def residual_of(self, z):
method measurement_of_state (line 1016) | def measurement_of_state(self, x):
method log_likelihood (line 1033) | def log_likelihood(self):
method likelihood (line 1042) | def likelihood(self):
method mahalanobis (line 1057) | def mahalanobis(self):
method alpha (line 1070) | def alpha(self):
method log_likelihood_of (line 1080) | def log_likelihood_of(self, z):
method alpha (line 1091) | def alpha(self, value):
method __repr__ (line 1097) | def __repr__(self):
method test_matrix_dimensions (line 1127) | def test_matrix_dimensions(self, z=None, H=None, R=None, F=None, Q=None):
function update (line 1227) | def update(x, P, z, R, H=None, return_all=False):
function update_steadystate (line 1319) | def update_steadystate(x, z, K, H=None):
function predict (line 1367) | def predict(x, P, F=1, Q=0, u=0, B=1, alpha=1.):
function predict_steadystate (line 1408) | def predict_steadystate(x, F=1, u=0, B=1):
function batch_filter (line 1440) | def batch_filter(x, P, zs, Fs, Qs, Hs, Rs, Bs=None, us=None,
function rts_smoother (line 1548) | def rts_smoother(Xs, Ps, Fs, Qs):
FILE: boxmot/trackers/ocsort/ocsort.py
function k_previous_obs (line 17) | def k_previous_obs(observations, cur_age, k, is_obb=False):
function convert_x_to_bbox (line 31) | def convert_x_to_bbox(x, score=None):
function convert_obb_to_z (line 48) | def convert_obb_to_z(obb):
function convert_x_to_obb (line 61) | def convert_x_to_obb(x, score=None):
function speed_direction (line 73) | def speed_direction(bbox1, bbox2):
function speed_direction_obb (line 81) | def speed_direction_obb(bbox1, bbox2):
class KalmanBoxTracker (line 89) | class KalmanBoxTracker(object):
method __init__ (line 96) | def __init__(
method _wrap_pi_periodic (line 213) | def _wrap_pi_periodic(delta: float) -> float:
method _state_obb_for_plot (line 216) | def _state_obb_for_plot(self) -> np.ndarray:
method update (line 237) | def update(self, bbox, cls, det_ind):
method predict (line 278) | def predict(self):
method get_state (line 300) | def get_state(self):
class OcSort (line 309) | class OcSort(BaseTracker):
method __init__ (line 340) | def __init__(
method update (line 371) | def update(
FILE: boxmot/trackers/sfsort/sfsort.py
class TrackState (line 18) | class TrackState:
class Track (line 27) | class Track:
method __post_init__ (line 43) | def __post_init__(self) -> None:
method id (line 57) | def id(self) -> int:
method _wrap_pi_periodic (line 61) | def _wrap_pi_periodic(delta: float) -> float:
method _wrap_angle (line 65) | def _wrap_angle(angle: float) -> float:
method _align_obb_measurement (line 69) | def _align_obb_measurement(
method _state_obb_for_plot (line 107) | def _state_obb_for_plot(self) -> np.ndarray:
method update (line 128) | def update(self, box: np.ndarray, frame_id: int, conf: float, cls: int...
class SFSORT (line 157) | class SFSORT(BaseTracker):
method __init__ (line 194) | def __init__(
method update (line 258) | def update(self, dets: np.ndarray, img: np.ndarray, embs: np.ndarray |...
method _split_detections (line 367) | def _split_detections(self, dets: np.ndarray) -> tuple[np.ndarray, np....
method _split_aabb_detections (line 372) | def _split_aabb_detections(self, dets: np.ndarray) -> tuple[np.ndarray...
method _split_obb_detections (line 381) | def _split_obb_detections(self, dets: np.ndarray) -> tuple[np.ndarray,...
method _dynamic_thresholds (line 390) | def _dynamic_thresholds(self, scores: np.ndarray) -> tuple[float, floa...
method _purge_stale_lost_tracks (line 404) | def _purge_stale_lost_tracks(self) -> None:
method _update_lost_tracks (line 413) | def _update_lost_tracks(self, next_lost_tracks: Iterable[Track]) -> None:
method _maybe_set_margins (line 428) | def _maybe_set_margins(self, frame_width: int | None, frame_height: in...
method _new_track (line 450) | def _new_track(self, box: np.ndarray, frame_id: int, conf: float, cls:...
method _format_track (line 464) | def _format_track(track: Track) -> list[float]:
method clamp (line 474) | def clamp(value: float, min_value: float, max_value: float) -> float:
method _resolve_or_default (line 478) | def _resolve_or_default(
method _obb_to_xyxy (line 485) | def _obb_to_xyxy(box: np.ndarray) -> np.ndarray:
method calculate_cost (line 495) | def calculate_cost(
method _calculate_cost_obb (line 514) | def _calculate_cost_obb(
method _calculate_cost_aabb (line 554) | def _calculate_cost_aabb(
method _combine_cost_terms (line 607) | def _combine_cost_terms(
FILE: boxmot/trackers/strongsort/sort/detection.py
class Detection (line 4) | class Detection(object):
method __init__ (line 28) | def __init__(self, tlwh, conf, cls, det_ind, feat):
method to_xyah (line 35) | def to_xyah(self):
FILE: boxmot/trackers/strongsort/sort/iou_matching.py
function iou (line 10) | def iou(bbox, candidates):
function iou_cost (line 49) | def iou_cost(tracks, detections, track_indices=None, detection_indices=N...
FILE: boxmot/trackers/strongsort/sort/linear_assignment.py
function min_cost_matching (line 14) | def min_cost_matching(
function matching_cascade (line 82) | def matching_cascade(
function gate_cost_matrix (line 145) | def gate_cost_matrix(
function _cosine_distance (line 201) | def _cosine_distance(a, b, data_is_normalized=False):
function _pdist (line 223) | def _pdist(a, b):
function _nn_euclidean_distance (line 246) | def _nn_euclidean_distance(x, y):
function _nn_cosine_distance (line 266) | def _nn_cosine_distance(x, y):
class NearestNeighborDistanceMetric (line 286) | class NearestNeighborDistanceMetric(object):
method __init__ (line 307) | def __init__(self, metric, matching_threshold, budget=None):
method partial_fit (line 318) | def partial_fit(self, features, targets, active_targets):
method distance (line 335) | def distance(self, features, targets):
FILE: boxmot/trackers/strongsort/sort/track.py
class TrackState (line 10) | class TrackState:
class Track (line 25) | class Track:
method __init__ (line 72) | def __init__(
method to_tlwh (line 110) | def to_tlwh(self):
method to_tlbr (line 125) | def to_tlbr(self):
method camera_update (line 139) | def camera_update(self, warp_matrix):
method increment_age (line 150) | def increment_age(self):
method predict (line 154) | def predict(self):
method update (line 162) | def update(self, detection):
method mark_missed (line 191) | def mark_missed(self):
method is_tentative (line 198) | def is_tentative(self):
method is_confirmed (line 202) | def is_confirmed(self):
method is_deleted (line 206) | def is_deleted(self):
FILE: boxmot/trackers/strongsort/sort/tracker.py
class Tracker (line 13) | class Tracker:
method __init__ (line 40) | def __init__(
method predict (line 62) | def predict(self):
method increment_ages (line 70) | def increment_ages(self):
method update (line 75) | def update(self, detections):
method _match (line 108) | def _match(self, detections):
method _initiate_track (line 159) | def _initiate_track(self, detection):
FILE: boxmot/trackers/strongsort/strongsort.py
class StrongSort (line 18) | class StrongSort(BaseTracker):
method __init__ (line 51) | def __init__(
method update (line 92) | def update(
method reset (line 166) | def reset(self):
FILE: boxmot/trackers/strongsort/strongsort_kf.py
class KalmanFilter (line 23) | class KalmanFilter(object):
method __init__ (line 40) | def __init__(self):
method initiate (line 56) | def initiate(self, measurement):
method predict (line 90) | def predict(self, mean, covariance):
method project (line 129) | def project(self, mean, covariance, confidence=0.0):
method update (line 163) | def update(self, mean, covariance, measurement, confidence=0.0):
method gating_distance (line 201) | def gating_distance(self, mean, covariance, measurements, only_positio...
FILE: boxmot/trackers/tracker_zoo.py
function get_tracker_config (line 22) | def get_tracker_config(tracker_type):
function create_tracker (line 27) | def create_tracker(
FILE: boxmot/utils/__init__.py
function _is_main_process (line 36) | def _is_main_process(record):
function configure_logging (line 40) | def configure_logging(main_only: bool = True):
FILE: boxmot/utils/analysis/mot_ds_kf_tuning.py
function load_gt_data (line 12) | def load_gt_data(seq_dir: Path, annotations_dir: Path = None, use_temp_g...
function build_tracks_from_sequence (line 37) | def build_tracks_from_sequence(
function main (line 93) | def main(
FILE: boxmot/utils/analysis/mot_seq_bb_plot.py
function plot_gt_boxes_with_trajectories (line 14) | def plot_gt_boxes_with_trajectories(
FILE: boxmot/utils/analysis/ray_results.py
function is_pareto_efficient (line 20) | def is_pareto_efficient(points: np.ndarray) -> np.ndarray:
function plot_metrics_by_trial (line 42) | def plot_metrics_by_trial(df, metrics=("HOTA", "MOTA", "IDF1"), exp_path...
function main (line 82) | def main():
FILE: boxmot/utils/association.py
function speed_direction_batch (line 8) | def speed_direction_batch(dets, tracks):
function linear_assignment (line 20) | def linear_assignment(cost_matrix):
function compute_aw_max_metric (line 35) | def compute_aw_max_metric(emb_cost, w_association_emb, bottom=0.5):
function associate (line 67) | def associate(
function associate_kitti (line 161) | def associate_kitti(
FILE: boxmot/utils/checks.py
class RequirementsChecker (line 16) | class RequirementsChecker:
method __init__ (line 28) | def __init__(
method check_packages (line 40) | def check_packages(
method sync_extra (line 78) | def sync_extra(
method _install_packages (line 119) | def _install_packages(
FILE: boxmot/utils/clean.py
function cleanup_mot17 (line 5) | def cleanup_mot17(data_dir, keep_detection='FRCNN'):
FILE: boxmot/utils/custom_mot_challenge_2d_box.py
class CustomMotChallenge2DBox (line 18) | class CustomMotChallenge2DBox(MotChallenge2DBox):
method get_default_dataset_config (line 22) | def get_default_dataset_config():
method __init__ (line 30) | def __init__(self, config=None):
method get_preprocessed_seq_data (line 65) | def get_preprocessed_seq_data(self, raw_data, cls):
FILE: boxmot/utils/dataloaders/dataset.py
function read_seq_fps (line 78) | def read_seq_fps(seq_dir: Path) -> int:
function compute_fps_mask (line 98) | def compute_fps_mask(frames: np.ndarray, orig_fps: int, target_fps: int)...
class MOTDataset (line 115) | class MOTDataset:
method __init__ (line 132) | def __init__(
method _index_sequences (line 153) | def _index_sequences(self) -> None:
method sequence_names (line 184) | def sequence_names(self) -> List[str]:
method get_sequence (line 188) | def get_sequence(self, name: str) -> "MOTSequence":
class MOTSequence (line 202) | class MOTSequence:
method __init__ (line 225) | def __init__(self, name: str, meta: Dict, target_fps: Optional[int]):
method _prepare (line 235) | def _prepare(self) -> None:
method __iter__ (line 284) | def __iter__(self) -> Generator[Dict[str, Union[int, np.ndarray]], Non...
function process_sequences_lazily (line 316) | def process_sequences_lazily(dataset: MOTDataset) -> None:
FILE: boxmot/utils/dataloaders/video.py
class LazyDataLoader (line 11) | class LazyDataLoader:
method __init__ (line 12) | def __init__(self, source: Union[str, int, Path]):
method __iter__ (line 16) | def __iter__(self):
method _get_generator (line 19) | def _get_generator(self) -> Generator:
method _load_from_csv (line 46) | def _load_from_csv(self, csv_path: str) -> Generator:
method _load_from_video (line 53) | def _load_from_video(self, video_path: str) -> Generator:
method _load_from_directory (line 65) | def _load_from_directory(self, path: str) -> Generator:
method _load_from_glob (line 70) | def _load_from_glob(self, pattern: str) -> Generator:
method _load_from_youtube (line 74) | def _load_from_youtube(self, url: str) -> Generator:
method _load_from_stream (line 85) | def _load_from_stream(self, url: str) -> Generator:
method _load_from_stream_list (line 97) | def _load_from_stream_list(self, file_path: str) -> Generator[List[np....
method _load_from_webcam (line 118) | def _load_from_webcam(self, index: int) -> Generator:
FILE: boxmot/utils/download.py
function get_http_session (line 24) | def get_http_session(retries: int = 3, backoff_factor: float = 0.3) -> r...
function download_file (line 39) | def download_file(url: str, dest: Path, chunk_size: int = 8192, overwrit...
function extract_zip (line 81) | def extract_zip(zip_path: Path, extract_to: Path, overwrite: bool = Fals...
function patch_deprecated_types (line 116) | def patch_deprecated_types(root: Path, deprecated: dict = DEPRECATED_TYP...
function download_trackeval (line 130) | def download_trackeval(dest: Path, branch: str = "master", overwrite: bo...
function download_hf_dataset (line 180) | def download_hf_dataset(repo_id: str, dest: Path, overwrite: bool = Fals...
function download_eval_data (line 249) | def download_eval_data(
FILE: boxmot/utils/iou.py
function iou_obb_pair (line 5) | def iou_obb_pair(i, j, bboxes1, bboxes2):
class AssociationFunction (line 38) | class AssociationFunction:
method __init__ (line 39) | def __init__(self, w, h, asso_mode="iou"):
method iou_batch (line 54) | def iou_batch(bboxes1, bboxes2) -> np.ndarray:
method iou_batch_obb (line 73) | def iou_batch_obb(bboxes1, bboxes2) -> np.ndarray:
method hmiou_batch (line 83) | def hmiou_batch(bboxes1, bboxes2):
method giou_batch (line 133) | def giou_batch(bboxes1, bboxes2) -> np.ndarray:
method centroid_batch (line 174) | def centroid_batch(self, bboxes1, bboxes2) -> np.ndarray:
method centroid_batch_obb (line 189) | def centroid_batch_obb(self, bboxes1, bboxes2) -> np.ndarray:
method ciou_batch (line 203) | def ciou_batch(bboxes1, bboxes2) -> np.ndarray:
method diou_batch (line 270) | def diou_batch(bboxes1, bboxes2) -> np.ndarray:
method run_asso_func (line 313) | def run_asso_func(self, bboxes1, bboxes2):
method _get_asso_func (line 323) | def _get_asso_func(self, asso_mode):
FILE: boxmot/utils/matching.py
function linear_assignment (line 28) | def linear_assignment(cost_matrix, thresh):
function iou_distance (line 46) | def iou_distance(atracks, btracks, is_obb: bool = False):
function embedding_distance (line 85) | def embedding_distance(tracks, detections, metric="cosine"):
function fuse_motion (line 110) | def fuse_motion(kf, cost_matrix, tracks, detections, only_position=False...
function fuse_iou (line 125) | def fuse_iou(cost_matrix, tracks, detections):
function fuse_score (line 139) | def fuse_score(cost_matrix, detections):
FILE: boxmot/utils/misc.py
function parse_imgsz (line 10) | def parse_imgsz(ctx, param, value):
function resolve_model_path (line 41) | def resolve_model_path(model_path, default_dir: Path = WEIGHTS) -> Path:
function increment_path (line 57) | def increment_path(path, exist_ok=False, sep="", mkdir=False):
function prompt_overwrite (line 90) | def prompt_overwrite(path_type: str, path: Path, ci: bool = True) -> bool:
FILE: boxmot/utils/mot_utils.py
function split_dataset (line 16) | def split_dataset(src_fldr: Path, percent_to_delete: float = 0.5) -> Tup...
function convert_to_mot_format (line 92) | def convert_to_mot_format(
function write_mot_results (line 143) | def write_mot_results(txt_path: Path, mot_results: np.ndarray) -> None:
FILE: boxmot/utils/ops.py
function xyxy2xywh (line 10) | def xyxy2xywh(x):
function xywh2xyxy (line 27) | def xywh2xyxy(x):
function xywh2tlwh (line 46) | def xywh2tlwh(x):
function tlwh2xyxy (line 64) | def tlwh2xyxy(x):
function xyxy2tlwh (line 77) | def xyxy2tlwh(x):
function tlwh2xyah (line 90) | def tlwh2xyah(x):
function xyxy2xysr (line 103) | def xyxy2xysr(x):
function letterbox (line 127) | def letterbox(
FILE: boxmot/utils/plots.py
class MetricsPlotter (line 7) | class MetricsPlotter:
method __init__ (line 32) | def __init__(self, root_folder: str = '.'):
method plot_radar_chart (line 46) | def plot_radar_chart(self,
method plot_fps_metrics (line 127) | def plot_fps_metrics(self,
FILE: boxmot/utils/timing.py
class TimingStats (line 8) | class TimingStats:
method __init__ (line 11) | def __init__(self):
method reset (line 14) | def reset(self):
method start_frame (line 29) | def start_frame(self):
method start_tracking (line 33) | def start_tracking(self):
method end_tracking (line 37) | def end_tracking(self):
method get_last_track_time (line 45) | def get_last_track_time(self):
method get_last_reid_time (line 49) | def get_last_reid_time(self):
method reset_frame_reid (line 53) | def reset_frame_reid(self):
method start_plot (line 57) | def start_plot(self):
method end_plot (line 61) | def end_plot(self):
method add_reid_time (line 67) | def add_reid_time(self, time_ms):
method record_ultralytics_times (line 73) | def record_ultralytics_times(self, predictor):
method end_frame (line 84) | def end_frame(self):
method print_summary (line 91) | def print_summary(self):
class TimedReIDWrapper (line 209) | class TimedReIDWrapper:
method __init__ (line 212) | def __init__(self, model, timing_stats):
method get_features (line 216) | def get_features(self, *args, **kwargs):
method __getattr__ (line 224) | def __getattr__(self, name):
function wrap_tracker_reid (line 229) | def wrap_tracker_reid(tracker, timing_stats):
FILE: boxmot/utils/torch_utils.py
function get_system_info (line 12) | def get_system_info():
function parse_device (line 16) | def parse_device(device):
function assert_cuda_available (line 32) | def assert_cuda_available(device):
function select_device (line 50) | def select_device(device="", batch=0):
FILE: boxmot/utils/visualization.py
class BaseVisualization (line 9) | class BaseVisualization(ABC):
method id_to_color (line 14) | def id_to_color(
method _draw_dashed_rect (line 40) | def _draw_dashed_rect(self, img, x1, y1, x2, y2, color, thickness, das...
method _obb_to_polygon (line 53) | def _obb_to_polygon(box: tuple) -> np.ndarray:
method plot_box_on_img (line 61) | def plot_box_on_img(
method plot_trackers_trajectories (line 126) | def plot_trackers_trajectories(
method _all_active_tracks (line 155) | def _all_active_tracks(self):
method _infer_state (line 164) | def _infer_state(self, a):
method _display_groups (line 196) | def _display_groups(self):
method _draw_track (line 199) | def _draw_track(self, img, a, forced_state, style, thickness, fontscal...
method plot_results (line 245) | def plot_results(
class ExplicitStateVisualization (line 278) | class ExplicitStateVisualization(BaseVisualization):
method _display_groups (line 283) | def _display_groups(self):
class InferredStateVisualization (line 334) | class InferredStateVisualization(BaseVisualization):
method _display_groups (line 339) | def _display_groups(self):
class VisualizationMixin (line 349) | class VisualizationMixin(BaseVisualization):
method _display_groups (line 354) | def _display_groups(self):
FILE: tests/performance/test_cmcs_p.py
function cmc_object (line 16) | def cmc_object(request):
function test_cmc_apply (line 23) | def test_cmc_apply(cmc_object):
FILE: tests/performance/test_tracking_p.py
function test_motion_tracker_update_time (line 16) | def test_motion_tracker_update_time(tracker_type):
function test_motion_n_appearance_tracker_update_time (line 62) | def test_motion_n_appearance_tracker_update_time(tracker_type):
FILE: tests/unit/test_base_backend.py
class DummyBackend (line 10) | class DummyBackend(BaseModelBackend):
method __init__ (line 11) | def __init__(self):
method forward (line 19) | def forward(self, im_batch):
method load_model (line 22) | def load_model(self, w):
class InitOnlyBackend (line 26) | class InitOnlyBackend(BaseModelBackend):
method forward (line 27) | def forward(self, im_batch):
method load_model (line 30) | def load_model(self, w):
function test_boxes_to_xyxy_keeps_aabb_boxes (line 34) | def test_boxes_to_xyxy_keeps_aabb_boxes():
function test_boxes_to_xyxy_converts_obb_detections (line 43) | def test_boxes_to_xyxy_converts_obb_detections():
function test_boxes_to_xyxy_converts_obb_track_outputs (line 52) | def test_boxes_to_xyxy_converts_obb_track_outputs():
function test_get_crops_accepts_obb_boxes (line 61) | def test_get_crops_accepts_obb_boxes():
function test_get_crops_rectifies_rotated_obb_boxes (line 73) | def test_get_crops_rectifies_rotated_obb_boxes():
function test_base_backend_preserves_explicit_export_paths (line 88) | def test_base_backend_preserves_explicit_export_paths(monkeypatch):
FILE: tests/unit/test_cmcs_u.py
function cmc_object (line 12) | def cmc_object(request):
function test_cmc_apply (line 19) | def test_cmc_apply(cmc_object):
function test_cmc_preprocess (line 31) | def test_cmc_preprocess(cmc_object):
function test_cmc_apply_empty_detections (line 41) | def test_cmc_apply_empty_detections(cmc_object):
FILE: tests/unit/test_cuda.py
function test_reidbackend_device (line 14) | def test_reidbackend_device(reid_model):
function test_reidbackend_half (line 28) | def test_reidbackend_half(reid_model):
FILE: tests/unit/test_dataloader.py
function test_read_seq_fps (line 14) | def test_read_seq_fps(tmp_path):
function test_compute_fps_mask (line 30) | def test_compute_fps_mask():
function simple_sequence (line 39) | def simple_sequence(tmp_path):
function test_dataset_indexing_and_iteration (line 96) | def test_dataset_indexing_and_iteration(simple_sequence):
function test_unknown_sequence_raises (line 119) | def test_unknown_sequence_raises(simple_sequence):
function test_mismatched_dets_embs_raise (line 125) | def test_mismatched_dets_embs_raise(tmp_path, simple_sequence):
function test_fps_downsampling_and_gt_temp (line 148) | def test_fps_downsampling_and_gt_temp(tmp_path):
FILE: tests/unit/test_exporters_dynamic.py
function _load_existing_osnet_model_and_input (line 14) | def _load_existing_osnet_model_and_input(batch_size=2):
function _install_fake_onnx (line 29) | def _install_fake_onnx(monkeypatch):
function _disable_dep_sync (line 41) | def _disable_dep_sync(monkeypatch):
function test_onnx_export_dynamic_uses_dynamic_shapes (line 46) | def test_onnx_export_dynamic_uses_dynamic_shapes(monkeypatch, tmp_path, ...
function test_onnx_export_dynamic_fallback_uses_dynamic_axes (line 73) | def test_onnx_export_dynamic_fallback_uses_dynamic_axes(monkeypatch, tmp...
function test_onnx_export_static_has_no_dynamic_shapes (line 104) | def test_onnx_export_static_has_no_dynamic_shapes(monkeypatch, tmp_path,...
FILE: tests/unit/test_inference.py
class _TensorWrapper (line 14) | class _TensorWrapper:
method __init__ (line 15) | def __init__(self, array: np.ndarray):
method cpu (line 18) | def cpu(self):
method numpy (line 21) | def numpy(self):
method shape (line 25) | def shape(self):
class _PredictionWrapper (line 29) | class _PredictionWrapper:
method __init__ (line 30) | def __init__(self, array: np.ndarray):
method __len__ (line 33) | def __len__(self):
class _Result (line 37) | class _Result:
method __init__ (line 38) | def __init__(self, boxes=None, obb=None):
class _DummyTracker (line 43) | class _DummyTracker(BaseTracker):
method update (line 46) | def update(self, dets: np.ndarray, img: np.ndarray, embs: np.ndarray =...
method _display_groups (line 50) | def _display_groups(self):
class _DummyOBBTracker (line 54) | class _DummyOBBTracker(_DummyTracker):
function test_extract_detections_reads_aabb_results (line 58) | def test_extract_detections_reads_aabb_results():
function test_extract_detections_reads_obb_results (line 68) | def test_extract_detections_reads_obb_results():
function test_extract_detections_preserves_empty_obb_width (line 81) | def test_extract_detections_preserves_empty_obb_width():
function test_filter_detections_keeps_valid_obb_boxes (line 89) | def test_filter_detections_keeps_valid_obb_boxes():
function test_tracker_infers_obb_mode_on_empty_followup_frame (line 104) | def test_tracker_infers_obb_mode_on_empty_followup_frame():
function test_tracker_layout_helpers_switch_with_detection_mode (line 117) | def test_tracker_layout_helpers_switch_with_detection_mode():
function test_tracker_rejects_obb_when_not_supported (line 131) | def test_tracker_rejects_obb_when_not_supported():
function test_ocsort_obb_state_roundtrip_handles_column_vectors (line 147) | def test_ocsort_obb_state_roundtrip_handles_column_vectors():
function test_iou_obb_pair_accepts_column_like_inputs_and_radians (line 157) | def test_iou_obb_pair_accepts_column_like_inputs_and_radians():
function test_resolve_yolo_model_path_routes_non_rtdetr_to_weights_dir (line 166) | def test_resolve_yolo_model_path_routes_non_rtdetr_to_weights_dir():
function test_resolve_yolo_model_path_keeps_rtdetr_name_without_path_prefix (line 172) | def test_resolve_yolo_model_path_keeps_rtdetr_name_without_path_prefix():
function test_ensure_model_extension_preserves_explicit_export_paths (line 179) | def test_ensure_model_extension_preserves_explicit_export_paths():
function test_ensure_model_extension_keeps_bare_reid_names_in_weights_dir (line 187) | def test_ensure_model_extension_keeps_bare_reid_names_in_weights_dir():
FILE: tests/unit/test_kalman_filters_modes.py
function _angle_diff (line 10) | def _angle_diff(a: float, b: float) -> float:
function test_xywh_xyah_support_aabb_mode (line 29) | def test_xywh_xyah_support_aabb_mode(kf_cls, init_measurement, update_me...
function test_xywh_xyah_support_obb_mode (line 60) | def test_xywh_xyah_support_obb_mode(kf_cls, init_measurement, update_mea...
function test_xysr_supports_aabb_mode (line 76) | def test_xysr_supports_aabb_mode():
function test_xysr_supports_obb_mode (line 95) | def test_xysr_supports_obb_mode():
function test_xysr_obb_aligns_equivalent_ratio_angle_forms (line 116) | def test_xysr_obb_aligns_equivalent_ratio_angle_forms():
function test_xysr_obb_unfreeze_handles_angle_wrap (line 140) | def test_xysr_obb_unfreeze_handles_angle_wrap():
function test_xysr_unfreeze_with_column_vectors (line 164) | def test_xysr_unfreeze_with_column_vectors():
function test_xysr_unfreeze_insufficient_history (line 196) | def test_xysr_unfreeze_insufficient_history():
function test_xyhr_supports_aabb_mode_and_column_measurement (line 223) | def test_xyhr_supports_aabb_mode_and_column_measurement():
function test_xyhr_supports_obb_mode_and_inference (line 237) | def test_xyhr_supports_obb_mode_and_inference():
FILE: tests/unit/test_postprocessing.py
function test_gsi (line 8) | def test_gsi():
function test_gbrc (line 22) | def test_gbrc():
FILE: tests/unit/test_reidbackend.py
function get_backend (line 23) | def get_backend(weights: Path, requires_export: bool):
function test_reidbackend_output (line 33) | def test_reidbackend_output(reid_model, _, requires_export):
function test_reidbackend_type (line 48) | def test_reidbackend_type(reid_model, backend, requires_export):
FILE: tests/unit/test_tflite_backend.py
class DummyChecker (line 7) | class DummyChecker:
method __init__ (line 8) | def __init__(self):
method check_packages (line 11) | def check_packages(self, requirements):
function make_backend (line 15) | def make_backend() -> TFLiteBackend:
function test_tflite_backend_prefers_litert_interpreter (line 21) | def test_tflite_backend_prefers_litert_interpreter(monkeypatch):
function test_tflite_backend_installs_litert_when_no_runtime_is_available (line 38) | def test_tflite_backend_installs_litert_when_no_runtime_is_available(mon...
FILE: tests/unit/test_tflite_exporter.py
function _disable_dep_sync (line 14) | def _disable_dep_sync(monkeypatch):
function _install_fake_tflite_stack (line 18) | def _install_fake_tflite_stack(monkeypatch, convert_impl):
function test_tflite_export_uses_flatbuffer_direct_and_prefers_float32 (line 28) | def test_tflite_export_uses_flatbuffer_direct_and_prefers_float32(monkey...
function test_tflite_export_generates_onnx_when_missing (line 71) | def test_tflite_export_generates_onnx_when_missing(monkeypatch, tmp_path):
function test_create_export_tasks_passes_tflite_export_settings (line 128) | def test_create_export_tasks_passes_tflite_export_settings():
FILE: tests/unit/test_trackers.py
function test_motion_n_appearance_trackers_instantiation (line 34) | def test_motion_n_appearance_trackers_instantiation(Tracker):
function test_motion_only_trackers_instantiation (line 43) | def test_motion_only_trackers_instantiation(Tracker):
function test_tracker_output_size (line 48) | def test_tracker_output_size(tracker_type):
function test_dynamic_max_obs_based_on_max_age (line 66) | def test_dynamic_max_obs_based_on_max_age():
function create_kalman_box_tracker_ocsort (line 72) | def create_kalman_box_tracker_ocsort(bbox, cls, det_ind, tracker):
function create_kalman_box_tracker_deepocsort (line 82) | def create_kalman_box_tracker_deepocsort(bbox, cls, det_ind, tracker):
function test_Q_matrix_scaling (line 109) | def test_Q_matrix_scaling(Tracker, init_args):
function test_per_class_tracker_output_size (line 126) | def test_per_class_tracker_output_size(tracker_type):
function test_per_class_tracker_active_tracks (line 150) | def test_per_class_tracker_active_tracks(tracker_type):
function test_botsort_supports_obb_without_reid (line 173) | def test_botsort_supports_obb_without_reid():
function test_botsort_obb_matching_uses_oriented_geometry (line 192) | def test_botsort_obb_matching_uses_oriented_geometry():
function test_botsort_obb_state_history_follows_rotation_without_flips (line 203) | def test_botsort_obb_state_history_follows_rotation_without_flips():
function test_bytetrack_supports_obb_outputs (line 225) | def test_bytetrack_supports_obb_outputs():
function test_bytetrack_obb_matching_uses_oriented_geometry (line 238) | def test_bytetrack_obb_matching_uses_oriented_geometry():
function test_bytetrack_obb_state_history_follows_rotation_without_flips (line 249) | def test_bytetrack_obb_state_history_follows_rotation_without_flips():
function test_ocsort_obb_state_history_uses_state_corners (line 266) | def test_ocsort_obb_state_history_uses_state_corners():
function test_ocsort_obb_state_history_uses_post_update_state_center (line 281) | def test_ocsort_obb_state_history_uses_post_update_state_center():
function test_sfsort_obb_state_history_uses_state_corners (line 302) | def test_sfsort_obb_state_history_uses_state_corners():
function test_sfsort_supports_obb_outputs (line 317) | def test_sfsort_supports_obb_outputs():
function test_sfsort_obb_angle_update_uses_damping (line 330) | def test_sfsort_obb_angle_update_uses_damping():
function test_sfsort_obb_plotting_draws_tracks (line 349) | def test_sfsort_obb_plotting_draws_tracks():
function test_tracker_with_no_detections (line 362) | def test_tracker_with_no_detections(tracker_type, dets):
function test_per_class_isolation (line 381) | def test_per_class_isolation(tracker_type):
function test_emb_trackers_requires_embeddings (line 404) | def test_emb_trackers_requires_embeddings(tracker_type):
function test_invalid_det_array_shape (line 421) | def test_invalid_det_array_shape(tracker_type):
function test_track_id_stable_over_frames (line 444) | def test_track_id_stable_over_frames(tracker_type):
function test_create_tracker_invalid_tracker_name (line 476) | def test_create_tracker_invalid_tracker_name():
FILE: tests/unit/test_visualization.py
class MockTracker (line 7) | class MockTracker(VisualizationMixin):
method __init__ (line 8) | def __init__(self):
class MockTrack (line 20) | class MockTrack:
method __init__ (line 21) | def __init__(self, id, history, state="confirmed", conf=0.9, cls=0):
method get_state (line 32) | def get_state(self):
class TestVisualization (line 35) | class TestVisualization(unittest.TestCase):
method setUp (line 36) | def setUp(self):
method test_plot_results_regular (line 40) | def test_plot_results_regular(self):
method test_plot_results_show_lost (line 57) | def test_plot_results_show_lost(self):
method test_plot_results_hide_lost (line 75) | def test_plot_results_hide_lost(self):
method test_dashed_rect (line 92) | def test_dashed_rect(self):
FILE: tests/unit/test_yolox_batch.py
function test_get_yolo_inferer_routes_yolox_model (line 6) | def test_get_yolo_inferer_routes_yolox_model():
function test_get_yolo_inferer_returns_callable_strategy_for_yolox (line 11) | def test_get_yolo_inferer_returns_callable_strategy_for_yolox():
function test_get_yolo_inferer_accepts_common_yolox_names (line 17) | def test_get_yolo_inferer_accepts_common_yolox_names(name):
Condensed preview — 230 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,965K chars).
[
{
"path": ".github/FUNDING.yml",
"chars": 887,
"preview": "# These are supported funding model platforms\n\ngithub: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [u"
},
{
"path": ".github/ISSUE_TEMPLATE/bug.yml",
"chars": 1708,
"preview": "name: Bug\n# title: \" \"\ndescription: Report a BoxMOT bug\nlabels: [bug]\nbody:\n\n - type: checkboxes\n attributes:\n "
},
{
"path": ".github/ISSUE_TEMPLATE/enhancement.yml",
"chars": 1429,
"preview": "name: Enhancement\ndescription: Suggest a BoxMOT enhancement\n# title: \" \"\nlabels: [enhancement]\nbody:\n\n - type: checkbox"
},
{
"path": ".github/ISSUE_TEMPLATE/question.yml",
"chars": 791,
"preview": "name: Question\ndescription: Ask a BoxMOT question\n# title: \" \"\nlabels: [question]\nbody:\n\n - type: checkboxes\n attrib"
},
{
"path": ".github/scripts/uv_ci_install.sh",
"chars": 496,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\nif [[ $# -lt 1 ]]; then\n echo \"Usage: $0 <editable-spec> [additional uv pip inst"
},
{
"path": ".github/workflows/benchmark.yml",
"chars": 7465,
"preview": "\nname: Benchmark\n\non:\n push:\n branches: [main]\n pull_request:\n branches: [main]\n workflow_dispatch:\n\nenv:\n UV_"
},
{
"path": ".github/workflows/ci.yml",
"chars": 15600,
"preview": "# name of the workflow, what it is doing (optional)\nname: BoxMOT CI\n\n# events that trigger the workflow (required)\non:\n "
},
{
"path": ".github/workflows/docker.yml",
"chars": 957,
"preview": "name: Docker Image CI\n\non:\n push:\n branches:\n - main\n workflow_dispatch:\n\njobs:\n build-and-push:\n runs-on:"
},
{
"path": ".github/workflows/docs.yml",
"chars": 2072,
"preview": "# name: Deploy MkDocs Docs\n# on:\n# push:\n# branches: [master]\n\n# permissions:\n# contents: write\n\n# jobs:\n# dep"
},
{
"path": ".github/workflows/label.yml",
"chars": 2566,
"preview": "name: Label issues\n\non:\n issues:\n types:\n - opened\n - reopened\n\njobs:\n label_issues:\n name: \"Issue: ad"
},
{
"path": ".github/workflows/publish.yml",
"chars": 3209,
"preview": "name: Publish to PyPI\n\non:\n push:\n branches: [main]\n workflow_dispatch:\n inputs:\n pypi:\n description"
},
{
"path": ".github/workflows/stale.yml",
"chars": 1019,
"preview": "name: Close stale issues\non:\n schedule:\n - cron: \"0 0 * * *\" # At the end of every day\n\njobs:\n stale:\n runs-on:"
},
{
"path": ".github/workflows/update.yml",
"chars": 1455,
"preview": "name: Update Dependencies\n\non:\n workflow_dispatch: # Allows you to manually trigger the workflow\n\njobs:\n update-depend"
},
{
"path": ".gitignore",
"chars": 683,
"preview": ".vscode/\n.venv/\n.eggs/\nenv/\n*.DS_Store\n.coverage\nhtmlcov/\n# interpreter bytecode\n__pycache__/\n__MACOSX/\n\n# experiment re"
},
{
"path": ".pre-commit-config.yaml",
"chars": 1287,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nrepos:\n- repo: https://github.com/pre-commit/pre-commit-hooks\n rev: v"
},
{
"path": "AGENTS.md",
"chars": 10805,
"preview": "# AGENTS.md – Working Guidelines for **BoxMOT**\n\n> These instructions apply to all directories in this repository. \\\n> "
},
{
"path": "CITATION.cff",
"chars": 575,
"preview": "cff-version: 16.0.11\n\nmessage: >-\n If you use this software, please cite it using the\n metadata from this file.\n\nautho"
},
{
"path": "CONTRIBUTING.md",
"chars": 1186,
"preview": "# Contributing\n\nThank you for improving this project! Please follow these guidelines.\n\n# Pull Requests\n\nProposed workflo"
},
{
"path": "Dockerfile",
"chars": 1554,
"preview": "# Build the image and tag it for easier later reference\n# Example:\n# docker build -t mikel-brostrom/boxmot .\n\n# Base i"
},
{
"path": "LICENSE",
"chars": 34523,
"preview": " GNU AFFERO GENERAL PUBLIC LICENSE\n Version 3, 19 November 2007\n\n Copyright (C)"
},
{
"path": "MANIFEST.in",
"chars": 191,
"preview": "include requirements.txt\ninclude LICENSE\ninclude setup.py\ninclude boxmot/reid/backbones/clip/clip/bpe_simple_vocab_16e6."
},
{
"path": "README.md",
"chars": 12176,
"preview": "<div align=\"center\" markdown=\"1\">\n\n <img width=\"640\"\n src=\"https://github.com/mikel-brostrom/boxmot/releases/down"
},
{
"path": "assets/DOTA8-MOT/train/P0861__1024__0___1648/det/det.txt",
"chars": 61418,
"preview": "1.000000,-1.000000,831.967285,528.233704,60.625854,22.047729,1.000000\n1.000000,-1.000000,839.141479,456.383881,54.965515"
},
{
"path": "assets/DOTA8-MOT/train/P0861__1024__0___1648/det/det_obb.txt",
"chars": 77398,
"preview": "1.000000,-1.000000,862.262878,539.240173,59.999321,20.000832,0.034907,1.000000,2.000000\n1.000000,-1.000000,866.292725,46"
},
{
"path": "assets/DOTA8-MOT/train/P0861__1024__0___1648/gt/gt.txt",
"chars": 77274,
"preview": "1.000000,1.000000,831.967285,528.233704,60.625854,22.047729,1.000000,2.000000,1.000000\n1.000000,2.000000,839.141479,456."
},
{
"path": "assets/DOTA8-MOT/train/P0861__1024__0___1648/gt/gt_obb.txt",
"chars": 85334,
"preview": "1.000000,1.000000,862.262878,539.240173,59.999321,20.000832,0.034907,1.000000,2.000000,1.000000\n1.000000,2.000000,866.29"
},
{
"path": "assets/DOTA8-MOT/train/P0861__1024__0___1648/seqinfo.ini",
"chars": 126,
"preview": "[Sequence]\nname = P0861__1024__0___1648\nimdir = img1\nframerate = 8\nseqlength = 8\nimwidth = 1024\nimheight = 1024\nimext = "
},
{
"path": "assets/DOTA8-MOT/train/P1053__1024__0___90/det/det.txt",
"chars": 7367,
"preview": "1.000000,-1.000000,137.380234,456.461578,33.107666,44.044189,1.000000\n1.000000,-1.000000,263.443390,141.705688,31.142944"
},
{
"path": "assets/DOTA8-MOT/train/P1053__1024__0___90/det/det_obb.txt",
"chars": 9272,
"preview": "1.000000,-1.000000,153.951538,478.483704,39.823242,18.820560,1.118817,1.000000,11.000000\n1.000000,-1.000000,279.532776,1"
},
{
"path": "assets/DOTA8-MOT/train/P1053__1024__0___90/gt/gt.txt",
"chars": 9207,
"preview": "1.000000,1.000000,137.380234,456.461578,33.107666,44.044189,1.000000,11.000000,1.000000\n1.000000,2.000000,263.443390,141"
},
{
"path": "assets/DOTA8-MOT/train/P1053__1024__0___90/gt/gt_obb.txt",
"chars": 10136,
"preview": "1.000000,1.000000,153.951538,478.483704,39.823242,18.820560,1.118817,1.000000,11.000000,1.000000\n1.000000,2.000000,279.5"
},
{
"path": "assets/DOTA8-MOT/train/P1053__1024__0___90/seqinfo.ini",
"chars": 124,
"preview": "[Sequence]\nname = P1053__1024__0___90\nimdir = img1\nframerate = 8\nseqlength = 8\nimwidth = 1024\nimheight = 1024\nimext = .j"
},
{
"path": "assets/DOTA8-MOT/train/P1142__1024__0___824/det/det.txt",
"chars": 576,
"preview": "1.000000,-1.000000,642.665894,287.069977,380.334106,429.791718,1.000000\n2.000000,-1.000000,642.205933,283.021088,380.794"
},
{
"path": "assets/DOTA8-MOT/train/P1142__1024__0___824/det/det_obb.txt",
"chars": 720,
"preview": "1.000000,-1.000000,855.059509,501.965851,335.273407,297.854279,2.586787,1.000000,1.000000\n2.000000,-1.000000,854.942261,"
},
{
"path": "assets/DOTA8-MOT/train/P1142__1024__0___824/gt/gt.txt",
"chars": 712,
"preview": "1.000000,1.000000,642.665894,287.069977,380.334106,429.791718,1.000000,1.000000,1.000000\n2.000000,1.000000,642.205933,28"
},
{
"path": "assets/DOTA8-MOT/train/P1142__1024__0___824/gt/gt_obb.txt",
"chars": 784,
"preview": "1.000000,1.000000,855.059509,501.965851,335.273407,297.854279,2.586787,1.000000,1.000000,1.000000\n2.000000,1.000000,854."
},
{
"path": "assets/DOTA8-MOT/train/P1142__1024__0___824/seqinfo.ini",
"chars": 125,
"preview": "[Sequence]\nname = P1142__1024__0___824\nimdir = img1\nframerate = 8\nseqlength = 8\nimwidth = 1024\nimheight = 1024\nimext = ."
},
{
"path": "assets/MOT17-mini/train/MOT17-02-FRCNN/det/det.txt",
"chars": 267111,
"preview": "69,-1,912.8,482.9,97.6,112.6,1\n69,-1,835.8,472.2,53.7,77,1\n69,-1,374.4,447.1,43.4,105.1,1\n69,-1,1261,447.7,34.9,100.6,1\n"
},
{
"path": "assets/MOT17-mini/train/MOT17-02-FRCNN/gt/gt.txt",
"chars": 4772,
"preview": "1,1,912,484,97,109,0,7,1.0\n2,1,912,484,97,109,0,7,1.0\n3,1,912,484,97,109,0,7,1.0\n4,1,912,484,97,109,0,7,1.0\n1,2,1338,418"
},
{
"path": "assets/MOT17-mini/train/MOT17-02-FRCNN/gt/gt_temp.txt",
"chars": 13848,
"preview": "1.000000,1.000000,912.000000,484.000000,97.000000,109.000000,0.000000,7.000000,1.000000\n2.000000,1.000000,912.000000,484"
},
{
"path": "assets/MOT17-mini/train/MOT17-02-FRCNN/seqinfo.ini",
"chars": 107,
"preview": "[Sequence]\nname=MOT17-02-FRCNN\nimDir=img1\nframeRate=30\nseqLength=600\nimWidth=1920\nimHeight=1080\nimExt=.jpg\n"
},
{
"path": "assets/MOT17-mini/train/MOT17-04-FRCNN/det/det.txt",
"chars": 894422,
"preview": "375,-1,1222,31.4,61,118.8,1\n375,-1,686.4,206,79.7,113.1,1\n375,-1,1632.7,15.3,59.8,162.8,1\n375,-1,1079.3,447.2,68.5,202.7"
},
{
"path": "assets/MOT17-mini/train/MOT17-04-FRCNN/gt/gt.txt",
"chars": 24478,
"preview": "1,1,1363,569,103,241,1,1,0.86014\n2,1,1362,568,103,241,1,1,0.86173\n3,1,1362,568,103,241,1,1,0.86173\n4,1,1362,568,103,241,"
},
{
"path": "assets/MOT17-mini/train/MOT17-04-FRCNN/gt/gt_temp.txt",
"chars": 70800,
"preview": "1.000000,1.000000,1363.000000,569.000000,103.000000,241.000000,1.000000,1.000000,0.860140\n2.000000,1.000000,1362.000000,"
},
{
"path": "assets/MOT17-mini/train/MOT17-04-FRCNN/seqinfo.ini",
"chars": 108,
"preview": "[Sequence]\nname=MOT17-04-FRCNN\nimDir=img1\nframeRate=30\nseqLength=1050\nimWidth=1920\nimHeight=1080\nimExt=.jpg\n"
},
{
"path": "assets/file_banner.txt",
"chars": 43,
"preview": "Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
},
{
"path": "boxmot/__init__.py",
"chars": 1045,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\n__version__ = '16.0.11'\n\nfrom boxmot.engine.results import track\nfrom boxm"
},
{
"path": "boxmot/configs/datasets/FastTracker-Benchmark-MOT.yaml",
"chars": 692,
"preview": "# FastTracker Benchmark MOT – multi-object tracking in traffic scenes\n# 12 sequences, 15 classes, ~800K detections\n#\n# F"
},
{
"path": "boxmot/configs/datasets/MOT17-ablation.yaml",
"chars": 468,
"preview": "# https://motchallenge.net/data/MOT17/\ndownload:\n runs_url: \"https://github.com/mikel-brostrom/boxmot/releases/download"
},
{
"path": "boxmot/configs/datasets/MOT20-ablation.yaml",
"chars": 491,
"preview": "# https://motchallenge.net/data/MOT20/\ndownload:\n runs_url: \"https://github.com/mikel-brostrom/boxmot/releases/download"
},
{
"path": "boxmot/configs/datasets/SportsMOT.yaml",
"chars": 272,
"preview": "# https://github.com/SportsMOT/SportsMOT\ndownload:\n runs_url: \"\"\n dataset_url: \"https://github.com/mikel-brostrom/boxm"
},
{
"path": "boxmot/configs/datasets/custom.yaml",
"chars": 281,
"preview": "# https://motchallenge.net/data/MOT17/\ndownload:\n runs_url: \"\"\n dataset_url: \"\"\n\nbenchmark:\n source: \"assets/MOT17-mi"
},
{
"path": "boxmot/configs/datasets/dancetrack-ablation.yaml",
"chars": 289,
"preview": "# https://huggingface.co/datasets/noahcao/dancetrack/tree/main\ndownload:\n runs_url: null\n dataset_url: \"https://huggin"
},
{
"path": "boxmot/configs/datasets/visdrone-ablation.yaml",
"chars": 763,
"preview": "# https://github.com/VisDrone/VisDrone-Dataset\n# object_category ids: 0 ignored regions*, 1 pedestrian, 2 people, 3 bicy"
},
{
"path": "boxmot/configs/trackers/__init__.py",
"chars": 45,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
},
{
"path": "boxmot/configs/trackers/boosttrack.yaml",
"chars": 1305,
"preview": "max_age:\n type: randint\n default: 60\n range: [15, 90]\n\nmin_hits:\n type: randint\n default: 3\n range: [1, 5]\n\ndet_th"
},
{
"path": "boxmot/configs/trackers/botsort.yaml",
"chars": 795,
"preview": "track_high_thresh:\n type: uniform\n default: 0.6 # from the default parameters\n range: [0.3, 0.7]\n\ntrack_low_thresh:\n"
},
{
"path": "boxmot/configs/trackers/bytetrack.yaml",
"chars": 551,
"preview": "min_conf:\n type: uniform\n default: 0.1 # from the default parameters\n range: [0.1, 0.3]\n\ntrack_thresh:\n type: unifo"
},
{
"path": "boxmot/configs/trackers/deepocsort.yaml",
"chars": 1560,
"preview": "det_thresh:\n type: uniform\n default: 0.5 # from the default parameters\n range: [0.3, 0.6]\n\nmax_age:\n type: qrandint"
},
{
"path": "boxmot/configs/trackers/hybridsort.yaml",
"chars": 1489,
"preview": "low_thresh:\n type: uniform\n default: 0.1\n range: [0.05, 0.5]\n\ndelta_t:\n type: randint\n default: 3\n range: [1, 6] "
},
{
"path": "boxmot/configs/trackers/imprassoc.yaml",
"chars": 1247,
"preview": "track_high_thresh:\n type: uniform\n default: 0.5 # from the default parameters\n range: [0.3, 0.7]\n\ntrack_low_thresh:\n"
},
{
"path": "boxmot/configs/trackers/ocsort.yaml",
"chars": 1015,
"preview": "min_conf:\n type: uniform\n default: 0.1 # from the default parameters\n range: [0.1, 0.3]\n\ndet_thresh:\n type: uniform"
},
{
"path": "boxmot/configs/trackers/sfsort.yaml",
"chars": 949,
"preview": "high_th:\n type: uniform\n default: 0.6\n range: [0.4, 0.9]\n\nmatch_th_first:\n type: uniform\n default: 0.67\n range: [0"
},
{
"path": "boxmot/configs/trackers/strongsort.yaml",
"chars": 795,
"preview": "min_conf:\n type: uniform\n default: 0.6 # from the default parameters\n range: [0.2, 0.8]\n\nema_alpha:\n type: uniform\n"
},
{
"path": "boxmot/detectors/__init__.py",
"chars": 3037,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom boxmot.utils import logger as LOGGER\nfrom boxmot.utils.checks import "
},
{
"path": "boxmot/detectors/detector.py",
"chars": 1803,
"preview": "from pathlib import Path\nfrom typing import Any, Union\n\nimport cv2\nimport numpy as np\nimport torch\n\n\ndef resolve_image(i"
},
{
"path": "boxmot/detectors/rtdetr.py",
"chars": 3969,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom pathlib import Path\n\nimport cv2\nimport numpy as np\nimport torch\nfrom "
},
{
"path": "boxmot/detectors/ultralytics.py",
"chars": 1933,
"preview": "from pathlib import Path\n\nimport numpy as np\nfrom ultralytics import YOLO\n\nfrom boxmot.detectors.detector import Detecto"
},
{
"path": "boxmot/detectors/yolox.py",
"chars": 12148,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport fnmatch\n\nimport cv2\nimport numpy as np\nimport torch\nfrom ultralytic"
},
{
"path": "boxmot/engine/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "boxmot/engine/cli.py",
"chars": 21100,
"preview": "#!/usr/bin/env python3\n\"\"\"\nCLI for BoxMOT: multi-step multiple object tracking pipeline.\nProvides commands to track, gen"
},
{
"path": "boxmot/engine/evaluator.py",
"chars": 46760,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport multiprocessing as mp\nmp.set_start_method(\"spawn\", force=True)\n\nimp"
},
{
"path": "boxmot/engine/export.py",
"chars": 6766,
"preview": "#!/usr/bin/env python3\nimport time\n\nimport torch\n\nfrom boxmot.reid.core import export_formats\nfrom boxmot.reid.core.auto"
},
{
"path": "boxmot/engine/inference.py",
"chars": 19828,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\n\"\"\"\nUnified inference module for BoxMOT.\n\nThis module provides a consisten"
},
{
"path": "boxmot/engine/results.py",
"chars": 6962,
"preview": "import time\nfrom pathlib import Path\nfrom typing import Any, Callable, Iterator, Union\n\nimport cv2\nimport numpy as np\n\n\n"
},
{
"path": "boxmot/engine/tracker.py",
"chars": 10274,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom functools import partial\nfrom pathlib import Path\n\nimport cv2\nimport "
},
{
"path": "boxmot/engine/tuner.py",
"chars": 6811,
"preview": "#!/usr/bin/env python3\n\"\"\"\nThis script runs a hyperparameter tuning process for a multi-object tracking (MOT) tracker us"
},
{
"path": "boxmot/motion/__init__.py",
"chars": 45,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
},
{
"path": "boxmot/motion/cmc/__init__.py",
"chars": 2207,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass\nfrom"
},
{
"path": "boxmot/motion/cmc/base_cmc.py",
"chars": 3362,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import annotations\n\nfrom abc import ABC, abstractmethod\nfr"
},
{
"path": "boxmot/motion/cmc/ecc.py",
"chars": 3044,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import annotations\n\nfrom typing import Optional\n\nimport cv"
},
{
"path": "boxmot/motion/cmc/orb.py",
"chars": 6712,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import annotations\n\nimport copy\nfrom typing import Optiona"
},
{
"path": "boxmot/motion/cmc/sift.py",
"chars": 6410,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import annotations\n\nimport copy\nfrom typing import Optiona"
},
{
"path": "boxmot/motion/cmc/sof.py",
"chars": 3941,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import annotations\n\nfrom typing import Optional\n\nimport cv"
},
{
"path": "boxmot/motion/kalman_filters/__init__.py",
"chars": 356,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom .base import BaseKalmanFilter\nfrom .xyah import KalmanFilterXYAH\nfrom"
},
{
"path": "boxmot/motion/kalman_filters/base.py",
"chars": 17220,
"preview": "from collections import deque\nfrom typing import Optional, Tuple, Union\n\nimport numpy as np\nimport scipy.linalg\n\n\"\"\"\nTab"
},
{
"path": "boxmot/motion/kalman_filters/xyah.py",
"chars": 6513,
"preview": "from typing import Tuple\n\nimport numpy as np\n\nfrom boxmot.motion.kalman_filters.base import BaseKalmanFilter\n\n\nclass Kal"
},
{
"path": "boxmot/motion/kalman_filters/xyhr.py",
"chars": 8442,
"preview": "from copy import deepcopy\nfrom typing import Optional, Tuple\n\nimport numpy as np\nimport scipy.linalg\n\nfrom boxmot.motion"
},
{
"path": "boxmot/motion/kalman_filters/xysr.py",
"chars": 18188,
"preview": "from collections import deque\nfrom copy import deepcopy\nfrom typing import Optional, Tuple\n\nimport numpy as np\n\nfrom box"
},
{
"path": "boxmot/motion/kalman_filters/xywh.py",
"chars": 7811,
"preview": "from typing import Tuple\n\nimport numpy as np\n\nfrom boxmot.motion.kalman_filters.base import BaseKalmanFilter\n\n\nclass Kal"
},
{
"path": "boxmot/postprocessing/__init__.py",
"chars": 45,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
},
{
"path": "boxmot/postprocessing/gbrc.py",
"chars": 6260,
"preview": "import argparse\nimport concurrent.futures\nfrom pathlib import Path\n\nimport numpy as np\nfrom sklearn.ensemble import Grad"
},
{
"path": "boxmot/postprocessing/gsi.py",
"chars": 6013,
"preview": "import argparse\nimport concurrent.futures\nfrom pathlib import Path\n\nimport numpy as np\nfrom sklearn.gaussian_process imp"
},
{
"path": "boxmot/reid/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "boxmot/reid/backbones/__init__.py",
"chars": 45,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
},
{
"path": "boxmot/reid/backbones/clip/__init__.py",
"chars": 45,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
},
{
"path": "boxmot/reid/backbones/clip/clip/__init__.py",
"chars": 45,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
},
{
"path": "boxmot/reid/backbones/clip/clip/clip.py",
"chars": 8848,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport hashlib\nimport os\nimport urllib\nimport warnings\nfrom typing import "
},
{
"path": "boxmot/reid/backbones/clip/clip/model.py",
"chars": 20371,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom collections import OrderedDict\nfrom typing import Tuple, Union\n\nimpor"
},
{
"path": "boxmot/reid/backbones/clip/clip/simple_tokenizer.py",
"chars": 4907,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport gzip\nimport html\nfrom functools import lru_cache\n\nimport ftfy\nimpor"
},
{
"path": "boxmot/reid/backbones/clip/config/__init__.py",
"chars": 45,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
},
{
"path": "boxmot/reid/backbones/clip/config/defaults.py",
"chars": 7995,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom yacs.config import CfgNode as CN\n\n# ---------------------------------"
},
{
"path": "boxmot/reid/backbones/clip/config/defaults_base.py",
"chars": 6433,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom yacs.config import CfgNode as CN\n\n# ---------------------------------"
},
{
"path": "boxmot/reid/backbones/clip/make_model.py",
"chars": 6883,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport torch\nimport torch.nn as nn\n\nfrom .clip.simple_tokenizer import Sim"
},
{
"path": "boxmot/reid/backbones/clip/make_model_clipreid.py",
"chars": 10314,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport torch\nimport torch.nn as nn\n\nfrom .clip.simple_tokenizer import Sim"
},
{
"path": "boxmot/reid/backbones/hacnn.py",
"chars": 13629,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import absolute_import, division\n\nimport torch\nfrom torch "
},
{
"path": "boxmot/reid/backbones/lmbn/__init__.py",
"chars": 45,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
},
{
"path": "boxmot/reid/backbones/lmbn/attention.py",
"chars": 8688,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport math\nimport random\n\nimport torch\nfrom torch import nn\nfrom torch.nn"
},
{
"path": "boxmot/reid/backbones/lmbn/bnneck.py",
"chars": 5790,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom torch import nn\n\n\nclass BNNeck(nn.Module):\n def __init__(self, inp"
},
{
"path": "boxmot/reid/backbones/lmbn/lmbn_n.py",
"chars": 6123,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport copy\n\nimport torch\nfrom torch import nn\n\nfrom boxmot.reid.backbones"
},
{
"path": "boxmot/reid/backbones/mlfn.py",
"chars": 7897,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import absolute_import, division\n\nimport torch\nimport torc"
},
{
"path": "boxmot/reid/backbones/mobilenetv2.py",
"chars": 8116,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import absolute_import, division\n\nimport torch.utils.model"
},
{
"path": "boxmot/reid/backbones/osnet.py",
"chars": 16656,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import absolute_import, division\n\nimport warnings\n\nimport "
},
{
"path": "boxmot/reid/backbones/osnet_ain.py",
"chars": 17503,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import absolute_import, division\n\nimport warnings\n\nimport "
},
{
"path": "boxmot/reid/backbones/resnet.py",
"chars": 15035,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\n\"\"\"\nCode source: https://github.com/pytorch/vision\n\"\"\"\nfrom __future__ imp"
},
{
"path": "boxmot/reid/backends/base_backend.py",
"chars": 10423,
"preview": "import os\nfrom abc import abstractmethod\nfrom pathlib import Path\n\nimport cv2\nimport gdown\nimport numpy as np\nimport tor"
},
{
"path": "boxmot/reid/backends/onnx_backend.py",
"chars": 1492,
"preview": "from boxmot.reid.backends.base_backend import BaseModelBackend\n\n\nclass ONNXBackend(BaseModelBackend):\n\n def __init__("
},
{
"path": "boxmot/reid/backends/openvino_backend.py",
"chars": 1783,
"preview": "from pathlib import Path\n\nfrom boxmot.reid.backends.base_backend import BaseModelBackend\nfrom boxmot.utils import logger"
},
{
"path": "boxmot/reid/backends/pytorch_backend.py",
"chars": 671,
"preview": "from boxmot.reid.backends.base_backend import BaseModelBackend\nfrom boxmot.reid.core.registry import ReIDModelRegistry\n\n"
},
{
"path": "boxmot/reid/backends/tensorrt_backend.py",
"chars": 6432,
"preview": "from collections import OrderedDict, namedtuple\n\nimport numpy as np\nimport torch\n\nfrom boxmot.reid.backends.base_backend"
},
{
"path": "boxmot/reid/backends/tflite_backend.py",
"chars": 3586,
"preview": "from pathlib import Path\nfrom importlib import import_module\nfrom typing import Any\n\nimport numpy as np\nimport torch\n\nfr"
},
{
"path": "boxmot/reid/backends/torchscript_backend.py",
"chars": 608,
"preview": "import torch\n\nfrom boxmot.reid.backends.base_backend import BaseModelBackend\nfrom boxmot.utils import logger as LOGGER\n\n"
},
{
"path": "boxmot/reid/core/__init__.py",
"chars": 602,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport pandas as pd\n\n\ndef export_formats():\n # yolo tracking export for"
},
{
"path": "boxmot/reid/core/auto_backend.py",
"chars": 4720,
"preview": "from pathlib import Path\nfrom typing import Tuple, Union\n\nimport torch\n\nfrom boxmot.reid.backends.onnx_backend import ON"
},
{
"path": "boxmot/reid/core/config.py",
"chars": 4420,
"preview": "MODEL_TYPES = [\n \"resnet50\",\n \"resnet101\",\n \"mlfn\",\n \"hacnn\",\n \"mobilenetv2_x1_0\",\n \"mobilenetv2_x1_4\""
},
{
"path": "boxmot/reid/core/factory.py",
"chars": 1311,
"preview": "from boxmot.reid.backbones.clip.make_model import make_model\nfrom boxmot.reid.backbones.hacnn import HACNN\nfrom boxmot.r"
},
{
"path": "boxmot/reid/core/registry.py",
"chars": 3766,
"preview": "# model_registry.py\nfrom collections import OrderedDict\n\nimport torch\n\nfrom boxmot.reid.core.config import MODEL_TYPES, "
},
{
"path": "boxmot/reid/core/reid_handler.py",
"chars": 1291,
"preview": "from pathlib import Path\nfrom typing import Union\n\nimport numpy as np\n\nfrom boxmot.reid.core.auto_backend import ReidAut"
},
{
"path": "boxmot/reid/exporters/base_exporter.py",
"chars": 2465,
"preview": "from pathlib import Path\n\nfrom boxmot.utils import logger as LOGGER\nfrom boxmot.utils.checks import RequirementsChecker\n"
},
{
"path": "boxmot/reid/exporters/onnx_exporter.py",
"chars": 6898,
"preview": "import inspect\nimport torch\nfrom torch.export import Dim\n\nfrom boxmot.reid.exporters.base_exporter import BaseExporter\nf"
},
{
"path": "boxmot/reid/exporters/openvino_exporter.py",
"chars": 1725,
"preview": "\nfrom boxmot.reid.exporters.base_exporter import BaseExporter\nfrom boxmot.utils import logger as LOGGER\n\n\nclass OpenVINO"
},
{
"path": "boxmot/reid/exporters/tensorrt_exporter.py",
"chars": 3546,
"preview": "from boxmot.reid.exporters.base_exporter import BaseExporter\nfrom boxmot.reid.exporters.onnx_exporter import ONNXExporte"
},
{
"path": "boxmot/reid/exporters/tflite_exporter.py",
"chars": 4069,
"preview": "import inspect\nimport os\nimport shutil\nimport sys\nfrom pathlib import Path\nfrom typing import Optional, Tuple\n\nfrom boxm"
},
{
"path": "boxmot/reid/exporters/torchscript_exporter.py",
"chars": 470,
"preview": "import torch\n\nfrom boxmot.reid.exporters.base_exporter import BaseExporter\n\n\nclass TorchScriptExporter(BaseExporter):\n "
},
{
"path": "boxmot/trackers/__init__.py",
"chars": 452,
"preview": "from boxmot.trackers.boosttrack.boosttrack import BoostTrack\nfrom boxmot.trackers.botsort.botsort import BotSort\nfrom bo"
},
{
"path": "boxmot/trackers/basetracker.py",
"chars": 12760,
"preview": "import colorsys\nimport hashlib\nfrom abc import ABC, abstractmethod\n\nimport cv2 as cv\nimport numpy as np\n\nfrom boxmot.tra"
},
{
"path": "boxmot/trackers/boosttrack/__init__.py",
"chars": 45,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
},
{
"path": "boxmot/trackers/boosttrack/assoc.py",
"chars": 7717,
"preview": "import warnings\nfrom copy import deepcopy\nfrom typing import Optional\n\nimport lap\nimport numpy as np\n\n\ndef shape_similar"
},
{
"path": "boxmot/trackers/boosttrack/boosttrack.py",
"chars": 17783,
"preview": "from collections import deque\nfrom typing import List, Optional\n\nimport numpy as np\n\nfrom boxmot.motion.cmc import get_c"
},
{
"path": "boxmot/trackers/botsort/__init__.py",
"chars": 45,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
},
{
"path": "boxmot/trackers/botsort/basetrack.py",
"chars": 3959,
"preview": "from collections import OrderedDict\n\nimport numpy as np\n\n\nclass TrackState:\n \"\"\"\n Enum-like class for tracking sta"
},
{
"path": "boxmot/trackers/botsort/botsort.py",
"chars": 17014,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom pathlib import Path\n\nimport numpy as np\nimport torch\n\nfrom boxmot.mot"
},
{
"path": "boxmot/trackers/botsort/botsort_track.py",
"chars": 8525,
"preview": "from collections import deque\n\nimport cv2\nimport numpy as np\n\nfrom boxmot.motion.kalman_filters.xywh import KalmanFilter"
},
{
"path": "boxmot/trackers/botsort/botsort_utils.py",
"chars": 2469,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom typing import List, Tuple\n\nimport numpy as np\n\nfrom boxmot.utils.matc"
},
{
"path": "boxmot/trackers/bytetrack/__init__.py",
"chars": 45,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
},
{
"path": "boxmot/trackers/bytetrack/basetrack.py",
"chars": 1068,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom collections import OrderedDict\n\nimport numpy as np\n\n\nclass TrackState"
},
{
"path": "boxmot/trackers/bytetrack/bytetrack.py",
"chars": 17522,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom collections import deque\n\nimport cv2\nimport numpy as np\n\nfrom boxmot."
},
{
"path": "boxmot/trackers/deepocsort/__init__.py",
"chars": 45,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
},
{
"path": "boxmot/trackers/deepocsort/deepocsort.py",
"chars": 18910,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom collections import deque\nfrom pathlib import Path\n\nimport numpy as np"
},
{
"path": "boxmot/trackers/detection_layout.py",
"chars": 3156,
"preview": "from __future__ import annotations\n\nfrom dataclasses import dataclass\n\nimport numpy as np\n\n\n@dataclass(frozen=True)\nclas"
},
{
"path": "boxmot/trackers/hybridsort/__init__.py",
"chars": 45,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
},
{
"path": "boxmot/trackers/hybridsort/association.py",
"chars": 31616,
"preview": "\nimport numpy as np\n\n\ndef intersection_batch(bboxes1, bboxes2):\n bboxes2 = np.expand_dims(bboxes2, 0)\n bboxes1 = n"
},
{
"path": "boxmot/trackers/hybridsort/hybridsort.py",
"chars": 29479,
"preview": "# Hybrid-SORT-ReID with ECC + ReID (explicit config, BaseTracker-style)\n# - Assumes detection input is M x [x1, y1, x2, "
},
{
"path": "boxmot/trackers/hybridsort/kalmanfilter_score.py",
"chars": 59477,
"preview": "\n# -*- coding: utf-8 -*-\n# pylint: disable=invalid-name, too-many-arguments, too-many-branches,\n# pylint: disable=too-ma"
},
{
"path": "boxmot/trackers/hybridsort/kalmanfilter_score_new.py",
"chars": 59726,
"preview": "# -*- coding: utf-8 -*-\n# pylint: disable=invalid-name, too-many-arguments, too-many-branches,\n# pylint: disable=too-man"
},
{
"path": "boxmot/trackers/ocsort/__init__.py",
"chars": 45,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
},
{
"path": "boxmot/trackers/ocsort/ocsort.py",
"chars": 21128,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\n\"\"\"\nThis script is adopted from the SORT script by Alex Bewley alex@bewley"
},
{
"path": "boxmot/trackers/sfsort/__init__.py",
"chars": 45,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
},
{
"path": "boxmot/trackers/sfsort/sfsort.py",
"chars": 25519,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n# SFSORT implementation adapted for BoxMOT\n\nfrom __future__ import annotati"
},
{
"path": "boxmot/trackers/strongsort/__init__.py",
"chars": 45,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
},
{
"path": "boxmot/trackers/strongsort/sort/__init__.py",
"chars": 45,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n"
},
{
"path": "boxmot/trackers/strongsort/sort/detection.py",
"chars": 1179,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\n\nclass Detection(object):\n \"\"\"\n This class represents a bounding box"
},
{
"path": "boxmot/trackers/strongsort/sort/iou_matching.py",
"chars": 2856,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import absolute_import\n\nimport numpy as np\n\nfrom . import "
},
{
"path": "boxmot/trackers/strongsort/sort/linear_assignment.py",
"chars": 13345,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import absolute_import\n\nimport numpy as np\nimport torch\nfr"
},
{
"path": "boxmot/trackers/strongsort/sort/track.py",
"chars": 6445,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport os\n\nimport numpy as np\n\nfrom boxmot.motion.kalman_filters.xyah impo"
},
{
"path": "boxmot/trackers/strongsort/sort/tracker.py",
"chars": 5735,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom __future__ import absolute_import\n\nimport numpy as np\n\nfrom boxmot.mo"
},
{
"path": "boxmot/trackers/strongsort/strongsort.py",
"chars": 6398,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom pathlib import Path\n\nimport numpy as np\nfrom torch import device\n\nfro"
},
{
"path": "boxmot/trackers/strongsort/strongsort_kf.py",
"chars": 8014,
"preview": "# vim: expandtab:ts=4:sw=4\nimport numpy as np\nimport scipy.linalg\n\n\"\"\"\nTable for the 0.95 quantile of the chi-square dis"
},
{
"path": "boxmot/trackers/tracker_zoo.py",
"chars": 3294,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport importlib\nimport yaml\n\nfrom boxmot.utils import TRACKER_CONFIGS\n\nRE"
},
{
"path": "boxmot/utils/__init__.py",
"chars": 1519,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport multiprocessing as mp\nimport os\nimport sys\nimport threading\nfrom pa"
},
{
"path": "boxmot/utils/analysis/mot_ds_kf_tuning.py",
"chars": 8522,
"preview": "#!/usr/bin/env python3\nimport argparse\nfrom pathlib import Path\n\nimport numpy as np\nfrom scipy.linalg import pinv\n\nfrom "
},
{
"path": "boxmot/utils/analysis/mot_seq_bb_plot.py",
"chars": 5727,
"preview": "#!/usr/bin/env python3\nimport argparse\nfrom pathlib import Path\nfrom typing import Union\n\nimport cv2\nimport matplotlib.p"
},
{
"path": "boxmot/utils/analysis/ray_results.py",
"chars": 7513,
"preview": "#!/usr/bin/env python3\n\"\"\"\nratune.py\n\nLoad a Ray Tune experiment directory, print summaries, plot chosen metrics\nfor eac"
},
{
"path": "boxmot/utils/association.py",
"chars": 8091,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport numpy as np\n\nfrom boxmot.utils.iou import AssociationFunction\n\n\ndef"
},
{
"path": "boxmot/utils/checks.py",
"chars": 5039,
"preview": "import shutil\nimport subprocess\nimport sys\nfrom importlib.metadata import PackageNotFoundError, version\nfrom pathlib imp"
},
{
"path": "boxmot/utils/clean.py",
"chars": 1954,
"preview": "import os\nimport shutil\n\n\ndef cleanup_mot17(data_dir, keep_detection='FRCNN'):\n \"\"\"\n Cleans up the MOT17 dataset t"
},
{
"path": "boxmot/utils/custom_mot_challenge_2d_box.py",
"chars": 9562,
"preview": "import numpy as np\nfrom scipy.optimize import linear_sum_assignment\nfrom trackeval.datasets.mot_challenge_2d_box import "
},
{
"path": "boxmot/utils/dataloaders/dataset.py",
"chars": 12436,
"preview": "\"\"\"\nMOT Dataset Loader\n==================\n\nProvides :class:`MOTDataset` and :class:`MOTSequence` for loading and iterati"
},
{
"path": "boxmot/utils/dataloaders/video.py",
"chars": 4426,
"preview": "import csv\nimport glob\nimport os\nfrom pathlib import Path\nfrom typing import Generator, List, Union\n\nimport cv2\nimport n"
},
{
"path": "boxmot/utils/download.py",
"chars": 10580,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\"\"\"\nUtility script to download and extract BoxMOT releases and MOT evalua"
},
{
"path": "boxmot/utils/iou.py",
"chars": 13535,
"preview": "import cv2 as cv\nimport numpy as np\n\n\ndef iou_obb_pair(i, j, bboxes1, bboxes2):\n \"\"\"\n Compute IoU for the rotated "
},
{
"path": "boxmot/utils/matching.py",
"chars": 4583,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport lap\nimport numpy as np\nfrom scipy.spatial.distance import cdist\n\nfr"
},
{
"path": "boxmot/utils/misc.py",
"chars": 4087,
"preview": "import sys\nimport threading\nfrom pathlib import Path\n\nimport click\n\nfrom boxmot.utils import WEIGHTS, logger as LOGGER\n\n"
},
{
"path": "boxmot/utils/mot_utils.py",
"chars": 6448,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport re\nfrom pathlib import Path\nfrom typing import Tuple, Union\n\nimport"
},
{
"path": "boxmot/utils/ops.py",
"chars": 7115,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nfrom typing import Tuple, Union\n\nimport cv2\nimport numpy as np\nimport torc"
},
{
"path": "boxmot/utils/plots.py",
"chars": 8721,
"preview": "import os\n\nimport matplotlib.pyplot as plt\nimport numpy as np\n\n\nclass MetricsPlotter:\n \"\"\"\n A class for plotting t"
},
{
"path": "boxmot/utils/run_mot_challenge.py",
"chars": 5395,
"preview": "\"\"\" run_mot_challenge.py\n\nRun example:\nrun_mot_challenge.py --USE_PARALLEL False --METRICS Hota --TRACKERS_TO_EVAL Lif_T"
},
{
"path": "boxmot/utils/timing.py",
"chars": 10662,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport time\n\nfrom boxmot.utils import logger as LOGGER\n\n\nclass TimingStats"
},
{
"path": "boxmot/utils/torch_utils.py",
"chars": 2520,
"preview": "# Mikel Broström 🔥 BoxMOT 🧾 AGPL-3.0 license\n\nimport os\nimport platform\n\nimport torch\n\nfrom .. import __version__\nfrom ."
},
{
"path": "boxmot/utils/visualization.py",
"chars": 12812,
"preview": "import colorsys\nimport hashlib\nfrom abc import ABC, abstractmethod\n\nimport cv2 as cv\nimport numpy as np\n\n\nclass BaseVisu"
},
{
"path": "docs/modes/eval.md",
"chars": 155,
"preview": "# eval\n\n::: mkdocs-click\n :module: boxmot.engine.cli\n :command: boxmot\n :depth: 1\n :command: eval\n :style"
},
{
"path": "docs/modes/generate.md",
"chars": 167,
"preview": "# generate\n\n::: mkdocs-click\n :module: boxmot.engine.cli\n :command: boxmot\n :depth: 1\n :command: generate\n "
},
{
"path": "docs/modes/track.md",
"chars": 158,
"preview": "# track\n\n::: mkdocs-click\n :module: boxmot.engine.cli\n :command: boxmot\n :depth: 1\n :command: track\n :sty"
},
{
"path": "docs/modes/tune.md",
"chars": 155,
"preview": "# tune\n\n::: mkdocs-click\n :module: boxmot.engine.cli\n :command: boxmot\n :depth: 1\n :command: tune\n :style"
},
{
"path": "docs/trackers/boosttrack.md",
"chars": 66,
"preview": "# BoostTrack\n\n::: boxmot.trackers.boosttrack.boosttrack.BoostTrack"
},
{
"path": "docs/trackers/botsort.md",
"chars": 54,
"preview": "# BotSort\n\n::: boxmot.trackers.botsort.botsort.BotSort"
},
{
"path": "docs/trackers/bytetrack.md",
"chars": 102,
"preview": "<!-- docs/api/trackers/bytetrack.md -->\n# ByteTrack\n\n::: boxmot.trackers.bytetrack.bytetrack.ByteTrack"
},
{
"path": "docs/trackers/deepocsort.md",
"chars": 66,
"preview": "# DeepOcSort\n\n::: boxmot.trackers.deepocsort.deepocsort.DeepOcSort"
},
{
"path": "docs/trackers/ocsort.md",
"chars": 50,
"preview": "# OcSort\n\n::: boxmot.trackers.ocsort.ocsort.OcSort"
},
{
"path": "docs/trackers/sfsort.md",
"chars": 51,
"preview": "# SFSORT\n\n::: boxmot.trackers.sfsort.sfsort.SFSORT\n"
}
]
// ... and 30 more files (download for full content)
About this extraction
This page contains the full source code of the mikel-brostrom/boxmot GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 230 files (2.7 MB), approximately 727.0k tokens, and a symbol index with 1226 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.