{"id":24539697,"url":"https://github.com/stephlin/fracgm","last_synced_at":"2025-06-21T08:39:38.020Z","repository":{"id":262469288,"uuid":"780106974","full_name":"StephLin/FracGM","owner":"StephLin","description":"A Fast Fractional Programming Technique for Geman-McClure Robust Estimator (RA-L 2024)","archived":false,"fork":false,"pushed_at":"2025-05-15T02:49:40.000Z","size":10177,"stargazers_count":24,"open_issues_count":1,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-15T03:41:29.422Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://dgbshien.com/FracGM/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/StephLin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-03-31T17:57:12.000Z","updated_at":"2025-04-23T02:21:53.000Z","dependencies_parsed_at":null,"dependency_job_id":"ff2df844-97f6-48dd-a7d5-780537f7b254","html_url":"https://github.com/StephLin/FracGM","commit_stats":null,"previous_names":["stephlin/fracgm"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/StephLin/FracGM","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StephLin%2FFracGM","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StephLin%2FFracGM/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StephLin%2FFracGM/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StephLin%2FFracGM/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/StephLin","download_url":"https://codeload.github.com/StephLin/FracGM/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StephLin%2FFracGM/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261095027,"owners_count":23108758,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-22T17:15:43.754Z","updated_at":"2025-06-21T08:39:32.977Z","avatar_url":"https://github.com/StephLin.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FracGM\n\n[![License](https://img.shields.io/badge/License-BSD_3--Clause-blue.svg?style=flat-square)](https://opensource.org/licenses/BSD-3-Clause)\n[![Rust Formatter](https://img.shields.io/badge/Rust_Formatter-rustfmt-orangered?style=flat-square)](https://github.com/rust-lang/rustfmt)\n[![Python Formatter](https://img.shields.io/badge/Python_Formatter-ruff-black?style=flat-square)](https://github.com/astral-sh/ruff)\n[![C++ Formatter](https://img.shields.io/badge/C++_Formatter-clang--format_18.1.8-lightblue?style=flat-square)](https://releases.llvm.org/18.1.8/tools/clang/tools/extra/docs/ReleaseNotes.html)\n\nOfficial implementation of \"FracGM: A Fast Fractional Programming Technique for\nGeman-McClure Robust Estimator.\" This work is accpeted for publication by IEEE\nRobotics and Automation Letters (RA-L). This library is written in **Rust** and\nwe support **Rust**, **C++**, and **Python** interfaces.\n\n| ![](./assets/images/demo-iterations.gif) | ![](./assets/images/demo-registration.gif) |\n| ---------------------------------------- | ------------------------------------------ |\n\n**About FracGM**\n\nFracGM is a fast and accurate algorithm for Geman-McClure robust estimation,\nwhich leverages fractional programming techniques. It exhibits fast convergence\nrate and well outlier rejection capability. In addition, the global optimality\nof the proposed solver can be guaranteed under given conditions.\n\nFor more, please refer to our paper:\n\n- [Bang-Shien Chen](https://dgbshien.com/), [Yu-Kai Lin](https://github.com/StephLin), [Jian-Yu Chen](https://github.com/Jian-yu-chen), [Chih-Wei Huang](https://sites.google.com/ce.ncu.edu.tw/cwhuang/), [Jann-Long Chern](https://math.ntnu.edu.tw/~chern/), [Ching-Cherng Sun](https://www.dop.ncu.edu.tw/en/Faculty/faculty_more/9), **FracGM: A Fast Fractional Programming Technique for Geman-McClure Robust Estimator**. _IEEE Robotics and Automation Letters (RA-L)_, vol. 9, no. 12, pp. 11666-11673, Dec. 2024. ([paper](https://doi.org/10.1109/lra.2024.3495372)) ([preprint](https://arxiv.org/pdf/2409.13978)) ([code](https://github.com/StephLin/FracGM))\n\n```bibtex\n@article{Chen24FracGM,\n  author={Chen, Bang-Shien and Lin, Yu-Kai and Chen, Jian-Yu and Huang, Chih-Wei and Chern, Jann-Long and Sun, Ching-Cherng},\n  journal={IEEE Robotics and Automation Letters},\n  title={FracGM: A Fast Fractional Programming Technique for Geman-McClure Robust Estimator},\n  year={2024},\n  volume={9},\n  number={12},\n  pages={11666-11673},\n  doi={10.1109/LRA.2024.3495372}\n}\n```\n\n**Table of Contents**\n\n- [FracGM](#fracgm)\n  - [:gear: Setup](#gear-setup)\n    - [Prerequisites](#prerequisites)\n    - [Building FracGM](#building-fracgm)\n  - [:seedling: Example Usages](#seedling-example-usages)\n  - [:coffee: Supplementary Materials](#coffee-supplementary-materials)\n  - [:gift: Acknowledgement](#gift-acknowledgement)\n\n## :gear: Setup\n\nThe following setup is tested in Ubuntu 22.04.\n\n### Prerequisites\n\n```bash\n# Rust\ncurl https://sh.rustup.rs -sSf | sh\n# Use the following command to load the Rust environment in the same shell:\n# . \"$HOME/.cargo/env\"            # For sh/bash/zsh/ash/dash/pdksh\n# source \"$HOME/.cargo/env.fish\"  # For fish\n\n# OpenBLAS (for ndarray-linalg)\nsudo apt update\nsudo apt install -y libopenblas-dev pkg-config libssl-dev cmake\n\n# C++ (for maximum clique inlier selection)\nsudo apt install -y g++\n\n# (Optional) Setup the C++ wrapper\nsudo apt install -y g++\npython3 -m pip install meson ninja\n\n# (Optional) Setup the Python wrapper\n# python3 -m pip install virtualenv\n# python3 -m virtualenv venv\n# source venv/bin/activate\nsudo apt install -y python3-pip python3-dev\npython3 -m pip install numpy \"maturin[patchelf]\" rich\n```\n\n### Building FracGM\n\n```bash\ngit clone --recurse-submodules -j8 https://github.com/StephLin/FracGM.git\ncd FracGM\n\n# If you do not clone FracGM with --recurse-submodules option,\n# you may need to run the following command.\ngit submodule update --init\n\n# 🦀 Build FracGM with Native Rust support\ncargo build --release --package fracgm\n\n# 🥐 Build FracGM with C++ wrapper\npython3 scripts/build_fracgm_cxx_library.py\n# header files: ./fracgm-cxx/include\n# library file: ./target/release/libfracgm_cxx.so\n\n# 🐍 Build and install FracGM with Python wrapper\n# (Notice: You should check the real path to the wheel file\n#  e.g., ./target/wheels/fracgm-0.1.0-cp310-cp310-manylinux_2_34_x86_64.whl)\npython3 scripts/build_fracgm_python_package.py\npython3 -m pip install $(ls ./target/wheels/*.whl) --force-reinstall\n```\n\n## :seedling: Example Usages\n\n- [:crab: Rust](examples/rust)\n- [:croissant: C++](examples/cpp)\n- [:snake: Python](examples/python)\n\n## :coffee: Supplementary Materials\n\n- [:page_facing_up: Appendix A.](appendix/appx_A) A simple example of FracGM with global optimal guarantees\n- [:page_facing_up: Appendix B.](appendix/appx_B) Tightness of linear relaxation\n- [:page_facing_up: Appendix C.](appendix/appx_C) Sensitivity of initial guess\n\n## :gift: Acknowledgement\n\nThe feature of maximum clique inlier selection (MCIS) refers to [TEASER++'s implementation](https://github.com/MIT-SPARK/TEASER-plusplus), which is under the MIT license.\nWe modify the implementation to bundle with the FracGM Rust interface.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstephlin%2Ffracgm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstephlin%2Ffracgm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstephlin%2Ffracgm/lists"}