Skip to content
Showcase/FineSports: Fine-grained Basketball Action Recognition
advancedvideo

FineSports: Fine-grained Basketball Action Recognition

Fine-grained NBA basketball action recognition. Annotators track the ball-handler across a clip and label a two-level hierarchy of 12 coarse ball-handler actions and 52 fine-grained sub-actions (Xu et al., CVPR 2024).

About this dataset

FineSports is a large multi-person dataset for fine-grained action understanding in NBA basketball video, introduced by Jinglin Xu, Guohao Zhao, Sibo Yin, Wenhao Zhou, and Yuxin Peng at CVPR 2024. It targets a gap in sports-video datasets: recognizing the specific basketball action a player performs, not just a broad activity label.

The data is NBA game footage. Each action instance centers on the ball-handler, the player controlling the ball, who is tracked through the clip with a spatial-temporal tube (per-frame bounding boxes). Annotators mark when the action happens and label it at two levels of granularity.

FineSports contains 10,000 videos with roughly 16,000 action instances and 123,014 bounding boxes. Actions follow a two-level hierarchy of 12 coarse ball-handler categories (such as Drive, Shoot, and Pick&Roll) expanding into 52 fine-grained sub-actions (such as Drive Baseline, Dribble Jumper, and High P&R).

The Potato config below reproduces this task with a video segment scheme for the action's temporal boundary plus two radio schemes for the coarse (12) and fine-grained (52) action labels. Use it to build fine-grained basketball action data or to study procedure-aware sports action understanding.

Released
CVPR 2024
Sport
NBA basketball
Videos
10,000
Action instances
~16,000
Bounding boxes
123,014
Action hierarchy
12 coarse / 52 fine-grained
Frame 847 / 3200Running01:12 - 01:28Segments:WalkRunStandActionWalkRunStandWalkSceneOutdoorIndoorDrag to create and label temporal segments

Configuration Fileconfig.yaml

This Potato config reproduces the annotation task. Save it as config.yaml and run potato start config.yaml to try it.

yaml
# FineSports - Fine-grained Basketball Action Recognition
# Based on Xu, Zhao, Yin, Zhou & Peng, CVPR 2024
# Paper: https://openaccess.thecvf.com/content/CVPR2024/html/Xu_FineSports_A_Multi-person_Hierarchical_Sports_Video_Dataset_for_Fine-grained_Action_CVPR_2024_paper.html
# Dataset: https://github.com/PKU-ICST-MIPL/FineSports_CVPR2024
#
# FineSports is a multi-person hierarchical NBA basketball dataset for
# fine-grained action understanding. Each action instance tracks the
# ball-handler with a spatial-temporal tube (per-frame bounding boxes) and
# is labeled with a coarse ball-handler action (12 categories) and a
# fine-grained sub-action (52 categories).
#
# This Potato config reproduces the labeling: mark the temporal boundary of
# the ball-handler's action, then select the coarse action and its
# fine-grained sub-action.

annotation_task_name: "FineSports - Fine-grained Basketball Action Recognition"
task_dir: "."

data_files:
  - sample-data.json

item_properties:
  id_key: "id"
  text_key: "video_url"

output_annotation_dir: "annotation_output/"
output_annotation_format: "json"

