{"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/disentangled-and-controllable-face-image","title":"Disentangled and Controllable Face Image Generation via 3D Imitative-Contrastive Learning","arxiv_id":"2004.11660","date":"2020-04-24","proceeding":"CVPR 2020 6","authors":["Yu Deng","Jiaolong Yang","Dong Chen","Fang Wen","Xin Tong"],"abstract":"We propose DiscoFaceGAN, an approach for face image generation of virtual people with disentangled, precisely-controllable latent representations for identity of non-existing people, expression, pose, and illumination. We embed 3D priors into adversarial learning and train the network to imitate the image formation of an analytic 3D face deformation and rendering process. To deal with the generation freedom induced by the domain gap between real and rendered faces, we further introduce contrastive learning to promote disentanglement by comparing pairs of generated images. Experiments show that through our imitative-contrastive learning, the factor variations are very well disentangled and the properties of a generated face can be precisely controlled. We also analyze the learned latent space and present several meaningful properties supporting factor disentanglement. Our method can also be used to embed real images into the disentangled latent space. We hope our method could provide new understandings of the relationship between physical properties and deep image synthesis.","url_abs":"https://arxiv.org/abs/2004.11660v2","url_pdf":"https://arxiv.org/pdf/2004.11660v2.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":"disentangled-and-controllable-face-image","repo_url":"https://github.com/microsoft/DisentangledFaceGAN","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"tf","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"disentangled-and-controllable-face-image","repo_url":"https://github.com/microsoft/DiscoFaceGAN","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"tf","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"disentangled-and-controllable-face-image","repo_url":"https://github.com/mk-minchul/cse802_face_augmentation","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok"}},{"paper_slug":"disentangled-and-controllable-face-image","repo_url":"https://github.com/pengfudan/DisentangledFaceGAN","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"tf","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"contrastive-learning","task_name":"Contrastive Learning"},{"task_slug":"disentanglement","task_name":"Disentanglement"},{"task_slug":"image-generation","task_name":"Image Generation"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2004.11660","atlas_url":"https://app.syntology.ai/?focus=2004.11660","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2004.11660"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+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/microsoft/DiscoFaceGAN","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/microsoft/DisentangledFaceGAN","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/mk-minchul/cse802_face_augmentation","reach":{"status":"ok"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/pengfudan/DisentangledFaceGAN","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran":1,"unverified":11},"by_repo_kind":{"official":{"samples":10,"ran":0,"repositories":1},"listed":{"samples":2,"ran":1,"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":"efd5d4ab788539f4","entry":"tuple_product","repo":"microsoft/DiscoFaceGAN","repo_kind":"listed","path":"dnnlib/util.py","file_url":"https://github.com/microsoft/DiscoFaceGAN/blob/HEAD/dnnlib/util.py","link_basis":"plan_row","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":"efd5d4ab788539f4"}},{"code_sha256_prefix":"b841315157ec8c2b","entry":"CoeffDecoder","repo":"microsoft/DisentangledFaceGAN","repo_kind":"official","path":"generate_images.py","file_url":"https://github.com/microsoft/DisentangledFaceGAN/blob/HEAD/generate_images.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":"b841315157ec8c2b"}},{"code_sha256_prefix":"e2e11f3a3cab6434","entry":"FaceParser","repo":"microsoft/DisentangledFaceGAN","repo_kind":"official","path":"training/networks_parser.py","file_url":"https://github.com/microsoft/DisentangledFaceGAN/blob/HEAD/training/networks_parser.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":"e2e11f3a3cab6434"}},{"code_sha256_prefix":"07f42dc7a77da207","entry":"G_wgan","repo":"microsoft/DisentangledFaceGAN","repo_kind":"official","path":"training/loss.py","file_url":"https://github.com/microsoft/DisentangledFaceGAN/blob/HEAD/training/loss.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":"07f42dc7a77da207"}},{"code_sha256_prefix":"44b7510fbf57e6c6","entry":"MaskNet","repo":"microsoft/DisentangledFaceGAN","repo_kind":"official","path":"training/networks_parser.py","file_url":"https://github.com/microsoft/DisentangledFaceGAN/blob/HEAD/training/networks_parser.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":"44b7510fbf57e6c6"}},{"code_sha256_prefix":"9d31d2c4cd16bb2d","entry":"ask_yes_no","repo":"microsoft/DisentangledFaceGAN","repo_kind":"official","path":"dnnlib/util.py","file_url":"https://github.com/microsoft/DisentangledFaceGAN/blob/HEAD/dnnlib/util.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":"9d31d2c4cd16bb2d"}},{"code_sha256_prefix":"31857d2f579c1600","entry":"execute_cmdline","repo":"microsoft/DiscoFaceGAN","repo_kind":"listed","path":"dataset_tool.py","file_url":"https://github.com/microsoft/DiscoFaceGAN/blob/HEAD/dataset_tool.py","link_basis":"plan_row","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":"31857d2f579c1600"}},{"code_sha256_prefix":"053fc534bc6bb989","entry":"format_time","repo":"microsoft/DisentangledFaceGAN","repo_kind":"official","path":"dnnlib/util.py","file_url":"https://github.com/microsoft/DisentangledFaceGAN/blob/HEAD/dnnlib/util.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":"053fc534bc6bb989"}},{"code_sha256_prefix":"4192aa298eb02e26","entry":"fpn","repo":"microsoft/DisentangledFaceGAN","repo_kind":"official","path":"training/networks_parser.py","file_url":"https://github.com/microsoft/DisentangledFaceGAN/blob/HEAD/training/networks_parser.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":"4192aa298eb02e26"}},{"code_sha256_prefix":"00e0c8745f3f99e9","entry":"gaussian_blur","repo":"microsoft/DisentangledFaceGAN","repo_kind":"official","path":"training/loss_control.py","file_url":"https://github.com/microsoft/DisentangledFaceGAN/blob/HEAD/training/loss_control.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":"00e0c8745f3f99e9"}},{"code_sha256_prefix":"66f866bbf81a287d","entry":"gaussian_kernel","repo":"microsoft/DisentangledFaceGAN","repo_kind":"official","path":"training/loss_control.py","file_url":"https://github.com/microsoft/DisentangledFaceGAN/blob/HEAD/training/loss_control.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":"66f866bbf81a287d"}},{"code_sha256_prefix":"50b51702f15ad7d4","entry":"z_to_lambda_mapping","repo":"microsoft/DisentangledFaceGAN","repo_kind":"official","path":"generate_images.py","file_url":"https://github.com/microsoft/DisentangledFaceGAN/blob/HEAD/generate_images.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":"50b51702f15ad7d4"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}