File size: 5,570 Bytes
1b0d082
 
30c6216
 
 
 
 
 
 
1b0d082
 
 
30c6216
 
 
 
 
 
 
 
 
 
1b0d082
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
---
license: mit
tags:
- inertial-odometry
- imu
- tartanimu
- iros2026
- state-estimation
- sensor-fusion
---
# TartanIMU Challenge (IROS 2026) — team Lexxxxx — model `a3v21_s42` (second leaderboard entry)

Second of the two final entries of a team that finished **20th of 131** in the IROS 2026 TartanIMU Challenge. Official scoring service over all 89 test sequences: **TartanIMU Score 0.26306** (macro ATE₂₀ 0.637 m, macro AVE 0.222 m/s). The delivered entry is `a3v20_s42` (0.25878).

| | |
|---|---|
| **Code, evaluation rulers, technical report, full development record** | https://github.com/Jadiouo/tartanimu-unified-io |
| Results and how to verify the standing | https://github.com/Jadiouo/tartanimu-unified-io/blob/main/docs/results.md |
| Technical report (PDF, submitted to the organisers) | https://github.com/Jadiouo/tartanimu-unified-io/blob/main/report/technical_report.pdf |
| Competition | https://www.kaggle.com/competitions/tartan-imu-challenge-iros2026 · [final standing](https://www.kaggle.com/competitions/tartan-imu-challenge-iros2026/leaderboard?search=Lexxxxx) · [challenge page](https://superodometry.com/imuchallenge/) |
| Delivered entry (official 0.25878) | https://huggingface.co/LexHo/tartanimu-a3v20 |

Single unified model, one shared set of weights, for all four platforms (car, dog, drone, human).
This repository is our **second** considered submission; the primary one (`a3v20_s42`, official 0.25878) is at
https://huggingface.co/LexHo/tartanimu-a3v20. Each repository holds exactly one model and the exact prediction file it produced.
Frozen weights: `weights/tartanimu_a3v21_s42.pt` (sha256 `7d90badeb2873b1d8f3e13ffca21a624cf2b2ae8a5f838473a7ac44964f9c07b`).
`submission.csv` is the exact prediction file behind the claimed Kaggle score (md5 `a53e196f6b67e8ea52733f4386b5c403`;
official scoring service: TartanIMU Score 0.26306, macro AVE 0.22232, macro ATE20 0.63665).

## 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 10 s wall, 1.4 GB RSS; on one GPU < 1 min, < 1 GB VRAM.
Cross-machine numerical tolerance vs `submission.csv` (produced on an RTX 5090): componentwise mean 1.8e-5, p99 1.6e-4, max 1.6e-3 m/s.
`SHA256SUMS` covers every file (`sha256sum -c SHA256SUMS`).

## Method (short)

Same main network as the primary entry, **without** the learned-INS sub-modules and recursion head, **with** a
recording-level FiLM conditioning: dense random-offset 1 s windows → 14 input channels (raw IMU + an 8-channel
decomposition about a slow complementary-filter "up" direction computed from the same IMU) → dilated 1-D ResNet trunk
(5 tokens per window) whose blocks are modulated (FiLM: per-channel scale and shift) by a 35-dimensional descriptor of
the whole recording (per-axis mean / spread / step roughness of the raw IMU, rest-window statistics, a 10-bin
|acc| spectrum, gyro-rate percentiles, log duration — IMU only, no labels) → bidirectional GRU over 40-window chunks →
linear head → body-frame velocity per window. Huber loss (β 0.05). 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. Final weights = last epoch of a 120-epoch train+val run, seed 42
(pre-designated; seed range reported in the technical report).

## Compliance declaration

1. **Single model, one shared set of weights?** Yes. One checkpoint, one forward pass per chunk; no per-platform experts.
   The FiLM descriptor is a function of the recording's own IMU computed inside the same forward pass; it is not a
   platform label and nothing is routed.
2. **Platform classification, routing or specialization at inference?** No. An auxiliary platform head exists only as a
   training loss; it is not used at inference.
3. **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).
4. **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.
5. **Development-time vs submitted system?** Identical inference code; the submitted checkpoint differs from earlier
   leaderboard entries by the training augmentation (S-fast) and the recording-level FiLM. Model/checkpoint selection used
   the released validation split and two stress folds of the training split.