[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-11433":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":26,"readmeContent":27,"aiSummary":28,"trendingCount":16,"starSnapshotCount":16,"syncStatus":29,"lastSyncTime":30,"discoverSource":31},11433,"KISS-IMU","sparolab\u002FKISS-IMU","sparolab","KISS-IMU: Self-supervised Inertial Odometry with Motion-balanced Learning and Uncertainty-aware Inference. @ ICRA'26 Award Finalist","",null,"Python",148,8,31,1,0,6,10,83,18,68.16,"BSD 3-Clause \"New\" or \"Revised\" License",false,"main",[],"2026-06-12 04:00:55","\u003Cdiv align=\"center\">\n  \u003Ch1>\n    KISS-IMU: Self-supervised Inertial Odometry \u003Cbr>\n    with Motion-balanced Learning and Uncertainty-aware Inference\n  \u003C\u002Fh1>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fsparolab\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython-3670A0?logo=python&logoColor=ffdd54\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fsparolab.github.io\u002Fresearch\u002Fkiss_imu\u002F\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fsparolab\u002FJoint_ID\u002Fblob\u002Fmain\u002Ffig\u002Fbadges\u002Fbadge-website.svg\" alt=\"Project\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2603.06205\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2603.06205-b31b1b.svg?style=flat-square\" alt=\"arXiv\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=cjAFROi-jG0\">\u003Cimg src=\"https:\u002F\u002Fbadges.aleen42.com\u002Fsrc\u002Fyoutube.svg\" alt=\"YouTube\" \u002F>\u003C\u002Fa>\n  \u003Cbr \u002F>\n\n  \u003Ch3>🏆 IEEE ICRA 2026 Award Finalist\u003C\u002Fh3>\n\n  \u003Ca href=\"https:\u002F\u002Fscholar.google.com\u002Fcitations?user=wL8VdUMAAAAJ&hl=ko\" target=\"_blank\">Jiwon Choi\u003C\u002Fa>,\n  \u003Ca href=\"https:\u002F\u002Fhogyun2.github.io\" target=\"_blank\">Hogyun Kim\u003C\u002Fa>,\n  \u003Ca href=\"https:\u002F\u002Fscholar.google.com\u002Fcitations?user=kiBTkqMAAAAJ&hl=ko\" target=\"_blank\">Geonmo Yang\u003C\u002Fa>,\n  \u003Ca href=\"https:\u002F\u002Fscholar.google.com\u002Fcitations?user=4-5Fi9kAAAAJ&hl=ko\" target=\"_blank\">Juhui Lee\u003C\u002Fa>,\n  \u003Ca href=\"https:\u002F\u002Fscholar.google.com\u002Fcitations?user=W5MOKWIAAAAJ&hl=ko\" target=\"_blank\">Younggun Cho\u003C\u002Fa>\u003Csup>†\u003C\u002Fsup>\n\n  **[🤖 Spatial AI and Robotics Lab (SPARO)](https:\u002F\u002Fsparolab.github.io\u002F)**\n\n  \u003Cp align=\"center\">\u003Cimg src=\"fig\u002Fmain.gif\" alt=\"animated\" width=\"75%\" \u002F>\u003C\u002Fp>\n\n  ***\\\u003CKeep IMU Stable and Strong\\>***\n\u003C\u002Fdiv>\n\n---\n\n## 📰 News\n- 🏆 **May 6, 2026.** Selected as an **IEEE ICRA 2026 Award Finalist**.\n- 🎉 **Jan 31, 2026.** Accepted to **IEEE ICRA 2026**.\n\n## 💡 Overview\nKISS-IMU denoises raw IMU streams against a self-generated LiDAR-odometry pseudo-label. A GMM-based motion-balanced sampler with a frequency gate keeps under-represented motion regimes from being drowned out during training.\n\n## 🚀 Getting Started\n\n### 🐳 Docker (recommended)\n\nThe image `sparolab\u002Fkiss-imu:v1.0` ships with all runtime dependencies (CUDA, PyTorch, pypose, kiss-icp, small_gicp, pygicp, scikit-learn).\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fsparolab\u002FKISS-IMU.git\ncd KISS-IMU\n```\n\nEdit `docker\u002Fdocker-compose.yml` and replace `{dataset_folder}` under `volumes:` with the absolute path to your datasets (e.g. `\u002Fmnt\u002Fhdd\u002Fdatasets:\u002Fstorage1`). Then launch:\n\n```bash\ndocker compose -f docker\u002Fdocker-compose.yml up -d\ndocker exec -it kiss-imu-ws bash\n```\n\nInside the container, `pwd` is already `\u002Fhome\u002Ftest_ws\u002Fsrc`:\n\n```bash\nbash scripts\u002Ftrain.sh\n```\n\n### 🛠️ Native\n\n```bash\npip install -r requirements.txt\nbash scripts\u002Ftrain.sh\n```\n\n## 📂 Dataset Layout\n\nOne top-level `data_root` with one sub-directory per sequence:\n\n```\n📁 \u003Cdata_root>\u002F\n└── 📂 \u003CSEQUENCE_NAME>\u002F\n    ├── 📄 imu.csv\n    ├── 📄 gt_pose.csv\n    └── 📂 points\u002F\n        ├── 📂 data\u002F\n        │   ├── 🟦 000000.bin\n        │   └── ...\n        └── 📄 timestamps.txt\n```\n\nThe loader handles dataset-specific column indices and coordinate transforms once `--data-type` is set (`kitti`, `mulran`, `diter_os`, …). See [examples\u002Fdataset_layout.md](examples\u002Fdataset_layout.md) for custom formats.\n\n## 🏋️ Training\n\n```bash\nbash scripts\u002Ftrain.sh\n```\n\nHyperparameters live as env vars at the top of [`scripts\u002Ftrain.sh`](scripts\u002Ftrain.sh):\n\n| Variable        | Notes |\n| --------------- | ----- |\n| `DATA_DIR`      | Root directory of your dataset |\n| `DATA_TYPE`     | `diter_os` \\| `kitti` \\| `mulran` \\| ... |\n| `TRAIN_SEQS` \u002F `VALID_SEQS` | Sequence names under `DATA_DIR` |\n| `LO_MODEL`      | `kiss_icp` \\| `fast_gicp` \\| `small_gicp` |\n| `GMM_COMP_NUM`  | `0` = auto-pick K via BIC, otherwise fixed K |\n| `USE_GT`        | GT pose supervision (ablation only, no ICP\u002FPGO) |\n| `USE_SUBMAP`    | Aggregate scans into a sub-map for `small_gicp` |\n| `TRAIN_RATIO`   | Fraction of training windows used |\n\n### Ablations\n\n- **GT supervision.** Lets you isolate the GMM reweighting contribution from the LO pseudo-label.\n\n  ```bash\n  USE_GT=true bash scripts\u002Ftrain.sh\n  ```\n\n- **Raw-IMU + PVGO.** Reproduces the `Baseline*` reported in the paper.\n\n  ```bash\n  bash scripts\u002Fraw_pvgo.sh\n  ```\n\n## 📊 Evaluation\n\nEvaluate the best checkpoint:\n\n```bash\nCKPT=results\u002F...\u002Fbest_model.ckpt \\\n  EVAL_SEQS=\"Forest_new Lawn_lower_night Park_in_day\" \\\n  bash scripts\u002Fevaluate.sh\n```\n\nReports per-window endpoint RPE (translation, rotation) and end-point\nAPE, averaged per sequence. Run `bash scripts\u002Fevaluate.sh --help` for\nall options.\n\n## 🛰️ Inference\n\nSave full ICP \u002F PGO trajectories as `.npz` + top-down `.png` for plotting or downstream stages:\n\n```bash\nCKPT=results\u002F...\u002Fbest_model.ckpt \\\n  SEQS=\"Forest_new Park_in_day\" \\\n  bash scripts\u002Finference.sh\n```\n\n| Variable               | Notes |\n| ---------------------- | ----- |\n| `CKPT`                 | Path to `best_model.ckpt` (required) |\n| `SEQS`                 | Sequence names to run inference on (required) |\n| `LO_MODEL`             | `kiss_icp` \\| `fast_gicp` \\| `small_gicp` |\n| `USE_ADAPTIVE_WEIGHT`  | Weight ICP factors by overlap, IMU by integrated cov |\n| `USE_SUBMAP`           | Aggregate scans into a sub-map for small_gicp |\n\nOutputs land in `\u003Cckpt-dir>\u002Finference\u002F\u003Cseq>\u002F{inference.npz, trajectory.png}`.\n\n## 🔬 Encoder t-SNE\n\nProject encoder features to 2D and color by component id to verify motion-regime separation:\n\n```bash\nCKPT=results\u002F...\u002Fbest_model.ckpt \\\n  TRAIN_SEQS=\"Forest_new\" EVAL_SEQS=\"Park_in_day\" \\\n  bash scripts\u002Ftsne_encoder.sh\n```\n\n| Variable        | Notes |\n| --------------- | ----- |\n| `CKPT`          | Path to `best_model.ckpt` (required) |\n| `GMM`           | Override the fitted GMM (defaults to `\u003Cckpt-dir>\u002Fgmm.joblib`) |\n| `TRAIN_SEQS` \u002F `EVAL_SEQS` | One t-SNE plot per split |\n| `PAIR_MODE`     | `all` plots every component. `farthest` keeps only the two components whose GMM means are most separated (focused separability check). |\n| `PER_COMP`      | Points per component (`0` = auto, capped by `MAX_WINDOWS`) |\n| `MAX_WINDOWS`   | Total cap on plotted points |\n| `MIN_PER_COMP`  | Drop components with fewer windows than this |\n| `PERPLEXITY`    | Auto-clamped down if needed |\n\nOutputs: `\u003Cckpt-dir>\u002Ftsne\u002F{tsne_train.png, tsne_eval.png}`. The fitted GMM is saved alongside `best_model.ckpt` during training, so the default path usually just works.\n\n## 🔗 Resources\n- 📄 [arXiv](https:\u002F\u002Farxiv.org\u002Fabs\u002F2603.06205)\n- 🌐 [Project page](https:\u002F\u002Fsparolab.github.io\u002Fresearch\u002Fkiss_imu\u002F)\n- 🎬 [Video](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=cjAFROi-jG0)\n\n## 📝 Citation\n```bibtex\n@inproceedings{choi2026kissimu,\n  title     = {KISS-IMU: Self-supervised Inertial Odometry with\n               Motion-balanced Learning and Uncertainty-aware Inference},\n  author    = {Choi, Jiwon and Kim, Hogyun and Yang, Geonmo and Lee, Juhui and Cho, Younggun},\n  booktitle = {IEEE International Conference on Robotics and Automation (ICRA)},\n  year      = {2026}\n}\n```\n\n## 📬 Contact\nJiwon Choi: jiwon2@inha.edu\n\n## 📜 License\nBSD 3.0 for academic use. For commercial use, please contact the authors.\n\n## ✨ Contributors\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fsparolab\u002FKISS-IMU\u002Fgraphs\u002Fcontributors\">\n  \u003Cimg src=\"https:\u002F\u002Fcontrib.rocks\u002Fimage?repo=sparolab\u002FKISS-IMU\" \u002F>\n\u003C\u002Fa>\n","KISS-IMU 是一个用于自监督惯性里程计的项目，它通过运动平衡学习和不确定性感知推断来提高IMU数据的稳定性和准确性。该项目采用GMM（高斯混合模型）为基础的采样器和频率门控技术，确保在训练过程中不会忽略较少出现的运动模式。KISS-IMU使用Python开发，并支持Docker环境快速部署，适合需要高精度室内定位或机器人导航的应用场景，如自动驾驶、无人机控制等。其创新的方法为处理复杂动态环境下的IMU信号提供了新的思路。",2,"2026-06-11 03:31:51","CREATED_QUERY"]