Mercity/Figure-Skating-Classification-Data
AI Skating Coach - Figure Skating Element Recognition Dataset Clean 64-class version with multi-jump combinations preserved Overview Figure skating skeleton pose sequences for action/element classification. Raw keypoint data extracted from competition videos and professional motion capture, presented in clean unmodified form. Total samples: 5,405 Training: 4,324 sequences Test: 1,081 sequences Classes: 64 figure skating elements Format: Clean unaugmented data… See the full description on the dataset page: https://huggingface.co/datasets/Mercity/Figure-Skating-Classification-Data.
052
1---2license: mit3---4# AI Skating Coach - Figure Skating Element Recognition Dataset5 6**Clean 64-class version with multi-jump combinations preserved**7 8## Overview9 10Figure skating skeleton pose sequences for action/element classification. Raw keypoint data extracted from competition videos and professional motion capture, presented in clean unmodified form.11 12- **Total samples:** 5,40513- **Training:** 4,324 sequences14- **Test:** 1,081 sequences 15- **Classes:** 64 figure skating elements16- **Format:** Clean unaugmented data (no synthetic samples, no class weights)17 18## Dataset Structure19 20```21├── train_data.pkl # Training sequences (4,324)22├── train_label.pkl # Training labels23├── test_data.pkl # Test sequences (1,081)24├── test_label.pkl # Test labels25├── label_mapping.json # Class IDs and names26└── dataset_info.json # Metadata27```28 29## Data Format30 31**Skeleton sequences:** `(num_samples, variable_frames, 17_keypoints, 3_coordinates)`32 33- **Frames:** Variable length from original footage (original temporal resolution preserved)34- **Duration:** Varies by element (typically 2-25 seconds at 30 fps)35- **Keypoints:** 17-point COCO format36 - Head: nose, left/right eye, left/right ear37 - Torso: shoulders, elbows, wrists, hips, knees, ankles38- **Coordinates:** (x, y, confidence) normalized to [-1, 1] range39 40## Classes (64 Total)41 42### Single Jump Elements (0-20)43Single rotation jumps: Axel, Flip, Lutz, Loop, Salchow, Toeloop 44Rotations: 1x, 2x, 3x, 4x (where applicable)45 46**Examples:** 1Axel, 2Flip, 3Lutz, 4Toeloop47 48### Multi-Jump Combinations (21-30)49Natural sequence patterns from competition:50- 1A+3T, 1A+3A51- 2A+3T, 2A+3A, 2A+1Eu+3S52- 3F+3T, 3F+2T+2Lo53- 3Lz+3T, 3Lz+3Lo54- Generic Combination (Comb)55 56### Spins (31-62)57Rotational elements with position changes:58- **FCSp** (Foot Change Camel Spin): 31-3459- **CCoSp** (Catch Foot Combination Spin): 35-3860- **ChCamelSp** (Change Camel Spin): 39-4261- **ChComboSp** (Change Combination Spin): 43-4662- **ChSitSp** (Change Sit Spin): 47-5063- **FlySitSp** (Fly Sit Spin): 51-5464- **LaybackSp** (Layback Spin): 55-5865 66### Step Sequences & Choreography (59-63)67Linear traveling skating patterns:68- **StepSeq1-4:** Graded step sequences (59-62)69- **ChoreSeq1:** Choreographed sequence (63)70 71## Data Sources72 731. **MMFS Dataset** (4,915 sequences)74 - 2D pose estimation from figure skating competition videos75 - Multiple skaters, various competition levels76 772. **JSON Motion Capture** (253 sequences)78 - Professional 3D mocap capture from 4 elite skaters79 - Converted to 17-keypoint COCO format for consistency80 813. **Combined & Validated** (5,405 sequences)82 - Merged MMFS and mocap data83 - Deduplicated overlapping classes84 - Combinations preserved for sequence modeling85 86## Preprocessing87 **Format unification:** 142-marker mocap → 17-keypoint COCO skeleton 88 **Temporal sampling:** Uniform to 150 frames per sequence 89 **Normalization:** Keypoint coordinates normalized to [-1, 1] 90 **Velocity features:** Computed for temporal dynamics 91 **Train/test split:** 80/20 stratified by class 92 93 94 95-96 97## Loading the Dataset98 99### Python100```python101import pickle102import json103import numpy as np104 105# Load training sequences and labels106with open('train_data.pkl', 'rb') as f:107 X_train = pickle.load(f) # List of (150, 17, 3) arrays108with open('train_label.pkl', 'rb') as f:109 y_train = pickle.load(f) # Array of class IDs (0-63)110 111# Load test data112with open('test_data.pkl', 'rb') as f:113 X_test = pickle.load(f)114with open('test_label.pkl', 'rb') as f:115 y_test = pickle.load(f)116 117# Load class mapping118with open('label_mapping.json', 'r') as f:119 mapping = json.load(f)120 121# Inspect122print(f"Training: {len(X_train)} sequences, {X_train[0].shape}")123print(f"Classes: {len(np.unique(y_train))}")124print(f"Class weights: {np.bincount(y_train)}") # Raw distribution125```126 127### Convert to NumPy128```python129import numpy as np130 131# Stack sequences into array132X_train_array = np.array(X_train) # (4324, 150, 17, 3)133X_test_array = np.array(X_test) # (1081, 150, 17, 3)134```135 136## Recommended Usage137 138### Action Recognition139- CNN-LSTM architecture for 64-class classification140- Input: (batch, 150, 17, 3) sequences141- Output: 64-class softmax142 143### Sequence Modeling144- Use combinations (classes 21-30) for multi-step skill prediction145- Temporal modeling with RNNs/Transformers146- Learn natural skill progression patterns147 148### Transfer Learning1491. Pretrain on combinations for sequence context1502. Fine-tune on single jumps for element detection1513. Apply to event/routine-level classification152 153### Sports Analytics154- Skill difficulty assessment155- Athlete performance tracking156- Technique consistency analysis157 158## Class Distribution159 160For detailed per-class sample counts, see `dataset_info.json`161 162**Imbalance ratio:** ~6x (largest/smallest class) 163**Skew:** Toward more common elements (2-3 rotations, standard spins)164 165 166 167 168 169Dataset compiled from public figure skating competition videos and proprietary motion capture data. Use for research and educational purposes.170 171---172 173**Generated:** February 2026 174 175 