Files
OpenGait/datasets/Scoliosis1K

Tutorial for Scoliosis1K

Download the Scoliosis1K Dataset

You can download the dataset from the official website. The dataset is provided as four compressed files:

  • Scoliosis1K-sil-raw.zip
  • Scoliosis1K-sil-pkl.zip
  • Scoliosis1K-pose-raw.zip
  • Scoliosis1K-pose-pkl.zip

We recommend using the provided pickle (.pkl) files for convenience. Decompress them with the following commands:

unzip -P <password> Scoliosis1K-sil-pkl.zip
unzip -P <password> Scoliosis1K-pose-pkl.zip

Note

: The <password> can be obtained by signing the release agreement and sending it to 12331257@mail.sustech.edu.cn.

Dataset Structure

After decompression, you will get the following structure:

├── Scoliosis1K-sil-pkl
│   ├── 00000                     # Identity
│   │   ├── Positive              # Class
│   │   │   ├── 000_180           # View
│   │   │   └── 000_180.pkl       # Estimated Silhouette (PP-HumanSeg v2)
│
├── Scoliosis1K-pose-pkl
│   ├── 00000                     # Identity
│   │   ├── Positive              # Class
│   │   │   ├── 000_180           # View
│   │   │   └── 000_180.pkl       # Estimated 2D Pose (ViTPose)

Processing from RAW Dataset (optional)

If you prefer, you can process the raw dataset into .pkl format.

# For silhouette raw data
python datasets/pretreatment.py --input_path=<path_to_raw_silhouettes> --output_path=<output_path>

# For pose raw data
python datasets/pretreatment.py --input_path=<path_to_raw_pose> --output_path=<output_path> --pose --dataset=OUMVLP

Training and Testing

Before training or testing, modify the dataset_root field in configs/sconet/sconet_scoliosis1k.yaml.

Then run the following commands:

# Training
CUDA_VISIBLE_DEVICES=0,1,2,3 \
python -m torch.distributed.launch --nproc_per_node=4 \
opengait/main.py --cfgs configs/sconet/sconet_scoliosis1k.yaml --phase train --log_to_file

# Testing
CUDA_VISIBLE_DEVICES=0,1,2,3 \
python -m torch.distributed.launch --nproc_per_node=4 \
opengait/main.py --cfgs configs/sconet/sconet_scoliosis1k.yaml --phase test --log_to_file

Pose-to-Heatmap Conversion

From our paper: Pose as Clinical Prior: Learning Dual Representations for Scoliosis Screening (MICCAI 2025)

CUDA_VISIBLE_DEVICES=0,1,2,3 \
python -m torch.distributed.launch --nproc_per_node=4 \
datasets/pretreatment_heatmap.py \
  --pose_data_path=<path_to_pose_pkl> \
  --save_root=<output_path> \
  --dataset_name=OUMVLP

DRF Preprocessing

For the DRF model, OpenGait expects a combined runtime dataset with:

  • 0_heatmap.pkl: the two-channel skeleton map sequence
  • 1_pav.pkl: the paper-style Postural Asymmetry Vector (PAV), repeated along the sequence axis so it matches OpenGait's multi-input loader contract

The PAV pass is implemented from the paper:

  1. convert pose to COCO17 if needed
  2. pad missing joints
  3. pelvis-center and height normalize the sequence
  4. compute vertical, midline, and angular deviations for the 8 symmetric joint pairs
  5. apply IQR filtering per metric
  6. average over time
  7. min-max normalize across the dataset, or across TRAIN_SET when --stats_partition is provided

Run:

uv run python datasets/pretreatment_scoliosis_drf.py \
  --pose_data_path=<path_to_pose_pkl> \
  --output_path=<path_to_drf_pkl> \
  --stats_partition=./datasets/Scoliosis1K/Scoliosis1K_1116.json

The output layout is:

<path_to_drf_pkl>/
├── pav_stats.pkl
├── 00000/
│   ├── Positive/
│   │   ├── 000_180/
│   │   │   ├── 0_heatmap.pkl
│   │   │   └── 1_pav.pkl

Point configs/drf/drf_scoliosis1k.yaml:data_cfg.dataset_root to this output directory before training or testing.

DRF Training and Testing

CUDA_VISIBLE_DEVICES=0,1,2,3 \
uv run python -m torch.distributed.launch --nproc_per_node=4 \
opengait/main.py --cfgs configs/drf/drf_scoliosis1k.yaml --phase train

CUDA_VISIBLE_DEVICES=0,1,2,3 \
uv run python -m torch.distributed.launch --nproc_per_node=4 \
opengait/main.py --cfgs configs/drf/drf_scoliosis1k.yaml --phase test