TartanIMU 作品集
IMU · 200 Hz · 6-axis · m/s

IROS 2026 · TARTANIMU CHALLENGE

只靠 IMU 估計速度,
一組權重通吃四種載具
Velocity from an IMU alone,
one set of weights, four robots

Kaggle 私榜第 20 名(131 隊),單人隊伍;用 2.17M 參數的小模型,另一支強隊的網路是 43.7M。20th of 131 on the Kaggle private leaderboard, solo entry, with a 2.17M-parameter model; one strong rival network is 43.7M.

Hao-Ting Ho · 何浩廷 · 東海大學電機系Dept. of Electrical Engineering, Tunghai University · lexho2005@gmail.com

20 / 131Kaggle 私榜名次(分數 0.19912,越低越好);主辦方後續列為前十隊伍之一,官方最終名次尚未公布Kaggle private leaderboard rank (score 0.19912, lower is better); the organizers later listed us among the top 10; the official final ranking is not yet announced
2.17M vs 43.7M模型大小(參數量),約 1/20model size (parameters), about 1/20
0.25878用全部測試資料算的官方分數(越低越好;全部預測為零 = 1.0;主辦方基線 0.538)official full-test score (lower is better; all-zero = 1.0; organizer baseline 0.538)
研究負責人Research lead方向、取捨、驗證規則、每次提交由我決定;實作由 AI agent 執行I set direction, trade-offs, validation rules and every submission; AI agents implemented

01問題The problem

車、四足狗、無人機、手持裝置,各自的運動方式完全不同。比賽要求同一組權重處理這四種載具,推論時不知道是哪一種,只給 200 Hz 的六軸 IMU(三軸加速度加三軸角速度),輸出速度。難在:IMU 量到的是加速度,積分起來會越漂越遠;而每種載具的動力學不一樣,例如無人機高速時空氣阻力很大。

A car, a quadruped, a drone and a handheld rig all move differently. The challenge asks for one set of weights across all four, with no platform label at inference: only 200 Hz six-axis IMU data (3-axis accelerometer and 3-axis gyro) in, velocity out. It is hard because the IMU measures acceleration, which drifts when integrated, and each platform has different dynamics; a fast drone, for example, is dominated by air drag.

02比賽成績Contest result

名次

RANKING

Kaggle 私榜第 20 名(131 隊);主辦方後續將本隊列為前十隊伍之一(2026-10-09 主辦方來信),官方最終名次尚未公布。