annotation_schemes:
  # Step 1: mark the temporal boundary of the ball-handler action instance
  - name: "action_segment"
    description: "Mark the start and end of the ball-handler's action instance."
    annotation_type: "video_annotation"
    mode: "segment"
    labels:
      - name: "ball_handler_action"
        color: "#F97316"
        key_value: "a"
    frame_stepping: true
    show_timecode: true
    playback_rate_control: true
    video_fps: 25

  # Step 2: coarse ball-handler action (12 categories)
  - annotation_type: radio
    name: coarse_action
    description: "Coarse ball-handler action category (FineSports, 12 types):"
    labels:
      - "Drive"
      - "Dribble"
      - "Attack"
      - "Shoot"
      - "Pick&Roll (P&R)"
      - "Pass"
      - "Backboard"
      - "Result"
      - "Defense"
      - "Lay-Up"
      - "Steal&Interfere"
      - "Foul&Violation"

  # Step 3: fine-grained sub-action (52 categories)
  - annotation_type: radio
    name: fine_action
    description: "Fine-grained sub-action (FineSports, 52 types):"
    labels:
      - "Drive Left"
      - "Drive Right"
      - "Drive Straight"
      - "Drive Baseline"
      - "Drive Middle"
      - "Dribble Move"
      - "Cut"
      - "Isolation"
      - "Post-Up Right Shoulder"
      - "Post-Up Left Shoulder"
      - "Pass Steal"
      - "Dribble Steal"
      - "Interfere Shot"
      - "Basket"
      - "To Basket"
      - "High P&R"
      - "Left P&R"
      - "Right P&R"
      - "Dribble Jumper"
      - "No Dribble Jumper"
      - "Jumper"
      - "Early Jumper"
      - "Free Throw"
      - "Hand Off"
      - "Ball Delivered"
      - "To Shooter's Left"
      - "To Shooter's Right"
      - "Offensive Rebound Short"
      - "Offensive Rebound Long"
      - "Defensive Rebound Short"
      - "Defensive Rebound Long"
      - "Make 2 Pts"
      - "Make 3 Pts"
      - "Miss 2 Pts"
      - "Miss 3 Pts"
      - "Make 2 Pts Foul"
      - "Make 3 Pts Foul"
      - "Run Offense"
      - "Turnover"
      - "Fighting"
      - "Personal Foul"
      - "Double Foul"
      - "Technical Foul"
      - "Unsportsmanlike Foul"
      - "Disqualifying Foul"
      - "Traveling"
      - "Player and Ball Out of Bound"
      - "Defensive 3 Sec Violation"
      - "Out of Bound 5 Sec Violation"
      - "8 Sec Violation"
      - "Shot Clock Violation"
      - "Defense Commits"

annotation_instructions: |
  You will see a short NBA basketball clip. For each ball-handler action:

  1. Use the video timeline to mark the start and end of the action instance.
  2. Identify the ball-handler (the player controlling the ball).
  3. Select the coarse action category (12 options).
  4. Select the fine-grained sub-action that best describes it (52 options).

  The coarse and fine labels form a two-level hierarchy: pick the coarse
  category first, then the specific sub-action under it.

html_layout: |
  <div style="padding: 15px; max-width: 800px; margin: auto;">
    <div style="background: #fff7ed; border: 1px solid #fed7aa; border-radius: 8px; padding: 10px 14px; margin-bottom: 12px; font-size: 13px; color: #9a3412;">
      NBA clip {{clip_id}} — track the ball-handler and label the action hierarchy.
    </div>
    <video controls style="width: 100%; border-radius: 8px;" src="{{video_url}}"></video>
  </div>

allow_all_users: true
instances_per_annotator: 40
annotation_per_instance: 2
allow_skip: true
skip_reason_required: false

Sample Datasample-data.json

json
[
  {
    "id": "finesports_001",
    "clip_id": "GSW-BOS-Q1-0342",
    "video_url": "https://example.com/finesports/clip_001.mp4",
    "text": "Ball-handler drives baseline from the right wing and finishes at the rim."
  },
  {
    "id": "finesports_002",
    "clip_id": "LAL-DEN-Q2-115",
    "video_url": "https://example.com/finesports/clip_002.mp4",
    "text": "High pick-and-roll at the top of the key, ball-handler splits the defense."
  }
]

// ... and 6 more items

Get This Design

View on GitHub

Clone or download from the repository

Quick start:

git clone https://github.com/davidjurgens/potato-showcase.git
cd potato-showcase/video/finesports-action-recognition
potato start config.yaml

Dataset & paper

Xu et al., CVPR 2024

Citation (BibTeX)

bibtex
@inproceedings{xu2024finesports,
    title={FineSports: A Multi-Person Hierarchical Sports Video Dataset for Fine-Grained Action Understanding},
    author={Xu, Jinglin and Zhao, Guohao and Yin, Sibo and Zhou, Wenhao and Peng, Yuxin},
    booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
    pages={21773--21782},
    year={2024}
}

Details

Annotation Types

video_annotationradio

Domain

Computer VisionVideo UnderstandingSports

Use Cases

Action RecognitionTemporal Action LocalizationFine-grained Action Understanding

Tags

finesportsbasketballnbaaction-recognitionfine-grainedvideohierarchical

Found an issue or want to improve this design?

Open an Issue