{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/unsupervised-keypoints-from-pretrained","title":"Unsupervised Keypoints from Pretrained Diffusion Models","arxiv_id":"2312.00065","date":"2023-11-29","proceeding":"CVPR 2024 1","authors":["Eric Hedlin","Gopal Sharma","Shweta Mahajan","Xingzhe He","Hossam Isack","Abhishek Kar Helge Rhodin","Andrea Tagliasacchi","Kwang Moo Yi"],"abstract":"Unsupervised learning of keypoints and landmarks has seen significant progress with the help of modern neural network architectures, but performance is yet to match the supervised counterpart, making their practicability questionable. We leverage the emergent knowledge within text-to-image diffusion models, towards more robust unsupervised keypoints. Our core idea is to find text embeddings that would cause the generative model to consistently attend to compact regions in images (i.e. keypoints). To do so, we simply optimize the text embedding such that the cross-attention maps within the denoising network are localized as Gaussians with small standard deviations. We validate our performance on multiple datasets: the CelebA, CUB-200-2011, Tai-Chi-HD, DeepFashion, and Human3.6m datasets. We achieve significantly improved accuracy, sometimes even outperforming supervised ones, particularly for data that is non-aligned and less curated. Our code is publicly available and can be found through our project page: https://ubc-vision.github.io/StableKeypoints/","url_abs":"https://arxiv.org/abs/2312.00065v3","url_pdf":"https://arxiv.org/pdf/2312.00065v3.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"unsupervised-keypoints-from-pretrained","repo_url":"https://github.com/ubc-vision/StableKeypoints","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":"denoising","task_name":"Denoising"},{"task_slug":"unsupervised-human-pose-estimation","task_name":"Unsupervised Human Pose Estimation"},{"task_slug":null,"task_name":"Unsupervised Keypoints"}],"methods":[{"method_slug":"diffusion","method_name":"Diffusion"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":null,"atlas_url":"https://app.syntology.ai/?focus=2312.00065","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2312.00065"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/ubc-vision/StableKeypoints","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran":7},"by_repo_kind":{"official":{"samples":7,"ran":7,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"1aa24462700d6e62","entry":"crop_and_upsample","repo":"ubc-vision/StableKeypoints","repo_kind":"official","path":"datasets/unaligned_human36m.py","file_url":"https://github.com/ubc-vision/StableKeypoints/blob/HEAD/datasets/unaligned_human36m.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"1aa24462700d6e62"}},{"code_sha256_prefix":"b70a067f55509974","entry":"get_part_color","repo":"ubc-vision/StableKeypoints","repo_kind":"official","path":"datasets/cub.py","file_url":"https://github.com/ubc-vision/StableKeypoints/blob/HEAD/datasets/cub.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"b70a067f55509974"}},{"code_sha256_prefix":"2da05aa201d8248a","entry":"quaternion_from_matrix","repo":"ubc-vision/StableKeypoints","repo_kind":"official","path":"datasets/cub_parts.py","file_url":"https://github.com/ubc-vision/StableKeypoints/blob/HEAD/datasets/cub_parts.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"2da05aa201d8248a"}},{"code_sha256_prefix":"506795274b0f0eca","entry":"quaternion_matrix","repo":"ubc-vision/StableKeypoints","repo_kind":"official","path":"datasets/cub_parts.py","file_url":"https://github.com/ubc-vision/StableKeypoints/blob/HEAD/datasets/cub_parts.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"506795274b0f0eca"}},{"code_sha256_prefix":"cc8e1504ba11c7e6","entry":"resize_img","repo":"ubc-vision/StableKeypoints","repo_kind":"official","path":"datasets/cub_parts.py","file_url":"https://github.com/ubc-vision/StableKeypoints/blob/HEAD/datasets/cub_parts.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"cc8e1504ba11c7e6"}},{"code_sha256_prefix":"31856baa3c251aeb","entry":"return_regressor_visible","repo":"ubc-vision/StableKeypoints","repo_kind":"official","path":"unsupervised_keypoints/keypoint_regressor.py","file_url":"https://github.com/ubc-vision/StableKeypoints/blob/HEAD/unsupervised_keypoints/keypoint_regressor.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"31856baa3c251aeb"}},{"code_sha256_prefix":"34d85e349443441e","entry":"return_theta","repo":"ubc-vision/StableKeypoints","repo_kind":"official","path":"unsupervised_keypoints/invertable_transform.py","file_url":"https://github.com/ubc-vision/StableKeypoints/blob/HEAD/unsupervised_keypoints/invertable_transform.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"34d85e349443441e"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}