{"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/image-restoration-by-denoising-diffusion","title":"Image Restoration by Denoising Diffusion Models with Iteratively Preconditioned Guidance","arxiv_id":"2312.16519","date":"2023-12-27","proceeding":"CVPR 2024 1","authors":["Tomer Garber","Tom Tirer"],"abstract":"Training deep neural networks has become a common approach for addressing image restoration problems. An alternative for training a \"task-specific\" network for each observation model is to use pretrained deep denoisers for imposing only the signal's prior within iterative algorithms, without additional training. Recently, a sampling-based variant of this approach has become popular with the rise of diffusion/score-based generative models. Using denoisers for general purpose restoration requires guiding the iterations to ensure agreement of the signal with the observations. In low-noise settings, guidance that is based on back-projection (BP) has been shown to be a promising strategy (used recently also under the names \"pseudoinverse\" or \"range/null-space\" guidance). However, the presence of noise in the observations hinders the gains from this approach. In this paper, we propose a novel guidance technique, based on preconditioning that allows traversing from BP-based guidance to least squares based guidance along the restoration scheme. The proposed approach is robust to noise while still having much simpler implementation than alternative methods (e.g., it does not require SVD or a large number of iterations). We use it within both an optimization scheme and a sampling-based scheme, and demonstrate its advantages over existing methods for image deblurring and super-resolution.","url_abs":"https://arxiv.org/abs/2312.16519v2","url_pdf":"https://arxiv.org/pdf/2312.16519v2.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":"image-restoration-by-denoising-diffusion","repo_url":"https://github.com/tirer-lab/ddpg","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[{"task_slug":"deblurring","task_name":"Deblurring"},{"task_slug":"denoising","task_name":"Denoising"},{"task_slug":"image-deblurring","task_name":"Image Deblurring"},{"task_slug":"image-restoration","task_name":"Image Restoration"},{"task_slug":"super-resolution","task_name":"Super-Resolution"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2312.16519","atlas_url":"https://app.syntology.ai/?focus=2312.16519","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2312.16519"}},"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/tirer-lab/ddpg","reach":{"status":"ok"}}],"summary":{"ran_fixture":2,"ran_draft_wrong":6,"ran":9,"ran_honours":1,"unverified":4},"by_repo_kind":{"official":{"samples":22,"ran":18,"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":22,"samples":[{"code_sha256_prefix":"12012b9130641107","entry":"MeanUpsample","repo":"tirer-lab/ddpg","repo_kind":"official","path":"guided_diffusion/diffusion.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/guided_diffusion/diffusion.py","link_basis":"plan_row","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"12012b9130641107"}},{"code_sha256_prefix":"c3a6b977022957cb","entry":"Normalize","repo":"tirer-lab/ddpg","repo_kind":"official","path":"guided_diffusion/models.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/guided_diffusion/models.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":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c3a6b977022957cb"}},{"code_sha256_prefix":"d8cc9a829d9769b1","entry":"cconv2_by_fft2","repo":"tirer-lab/ddpg","repo_kind":"official","path":"functions/fft_operators.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/functions/fft_operators.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"d8cc9a829d9769b1"}},{"code_sha256_prefix":"62244ace160c0029","entry":"cconv2_invAAt_by_fft2","repo":"tirer-lab/ddpg","repo_kind":"official","path":"functions/fft_operators.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/functions/fft_operators.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"62244ace160c0029"}},{"code_sha256_prefix":"dd9fc69e1eb813b9","entry":"color2gray","repo":"tirer-lab/ddpg","repo_kind":"official","path":"functions/svd_operators.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/functions/svd_operators.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"dd9fc69e1eb813b9"}},{"code_sha256_prefix":"af792c258aa85c57","entry":"color2gray","repo":"tirer-lab/ddpg","repo_kind":"official","path":"guided_diffusion/diffusion.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/guided_diffusion/diffusion.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"af792c258aa85c57"}},{"code_sha256_prefix":"9215fb189fbfb9f4","entry":"compute_alpha","repo":"tirer-lab/ddpg","repo_kind":"official","path":"functions/ddpg_scheme.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/functions/ddpg_scheme.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"9215fb189fbfb9f4"}},{"code_sha256_prefix":"7bf07d5f59aae36d","entry":"default_loader","repo":"tirer-lab/ddpg","repo_kind":"official","path":"datasets/imagenet_subset.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/datasets/imagenet_subset.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"7bf07d5f59aae36d"}},{"code_sha256_prefix":"17b8a580da43c920","entry":"get_gaussian_noisy_img","repo":"tirer-lab/ddpg","repo_kind":"official","path":"guided_diffusion/diffusion.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/guided_diffusion/diffusion.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"17b8a580da43c920"}},{"code_sha256_prefix":"b5af43562104feee","entry":"get_schedule_jump","repo":"tirer-lab/ddpg","repo_kind":"official","path":"functions/ddpg_scheme.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/functions/ddpg_scheme.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b5af43562104feee"}},{"code_sha256_prefix":"cb49209c125de1b4","entry":"get_timestep_embedding","repo":"tirer-lab/ddpg","repo_kind":"official","path":"guided_diffusion/models.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/guided_diffusion/models.py","link_basis":"harvester_set","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"cb49209c125de1b4"}},{"code_sha256_prefix":"6d117fa2c3ad8438","entry":"gray2color","repo":"tirer-lab/ddpg","repo_kind":"official","path":"functions/svd_operators.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/functions/svd_operators.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"6d117fa2c3ad8438"}},{"code_sha256_prefix":"915e1c6c38494be9","entry":"list_dir","repo":"tirer-lab/ddpg","repo_kind":"official","path":"datasets/utils.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/datasets/utils.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":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"915e1c6c38494be9"}},{"code_sha256_prefix":"208e196e9582a9a6","entry":"list_files","repo":"tirer-lab/ddpg","repo_kind":"official","path":"datasets/utils.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/datasets/utils.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":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"208e196e9582a9a6"}},{"code_sha256_prefix":"07d90bd6ae1be7db","entry":"md5_hash","repo":"tirer-lab/ddpg","repo_kind":"official","path":"functions/ckpt_util.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/functions/ckpt_util.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"07d90bd6ae1be7db"}},{"code_sha256_prefix":"3137073275f8c21a","entry":"nonlinearity","repo":"tirer-lab/ddpg","repo_kind":"official","path":"guided_diffusion/models.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/guided_diffusion/models.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"3137073275f8c21a"}},{"code_sha256_prefix":"f321f54723433661","entry":"pil_loader","repo":"tirer-lab/ddpg","repo_kind":"official","path":"datasets/imagenet_subset.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/datasets/imagenet_subset.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"f321f54723433661"}},{"code_sha256_prefix":"0044f3e569ab82db","entry":"upsample","repo":"tirer-lab/ddpg","repo_kind":"official","path":"functions/fft_operators.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/functions/fft_operators.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"0044f3e569ab82db"}},{"code_sha256_prefix":"404fb2b2daa1ae78","entry":"accimage_loader","repo":"tirer-lab/ddpg","repo_kind":"official","path":"datasets/imagenet_subset.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/datasets/imagenet_subset.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"404fb2b2daa1ae78"}},{"code_sha256_prefix":"7345763c9b9300fb","entry":"check_integrity","repo":"tirer-lab/ddpg","repo_kind":"official","path":"datasets/utils.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/datasets/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"7345763c9b9300fb"}},{"code_sha256_prefix":"b8b789ea6b1ed8b8","entry":"ddpg_diffusion","repo":"tirer-lab/ddpg","repo_kind":"official","path":"functions/ddpg_scheme.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/functions/ddpg_scheme.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b8b789ea6b1ed8b8"}},{"code_sha256_prefix":"d80f2146cfc85e9a","entry":"get_ckpt_path","repo":"tirer-lab/ddpg","repo_kind":"official","path":"functions/ckpt_util.py","file_url":"https://github.com/tirer-lab/ddpg/blob/HEAD/functions/ckpt_util.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"d80f2146cfc85e9a"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}