Setup
Quick Start
Register your team. Fill out the registration form. Then join the competition on Kaggle: TartanIMU Challenge: Multi-Platform Inertial Odometry.
Download the train/val splits. Get the data from the IROS Tartan IMU Challenge dataset on Hugging Face, or from the Kaggle competition Data tab (which also has index/test_windows.csv and sample_submission.csv).
Clone the baseline repository. superxslam/TartanIMU.
git clone https://github.com/superxslam/TartanIMU
Write a basic config file. For details on the available fields, see TartanIMU/config/datasets. This complete starter example keeps the optional training, evaluation, and fine-tuning settings visible:
Show complete starter config (minimal_example_config.yaml)
# =============================================================================
# Minimal Example Configuration for Neural Inertial Tracking
# =============================================================================
#
# This configuration file provides a complete setup for:
# 1. Model inference on pre-trained neural inertial tracking models
# 2. Fine-tuning covariance heads for sensor fusion applications
# 3. Evaluation using the same metrics as the main test.py script
#
# Usage:
# python minimal_example.py --config config/datasets/minimal_example/minimal_example_config.yaml
# =============================================================================
# =============================================================================
# MODEL ARCHITECTURE PARAMETERS
# =============================================================================
model_param:
# Input/Output Configuration
input_dim: 6 # IMU channels: [acc_x, acc_y, acc_z, gyro_x, gyro_y, gyro_z]
output_dim: 3 # Body-frame velocity output: [vx, vy, vz]
# LSTM Network Configuration
lstm_size: 256 # Hidden size of LSTM layers
lstm_dropout: 0.0 # Dropout rate for LSTM layers (0.0 for inference)
lstm_layers: 1 # Number of LSTM layers
num_layers: 2 # Number of ResNet layers
bidirectional: False # Whether to use bidirectional LSTM
# Output Head Configuration
drop_ratio: 0.5 # Dropout ratio for output heads
split_z: True # Separate Z-axis prediction (recommended for 3D tracking)
# ResNet Backbone Configuration
layer_sizes: [2, 2, 2, 2] # ResNet layer sizes for feature extraction
# Time Window Configuration
past_time: 0.0 # Past time window (seconds)
window_time: 1.0 # Current time window (seconds) - main prediction window
future_time: 0.0 # Future time window (seconds)
# Transformer Configuration (Advanced - usually not needed)
use_transformer: False # Whether to use transformer layers
embed_dim: 256 # Embedding dimension for transformer
num_heads: 8 # Number of attention heads
num_blocks: 4 # Number of transformer blocks
# =============================================================================
# TRAINING CONFIGURATION
# =============================================================================
train:
# Sequence and Batch Configuration
seq_len: 10 # Sequence length for training (frames)
batch_size: 32 # Batch size for training
debug: False
learning_rate: 0.0001 # Learning rate (1e-4)
epochs: 50 # Number of training epochs
# Hardware and Performance Configuration
use_multi_gpu: False # Whether to use multi-GPU training
use_amp: True # Whether to use automatic mixed precision (recommended)
# Training Strategy Configuration
add_noise: True # Whether to add noise during training
predict_start: 0 # Prediction start frame
predict_end: 10 # Prediction end frame
# Covariance Training Configuration
start_cov_epochs: 0 # Epoch to start covariance training (0 = from beginning)
# Output Configuration
out_dir: "/result/minimal_example"
# Scheduler Configuration
scheduler:
factor: 0.5 # Learning rate reduction factor
patience: 10 # Number of epochs without improvement before reducing LR
min_lr: 1e-6 # Minimum learning rate
# =============================================================================
# VALIDATION CONFIGURATION
# =============================================================================
val:
batch_size: 32 # Batch size for validation
eval_freq: 5 # Validation frequency (every N epochs)
# =============================================================================
# TEST CONFIGURATION
# =============================================================================
test:
batch_size: 32 # Batch size for testing
out_dir: "/result/minimal_example_test"
# Evaluation Configuration
segment_length: 5.0 # Length of trajectory segments for evaluation (meters)
compute_ate: True # Whether to compute Absolute Trajectory Error
compute_rte: True # Whether to compute Relative Trajectory Error
save_plots: True # Whether to save evaluation plots
# =============================================================================
# LOGGING CONFIGURATION
# =============================================================================
logging:
wandb_project: Neural_Inertial_Tracking_AirLab
wandb_run_name: minimal_example
# =============================================================================
# DATA AUGMENTATION CONFIGURATION
# =============================================================================
augment:
# IMU Noise Configuration
feat_acc_sigma: 0.0001 # Accelerometer noise standard deviation
feat_gyr_sigma: 0.00001 # Gyroscope noise standard deviation
# Bias Configuration
add_bias_noise: False # Whether to add bias noise
accel_bias_range: 0.1 # Accelerometer bias range
gyro_bias_range: 0.002 # Gyroscope bias range
# Gravity Configuration
add_gravity_noise: False # Whether to add gravity noise
gravity_noise_theta_range: 5 # Gravity noise angle range (degrees)
# =============================================================================
# MODEL CONFIGURATION
# =============================================================================
model:
model_name: "Foundation_Model" # Model name for logging and identification
model_yaml: "/neural_inertial_tracking/config/resnet_lstm_multihead.yaml"
pred_velocity: True # Whether to predict velocity (recommended)
adapter: False # Whether to use adapter layers (for domain adaptation)
# =============================================================================
# DATA CONFIGURATION
# =============================================================================
data:
# Dataset Configuration
dataset: "AirLab" # Dataset type (AirLab, KITTI, etc.)
# Frequency Configuration
imu_freq: 200.0 # IMU frequency in Hz
sample_freq: 40 # Sampling frequency for training
# Coordinate System Configuration
use_local_coord: True # Use local coordinate system (recommended for IMU)
# Data Partitioning Configuration
random_partition: False # Whether to randomly partition data
train_rate: 0.7 # Training data ratio
valid_rate: 0.15 # Validation data ratio
test_rate: 0.15 # Test data ratio
data_rate: 1.0 # Data usage ratio (1.0 = use all data)
# =============================================================================
# MOTION TYPE CONFIGURATION
# =============================================================================
motion_types:
car: 1 # Car motion type ID
dog: 2 # Dog motion type ID
drone: 3 # Drone motion type ID (most common)
human: 4 # Human motion type ID
# =============================================================================
# FINE-TUNING CONFIGURATION
# =============================================================================
finetune:
# Covariance Head Fine-tuning
covariance_lr: 1e-5 # Learning rate for covariance head fine-tuning
covariance_epochs: 5 # Number of epochs for covariance fine-tuning
# Debug Mode Configuration
debug_mode: False # Whether to enable debug mode (freeze velocity head)
gradient_clip_norm: 1.0 # Gradient clipping norm for stability
# Loss Configuration
use_simple_loss: True # Use simple MSE loss instead of complex loss
covariance_target: 0.1 # Target covariance value for simple loss
Verify the model runs. Run an overfitting experiment on a small subset to confirm the training loop, data loading, and metrics are working end to end before scaling up.
Improve and submit. Experiment with your own methods to push performance on the leaderboard.
Schedule, Rules, and Leaderboard
Competition dates, team and submission limits, and any external-data policy can change during the event. Use the live Kaggle pages as the source of truth:
Submission format: one predicted body-frame velocity per test window, as a CSV with a header row:
window_id,vx,vy,vz
1,0.50,0.01,0.00
2,0.49,-0.00,-0.01
window_id values come from index/test_windows.csv; see sample_submission.csv on the Kaggle Data tab for the exact rows to fill in.
Reference Models
We provide per-platform “specialist” checkpoints trained internally as a benchmarking reference, so you can gauge what good performance looks like before submitting. You can also try them interactively in the live demo.
These specialists are a reference, not a submission strategy. The competition requires one unified model scored on all four platforms — the test set is anonymized with no platform label, so switching between per-platform experts at inference time isn’t possible. Use these checkpoints to sanity-check per-platform performance during development, not as your final submission.
Recommended Workflow
- Start from a known baseline.
- Validate per platform first, then converge on a single unified model — final submissions must be one model scored across all four platforms with no platform label at test time.
- Profile both aggregate (macro-averaged ATE) and per-platform failure modes.
- Freeze your final model and produce reproducible inference logs.
System Requirements (Preliminary)
- Linux or macOS development environment
- Python + PyTorch toolchain
- GPU required for both training and evaluation
Organizer Reference System
Results reported by the organizers were produced on the following hardware:
| Component | Specification |
|---|---|
| CPU | AMD Ryzen 9 7950X (16-core / 32-thread) |
| Memory | 128 GB DDR5 |
| GPU | NVIDIA RTX A6000 (48 GB VRAM) |
| Driver | 535.183.01 |
| CUDA | 12.1 |
| PyTorch | 2.5.1+cu121 |