IROS 2026 · TARTANIMU CHALLENGE
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
車、四足狗、無人機、手持裝置,各自的運動方式完全不同。比賽要求同一組權重處理這四種載具,推論時不知道是哪一種,只給 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.
名次
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.
一個 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:
賽後提交不計名次,也不與上面的比賽成績並列成「進步」。算法不同:比賽成績是私榜(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).
| 做法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.
我是研究負責人:研究方向、取捨、驗證規則與每次提交與否,由我最後決定。實作、實驗執行、程式撰寫與互審由 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".
可試的方向大致都試過了;下一步是把模型部署到實體機器人上,讓它成為真的能運作的系統。
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.