{"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/learning-single-image-3d-reconstruction-by","title":"Learning single-image 3D reconstruction by generative modelling of shape, pose and shading","arxiv_id":"1901.06447","date":"2019-01-19","proceeding":null,"authors":["Paul Henderson","Vittorio Ferrari"],"abstract":"We present a unified framework tackling two problems: class-specific 3D reconstruction from a single image, and generation of new 3D shape samples. These tasks have received considerable attention recently; however, most existing approaches rely on 3D supervision, annotation of 2D images with keypoints or poses, and/or training with multiple views of each object instance. Our framework is very general: it can be trained in similar settings to existing approaches, while also supporting weaker supervision. Importantly, it can be trained purely from 2D images, without pose annotations, and with only a single view per instance. We employ meshes as an output representation, instead of voxels used in most prior work. This allows us to reason over lighting parameters and exploit shading information during training, which previous 2D-supervised methods cannot. Thus, our method can learn to generate and reconstruct concave object classes. We evaluate our approach in various settings, showing that: (i) it learns to disentangle shape from pose and lighting; (ii) using shading in the loss improves performance compared to just silhouettes; (iii) when using a standard single white light, our model outperforms state-of-the-art 2D-supervised methods, both with and without pose supervision, thanks to exploiting shading cues; (iv) performance improves further when using multiple coloured lights, even approaching that of state-of-the-art 3D-supervised methods; (v) shapes produced by our model capture smooth surfaces and fine details better than voxel-based approaches; and (vi) our approach supports concave classes such as bathtubs and sofas, which methods based on silhouettes cannot learn.","url_abs":"https://arxiv.org/abs/1901.06447v2","url_pdf":"https://arxiv.org/pdf/1901.06447v2.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":"learning-single-image-3d-reconstruction-by","repo_url":"https://github.com/pmh47/dirt","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"tf","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"3d-reconstruction","task_name":"3D Reconstruction"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=1901.06447","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1901.06447"}},"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/pmh47/dirt","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":13},"by_repo_kind":{"official":{"samples":13,"ran":0,"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":"17c7c71b5bf52d12","entry":"rasterise","repo":"pmh47/dirt","repo_kind":"official","path":"dirt/rasterise_ops.py","file_url":"https://github.com/pmh47/dirt/blob/HEAD/dirt/rasterise_ops.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":"17c7c71b5bf52d12"}},{"code_sha256_prefix":"2a741f1765f6f34f","entry":"rasterise_batch","repo":"pmh47/dirt","repo_kind":"official","path":"dirt/rasterise_ops.py","file_url":"https://github.com/pmh47/dirt/blob/HEAD/dirt/rasterise_ops.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":"2a741f1765f6f34f"}},{"code_sha256_prefix":"428d4e92d92066f5","entry":"rasterise_deferred","repo":"pmh47/dirt","repo_kind":"official","path":"dirt/rasterise_ops.py","file_url":"https://github.com/pmh47/dirt/blob/HEAD/dirt/rasterise_ops.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":"428d4e92d92066f5"}},{"code_sha256_prefix":"f3b24a617870bcaa","entry":"rodrigues","repo":"pmh47/dirt","repo_kind":"official","path":"dirt/matrices.py","file_url":"https://github.com/pmh47/dirt/blob/HEAD/dirt/matrices.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":"f3b24a617870bcaa"}},{"code_sha256_prefix":"9c52a472ec1babee","entry":"sample_texture","repo":"pmh47/dirt","repo_kind":"official","path":"samples/textured.py","file_url":"https://github.com/pmh47/dirt/blob/HEAD/samples/textured.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":"9c52a472ec1babee"}},{"code_sha256_prefix":"fb7e722cbd3a246a","entry":"scale","repo":"pmh47/dirt","repo_kind":"official","path":"dirt/matrices.py","file_url":"https://github.com/pmh47/dirt/blob/HEAD/dirt/matrices.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":"fb7e722cbd3a246a"}},{"code_sha256_prefix":"8be846be750b646f","entry":"split_vertices_by_face","repo":"pmh47/dirt","repo_kind":"official","path":"dirt/lighting.py","file_url":"https://github.com/pmh47/dirt/blob/HEAD/dirt/lighting.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":"8be846be750b646f"}},{"code_sha256_prefix":"bacb86df9c02264f","entry":"translation","repo":"pmh47/dirt","repo_kind":"official","path":"dirt/matrices.py","file_url":"https://github.com/pmh47/dirt/blob/HEAD/dirt/matrices.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":"bacb86df9c02264f"}},{"code_sha256_prefix":"14ff1095762d2595","entry":"unit","repo":"pmh47/dirt","repo_kind":"official","path":"samples/simple.py","file_url":"https://github.com/pmh47/dirt/blob/HEAD/samples/simple.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":"14ff1095762d2595"}},{"code_sha256_prefix":"3067554ee464d491","entry":"unproject_pixels_to_rays","repo":"pmh47/dirt","repo_kind":"official","path":"dirt/projection.py","file_url":"https://github.com/pmh47/dirt/blob/HEAD/dirt/projection.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":"3067554ee464d491"}},{"code_sha256_prefix":"5ef71faf0ccb184d","entry":"uvs_to_pixel_indices","repo":"pmh47/dirt","repo_kind":"official","path":"samples/textured.py","file_url":"https://github.com/pmh47/dirt/blob/HEAD/samples/textured.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":"5ef71faf0ccb184d"}},{"code_sha256_prefix":"e0f7c9d31116c78b","entry":"vertex_normals","repo":"pmh47/dirt","repo_kind":"official","path":"dirt/lighting.py","file_url":"https://github.com/pmh47/dirt/blob/HEAD/dirt/lighting.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":"e0f7c9d31116c78b"}},{"code_sha256_prefix":"ad162bd8aff4e9cf","entry":"vertex_normals_pre_split","repo":"pmh47/dirt","repo_kind":"official","path":"dirt/lighting.py","file_url":"https://github.com/pmh47/dirt/blob/HEAD/dirt/lighting.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":"ad162bd8aff4e9cf"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}