{"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/single-image-reflection-separation-via","title":"Single Image Reflection Separation via Component Synergy","arxiv_id":"2308.10027","date":"2023-08-19","proceeding":"ICCV 2023 1","authors":["Qiming Hu","Xiaojie Guo"],"abstract":"The reflection superposition phenomenon is complex and widely distributed in the real world, which derives various simplified linear and nonlinear formulations of the problem. In this paper, based on the investigation of the weaknesses of existing models, we propose a more general form of the superposition model by introducing a learnable residue term, which can effectively capture residual information during decomposition, guiding the separated layers to be complete. In order to fully capitalize on its advantages, we further design the network structure elaborately, including a novel dual-stream interaction mechanism and a powerful decomposition network with a semantic pyramid encoder. Extensive experiments and ablation studies are conducted to verify our superiority over state-of-the-art approaches on multiple real-world benchmark datasets. Our code is publicly available at https://github.com/mingcv/DSRNet.","url_abs":"https://arxiv.org/abs/2308.10027v1","url_pdf":"https://arxiv.org/pdf/2308.10027v1.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":"single-image-reflection-separation-via","repo_url":"https://github.com/mingcv/dsrnet","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":"reflection-removal","task_name":"Reflection Removal"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/reflection-removal-on-real20","task":"Reflection Removal","dataset":"Real20","model":"DSRNet","rank_in_archive_order":3,"of":8,"metrics":{"PSNR":"24.23","SSIM":"0.82"},"uses_additional_data":false},{"leaderboard":"/sota/reflection-removal-on-sir-2-objects","task":"Reflection Removal","dataset":"SIR^2(Objects)","model":"DSRNet","rank_in_archive_order":3,"of":7,"metrics":{"PSNR":"26.28","SSIM":"0.914"},"uses_additional_data":false},{"leaderboard":"/sota/reflection-removal-on-sir-2-postcard","task":"Reflection Removal","dataset":"SIR^2(Postcard)","model":"DSRNet","rank_in_archive_order":3,"of":6,"metrics":{"PSNR":"24.56","SSIM":"0.908"},"uses_additional_data":false},{"leaderboard":"/sota/reflection-removal-on-sir-2-wild","task":"Reflection Removal","dataset":"SIR^2(Wild)","model":"DSRNet","rank_in_archive_order":3,"of":6,"metrics":{"PSNR":"25.68","SSIM":"0.896"},"uses_additional_data":false}],"syntology":{"syntology_url":"https://syntology.ai/paper/2308.10027","atlas_url":"https://app.syntology.ai/?focus=2308.10027","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2308.10027"}},"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/mingcv/dsrnet","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"deterministic:regex_extraction","url":"https://github.com/mingcv/DSRNet","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran":14,"ran_honours":1,"unverified":4},"by_repo_kind":{"official":{"samples":19,"ran":15,"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":"654f8f4b6d0a3205","entry":"CABlock","repo":"mingcv/DSRNet","repo_kind":"official","path":"models/arch/dsrnet.py","file_url":"https://github.com/mingcv/DSRNet/blob/HEAD/models/arch/dsrnet.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"654f8f4b6d0a3205"}},{"code_sha256_prefix":"77d3179c2d9c6f63","entry":"DualStreamGate","repo":"mingcv/DSRNet","repo_kind":"official","path":"models/arch/dsrnet.py","file_url":"https://github.com/mingcv/DSRNet/blob/HEAD/models/arch/dsrnet.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"77d3179c2d9c6f63"}},{"code_sha256_prefix":"c9bb839974d4d85b","entry":"FeaturePyramidVGG","repo":"mingcv/DSRNet","repo_kind":"official","path":"models/arch/dsrnet.py","file_url":"https://github.com/mingcv/DSRNet/blob/HEAD/models/arch/dsrnet.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"c9bb839974d4d85b"}},{"code_sha256_prefix":"74052a3fb7a2f97a","entry":"LRM","repo":"mingcv/DSRNet","repo_kind":"official","path":"models/arch/dsrnet.py","file_url":"https://github.com/mingcv/DSRNet/blob/HEAD/models/arch/dsrnet.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"74052a3fb7a2f97a"}},{"code_sha256_prefix":"8a82b2f718e05361","entry":"LayerNorm2d","repo":"mingcv/DSRNet","repo_kind":"official","path":"models/arch/dsrnet.py","file_url":"https://github.com/mingcv/DSRNet/blob/HEAD/models/arch/dsrnet.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"8a82b2f718e05361"}},{"code_sha256_prefix":"66c241d4f1e32dc0","entry":"LayerNormFunction","repo":"mingcv/DSRNet","repo_kind":"official","path":"models/arch/dsrnet.py","file_url":"https://github.com/mingcv/DSRNet/blob/HEAD/models/arch/dsrnet.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"66c241d4f1e32dc0"}},{"code_sha256_prefix":"2810085988564f93","entry":"MuGIBlock","repo":"mingcv/DSRNet","repo_kind":"official","path":"models/arch/dsrnet.py","file_url":"https://github.com/mingcv/DSRNet/blob/HEAD/models/arch/dsrnet.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"2810085988564f93"}},{"code_sha256_prefix":"d94f35746a74bf40","entry":"R2Block","repo":"mingcv/DSRNet","repo_kind":"official","path":"models/arch/dsrnet.py","file_url":"https://github.com/mingcv/DSRNet/blob/HEAD/models/arch/dsrnet.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"d94f35746a74bf40"}},{"code_sha256_prefix":"168ababdbf84b4a7","entry":"SinBlock","repo":"mingcv/DSRNet","repo_kind":"official","path":"models/arch/dsrnet.py","file_url":"https://github.com/mingcv/DSRNet/blob/HEAD/models/arch/dsrnet.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"168ababdbf84b4a7"}},{"code_sha256_prefix":"0609d7bef0d31894","entry":"compute_grad","repo":"mingcv/dsrnet","repo_kind":"official","path":"models/losses.py","file_url":"https://github.com/mingcv/dsrnet/blob/HEAD/models/losses.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"0609d7bef0d31894"}},{"code_sha256_prefix":"f6b944f50d3f15ae","entry":"count_parameters","repo":"mingcv/dsrnet","repo_kind":"official","path":"util/net_utils.py","file_url":"https://github.com/mingcv/dsrnet/blob/HEAD/util/net_utils.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f6b944f50d3f15ae"}},{"code_sha256_prefix":"f783b6ca16b40935","entry":"get_norm_layer","repo":"mingcv/dsrnet","repo_kind":"official","path":"models/networks.py","file_url":"https://github.com/mingcv/dsrnet/blob/HEAD/models/networks.py","link_basis":"plan_row","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f783b6ca16b40935"}},{"code_sha256_prefix":"769152a8894ee12b","entry":"init_loss","repo":"mingcv/dsrnet","repo_kind":"official","path":"models/losses.py","file_url":"https://github.com/mingcv/dsrnet/blob/HEAD/models/losses.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"769152a8894ee12b"}},{"code_sha256_prefix":"bbf548b3c60a6415","entry":"receptive_field","repo":"mingcv/dsrnet","repo_kind":"official","path":"models/networks.py","file_url":"https://github.com/mingcv/dsrnet/blob/HEAD/models/networks.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"bbf548b3c60a6415"}},{"code_sha256_prefix":"fde6f58552ebe4f1","entry":"tensor2im","repo":"mingcv/dsrnet","repo_kind":"official","path":"models/dsrnet_model_sirs.py","file_url":"https://github.com/mingcv/dsrnet/blob/HEAD/models/dsrnet_model_sirs.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"fde6f58552ebe4f1"}},{"code_sha256_prefix":"76e7680e5cd6ad58","entry":"DSRNet","repo":"mingcv/DSRNet","repo_kind":"official","path":"models/arch/dsrnet.py","file_url":"https://github.com/mingcv/DSRNet/blob/HEAD/models/arch/dsrnet.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"76e7680e5cd6ad58"}},{"code_sha256_prefix":"994dd8350d228fcf","entry":"DualStreamBlock","repo":"mingcv/DSRNet","repo_kind":"official","path":"models/arch/dsrnet.py","file_url":"https://github.com/mingcv/DSRNet/blob/HEAD/models/arch/dsrnet.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"994dd8350d228fcf"}},{"code_sha256_prefix":"727394299ffb7c73","entry":"DualStreamSeq","repo":"mingcv/DSRNet","repo_kind":"official","path":"models/arch/dsrnet.py","file_url":"https://github.com/mingcv/DSRNet/blob/HEAD/models/arch/dsrnet.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"727394299ffb7c73"}},{"code_sha256_prefix":"3c2906d11efdb30d","entry":"define_D","repo":"mingcv/dsrnet","repo_kind":"official","path":"models/networks.py","file_url":"https://github.com/mingcv/dsrnet/blob/HEAD/models/networks.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"3c2906d11efdb30d"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}