Skip to content

Benchmark

Benchmark #16

Workflow file for this run

# name of the workflow, what it is doing (optional)
name: Benchmark
# events that trigger the workflow (required)
on:
push:
# pushes to the following branches
branches:
- main
pull_request:
# pull request where master is target
branches:
- main
workflow_dispatch: # Add this line to allow manual triggering
jobs:
mot-metrics-benchmark:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
python-version: ['3.11']
tracker: ["ocsort", "bytetrack", "botsort", "hybridsort", "deepocsort", "imprassoc", "strongsort"]
timeout-minutes: 50
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 install -y jq unzip curl
# 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: Download eval tools repo
run: |
git clone https://github.com/JonathonLuiten/TrackEval.git tracking/val_utils
# Restore the cached dataset (if available)
- name: Restore MOT17 dataset cache
uses: actions/cache@v3
with:
# Specify the path where the dataset is stored
path: tracking/val_utils/MOT17.zip
# Create a cache key, you can use a fixed key if the dataset is static
key: mot17-dataset-cache
- name: Download eval data
run: |
wget https://github.com/mikel-brostrom/boxmot/releases/download/v10.0.83/runs.zip -O runs.zip
wget https://github.com/mikel-brostrom/boxmot/releases/download/v10.0.83/MOT17-50.zip -O tracking/val_utils/MOT17.zip
unzip runs.zip -d runs
mkdir -p tracking/val_utils/data/MOT17
unzip tracking/val_utils/MOT17.zip -d tracking/val_utils/data/MOT17
# Cache data for future runs (only if the cache was not already restored)
- name: Cache MOT17.zip if not already cached
if: steps.cache-restore.outputs.cache-hit != 'true' # Only run if the cache was not hit
uses: actions/cache@v3
with:
path: tracking/val_utils/MOT17.zip
key: mot17-dataset-cache
- name: Evaluation and Summarize Results
run: |
if python3 tracking/val.py --imgsz 320 --classes 0 --benchmark MOT17 --yolo-model yolov8x.pt --reid-model osnet_x1_0_dukemtmcreid.pt --tracking-method ${{ matrix.tracker }} --verbose --source ./tracking/val_utils/data/MOT17/train --ci; 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 results
TRACKER_NAME=$(echo ${{ matrix.tracker }} | awk '{print toupper(substr($0,1,1)) tolower(substr($0,2))}')
echo "$TRACKER_NAME,$STATUS,$HOTA,$MOTA,$IDF1" > results/${{ matrix.tracker }}.txt
- name: Show Results
run: cat results/${{ matrix.tracker }}.txt
- name: Upload Results
uses: actions/upload-artifact@v3
with:
name: results
path: results/${{ matrix.tracker }}.txt
combine-results:
runs-on: ubuntu-latest
needs: mot-metrics-benchmark
steps:
- name: Download all results
uses: actions/download-artifact@v3
with:
name: results
path: results
- name: Check downloaded files
run: |
echo "Downloaded files in the results directory:"
ls -la results/
- name: Combine results
run: |
echo "Format,Status❔,HOTA,MOTA,IDF1" > combined_results.csv
for file in results/*; do
if [ -f "$file" ]; then
cat "$file" >> combined_results.csv # Use cat instead of tail to include all lines
fi
done
# Sort the results by HOTA in descending order
(head -n 1 combined_results.csv && tail -n +2 combined_results.csv | sort -t, -k3 -nr) > sorted_results.csv
# Create a pretty table from the sorted_results.csv file
column -s, -t sorted_results.csv > pretty_results.txt
- name: Show Combined Results
run: cat pretty_results.txt
- name: Upload Combined Results
uses: actions/upload-artifact@v3
with:
name: sorted-combined-results
path: pretty_results.txt