{"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-to-edit-visual-programs-with-self","title":"Learning to Edit Visual Programs with Self-Supervision","arxiv_id":"2406.02383","date":"2024-06-04","proceeding":null,"authors":["R. Kenny Jones","Renhao Zhang","Aditya Ganeshan","Daniel Ritchie"],"abstract":"We design a system that learns how to edit visual programs. Our edit network consumes a complete input program and a visual target. From this input, we task our network with predicting a local edit operation that could be applied to the input program to improve its similarity to the target. In order to apply this scheme for domains that lack program annotations, we develop a self-supervised learning approach that integrates this edit network into a bootstrapped finetuning loop along with a network that predicts entire programs in one-shot. Our joint finetuning scheme, when coupled with an inference procedure that initializes a population from the one-shot model and evolves members of this population with the edit network, helps to infer more accurate visual programs. Over multiple domains, we experimentally compare our method against the alternative of using only the one-shot model, and find that even under equal search-time budgets, our editing-based paradigm provides significant advantages.","url_abs":"https://arxiv.org/abs/2406.02383v2","url_pdf":"https://arxiv.org/pdf/2406.02383v2.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-to-edit-visual-programs-with-self","repo_url":"https://github.com/rkjones4/vpi-edit","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"NOASSERTION"}}],"tasks":[{"task_slug":"self-supervised-learning","task_name":"Self-Supervised Learning"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2406.02383","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2406.02383"}},"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":"deterministic:regex_extraction","url":"https://github.com/rkjones4/VPI-Edit","reach":{"status":"ok","spdx":"NOASSERTION"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/rkjones4/vpi-edit","reach":{"status":"ok","spdx":"NOASSERTION"}}],"summary":{"ran":9,"ran_draft_wrong":3},"by_repo_kind":{"official":{"samples":12,"ran":12,"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":12,"samples":[{"code_sha256_prefix":"cdd558f65a47c91b","entry":"getArgs","repo":"rkjones4/VPI-Edit","repo_kind":"official","path":"utils.py","file_url":"https://github.com/rkjones4/VPI-Edit/blob/HEAD/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"cdd558f65a47c91b"}},{"code_sha256_prefix":"37318229cc619a07","entry":"get_init_population","repo":"rkjones4/vpi-edit","repo_kind":"official","path":"joint_infer.py","file_url":"https://github.com/rkjones4/vpi-edit/blob/HEAD/joint_infer.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"37318229cc619a07"}},{"code_sha256_prefix":"c13cbbc423c4826c","entry":"get_transform_embs","repo":"rkjones4/vpi-edit","repo_kind":"official","path":"edit_models.py","file_url":"https://github.com/rkjones4/vpi-edit/blob/HEAD/edit_models.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"c13cbbc423c4826c"}},{"code_sha256_prefix":"35a71bc05cae070a","entry":"load_2d_vis_encoder","repo":"rkjones4/VPI-Edit","repo_kind":"official","path":"model_utils.py","file_url":"https://github.com/rkjones4/VPI-Edit/blob/HEAD/model_utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"35a71bc05cae070a"}},{"code_sha256_prefix":"4eb432c4c691eecf","entry":"load_3d_vis_encoder","repo":"rkjones4/VPI-Edit","repo_kind":"official","path":"model_utils.py","file_url":"https://github.com/rkjones4/VPI-Edit/blob/HEAD/model_utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"4eb432c4c691eecf"}},{"code_sha256_prefix":"95e865702c74dca6","entry":"load_vis_encoder","repo":"rkjones4/VPI-Edit","repo_kind":"official","path":"model_utils.py","file_url":"https://github.com/rkjones4/VPI-Edit/blob/HEAD/model_utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"95e865702c74dca6"}},{"code_sha256_prefix":"b158b355e872bd21","entry":"make_oneshot_population","repo":"rkjones4/vpi-edit","repo_kind":"official","path":"joint_infer.py","file_url":"https://github.com/rkjones4/vpi-edit/blob/HEAD/joint_infer.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"b158b355e872bd21"}},{"code_sha256_prefix":"2356aa163d6b705f","entry":"mergeArgs","repo":"rkjones4/VPI-Edit","repo_kind":"official","path":"utils.py","file_url":"https://github.com/rkjones4/VPI-Edit/blob/HEAD/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"2356aa163d6b705f"}},{"code_sha256_prefix":"120a58a5d94dcb27","entry":"model_train","repo":"rkjones4/VPI-Edit","repo_kind":"official","path":"train_utils.py","file_url":"https://github.com/rkjones4/VPI-Edit/blob/HEAD/train_utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"120a58a5d94dcb27"}},{"code_sha256_prefix":"6a1dbc6db4557ba6","entry":"model_train_batch","repo":"rkjones4/VPI-Edit","repo_kind":"official","path":"train_utils.py","file_url":"https://github.com/rkjones4/VPI-Edit/blob/HEAD/train_utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"6a1dbc6db4557ba6"}},{"code_sha256_prefix":"e35e76a3dcb69b0d","entry":"os_inference","repo":"rkjones4/VPI-Edit","repo_kind":"official","path":"infer_progs.py","file_url":"https://github.com/rkjones4/VPI-Edit/blob/HEAD/infer_progs.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"e35e76a3dcb69b0d"}},{"code_sha256_prefix":"90e3f640250efb11","entry":"print_results","repo":"rkjones4/VPI-Edit","repo_kind":"official","path":"utils.py","file_url":"https://github.com/rkjones4/VPI-Edit/blob/HEAD/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"90e3f640250efb11"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}