{"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/do-2d-gans-know-3d-shape-unsupervised-3d-1","title":"Do 2D GANs Know 3D Shape? Unsupervised 3D shape reconstruction from 2D Image GANs","arxiv_id":"2011.00844","date":"2020-11-02","proceeding":"ICLR 2021 1","authors":["Xingang Pan","Bo Dai","Ziwei Liu","Chen Change Loy","Ping Luo"],"abstract":"Natural images are projections of 3D objects on a 2D image plane. While state-of-the-art 2D generative models like GANs show unprecedented quality in modeling the natural image manifold, it is unclear whether they implicitly capture the underlying 3D object structures. And if so, how could we exploit such knowledge to recover the 3D shapes of objects in the images? To answer these questions, in this work, we present the first attempt to directly mine 3D geometric cues from an off-the-shelf 2D GAN that is trained on RGB images only. Through our investigation, we found that such a pre-trained GAN indeed contains rich 3D knowledge and thus can be used to recover 3D shape from a single 2D image in an unsupervised manner. The core of our framework is an iterative strategy that explores and exploits diverse viewpoint and lighting variations in the GAN image manifold. The framework does not require 2D keypoint or 3D annotations, or strong assumptions on object shapes (e.g. shapes are symmetric), yet it successfully recovers 3D shapes with high precision for human faces, cats, cars, and buildings. The recovered 3D shapes immediately allow high-quality image editing like relighting and object rotation. We quantitatively demonstrate the effectiveness of our approach compared to previous methods in both 3D shape reconstruction and face rotation. Our code is available at https://github.com/XingangPan/GAN2Shape.","url_abs":"https://arxiv.org/abs/2011.00844v4","url_pdf":"https://arxiv.org/pdf/2011.00844v4.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":"do-2d-gans-know-3d-shape-unsupervised-3d-1","repo_url":"https://github.com/XingangPan/GAN2Shape","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"3d-shape-reconstruction","task_name":"3D Shape Reconstruction"},{"task_slug":"object","task_name":"Object"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2011.00844","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2011.00844"}},"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/XingangPan/GAN2Shape","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran_draft_wrong":1,"ran":3,"unverified":7},"by_repo_kind":{"official":{"samples":11,"ran":4,"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":"fac5364e2f53c6db","entry":"conv3x3","repo":"XingangPan/GAN2Shape","repo_kind":"official","path":"gan2shape/parsing/resnet.py","file_url":"https://github.com/XingangPan/GAN2Shape/blob/HEAD/gan2shape/parsing/resnet.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"fac5364e2f53c6db"}},{"code_sha256_prefix":"325b8d54f52e2421","entry":"create_layer_basic","repo":"XingangPan/GAN2Shape","repo_kind":"official","path":"gan2shape/parsing/resnet.py","file_url":"https://github.com/XingangPan/GAN2Shape/blob/HEAD/gan2shape/parsing/resnet.py","link_basis":"plan_row","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":"325b8d54f52e2421"}},{"code_sha256_prefix":"b8f76281c8efae48","entry":"resnet18","repo":"XingangPan/GAN2Shape","repo_kind":"official","path":"gan2shape/parsing/resnet_psp.py","file_url":"https://github.com/XingangPan/GAN2Shape/blob/HEAD/gan2shape/parsing/resnet_psp.py","link_basis":"plan_row","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":"b8f76281c8efae48"}},{"code_sha256_prefix":"81e6f33194021bdd","entry":"resnet34","repo":"XingangPan/GAN2Shape","repo_kind":"official","path":"gan2shape/parsing/resnet_psp.py","file_url":"https://github.com/XingangPan/GAN2Shape/blob/HEAD/gan2shape/parsing/resnet_psp.py","link_basis":"plan_row","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":"81e6f33194021bdd"}},{"code_sha256_prefix":"549ced9e98980499","entry":"compute_sc_inv_err","repo":"XingangPan/GAN2Shape","repo_kind":"official","path":"gan2shape/utils.py","file_url":"https://github.com/XingangPan/GAN2Shape/blob/HEAD/gan2shape/utils.py","link_basis":"first_harvest_node","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":"549ced9e98980499"}},{"code_sha256_prefix":"c9d96366dfea8bc9","entry":"load_yaml","repo":"XingangPan/GAN2Shape","repo_kind":"official","path":"gan2shape/utils.py","file_url":"https://github.com/XingangPan/GAN2Shape/blob/HEAD/gan2shape/utils.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":"c9d96366dfea8bc9"}},{"code_sha256_prefix":"447be7f11315d1d1","entry":"map_func","repo":"XingangPan/GAN2Shape","repo_kind":"official","path":"gan2shape/model.py","file_url":"https://github.com/XingangPan/GAN2Shape/blob/HEAD/gan2shape/model.py","link_basis":"first_harvest_node","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":"447be7f11315d1d1"}},{"code_sha256_prefix":"0c5ab402075cd7d5","entry":"mm_normalize","repo":"XingangPan/GAN2Shape","repo_kind":"official","path":"gan2shape/renderer/utils.py","file_url":"https://github.com/XingangPan/GAN2Shape/blob/HEAD/gan2shape/renderer/utils.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":"0c5ab402075cd7d5"}},{"code_sha256_prefix":"93ba7714c2ce3acc","entry":"rand_posneg_range","repo":"XingangPan/GAN2Shape","repo_kind":"official","path":"gan2shape/renderer/utils.py","file_url":"https://github.com/XingangPan/GAN2Shape/blob/HEAD/gan2shape/renderer/utils.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":"93ba7714c2ce3acc"}},{"code_sha256_prefix":"17ad8150640684d6","entry":"rand_range","repo":"XingangPan/GAN2Shape","repo_kind":"official","path":"gan2shape/renderer/utils.py","file_url":"https://github.com/XingangPan/GAN2Shape/blob/HEAD/gan2shape/renderer/utils.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":"17ad8150640684d6"}},{"code_sha256_prefix":"8e80041c1e9798b9","entry":"setup_runtime","repo":"XingangPan/GAN2Shape","repo_kind":"official","path":"gan2shape/utils.py","file_url":"https://github.com/XingangPan/GAN2Shape/blob/HEAD/gan2shape/utils.py","link_basis":"first_harvest_node","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":"8e80041c1e9798b9"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}