read me file success #7
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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: | | |
if [[ "$OSTYPE" == "darwin"* ]]; then | |
# macOS | |
sed -i '' 's/source="torch_cuda121"/source="torchcpu"/g' pyproject.toml | |
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then | |
# Linux | |
sed -i 's/source="torch_cuda121"/source="torchcpu"/g' pyproject.toml | |
fi | |
python -m pip install --upgrade pip setuptools wheel poetry | |
poetry config virtualenvs.create false | |
poetry lock --no-update | |
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: | | |
if [[ "$OSTYPE" == "darwin"* ]]; then | |
# macOS | |
sed -i '' 's/source="torch_cuda121"/source="torchcpu"/g' pyproject.toml | |
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then | |
# Linux | |
sed -i 's/source="torch_cuda121"/source="torchcpu"/g' pyproject.toml | |
fi | |
python -m pip install --upgrade pip setuptools wheel poetry | |
poetry config virtualenvs.create false | |
poetry lock --no-update | |
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: | | |
if [[ "$OSTYPE" == "darwin"* ]]; then | |
# macOS | |
sed -i '' 's/source="torch_cuda121"/source="torchcpu"/g' pyproject.toml | |
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then | |
# Linux | |
sed -i 's/source="torch_cuda121"/source="torchcpu"/g' pyproject.toml | |
fi | |
python -m pip install --upgrade pip setuptools wheel poetry | |
poetry config virtualenvs.create false | |
poetry lock --no-update | |
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: Evaluation on pregenerated dets and embs | |
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: | | |
if [[ "$OSTYPE" == "darwin"* ]]; then | |
# macOS | |
sed -i '' 's/source="torch_cuda121"/source="torchcpu"/g' pyproject.toml | |
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then | |
# Linux | |
sed -i 's/source="torch_cuda121"/source="torchcpu"/g' pyproject.toml | |
fi | |
python -m pip install --upgrade pip setuptools wheel poetry | |
poetry config virtualenvs.create false | |
poetry lock --no-update | |
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: | | |
if [[ "$OSTYPE" == "darwin"* ]]; then | |
# macOS | |
sed -i '' 's/source="torch_cuda121"/source="torchcpu"/g' pyproject.toml | |
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then | |
# Linux | |
sed -i 's/source="torch_cuda121"/source="torchcpu"/g' pyproject.toml | |
fi | |
python -m pip install --upgrade pip setuptools wheel poetry | |
poetry config virtualenvs.create false | |
poetry lock --no-update | |
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: | | |
if [[ "$OSTYPE" == "darwin"* ]]; then | |
# macOS | |
sed -i '' 's/source="torch_cuda121"/source="torchcpu"/g' pyproject.toml | |
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then | |
# Linux | |
sed -i 's/source="torch_cuda121"/source="torchcpu"/g' pyproject.toml | |
fi | |
python -m pip install --upgrade pip setuptools wheel poetry | |
poetry config virtualenvs.create false | |
poetry lock --no-update | |
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: | | |
if [[ "$OSTYPE" == "darwin"* ]]; then | |
# macOS | |
sed -i '' 's/source="torch_cuda121"/source="torchcpu"/g' pyproject.toml | |
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then | |
# Linux | |
sed -i 's/source="torch_cuda121"/source="torchcpu"/g' pyproject.toml | |
fi | |
python -m pip install --upgrade pip setuptools wheel poetry | |
poetry config virtualenvs.create false | |
poetry lock --no-update | |
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: | | |
if [[ "$OSTYPE" == "darwin"* ]]; then | |
# macOS | |
sed -i '' 's/source="torch_cuda121"/source="torchcpu"/g' pyproject.toml | |
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then | |
# Linux | |
sed -i 's/source="torch_cuda121"/source="torchcpu"/g' pyproject.toml | |
fi | |
python -m pip install --upgrade pip setuptools wheel poetry | |
poetry config virtualenvs.create false | |
poetry lock --no-update | |
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" |