{"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/unsupervised-imaging-inverse-problems-with","title":"Unsupervised Imaging Inverse Problems with Diffusion Distribution Matching","arxiv_id":"2506.14605","date":"2025-06-17","proceeding":null,"authors":["Giacomo Meanti","Thomas Ryckeboer","Michael Arbel","Julien Mairal"],"abstract":"This work addresses image restoration tasks through the lens of inverse problems using unpaired datasets. In contrast to traditional approaches -- which typically assume full knowledge of the forward model or access to paired degraded and ground-truth images -- the proposed method operates under minimal assumptions and relies only on small, unpaired datasets. This makes it particularly well-suited for real-world scenarios, where the forward model is often unknown or misspecified, and collecting paired data is costly or infeasible. The method leverages conditional flow matching to model the distribution of degraded observations, while simultaneously learning the forward model via a distribution-matching loss that arises naturally from the framework. Empirically, it outperforms both single-image blind and unsupervised approaches on deblurring and non-uniform point spread function (PSF) calibration tasks. It also matches state-of-the-art performance on blind super-resolution. We also showcase the effectiveness of our method with a proof of concept for lens calibration: a real-world application traditionally requiring time-consuming experiments and specialized equipment. In contrast, our approach achieves this with minimal data acquisition effort.","url_abs":"https://arxiv.org/abs/2506.14605v1","url_pdf":"https://arxiv.org/pdf/2506.14605v1.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":"unsupervised-imaging-inverse-problems-with","repo_url":"https://github.com/inria-thoth/ddm4ip","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"blind-super-resolution","task_name":"Blind Super-Resolution"},{"task_slug":"deblurring","task_name":"Deblurring"},{"task_slug":"image-restoration","task_name":"Image Restoration"},{"task_slug":"super-resolution","task_name":"Super-Resolution"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2506.14605","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2506.14605"}},"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/inria-thoth/ddm4ip","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran":3,"ran_fixture":1,"ran_violates":1,"ran_honours":1,"unverified":6},"by_repo_kind":{"official":{"samples":12,"ran":6,"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":"f2514403e004d82b","entry":"const_like","repo":"inria-thoth/ddm4ip","repo_kind":"official","path":"ddm4ip/networks/unets.py","file_url":"https://github.com/inria-thoth/ddm4ip/blob/HEAD/ddm4ip/networks/unets.py","link_basis":"harvester_set","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":"f2514403e004d82b"}},{"code_sha256_prefix":"6d32f9cf6f29b386","entry":"constant","repo":"inria-thoth/ddm4ip","repo_kind":"official","path":"ddm4ip/networks/unets.py","file_url":"https://github.com/inria-thoth/ddm4ip/blob/HEAD/ddm4ip/networks/unets.py","link_basis":"harvester_set","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":"6d32f9cf6f29b386"}},{"code_sha256_prefix":"594fad709f5a8599","entry":"norm","repo":"inria-thoth/ddm4ip","repo_kind":"official","path":"ddm4ip/degradations/motion_blur.py","file_url":"https://github.com/inria-thoth/ddm4ip/blob/HEAD/ddm4ip/degradations/motion_blur.py","link_basis":"plan_row","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"594fad709f5a8599"}},{"code_sha256_prefix":"ebfd171dc25ba0ce","entry":"normalize","repo":"inria-thoth/ddm4ip","repo_kind":"official","path":"ddm4ip/networks/unets.py","file_url":"https://github.com/inria-thoth/ddm4ip/blob/HEAD/ddm4ip/networks/unets.py","link_basis":"harvester_set","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":"ebfd171dc25ba0ce"}},{"code_sha256_prefix":"7c37ca7a5cce1a9c","entry":"polar2z","repo":"inria-thoth/ddm4ip","repo_kind":"official","path":"ddm4ip/degradations/motion_blur.py","file_url":"https://github.com/inria-thoth/ddm4ip/blob/HEAD/ddm4ip/degradations/motion_blur.py","link_basis":"plan_row","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7c37ca7a5cce1a9c"}},{"code_sha256_prefix":"c0cf1196424d4f71","entry":"softmax","repo":"inria-thoth/ddm4ip","repo_kind":"official","path":"ddm4ip/degradations/motion_blur.py","file_url":"https://github.com/inria-thoth/ddm4ip/blob/HEAD/ddm4ip/degradations/motion_blur.py","link_basis":"plan_row","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c0cf1196424d4f71"}},{"code_sha256_prefix":"c55ff807bf082822","entry":"com","repo":"inria-thoth/ddm4ip","repo_kind":"official","path":"ddm4ip/losses/di_y.py","file_url":"https://github.com/inria-thoth/ddm4ip/blob/HEAD/ddm4ip/losses/di_y.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":"c55ff807bf082822"}},{"code_sha256_prefix":"b2cb361d11a1f4f7","entry":"gaussian_reg","repo":"inria-thoth/ddm4ip","repo_kind":"official","path":"ddm4ip/losses/di_y.py","file_url":"https://github.com/inria-thoth/ddm4ip/blob/HEAD/ddm4ip/losses/di_y.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":"b2cb361d11a1f4f7"}},{"code_sha256_prefix":"8800938e2f1b57c2","entry":"get_default_psf_grid","repo":"inria-thoth/ddm4ip","repo_kind":"official","path":"ddm4ip/networks/blur_nets.py","file_url":"https://github.com/inria-thoth/ddm4ip/blob/HEAD/ddm4ip/networks/blur_nets.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":"8800938e2f1b57c2"}},{"code_sha256_prefix":"0b87681ee0b24f31","entry":"get_motion_blur_kernel","repo":"inria-thoth/ddm4ip","repo_kind":"official","path":"ddm4ip/degradations/blur.py","file_url":"https://github.com/inria-thoth/ddm4ip/blob/HEAD/ddm4ip/degradations/blur.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":"0b87681ee0b24f31"}},{"code_sha256_prefix":"25a80a498e6efe47","entry":"learning_rate_schedule","repo":"inria-thoth/ddm4ip","repo_kind":"official","path":"ddm4ip/losses/utils.py","file_url":"https://github.com/inria-thoth/ddm4ip/blob/HEAD/ddm4ip/losses/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":"25a80a498e6efe47"}},{"code_sha256_prefix":"38edc926bf38f2e1","entry":"sparse_reg","repo":"inria-thoth/ddm4ip","repo_kind":"official","path":"ddm4ip/losses/di_y.py","file_url":"https://github.com/inria-thoth/ddm4ip/blob/HEAD/ddm4ip/losses/di_y.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":"38edc926bf38f2e1"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}