{"id":25601197,"url":"https://github.com/fixstars/cuda-efficient-features","last_synced_at":"2025-04-13T07:16:35.386Z","repository":{"id":205704403,"uuid":"714562821","full_name":"fixstars/cuda-efficient-features","owner":"fixstars","description":"A CUDA implementation of keypoint detection and descriptor extraction","archived":false,"fork":false,"pushed_at":"2024-01-22T06:14:22.000Z","size":464,"stargazers_count":80,"open_issues_count":2,"forks_count":9,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-13T07:16:25.696Z","etag":null,"topics":["computer-vision","cuda","descriptors","local-features","robotics","slam","structure-from-motion"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fixstars.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}},"created_at":"2023-11-05T09:21:13.000Z","updated_at":"2025-03-12T07:27:57.000Z","dependencies_parsed_at":"2023-11-06T04:22:58.860Z","dependency_job_id":"7de73402-073c-4fe9-a863-b1a4e5545f20","html_url":"https://github.com/fixstars/cuda-efficient-features","commit_stats":null,"previous_names":["fixstars/cuda-efficient-features"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fixstars%2Fcuda-efficient-features","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fixstars%2Fcuda-efficient-features/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fixstars%2Fcuda-efficient-features/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fixstars%2Fcuda-efficient-features/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fixstars","download_url":"https://codeload.github.com/fixstars/cuda-efficient-features/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248675393,"owners_count":21143768,"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":["computer-vision","cuda","descriptors","local-features","robotics","slam","structure-from-motion"],"created_at":"2025-02-21T15:52:58.997Z","updated_at":"2025-04-13T07:16:35.334Z","avatar_url":"https://github.com/fixstars.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cuda-efficient-features\n\nA CUDA implementation of keypoint detection and descriptor extraction\n\n---\n\n## Description\nThis project implements keypoint detection and descriptor extraction in CUDA,  \n motivated by [iago-suarez/efficient-descriptors](https://github.com/iago-suarez/efficient-descriptors) and provides the following features.\n\n### Keypoint Detection\n- Provides CUDA implementation of multi-scale FAST corner detection based on OpenCV's `cv::ORB::detect`\n- Added functionality for controlling distribution of keypoints\n\nThe figure below shows a comparison of keypoint detection results between OpenCV's implementation and this project's one.\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"https://github.com/fixstars/cuda-efficient-features/wiki/images/keypoints1.png\" width=384\u003e \u003cimg src=\"https://github.com/fixstars/cuda-efficient-features/wiki/images/keypoints2.png\" width=384\u003e\u003cbr/\u003e\n\u003c/div\u003e\n\n**Left**: Even though OpenCV's implementation detected about 20,000 keypoints, most of them were concentrated in the leaves of trees.\n**Right**: With this project's `nonmaxRadius` setting of 15, the keypoints are detected evenly throughout the image.\n\n### Descriptor Extraction\n- Provides CUDA implementation of **BAD** and **HashSIFT** descriptors proposed by Suarez et al. [1][2]\n\n### OpenCV API\n- Provides APIs in the same format as OpenCV's `cv::Feature2D`\n\t- `detect,compute,detectAndCompute`\n- Also provides asynchronous APIs for concurrent execution\n\t- `detectAsync,computeAsync,detectAndComputeAsync`\n\n---\n\n## References\n- [1] Suarez, Iago, Jose M. Buenaposada, and Luis Baumela. \"Revisiting binary local image description for resource limited devices.\" IEEE Robotics and Automation Letters 6.4 (2021): 8317-8324.\n- [2] https://github.com/iago-suarez/efficient-descriptors\n\n---\n\n## Performance\nUsing `sample_benchmark`, We measured the processing time for each API below.\n\n- `detect`: keypoint detection only\n- `compute`: descriptor extraction only\n- `detectAndCompute`: keypoint detection and descriptor extraction\n\nEach processing time below is an average of 11 images obtained from [SceauxCastle](https://github.com/openMVG/ImageDataset_SceauxCastle). The unit of time is milliseconds.\n\n### detect\nWith the default parameters, we measured the processing time of keypoint detection while changing the image size to FHD(1920x1080), 4K(3840x2160), and 8K(7680x4320).\n\n| Device        | FHD | 4K   | 8K   |\n|---------------|-----|------|------|\n| RTX 3060 Ti   | 1.6 | 2.9  | 5.5  |\n| Jetson Xavier | 5.6 | 12.1 | 27.5 |\n\n### compute\nFor each descriptor, we measured the processing time of descriptor extraction for 40,000 keypoints.\n\n| Device        | BAD256 | BAD512 | HashSIFT256 | HashSIFT512 |\n|---------------|--------|--------|-------------|-------------|\n| RTX 3060 Ti   | 1.5    | 2.7    | 3.5         | 3.9         |\n| Jetson Xavier | 19.1   | 28.2   | 21.9        | 24.8        |\n\n### detectAndCompute\nFor each descriptor, we measured the processing time when executing both keypoint detection and descriptor extraction for 40,000 keypoints.\n\n| Device        | BAD256 | BAD512 | HashSIFT256 | HashSIFT512 |\n|---------------|--------|--------|-------------|-------------|\n| RTX 3060 Ti   | 7.2    | 8.2    | 8.5         | 8.9         |\n| Jetson Xavier | 41.7   | 48.8   | 46.2        | 49.2        |\n\n---\n\n## Requirements\n|Package Name|Minimum Requirements|Note|\n|---|---|---|\n|CMake|version \u003e= 3.18||\n|CUDA Toolkit|compute capability \u003e= 6.0|\n|OpenCV|version \u003e= 4.6.0||\n|OpenCV CUDA module|version \u003e= 4.6.0|included in [opencv/opencv_contrib](https://github.com/opencv/opencv_contrib)|\n\n---\n\n## How to build\n```\n$ git clone https://github.com/fixstars/cuda-efficient-features.git\n$ cd cuda-efficient-features\n$ git submodule update --init  # needed if BUILD_TESTS is ON\n$ mkdir build\n$ cd build\n$ cmake ../  # Several options available (e.g. -DBUILD_TESTS=ON -DCUDA_ARCHS=86)\n$ make\n```\n\n### CMake options\n|Option|Description|Default|\n|---|---|---|\n|BUILD_SAMPLES|Build samples|`ON`|\n|BUILD_TESTS|Build tests|`OFF`|\n|CUDA_ARCHS|List of architectures to generate device code for|`52;61;72;75;86`|\n\n## How to run\n### `samples`\n\n|Command|Description|\n|---|---|\n|`./samples/sample_feature_extraction input-image [options]`|Feature detection and description|\n|`./samples/sample_feature_matching first-image second-image [options]`|Feature matching on an image pair|\n|`./samples/sample_image_sequence image-format [options]`|Feature matching on an image sequence|\n|`./samples/sample_benchmark input-image [options]`|Performance benchmarking|\n|`./samples/hpatches_description hpatchs-dir [options]`|Feature description on HPatches dataset\u003cbr\u003efor [hpatches-benchmark](https://github.com/hpatches/hpatches-benchmark)|\n\nUse the `--help` or `-h` option for detailed information.\n```\n./samples/sample_feature_extraction -h\n```\n\n### `tests`\nRun the following command.\n```\n./tests/tests\n```\n\n---\n\n## Author\nThe \"adaskit Team\"  \n\nThe adaskit is an open-source project created by [Fixstars Corporation](https://www.fixstars.com/) and its subsidiary companies including [Fixstars Autonomous Technologies](https://at.fixstars.com/), aimed at contributing to the ADAS industry by developing high-performance implementations for algorithms with high computational cost.\n\n---\n\n## License\nApache License 2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffixstars%2Fcuda-efficient-features","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffixstars%2Fcuda-efficient-features","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffixstars%2Fcuda-efficient-features/lists"}