20th of 131 on the Kaggle private leaderboard; the organizers subsequently listed our team among the top 10 (organizers' e-mail, 2026-10-09); the official final ranking has not been announced.

受邀加入 IMU Foundation Model 白皮書討論頻道;目前未列為作者,白皮書尚未發表。

Invited to the private working channel for the forthcoming IMU Foundation Model white paper. Not a listed author; the paper is unpublished.

IROS 2026 TartanIMU Challenge:私榜分數 0.19912,提交的是我們比賽最終的模型(a3v20)。用全部測試資料算的官方分數是 0.25878(越低越好,全部預測為零 = 1.0),主辦方的基線是 0.538。9/8 加入、9/21 交件,約兩週。

IROS 2026 TartanIMU Challenge: private leaderboard score 0.19912 with our final competition model (a3v20). The official full-test score is 0.25878 (lower is better; all-zero = 1.0) against the organizer baseline of 0.538. I joined on 8 September and delivered on 21 September, about two weeks later (the contest itself opened earlier).

限制:同樣的做法只換隨機種子重訓,另一次是 0.26933;交出去的那次是事先指定的,但剛好落在較好的一側。只換種子,分數就會飄動約 0.0056。

Caveat: the same recipe retrained with another random seed scores 0.26933. The seed I submitted was fixed in advance but landed on the better side; changing only the seed moves the score by about 0.0056.

03做法Approach

一個 2.17M 參數的網路:把資料切成 1 秒的窗,用雙向循環網路一次看 40 個窗;前面接兩個小模組先校正感測器偏差與姿態,後面是讓速度在窗與窗之間接力的輸出,接力的力度可以調。訓練前先讓模型玩「遮住一部分輸入再還原」的自監督預訓練。以下是本專案的技術貢獻:

One 2.17M-parameter network: the data is cut into 1-second windows and a bidirectional recurrent network reads 40 windows at once; two small modules in front correct sensor bias and attitude, and an output behind lets the velocity estimate carry over from window to window, with an adjustable strength. Before training it is pre-trained on a "mask part of the input and reconstruct it" task. Project contributions:

原始 IMU 200 Hz → 校正偏差與姿態 → 25 個輸入通道 → 卷積網路 → 雙向循環網路 ×2 → 直接預測+跨窗接力 → 速度 [比賽提交到此為止]
賽後:thisray 的後處理方法(借用)→ 階段二:地面機器人的修正 → 階段三:逐窗不確定度平滑
raw IMU 200 Hz → bias and attitude correction → 25 channels → convolutional net → bidirectional recurrent net ×2 → direct estimate + window-to-window carry-over → velocity [contest entry ends here]
after the contest: post-processing method from thisray (borrowed) → Step 2: ground-robot correction → Step 3: per-window uncertainty smoothing
上一行到速度為止是比賽提交;下一行是賽後延伸,thisray 的後處理方法為借用,階段二、三為本專案新增。The top line ends at the contest entry; the bottom line is the post-contest extension, where the thisray method is borrowed and Steps 2 and 3 were added by this project.

04賽後延伸Post-contest extension

賽後提交不計名次,也不與上面的比賽成績並列成「進步」。算法不同:比賽成績是私榜(48 條序列)的 0.19912;下圖是賽後補交、Kaggle 回傳的分數。Late submissions do not count for rank and are not a "progress line" from the contest score. Different basis: the contest score is the private half (48 sequences) 0.19912; the chart below shows Kaggle-returned scores for post-contest late submissions.

先借用另一支參賽隊伍 thisray(Ssu-Rui Lee)賽後公開的後處理方法(程式 Apache-2.0;權重 CC-BY-NC-4.0),接到我的網路上,這是階段一(E);再由本專案加兩步:階段二(F),地面機器人的修正只套一半強度;階段三(G),把「同一段資料從幾個角度預測、預測彼此不一致的程度」當作每個窗的不確定度,接進平滑器(這個點子是我提的)。階段二、三各自先拿出一部分資料不讓模型看、當作考題檢驗,並在上傳前先寫下怎樣才算有效;借來的階段一沒有這層保證。三個階段在 Kaggle 公開榜與私榜(測試資料的兩半)的分數見下圖,換算成官方分數約 0.182、0.179、0.178(近似,誤差約 ±0.0005)。

First I ported the post-processing method that another team, thisray (Ssu-Rui Lee), released after the challenge (code Apache-2.0, weights CC-BY-NC-4.0) onto my network, giving Step 1. This project then added two steps: Step 2, a half-strength correction for ground robots, and Step 3, where how much several predictions of the same window disagree is used as that window's uncertainty and fed into the smoother (my idea). Steps 2 and 3 were each checked on a held-out set the model never saw, with the pass/fail rule written before submission; the borrowed Step 1 has no such guarantee. Scores on the Kaggle public and private halves of the test data are charted below; converted to the official score they are about 0.182, 0.179, 0.178 (approximate, error about ±0.0005).

公開榜 41 條序列,私榜 48 條。比例如實:階段之間的差距很小。階段一有兩個版本,後一版的私榜反而比前一版差 0.0027(兩版都上傳後取較好者,帶一個選擇位元);階段二、三兩邊皆較前一階段低。階段二的一半強度是看過 27 條留出錄製的結果才選的,三次驗證用同一批,不能說已在新場次證明有效。Public has 41 sequences, private 48. Proportions are honest: step-to-step differences are small. Step 1 had two variants and the later one scored 0.0027 worse on private (the better of the two was kept, one extra pick between two options); Steps 2 and 3 are lower than the previous step on both halves. The half strength in Step 2 was chosen after seeing results on 27 held-out recordings, and all three checks reuse that set, so it is not shown to hold on new sessions.

05方法論Method

做法Practice實例Example
留出考題資料Held-out set先拿出 39 條地面與無人機錄製,三個訓練階段都不讓模型看(自監督預訓練見過它們的感測器資料,所以不是最嚴格)。39 recordings kept out of all three training stages (the self-supervised pre-training saw their sensor data, so this is not strict).
上傳前寫判準Rule before results每次上傳前先寫下怎樣才算有效,共 12 份。限制:自行存檔、無第三方時間戳,部分與結果在同一次版本紀錄。12 documents, each writing down the pass/fail rule before looking at results. Limit: self-archived, no third-party timestamp, and some share a code snapshot (commit) with their results.
另一模型重算Independent recompute另一個 AI 模型(Codex)重算地面留出分析,與原數字差小於 1e-6;也有專門挑錯的審查。A different AI model (Codex) recomputed the ground analysis; difference below 1e-6. A separate adversarial review also attacked the results.
換種子重做Repeat with other seeds地面修正在兩次不同的隨機種子重訓中,改善都重現。The ground correction's improvement reproduced in two retrainings with different random seeds.
負結果照記Negative results kept多對齊平均(同一段資料換幾種對齊方式預測再取平均)不通過;拿掉車子那一段不顯著;用網路預測不確定度不如簡單的離散度、不提交;地面新增的四個子模型無一通過。Multi-alignment averaging failed; dropping the car segment was not significant; a network-predicted uncertainty lost to the simple disagreement measure and was not submitted; none of four new ground sub-models passed.
作廢自己的結論Retracting my own result發現比賽模型對驗證資料來說是「看過答案」的,該輪結果不當證據。Found that the competition model had seen the validation data in training, and discarded that round as evidence.

揭露:賽後至少 6 次補交(階段一到三的各版本)用 Kaggle 回傳分數做取捨;比賽中用官方計分服務查詢 33 次;賽後另有約 89 次逐序列探針提交(每次只改一條序列),用來還原公開榜 41 條/私榜 48 條的分組。測試標籤從未使用,探針量到的真值也沒有拿來校正輸出。Disclosure: at least 6 post-contest late submissions (the variants of Steps 1 to 3) used returned scores for choices; 33 official-scorer queries during the contest; after the contest about 89 per-sequence probe submissions (one sequence changed each time) were used to recover the public 41 / private 48 split. Test labels were never used, and the true values the probes revealed were not used to correct outputs.

06我的角色My role

我是研究負責人:研究方向、取捨、驗證規則與每次提交與否,由我最後決定。實作、實驗執行、程式撰寫與互審由 AI coding agent(Claude Code、Codex)完成。我把「規劃並指揮多個 agent 的研究流程、防止 AI 自己驗證自己」當成一項能力:留出考題資料、上傳前先寫判準、由另一個模型重算、專門挑錯的審查。

I was research lead: research direction, trade-offs, validation rules and whether each submission went out were my final decisions. Implementation, experiment execution, coding and cross-review were done by AI coding agents (Claude Code, Codex). I treat planning and directing a multi-agent research workflow while preventing AI self-verification as a skill: a held-out set, rules written before submission, recomputation by a different model, and adversarial review.

明確是我提出的點子:針對不同載具做不同物理建模(無人機用動力學);把每個窗的不確定度接進平滑器(就是階段三);選定試多對齊平均(結果無效);賽後繼續推分;以及賽後各步驟哪些值得提交的取捨。其餘方法標為「本專案」。

Ideas that were explicitly mine: platform-specific physics models (dynamics for drones); feeding per-window uncertainty into the smoother (which became Step 3); choosing to try multi-alignment averaging (which did not work); continuing to push after the contest; and the call on which post-contest steps were worth submitting. Everything else is credited to "this project".

07下一步Next step

可試的方向大致都試過了;下一步是把模型部署到實體機器人上,讓它成為真的能運作的系統。

I have tried most of the directions worth trying. The next step is to deploy the model on a physical robot and turn it into a system that actually works.

08連結與聯絡Links and contact