{"id":31768930,"url":"https://github.com/mit-spark/fast-shapeandpose","last_synced_at":"2025-10-10T02:22:22.728Z","repository":{"id":315443996,"uuid":"952619193","full_name":"MIT-SPARK/Fast-ShapeAndPose","owner":"MIT-SPARK","description":"Shape and pose estimation via eigenproblem with eigenvector nonlinearities.","archived":false,"fork":false,"pushed_at":"2025-09-25T20:18:27.000Z","size":11688,"stargazers_count":9,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-25T22:28:39.883Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://arxiv.org/abs/2509.18979","language":"Julia","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MIT-SPARK.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-03-21T15:27:49.000Z","updated_at":"2025-09-25T20:18:30.000Z","dependencies_parsed_at":"2025-09-18T18:29:10.256Z","dependency_job_id":null,"html_url":"https://github.com/MIT-SPARK/Fast-ShapeAndPose","commit_stats":null,"previous_names":["mit-spark/fast-shapeandpose"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MIT-SPARK/Fast-ShapeAndPose","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MIT-SPARK%2FFast-ShapeAndPose","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MIT-SPARK%2FFast-ShapeAndPose/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MIT-SPARK%2FFast-ShapeAndPose/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MIT-SPARK%2FFast-ShapeAndPose/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MIT-SPARK","download_url":"https://codeload.github.com/MIT-SPARK/Fast-ShapeAndPose/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MIT-SPARK%2FFast-ShapeAndPose/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279002539,"owners_count":26083399,"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","status":"online","status_checked_at":"2025-10-10T02:00:06.843Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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-10-10T02:22:19.613Z","updated_at":"2025-10-10T02:22:22.722Z","avatar_url":"https://github.com/MIT-SPARK.png","language":"Julia","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Category-Level Shape and Pose Estimation in Less Than a Millisecond\n[[Paper](https://arxiv.org/abs/2509.18979)] [[Video](TODO)]\n\nOfficial Julia implementation of \"Category-Level Object Shape and Pose Estimation in Less Than a Millisecond\"\nby Lorenzo Shaikewitz, Tim Nguyen, and Luca Carlone\n\n  One Run                  |  Multiple Minima\n:-------------------------:|:-------------------------:\n![](assets/scf_oneiter.gif)|![](assets/scf_twomins.gif)\n\n\nThis repository contains the *solver*. We open-source keypoint detection and training [here](https://github.com/Piflyer/keypoint-tracking).\n\n## Quick Start\nFirst, make sure you have [Julia installed](https://julialang.org/install/). This repository was tested with v1.11.6. Then, clone the repository and follow the directions below. We assume you are in the repo folder.\n1. Clone this repository\n```shell\ngit clone https://github.com/lopenguin/Fast-ShapeAndPose.git\ncd Fast-ShapeAndPose\n```\n2. Open the Julia REPL\n```shell\njulia --project\n```\n3. Install dependencies\n```julia-repl\nusing Pkg\nPkg.add(url=\"https://github.com/lopenguin/SimpleRotations.jl\")\n```\n\nThat's it! I've prepared a simple demo script which measures runtime and plots the SCF iterates:\n```julia-repl\njulia\u003e include(\"scripts/demo_pace.jl\")\n```\n\nThe script may take a bit to run the first time while Julia precompiles it, but after that it should be much faster!\n\n## Reproducing Results\nFirst, download the data for each experiment:\n```shell\nwget -O data.zip \"https://drive.usercontent.google.com/download?id=1Z229oE_R27QneU0_GCJS2oH3yznJ8KdF\u0026export=download\u0026confirm=yes\"\nunzip data.zip -d data\nrm data.zip\n```\nYou can also download [from Google drive](https://drive.google.com/file/d/1Z229oE_R27QneU0_GCJS2oH3yznJ8KdF/view?usp=sharing) and put it in a \"data\" folder.\n\nNow, you can print a summary of any of the experiments by calling:\n```shell\njulia --project synthetic.jl\n# cast.jl, nocs.jl, apollo2.jl\n```\n\nTo re-run a specific experiment, add the method name and `--force`. For example:\n```shell\njulia --project synthetic.jl SCF --force\n```\n\nRunning multiple methods together allows Julia to precompile for the specific problem data, which artificially increases the runtime of the second or third method.\n\nBelow, we provide more details on each of the experiments.\n\n\u003cdetails closed\u003e\n\n\u003csummary\u003e\u003cb\u003eSynthetic Experiments\u003c/b\u003e\u003c/summary\u003e\n\nThe synthetic experiment data is all in [this file](./data/synthetic/problem_data.dat). All methods have the same initial condition. The problem data is generated using:\n```julia\nq0 = normalize(randn(4))\nserialize(\"data/synthetic/problem_data.dat\", (data,q0))\n```\n\n\u003c/details\u003e\n\n\n\u003cdetails closed\u003e\n\n\u003csummary\u003e\u003cb\u003eCAST Experiments\u003c/b\u003e\u003c/summary\u003e\n\nWe test on the [CAST dataset](https://github.com/MIT-SPARK/certifiable_tracking?tab=readme-ov-file). First, we run the fast compatibility checks [ROBIN](https://github.com/MIT-SPARK/ROBIN) using [this python script](./assets/run_robin.py). This saves the inlier clique to the \"robin_\" json file along with the time it takes to run ROBIN. For visualization, see [scripts/visualization/cast.jl](./scripts/visualization/cast.jl). The keypoint detector is not released.\n\n\u003c/details\u003e\n\n\n\u003cdetails closed\u003e\n\n\u003csummary\u003e\u003cb\u003eNOCS Experiments\u003c/b\u003e\u003c/summary\u003e\n\nWe test on the [NOCS-REAL275 dataset](https://github.com/hughw19/NOCS_CVPR2019). Keypoint detection is done separately. Save files are [available here](https://drive.google.com/drive/folders/17MErjAilASvz6tpw6yex0OqWEbcueMBA?usp=sharing) and scripts to run keypoint detection are [available here](https://github.com/Piflyer/keypoint-tracking). We caution that keypoint detection doesn't work particularly well.\n\nTo run on NOCS, you also need to specify the subfolder (see data/nocs). For example:\n```shell\njulia --project nocs.jl SCF mug --force\n```\n\nThere are also several visualization scripts in the `visualization` folder.\n\n\u003c/details\u003e\n\n\n\u003cdetails closed\u003e\n\n\u003csummary\u003e\u003cb\u003eApolloCar3D Experiments\u003c/b\u003e\u003c/summary\u003e\n\nUnfortunately, most ApolloCar3D data is no longer available at their [official repository](https://github.com/ApolloScapeAuto/dataset-api). We use the code in this repository to process the dataset. While we don't have access to the original images, the keypoint detections are provided in the data.\n\n\u003c/details\u003e\n\n## BibTeX\n```\n@misc{Shaikewitz25arxiv-FastShapeAndPose,\n      title={Category-Level Object Shape and Pose Estimation in Less Than a Millisecond}, \n      author={Lorenzo Shaikewitz and Tim Nguyen and Luca Carlone},\n      year={2025},\n      eprint={2509.18979},\n      archivePrefix={arXiv},\n      primaryClass={cs.RO},\n      url={https://arxiv.org/abs/2509.18979}, \n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmit-spark%2Ffast-shapeandpose","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmit-spark%2Ffast-shapeandpose","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmit-spark%2Ffast-shapeandpose/lists"}