SoccerNet Action Spotting: The 17 Soccer Action Classes
SoccerNet-v2 defines 17 action spotting classes (goal, corner, card, foul, substitution, and more) with 110,458 labeled events across 500 broadcast games. Full class list, dataset and paper links, and a Potato config to reproduce the task.
About this dataset
SoccerNet is the standard benchmark for action spotting in broadcast soccer video: locating the exact moment an event happens inside long, untrimmed match footage. It was introduced by Giancola et al. (CVPR 2018 workshops) and substantially expanded by Deliege et al. in SoccerNet-v2 (2021).
SoccerNet-v2 defines 17 action classes and provides 110,458 manually spotted actions across 500 complete broadcast games (764 hours) from six major European leagues, with each timestamp annotated to one-frame precision.
The 17 action spotting classes are: Goal, Penalty, Shots on target, Shots off target, Yellow card, Red card, Yellow-to-red card, Corner, Direct free-kick, Indirect free-kick, Throw-in, Kick-off, Offside, Foul, Substitution, Clearance, and Ball out of play.
The Potato config below reproduces the action spotting task with keyframe-mode video annotation: an annotator scrubs to the exact frame of an event and tags it with a one-key shortcut. All 17 classes are pre-configured, so you can replicate SoccerNet labeling or adapt the scheme to another sport.
- Action classes
- 17
- Annotations
- 110,458 spotted actions
- Games
- 500 broadcast matches
- Video
- 764 hours, 6 European leagues
- Precision
- One-frame timestamps
- Papers
- Giancola et al. 2018; Deliege et al. 2021 (v2)
Configuration Fileconfig.yaml
This Potato config reproduces the annotation task. Save it as config.yaml and run potato start config.yaml to try it.
# SoccerNet Action Spotting Configuration
# Based on Giancola et al., CVPR 2018
# Task: Identify and timestamp key soccer match events
annotation_task_name: "SoccerNet Action Spotting"
task_dir: "."
# Data configuration
data_files:
- sample-data.json
item_properties:
id_key: "id"
text_key: "video_url"
# Output
output_annotation_dir: "annotation_output/"
output_annotation_format: "json"
# Annotation schemes
annotation_schemes:
- name: "soccer_events"
description: |
Mark key events in the soccer match. Click at the exact moment each event occurs.
Use keyboard shortcuts for faster annotation. These are the 17 action classes
defined by SoccerNet-v2 (Deliège et al., 2021).
annotation_type: "video_annotation"
mode: "keyframe"
labels:
# Scoring & shots
- name: "Goal"
color: "#22C55E"
key_value: "g"
- name: "Penalty"
color: "#EAB308"
key_value: "p"
- name: "Shots on target"
color: "#16A34A"
key_value: "s"
- name: "Shots off target"
color: "#84CC16"
key_value: "h"
# Cards
- name: "Yellow card"
color: "#FACC15"
key_value: "y"
- name: "Red card"
color: "#EF4444"
key_value: "r"
- name: "Yellow->red card"
color: "#F97316"
key_value: "2"
# Set pieces & restarts
- name: "Corner"
color: "#06B6D4"
key_value: "c"
- name: "Direct free-kick"
color: "#14B8A6"
key_value: "d"
- name: "Indirect free-kick"
color: "#2DD4BF"
key_value: "i"
- name: "Throw-in"
color: "#0EA5E9"
key_value: "t"
- name: "Kick-off"
color: "#8B5CF6"
key_value: "k"
- name: "Offside"
color: "#6366F1"
key_value: "o"
# Game flow
- name: "Foul"
color: "#EC4899"
key_value: "f"
- name: "Substitution"
color: "#3B82F6"
key_value: "u"
- name: "Clearance"
color: "#A855F7"
key_value: "l"
- name: "Ball out of play"
color: "#94A3B8"
key_value: "b"
frame_stepping: true
show_timecode: true
playback_rate_control: true
zoom_enabled: true
video_fps: 25
# User configuration
allow_all_users: true
# Task assignment
instances_per_annotator: 20
annotation_per_instance: 2
# Instructions
annotation_instructions: |
## Soccer Action Spotting Task
Your goal is to identify and timestamp the 17 SoccerNet-v2 action classes in
soccer match footage.
### The 17 Action Classes:
**Scoring & shots:**
- **Goal (g)**: The ball fully crosses the goal line
- **Penalty (p)**: A penalty kick is taken
- **Shots on target (s)**: A shot that would enter the goal if not saved/blocked
- **Shots off target (h)**: A shot that misses the goal
**Cards:**
- **Yellow card (y)**: Referee shows a yellow card
- **Red card (r)**: Referee shows a straight red card
- **Yellow->red card (2)**: A second yellow resulting in a red
**Set pieces & restarts:**
- **Corner (c)**: A corner kick is taken
- **Direct free-kick (d)**: A direct free-kick is taken
- **Indirect free-kick (i)**: An indirect free-kick is taken
- **Throw-in (t)**: A throw-in is taken
- **Kick-off (k)**: Play starts or restarts from the center
- **Offside (o)**: Offside is called
**Game flow:**
- **Foul (f)**: Referee calls a foul
- **Substitution (u)**: A player substitution is made
- **Clearance (l)**: A defensive clearance
- **Ball out of play (b)**: The ball leaves the field of play
### Instructions:
1. Watch the video carefully
2. When you see an event, pause at the exact moment it occurs
3. Press the keyboard shortcut or click the label to mark the event
4. The timestamp will be recorded automatically
### Tips:
- Use frame stepping (< >) for precise timing
- Mark events at the moment they START (e.g., when card is shown, not raised)
- Use playback speed control to slow down fast action
- You can zoom the timeline for precision
Sample Datasample-data.json
[
{
"id": "match_001_half1",
"video_url": "https://example.com/videos/match001_half1.mp4",
"match_id": "match_001",
"half": 1,
"home_team": "Team A",
"away_team": "Team B",
"competition": "League Cup",
"date": "2024-10-15",
"duration_seconds": 2700,
"description": "First half of League Cup match between Team A and Team B"
},
{
"id": "match_001_half2",
"video_url": "https://example.com/videos/match001_half2.mp4",
"match_id": "match_001",
"half": 2,
"home_team": "Team A",
"away_team": "Team B",
"competition": "League Cup",
"date": "2024-10-15",
"duration_seconds": 2850,
"description": "Second half of League Cup match between Team A and Team B"
}
]
// ... and 2 more itemsGet This Design
Clone or download from the repository
Quick start:
git clone https://github.com/davidjurgens/potato-showcase.git cd potato-showcase/video/action-recognition/soccernet-action-spotting potato start config.yaml
Dataset & paper
Giancola et al., CVPR 2018; Deliege et al. 2021 (SoccerNet-v2)
Citation (BibTeX)
@inproceedings{giancola2018soccernet,
title={SoccerNet: A Scalable Dataset for Action Spotting in Soccer Videos},
author={Giancola, Silvio and Amine, Mohieddine and Dghaily, Tarek and Ghanem, Bernard},
booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition Workshops},
pages={1711--1721},
year={2018}
}Details
Annotation Types
Domain
Use Cases
Tags
Found an issue or want to improve this design?
Open an IssueRelated Designs
THUMOS14 Action Localization
Temporal action localization in untrimmed sports videos. Annotators identify precise start and end times of 20 sports action classes in YouTube videos.
FineGym Dataset: Fine-Grained Gymnastics Action Recognition
FineGym is a hierarchical video dataset (CVPR 2020) for fine-grained gymnastics action recognition: events, sets, and 99-530 element classes annotated with millisecond-level temporal boundaries. See the label taxonomy and a runnable Potato config to annotate or extend it.
ActivityNet Captions: Dense Video Captioning Dataset
ActivityNet Captions pairs 20k untrimmed videos with 100k temporally localized sentence descriptions for dense-captioning research. This Potato config reproduces the segment-and-describe workflow.