{"id":15649437,"url":"https://github.com/ducha-aiki/numpy-sift","last_synced_at":"2025-08-11T17:07:49.130Z","repository":{"id":71374185,"uuid":"82732742","full_name":"ducha-aiki/numpy-sift","owner":"ducha-aiki","description":"Numpy implementation of SIFT descriptor","archived":false,"fork":false,"pushed_at":"2020-11-10T16:43:27.000Z","size":1236,"stargazers_count":39,"open_issues_count":0,"forks_count":6,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-16T23:49:40.197Z","etag":null,"topics":["descriptor","image-matching","local-features","numpy","sift"],"latest_commit_sha":null,"homepage":null,"language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ducha-aiki.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.SIFT","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}},"created_at":"2017-02-21T22:16:40.000Z","updated_at":"2024-02-17T04:07:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"810ae436-4915-4b62-9121-4419aba42fdf","html_url":"https://github.com/ducha-aiki/numpy-sift","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ducha-aiki/numpy-sift","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ducha-aiki%2Fnumpy-sift","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ducha-aiki%2Fnumpy-sift/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ducha-aiki%2Fnumpy-sift/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ducha-aiki%2Fnumpy-sift/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ducha-aiki","download_url":"https://codeload.github.com/ducha-aiki/numpy-sift/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ducha-aiki%2Fnumpy-sift/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269922906,"owners_count":24496999,"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-08-11T02:00:10.019Z","response_time":75,"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":["descriptor","image-matching","local-features","numpy","sift"],"created_at":"2024-10-03T12:29:46.455Z","updated_at":"2025-08-11T17:07:49.104Z","avatar_url":"https://github.com/ducha-aiki.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"This is an python implementation of SIFT patch descriptor. \nIt is derived from Michal Perdoch C++ implementation at https://github.com/perdoch/hesaff\n\nThe SIFT descriptor code is protected under a US Patent 6,711,293. A\nlicense MUST be obtained from the University of British Columbia for\nuse of SIFT code, files numpy_sift.py, in commercial\napplications (see LICENSE.SIFT for details)\n\n\nThere are different implementations of the SIFT on the web. I tried to match [Michal Perdoch implementation](https://github.com/perdoch/hesaff/blob/master/siftdesc.cpp), which gives high quality features for image retrieval [CVPR2009](http://cmp.felk.cvut.cz/~chum/papers/perdoch-cvpr09.pdf). However, on planar datasets, it is inferior to [vlfeat implementation](http://www.vlfeat.org/sandbox/api/sift.html).\nThe main difference is gaussian weighting window parameters.  MP version weights patch center much more (see image below, left) and additionally crops everything outside the circular region. Right is vlfeat version.\n\n\n![Michal Perdoch kernel](/img/mp_kernel.png)\n![vlfeat kernel](/img/vlfeat_kernel.png)\n\n\n\nResults:\n\n![hpatches mathing results](/img/hpatches-results.png)\n\n\n```\nOPENCV-SIFT - mAP \n   Easy     Hard      Tough     mean\n-------  -------  ---------  -------\n0.47788  0.20997  0.0967711  0.26154\n\nVLFeat-SIFT - mAP \n    Easy      Hard      Tough      mean\n--------  --------  ---------  --------\n0.466584  0.203966  0.0935743  0.254708\n\nPYTORCH-SIFT-VLFEAT-65 - mAP \n    Easy      Hard      Tough      mean\n--------  --------  ---------  --------\n0.472563  0.202458  0.0910371  0.255353\n\nNUMPY-SIFT-VLFEAT-65 - mAP \n    Easy      Hard      Tough      mean\n--------  --------  ---------  --------\n0.449431  0.197918  0.0905395  0.245963\n\nPYTORCH-SIFT-MP-65 - mAP \n    Easy      Hard      Tough      mean\n--------  --------  ---------  --------\n0.430887  0.184834  0.0832707  0.232997\n\nNUMPY-SIFT-MP-65 - mAP \n    Easy     Hard      Tough      mean\n--------  -------  ---------  --------\n0.417296  0.18114  0.0820582  0.226832\n\n\n```\n    \nSpeed: \n- 0.00246 s per 65x65 patch - [numpy SIFT](https://github.com/ducha-aiki/numpy-sift)\n- 0.00028 s per 65x65 patch - [C++ SIFT](https://github.com/perdoch/hesaff/blob/master/siftdesc.cpp)\n- 0.00074 s per 65x65 patch - [pytorch SIFT](https://github.com/ducha-aiki/pytorch-sift )CPU, 256 patches per batch\n- 0.00038 s per 65x65 patch - [pytorch SIFT](https://github.com/ducha-aiki/pytorch-sift ) GPU (GM940, mobile), 256 patches per batch\n\n\n\nIf you use this code for academic purposes, please cite the following paper:\n\n    @article{HardNet2017,\n     author = {Anastasiya Mishchuk, Dmytro Mishkin, Filip Radenovic, Jiri Matas},\n        title = \"{Working hard to know your neighbor's margins: Local descriptor learning loss}\",\n        booktitle = {Proceedings of NIPS},\n         year = 2017,\n        month = dec}\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fducha-aiki%2Fnumpy-sift","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fducha-aiki%2Fnumpy-sift","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fducha-aiki%2Fnumpy-sift/lists"}