NEWSKEN: Five-Window ContextIMUNet

Frozen single-model submission for the TartanIMU Challenge at IROS 2026. Kaggle Public score: 0.49070 (lower is better), verified on 8 September 2026. This is a Public-split result, not a final/private score or an official full-test report table.

Frozen artifacts

Artifact Identity
Model ContextIMUNet, context 5, one velocity head, seed 42, epoch 25
Parameters 1,721,288
model.pt SHA256 ccf3ad10e79e01207cbcb6f364dce2dc2b8ade0aaf28bef8a8c7779f02d28042
submission.csv SHA256 e1b11431561624c3fdc49d62fc213e1867caa7b70d5e71a9160a6435f9384c65
submission.csv MD5 f83f3b80d464411422ab61d574d82c16

submission.csv is the exact original Kaggle file, renamed without changing any bytes. The checkpoint contains model state, train-only normalization, training configuration, epoch and selection metadata. It is the original checkpoint, not a re-saved conversion. Historical absolute data paths in its provenance are informational, not runtime dependencies.

Setup and offline inference

Use Python 3.12. Install dependencies before entering the organizer's offline environment:

python -m pip install -r requirements.txt

On a CUDA machine, provision a compatible PyTorch 2.14.0 build in advance. A fresh Linux/P100 environment was verified on 8 September 2026 using CUDA 12.6. The default CUDA 13 build lacks P100 kernels. On P100, after installing the pins, run:

python -m pip install torch==2.14.0 --index-url https://download.pytorch.org/whl/cu126 --force-reinstall

This selects the CUDA build, not a different PyTorch release or model. It does not change the published requirements.txt. Complete this installation before disabling Internet. The original complete development environment is retained in requirements-lock.txt as provenance; its editable-install line is not the installation command for this standalone package.

The competition data root must contain index/test_windows.csv, test/, and sample_submission.csv, as in the official extracted dataset. No raw competition data is bundled. Run from this repository directory:

python source.zip \
  --data-root /path/to/tartan-imu-challenge-iros2026 \
  --checkpoint model.pt \
  --output /path/to/new_predictions.csv \
  --device cuda --batch-size 256 --split test

source.zip is an executable Python source archive. Its __main__.py is the unchanged original prediction entry point; the full source can be inspected by unzipping it. No installation of a repository package or extraction is needed for inference. Use --device cpu or --device mps for CPU or Apple Silicon reproduction. The entry point refuses to overwrite an existing prediction file or its JSON sidecar. Do not use submission.csv as the output destination: it is the immutable scored artifact. Inference performs no network requests and does not download weights or other assets. It produces 30,644 ordered window_id,vx,vy,vz rows and a provenance sidecar.

Cross-device floating-point differences may occur. Exact CSV-byte reproduction was previously established only on the original MPS/software/batch-size configuration. No cross-device bitwise-equivalence claim is made.

Architecture and inputs

A shared 1-D residual encoder maps each 200-sample, six-axis IMU window to a 256-dimensional feature. Five adjacent window features are fused using a residual temporal Conv1d module. One shared linear head predicts the center window's 3-D body-frame velocity in m/s. Accelerometer and gyroscope values are the only signal inputs.

This is noncausal inference: each center uses up to two previous and two subsequent windows in the same contiguous trajectory run. Missing neighbors are edge-replicated; context never crosses a trajectory boundary or a gap. traj_id and win_idx establish adjacency only; they are not features or a route to platform-specific experts. It is not an online causal estimator, and its latency includes future-context availability.

Training reproduction (optional; not needed for inference)

The model was trained from scratch using released train/validation data only. The released official pretrained checkpoint was a separate development diagnostic and is not loaded by this submission. Train-only channel normalization is stored in model.pt. Sampling balances platforms, then trajectories; optimization uses vector Huber loss (beta 0.25) plus auxiliary platform cross-entropy (weight 0.05).

python -m zipfile -e source.zip .
python scripts/train_controlled.py \
  --data-root /path/to/tartan-imu-challenge-iros2026 \
  --output /path/to/new_training_run \
  --device mps --context 5 --heads 1 \
  --epochs 25 --batch-size 256 --microbatch-size 32 --workers 0 --seed 42

This command documents the historical run; the submitted model is frozen and should not be retrained to substitute a new checkpoint during verification. Some retained source modules implement alternative development models; they are not used by the frozen checkpoint or the inference command above.

Compliance declaration

  1. One model / one shared weight set: yes, for all four platforms.
  2. Classification / routing / specialization: an auxiliary platform classifier is computed but its logits are discarded for the single-head velocity prediction. Platform labels supervise training only. No platform label, external classifier, platform-specific checkpoint, or per-platform prediction head is used at inference.
  3. Ensemble / checkpoint averaging / TTA: none. One checkpoint, one forward computation per input context.
  4. Leakage prevention: official trajectory-disjoint train/validation split; train-only normalization; no test ground truth used. Architecture and checkpoint selection used local validation, followed by observed Kaggle Public scores. Final freezing preceded attempts to obtain full-test report tables; such tables will not be used to tune the model.
  5. Development versus submission: development included single-window, soft multi-head, nine-window and seed-replication experiments, plus an official-checkpoint diagnostic. The submission uses only the five-window, single-head seed-42 epoch-25 checkpoint.

Results and limitations

Local official validation: total 0.2895223681, macro AVE 0.2261235214 m/s, macro ATE20 0.8186734904 m. ATE20 uses approximately 20 metres of travelled distance, not 20 seconds. These local values must not be substituted into the report's official full-test tables. Validation was reused during development and is not a fresh holdout.

Organizer verification limits are one GPU, at most 16 GB VRAM, at most two hours, and no internet. Full offline inference on one P100 16 GB took 13.543 seconds from process launch to exit (repeat: 10.189 seconds). All 30,644 IDs, order and finite values passed. Maximum absolute velocity difference from the frozen MPS CSV was 5.5e-6 m/s; mean was 9.65e-8 m/s. Two CUDA runs matched each other byte-for-byte. The original submission is unchanged. Hidden-label metric differences and official numerical tolerance are unknown; this is not organizer acceptance or official test scoring. PyTorch peak reserved memory was 492 MiB; whole-device sampled peak was 817 MiB. Nonfatal allocation and Kaggle site-customization warnings are disclosed in VERIFICATION.md and CUDA_REPRODUCTION.md, together with measurement limitations.

Sources and attribution

Upstream copyright notices and the original Apache-2.0 LICENSE are preserved for the upstream TartanIMU source. This card does not relicense third-party material. Competition data use remains subject to competition terms; no competition dataset is redistributed.

Downloads last month

-

Downloads are not tracked for this model. How to track
Video Preview
loading