{"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/coordgan-self-supervised-dense","title":"CoordGAN: Self-Supervised Dense Correspondences Emerge from GANs","arxiv_id":"2203.16521","date":"2022-03-30","proceeding":"CVPR 2022 1","authors":["Jiteng Mu","Shalini De Mello","Zhiding Yu","Nuno Vasconcelos","Xiaolong Wang","Jan Kautz","Sifei Liu"],"abstract":"Recent advances show that Generative Adversarial Networks (GANs) can synthesize images with smooth variations along semantically meaningful latent directions, such as pose, expression, layout, etc. While this indicates that GANs implicitly learn pixel-level correspondences across images, few studies explored how to extract them explicitly. In this work, we introduce Coordinate GAN (CoordGAN), a structure-texture disentangled GAN that learns a dense correspondence map for each generated image. We represent the correspondence maps of different images as warped coordinate frames transformed from a canonical coordinate frame, i.e., the correspondence map, which describes the structure (e.g., the shape of a face), is controlled via a transformation. Hence, finding correspondences boils down to locating the same coordinate in different correspondence maps. In CoordGAN, we sample a transformation to represent the structure of a synthesized instance, while an independent texture branch is responsible for rendering appearance details orthogonal to the structure. Our approach can also extract dense correspondence maps for real images by adding an encoder on top of the generator. We quantitatively demonstrate the quality of the learned dense correspondences through segmentation mask transfer on multiple datasets. We also show that the proposed generator achieves better structure and texture disentanglement compared to existing approaches. Project page: https://jitengmu.github.io/CoordGAN/","url_abs":"https://arxiv.org/abs/2203.16521v1","url_pdf":"https://arxiv.org/pdf/2203.16521v1.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":"coordgan-self-supervised-dense","repo_url":"https://github.com/NVlabs/CoordGAN","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"disentanglement","task_name":"Disentanglement"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2203.16521","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2203.16521"}},"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/NVlabs/CoordGAN","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran_fixture":1,"ran":3,"ran_draft_wrong":1,"ran_violates":1,"unverified":10},"by_repo_kind":{"official":{"samples":16,"ran":6,"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":"0693ac46c6c25e65","entry":"d_r1_loss","repo":"NVlabs/CoordGAN","repo_kind":"official","path":"loss/gan_loss.py","file_url":"https://github.com/NVlabs/CoordGAN/blob/HEAD/loss/gan_loss.py","link_basis":"harvester_set","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"0693ac46c6c25e65"}},{"code_sha256_prefix":"ac269a0e4b8d946e","entry":"default_loader","repo":"NVlabs/CoordGAN","repo_kind":"official","path":"dataset.py","file_url":"https://github.com/NVlabs/CoordGAN/blob/HEAD/dataset.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"ac269a0e4b8d946e"}},{"code_sha256_prefix":"7257fdf155f5ef45","entry":"normalize_tensor","repo":"NVlabs/CoordGAN","repo_kind":"official","path":"loss/lpips_loss.py","file_url":"https://github.com/NVlabs/CoordGAN/blob/HEAD/loss/lpips_loss.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7257fdf155f5ef45"}},{"code_sha256_prefix":"3f0a1105ef251d78","entry":"reduce_sum","repo":"NVlabs/CoordGAN","repo_kind":"official","path":"distributed.py","file_url":"https://github.com/NVlabs/CoordGAN/blob/HEAD/distributed.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"3f0a1105ef251d78"}},{"code_sha256_prefix":"e268053216b1dd62","entry":"spatial_average","repo":"NVlabs/CoordGAN","repo_kind":"official","path":"loss/lpips_loss.py","file_url":"https://github.com/NVlabs/CoordGAN/blob/HEAD/loss/lpips_loss.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e268053216b1dd62"}},{"code_sha256_prefix":"7c508037b40522af","entry":"str2bool","repo":"NVlabs/CoordGAN","repo_kind":"official","path":"eval_corr.py","file_url":"https://github.com/NVlabs/CoordGAN/blob/HEAD/eval_corr.py","link_basis":"harvester_set","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7c508037b40522af"}},{"code_sha256_prefix":"ed03ba54397adbe4","entry":"all_gather","repo":"NVlabs/CoordGAN","repo_kind":"official","path":"distributed.py","file_url":"https://github.com/NVlabs/CoordGAN/blob/HEAD/distributed.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"ed03ba54397adbe4"}},{"code_sha256_prefix":"0e2078aff3bb57c9","entry":"apply_random_crop","repo":"NVlabs/CoordGAN","repo_kind":"official","path":"loss/patchgan_loss.py","file_url":"https://github.com/NVlabs/CoordGAN/blob/HEAD/loss/patchgan_loss.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"0e2078aff3bb57c9"}},{"code_sha256_prefix":"484375c2ea0102d8","entry":"compute_patch_discriminator_losses","repo":"NVlabs/CoordGAN","repo_kind":"official","path":"loss/patchgan_loss.py","file_url":"https://github.com/NVlabs/CoordGAN/blob/HEAD/loss/patchgan_loss.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"484375c2ea0102d8"}},{"code_sha256_prefix":"e88ba1e8aa95eea5","entry":"d_logistic_loss","repo":"NVlabs/CoordGAN","repo_kind":"official","path":"loss/gan_loss.py","file_url":"https://github.com/NVlabs/CoordGAN/blob/HEAD/loss/gan_loss.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e88ba1e8aa95eea5"}},{"code_sha256_prefix":"f8b6363145aa25ad","entry":"g_nonsaturating_loss","repo":"NVlabs/CoordGAN","repo_kind":"official","path":"loss/gan_loss.py","file_url":"https://github.com/NVlabs/CoordGAN/blob/HEAD/loss/gan_loss.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f8b6363145aa25ad"}},{"code_sha256_prefix":"80db4290f1bdf5c9","entry":"get_cor_img","repo":"NVlabs/CoordGAN","repo_kind":"official","path":"loss/warp_loss.py","file_url":"https://github.com/NVlabs/CoordGAN/blob/HEAD/loss/warp_loss.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"80db4290f1bdf5c9"}},{"code_sha256_prefix":"89c6b5dda075f671","entry":"get_random_crops","repo":"NVlabs/CoordGAN","repo_kind":"official","path":"loss/patchgan_loss.py","file_url":"https://github.com/NVlabs/CoordGAN/blob/HEAD/loss/patchgan_loss.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"89c6b5dda075f671"}},{"code_sha256_prefix":"08750a49987bd9a5","entry":"is_image_file","repo":"NVlabs/CoordGAN","repo_kind":"official","path":"dataset.py","file_url":"https://github.com/NVlabs/CoordGAN/blob/HEAD/dataset.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"08750a49987bd9a5"}},{"code_sha256_prefix":"7a422a9212828aec","entry":"make_dataset","repo":"NVlabs/CoordGAN","repo_kind":"official","path":"dataset.py","file_url":"https://github.com/NVlabs/CoordGAN/blob/HEAD/dataset.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7a422a9212828aec"}},{"code_sha256_prefix":"5144ad456049f8ce","entry":"reduce_loss_dict","repo":"NVlabs/CoordGAN","repo_kind":"official","path":"distributed.py","file_url":"https://github.com/NVlabs/CoordGAN/blob/HEAD/distributed.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5144ad456049f8ce"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}