πŸ—ΊοΈ Game State Reconstruction (GSR)

Task Overview

Input: Panoramic 4K video (full match)
Output: Per-frame game state on 2D pitch minimap (position + role + team + jersey number)

Alignment with SoccerNet-GSR:
βœ… Same: 2D pitch coordinates, player roles, team assignment, jersey numbers
⚠️ Different: Fixed panoramic camera + full match (not broadcast clips)

Input / Output Definition

Input

  • videos/match_XXXXX.mp4 β€” Full match panoramic video (4K)
  • Camera: BePro Cerberus (2 matches) or 3-camera panoramic (8 matches)

Output (per frame)

Field Type Description
frame int Frame number
time float Timestamp in video (seconds)
player_id int Unique track ID (persistent throughout match)
x, y float 2D pitch coordinates in meters
role string player / goalkeeper / referee / other
team_side string left / right / null
jersey_number int/null 0–99 or null

File Layout

SoccerTrack-v2/
β”œβ”€β”€ videos/
β”‚   β”œβ”€β”€ 117093/
β”‚   β”‚   β”œβ”€β”€ 117093_panorama_1st_half.mp4
β”‚   β”‚   └── 117093_panorama_2nd_half.mp4
β”‚   └── ...
β”œβ”€β”€ gsr/
β”‚   β”œβ”€β”€ 117093/
β”‚   β”‚   β”œβ”€β”€ 117093_1st.json
β”‚   β”‚   └── 117093_2nd.json
β”‚   └── ...
β”œβ”€β”€ bas/
β”œβ”€β”€ mot/
└── raw/
    β”œβ”€β”€ 117093/
    β”‚   β”œβ”€β”€ 117093_keypoints.json
    β”‚   β”œβ”€β”€ 117093_mapx.npy
    β”‚   β”œβ”€β”€ 117093_mapy.npy
    β”‚   └── ...
    └── ...

Each match ships one GSR annotation file per half. Unlike SoccerNet-GSR which stores image frames under img1/, we reference the trimmed half videos directly from videos/ to save storage space.

See format-gsr.md for the full schema reference and pitch coordinate system.

Schema & SoccerNet Mapping

Example JSON Record

Each half's file is a flat JSON array of per-entity-per-frame records. One record:

{
  "image_id": 12480,
  "track_id": 7,
  "player_id": "117092_L_9",
  "role": "player",
  "jersey_number": 9,
  "team_side": "left",
  "x": 48.21,
  "y": 34.07,
  "bbox_image": [1840, 710, 108, 242],
  "bbox_pitch":  [46.8, 33.1, 1.4, 2.0]
}

SoccerNet-GSR Correspondence

SoccerTrack v2 SoccerNet-GSR Notes
x, y x_pos, y_pos Pitch coordinates (meters)
team_side left / right Team assignment
jersey_number jersey_number 0–99
role role player/goalkeeper/referee/other
player_id track_id Persistent across full match

Evaluation / Metrics

Evaluation uses GS-HOTA (Game State Higher Order Tracking Accuracy), following the SoccerNet-GSR Challenge definition. Report GS-HOTA plus the DetA / AssA / LocA decomposition.

Reference CLI:

python -m src.evaluation.gs_hota \
    --pred preds/gsr --gt data/gsr --matches 117099 117100

The module is a thin wrapper over the upstream sn-gamestate scorer.

Starter Kit

Get running fast. The GSR starter kit scaffolds detection β†’ tracking β†’ jersey/role tagging β†’ pitch projection into a runnable pipeline on one GPU. Fill in the model calls, then run eval.

Differences vs SoccerNet-GSR

Key Differences:
  • Camera view: Panoramic (full-pitch) vs. broadcast (partial view with occlusions)
  • Duration: Full match (~90 min) vs. short clips
  • Camera setup: Fixed BePro/3-camera system vs. moving broadcast camera
  • Level: University amateur matches vs. professional leagues