TartanIMU Challenge (IROS 2026) β team Lexxxxx β model a3v20_s42
Single unified model, one shared set of weights, for all four platforms (car, dog, drone, human).
Frozen weights: weights/tartanimu_a3v20_s42.pt (sha256 071994ba24bbe45648dc010f4c899f38f4b62721d092a8904efa0dad1b1eeabb).
The checkpoint is one file holding the velocity network plus its two learned input-preprocessing sub-modules
(attnet, calnet, see Method); all three are frozen and loaded by predict.py from this single file.
submission.csv is the exact prediction file behind the claimed Kaggle score (md5 545d7cddc859a16db045f872251be03c;
official scoring service: TartanIMU Score 0.25878, macro AVE 0.22017, macro ATE20 0.61704).
Run
pip install -r requirements.txt
python predict.py --data /path/to/tartan-imu-challenge-iros2026 --out submission.csv
Input: index/test_windows.csv + test/*.npz (raw 6-axis IMU only). No internet, no ground truth, no platform label.
Measured re-execution of this repository as downloaded (CPU only, isolated environment, process-level socket block,
empty cache): 1 min 25 s wall, 2.0 GB RSS; on one GPU < 1 min, < 1 GB VRAM.
Cross-machine numerical tolerance vs submission.csv (produced on an RTX 5090): componentwise mean 2.0e-5, p99 1.7e-4, max 1.9e-3 m/s.
SHA256SUMS covers every file (sha256sum -c SHA256SUMS).
Method (short)
Per recording (test IMU only, no labels, no adaptation of any weight):
calnetβ a small network reads a 64-d summary of the recording's IMU and predicts an accelerometer scale / bias / time-constant correction and the gyro-axis map class (two IMU mountings exist in the data); applied to the raw IMU.attnetβ a rest-anchored SO(3) gyro integration with GRU-predicted corrections gives a per-frame attitude estimate; from it: rest-frame "up", a bounded dead-reckoned velocity v_DR = qΒ·tanh(β«(R f + g)/q) (q = 8 m/s), time since the rest anchor, and the first two columns of the rotation to the anchor frame.- Main network β dense random-offset 1 s windows β 25 input channels (raw IMU + 8-channel decomposition about the
slow "up" + the channels of step 2) β dilated 1-D ResNet trunk (5 tokens per window) β bidirectional GRU over
40-window chunks β a direct velocity head and a learned-gain recursion v_k = ΞR_k v_{kβ1} + ΞV_k + K_k (v_direct β v_prop)
inside the same network (the "EKF" head; ΞR, ΞV are the gyro/acc increments between window ends) β body-frame
velocity per window. Huber loss (Ξ² 0.05) on the output and on the direct head, BCE on the gain.
Trunk initialised from a masked-IMU self-supervised pre-training on the released train+val IMU (no labels).
Training augmentations: time dilation k β [0.7, 1.5] (drone; identity-source racing family capped at 1.2) and,
for the racing family only, translation scaling s β [1.0, 1.8] applied to velocity labels and the gravity-removed
specific force ("S-fast"); yaw augmentation about the estimated up (direction-only) for the identity source;
random dropout of the step-2 channels.
Final weights = last epoch of a 120-epoch train+val run, seed 42 (pre-designated before any seed of this recipe was
scored; seed 43 reported for range in the technical report).
calnet/attnetwere trained once on train+val GT attitude / calibration targets and frozen before the main network was trained.
Compliance declaration
- Single model, one shared set of weights? Yes. One checkpoint file, one deterministic pipeline (calnet β attnet β velocity network) executed once per recording / chunk; no per-platform experts. The sub-modules are fixed feature extractors of the same model, not a second estimator: the only velocity output is the main network's.
- Platform classification, routing or specialization at inference? No. An auxiliary platform head exists only as a
training loss; it is not used at inference and nothing is routed.
calnet's gyro-map class is an IMU-mounting correction (applied to the input signal), not a platform switch. - Ensembling, checkpoint averaging or test-time augmentation? No. Single checkpoint, deterministic inference, overlapping-chunk averaging of one model's own predictions only (stride K/2 within a trajectory).
- Test-set leakage avoidance, incl. model / checkpoint selection? Test ground truth never used. The final checkpoint is the fixed last epoch (no selection on any test signal). The self-supervised trunk pre-training used only the released train+val IMU. No external data or external pretrained weights are used in the submitted system. Development-time experiments with an external dataset (NeuroBEM) were run and are disclosed in the report; none of their weights or data enter this model. A public-leaderboard probe with a physics post-processing rule was made during development and is NOT part of this submission (pure model output only).
- Development-time vs submitted system? Identical inference code; the submitted checkpoint differs from earlier leaderboard entries by the training augmentation (S-fast) and the learned-INS input channels / recursion head described above. Model/checkpoint selection used the released validation split and two stress folds of the training split.