Skip to content

Update README.md

Update README.md #1180

Workflow file for this run

# 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
jobs:
test-tracking-methods:
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.11']
# leads to too many workflow which ends up queued
# tracking-method: [hybridsort, botsort, ocsort, bytetrack]
# 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 # Prepare environment with python 3.9
with:
python-version: ${{ matrix.python-version }}
cache: 'pip' # caching pip dependencies
- name: Install requirements
shell: bash # for Windows compatibility
run: |
python -m pip install --upgrade pip setuptools wheel
pip install poetry
poetry config virtualenvs.create false
poetry install --with yolo
- name: Generate detections and embeddings
run: |
python tracking/generate_dets_n_embs.py --source ./assets/MOT17-mini/train --yolo-model yolov8n.pt --reid-model osnet_x0_25_msmt17.pt --imgsz 320
- name: Run tracking method
run: |
python tracking/generate_mot_results.py --tracking-method hybridsort --dets yolov8n --embs osnet_x0_25_msmt17 --imgsz 320
python tracking/generate_mot_results.py --tracking-method botsort --dets yolov8n --embs osnet_x0_25_msmt17 --imgsz 320
python tracking/generate_mot_results.py --tracking-method ocsort --dets yolov8n --embs osnet_x0_25_msmt17 --imgsz 320
python tracking/generate_mot_results.py --tracking-method bytetrack --dets yolov8n --embs osnet_x0_25_msmt17 --imgsz 320
python tracking/generate_mot_results.py --tracking-method strongsort --dets yolov8n --embs osnet_x0_25_msmt17 --imgsz 320
test-evolution:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest] # skip windows-latest for
python-version: ['3.8', '3.11']
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 # Prepare environment with python 3.9
with:
python-version: ${{ matrix.python-version }}
cache: 'pip' # caching pip dependencies
- name: Install requirements
shell: bash # for Windows compatibility
run: |
python -m pip install --upgrade pip setuptools wheel poetry
poetry config virtualenvs.create false
poetry install --with yolo,evolve
- name: Generate detections and embeddings
run: |
python tracking/generate_dets_n_embs.py --source ./assets/MOT17-mini/train --yolo-model yolov8n.pt --reid-model osnet_x0_25_msmt17.pt --imgsz 320
- name: Evolve set of parameters for selected tracking method
run: |
python tracking/evolve.py --benchmark MOT17-mini --dets yolov8n --embs osnet_x0_25_msmt17 --n-trials 9 --tracking-method bytetrack
test-mot-metrics:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest] # skip windows-latest for
python-version: ['3.8', '3.11']
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 # Prepare environment with python 3.9
with:
python-version: ${{ matrix.python-version }}
cache: 'pip' # caching pip dependencies
- name: Install requirements
shell: bash # for Windows compatibility
run: |
python -m pip install --upgrade pip setuptools wheel poetry
poetry config virtualenvs.create false
poetry install
- name: Generate detections and embeddings
run: |
python tracking/generate_dets_n_embs.py --source ./assets/MOT17-mini/train --yolo-model yolov8n.pt --reid-model osnet_x0_25_msmt17.pt --imgsz 320
python tracking/generate_mot_results.py --dets yolov8n --reid osnet_x0_25_msmt17 --tracking-method ocsort
- name: Evolve set of parameters for selected tracking method
run: |
python tracking/val.py --benchmark MOT17-mini --dets yolov8n --embs osnet_x0_25_msmt17 --tracking-method ocsort
test-tracking-with-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.11'
- run: |
python -m pip install --upgrade pip setuptools wheel poetry
poetry config virtualenvs.create false
poetry install --with yolo
- name: Test tracking with pose models
env:
IMG: ./assets/MOT17-mini/train/MOT17-02-FRCNN/img1/000001.jpg
run: python tracking/track.py --yolo-model weights/yolov8n-pose.pt --source $IMG --imgsz 320
test-tracking-with-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: |
python -m pip install --upgrade pip setuptools wheel poetry
poetry config virtualenvs.create false
poetry install --with yolo
- name: Test tracking with pose models
env:
IMG: ./assets/MOT17-mini/train/MOT17-02-FRCNN/img1/000001.jpg
run: |
python tracking/track.py --yolo-model yolov8n.pt --source $IMG --imgsz 320
python tracking/track.py --yolo-model yolox_n.pt --source $IMG --imgsz 320
python tracking/track.py --yolo-model yolo_nas_s.pt --source $IMG --imgsz 320
test-tracking-with-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.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip setuptools wheel poetry
poetry config virtualenvs.create false
poetry install --with yolo
- name: Test tracking with seg models
env:
IMG: ./assets/MOT17-mini/train/MOT17-02-FRCNN/img1/000001.jpg
run: python tracking/track.py --tracking-method deepocsort --yolo-model yolov8n-seg.pt --source $IMG
test-export-reid-models:
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.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip setuptools wheel poetry
poetry config virtualenvs.create false
poetry install --with export
- name: Test export models
run: python boxmot/appearance/reid_export.py --include torchscript onnx openvino --device cpu --batch-size 3 --dynamic
- name: Test inference on exported models
env:
IMG: ./assets/MOT17-mini/train/MOT17-02-FRCNN/img1/000001.jpg
run: |
python tracking/track.py --reid-model tracking/weights/osnet_x0_25_msmt17.torchscript --source $IMG --imgsz 320
python tracking/track.py --reid-model tracking/weights/osnet_x0_25_msmt17.onnx --source $IMG --imgsz 320
python tracking/track.py --reid-model tracking/weights/osnet_x0_25_msmt17_openvino_model --source $IMG --imgsz 320
test-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.11'
- run: |
python -m pip install --upgrade pip setuptools wheel poetry
poetry config virtualenvs.create false
poetry install --with test
- name: Test export models
run: python boxmot/appearance/reid_export.py --include torchscript onnx openvino --device cpu --batch-size 3 --dynamic
- 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
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.11'
# - 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:
- test-tracking-methods
- test-mot-metrics
- test-evolution
- test-export-reid-models
- test-tests
- test-tracking-with-pose
- test-tracking-with-seg
- test-tracking-with-yolos
if: always() # This ensures the job runs regardless of previous job failures
runs-on: ubuntu-latest
steps:
- name: Prepare environment variables
run: |
echo "test-tracking-methods_STATUS=${{ needs.test-tracking-methods.result }}" >> $GITHUB_ENV
echo "test-mot-metrics_STATUS=${{ needs.test-mot-metrics.result }}" >> $GITHUB_ENV
echo "test-evolution_STATUS=${{ needs.test-evolution.result }}" >> $GITHUB_ENV
echo "test-export-reid-models_STATUS=${{ needs.test-export-reid-modelsn.result }}" >> $GITHUB_ENV
echo "test-tests_STATUS=${{ needs.test-tests.result }}" >> $GITHUB_ENV
echo "test-tracking-with-pose_STATUS=${{ needs.test-tracking-with-pose.result }}" >> $GITHUB_ENV
echo "test-tracking-with-seg_STATUS=${{ needs.test-tracking-with-seg.result }}" >> $GITHUB_ENV
echo "test-tracking-with-yolos_STATUS=${{ needs.test-tracking-with-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"