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
- One model / one shared weight set: yes, for all four platforms.
- 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.
- Ensemble / checkpoint averaging / TTA: none. One checkpoint, one forward computation per input context.
- 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.
- 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
- Competition: https://www.kaggle.com/competitions/tartan-imu-challenge-iros2026
- Baseline design: Nomannic,
[TS] TCMPIO | Unified Temporal ResNet, Kaggle notebook version 345858629: https://www.kaggle.com/code/nomannic19/ts-tcmpio-unified-temporal-resnet - Official source: https://github.com/superxslam/TartanIMU,
commit
52fbc14c947b95b4a1bf8b632c67bc5eee8bb13c. - Report instructions: https://www.kaggle.com/competitions/tartan-imu-challenge-iros2026/discussion/739576
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.