{"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/restoreformer-towards-real-world-blind-face","title":"RestoreFormer++: Towards Real-World Blind Face Restoration from Undegraded Key-Value Pairs","arxiv_id":"2308.07228","date":"2023-08-14","proceeding":null,"authors":["Zhouxia Wang","Jiawei Zhang","Tianshui Chen","Wenping Wang","Ping Luo"],"abstract":"Blind face restoration aims at recovering high-quality face images from those with unknown degradations. Current algorithms mainly introduce priors to complement high-quality details and achieve impressive progress. However, most of these algorithms ignore abundant contextual information in the face and its interplay with the priors, leading to sub-optimal performance. Moreover, they pay less attention to the gap between the synthetic and real-world scenarios, limiting the robustness and generalization to real-world applications. In this work, we propose RestoreFormer++, which on the one hand introduces fully-spatial attention mechanisms to model the contextual information and the interplay with the priors, and on the other hand, explores an extending degrading model to help generate more realistic degraded face images to alleviate the synthetic-to-real-world gap. Compared with current algorithms, RestoreFormer++ has several crucial benefits. First, instead of using a multi-head self-attention mechanism like the traditional visual transformer, we introduce multi-head cross-attention over multi-scale features to fully explore spatial interactions between corrupted information and high-quality priors. In this way, it can facilitate RestoreFormer++ to restore face images with higher realness and fidelity. Second, in contrast to the recognition-oriented dictionary, we learn a reconstruction-oriented dictionary as priors, which contains more diverse high-quality facial details and better accords with the restoration target. Third, we introduce an extending degrading model that contains more realistic degraded scenarios for training data synthesizing, and thus helps to enhance the robustness and generalization of our RestoreFormer++ model. Extensive experiments show that RestoreFormer++ outperforms state-of-the-art algorithms on both synthetic and real-world datasets.","url_abs":"https://arxiv.org/abs/2308.07228v1","url_pdf":"https://arxiv.org/pdf/2308.07228v1.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":"restoreformer-towards-real-world-blind-face","repo_url":"https://github.com/wzhouxiff/restoreformerplusplus","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":"blind-face-restoration","task_name":"Blind Face Restoration"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2308.07228","atlas_url":"https://app.syntology.ai/?focus=2308.07228","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2308.07228"}},"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/wzhouxiff/restoreformerplusplus","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran_draft_wrong":5,"ran":6,"unverified":1},"by_repo_kind":{"official":{"samples":12,"ran":11,"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":"c3a6b977022957cb","entry":"Normalize","repo":"wzhouxiff/restoreformerplusplus","repo_kind":"official","path":"gradio_demo/RestoreFormer_arch.py","file_url":"https://github.com/wzhouxiff/restoreformerplusplus/blob/HEAD/gradio_demo/RestoreFormer_arch.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":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"c3a6b977022957cb"}},{"code_sha256_prefix":"5d1755bb165b0225","entry":"all_gather","repo":"wzhouxiff/restoreformerplusplus","repo_kind":"official","path":"RestoreFormer/distributed/distributed.py","file_url":"https://github.com/wzhouxiff/restoreformerplusplus/blob/HEAD/RestoreFormer/distributed/distributed.py","link_basis":"harvester_set","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":"5d1755bb165b0225"}},{"code_sha256_prefix":"ecc901a1548f3862","entry":"all_reduce","repo":"wzhouxiff/restoreformerplusplus","repo_kind":"official","path":"RestoreFormer/distributed/distributed.py","file_url":"https://github.com/wzhouxiff/restoreformerplusplus/blob/HEAD/RestoreFormer/distributed/distributed.py","link_basis":"harvester_set","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":"ecc901a1548f3862"}},{"code_sha256_prefix":"5ef87f1a172f152b","entry":"count_params","repo":"wzhouxiff/restoreformerplusplus","repo_kind":"official","path":"RestoreFormer/modules/util.py","file_url":"https://github.com/wzhouxiff/restoreformerplusplus/blob/HEAD/RestoreFormer/modules/util.py","link_basis":"harvester_set","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":"5ef87f1a172f152b"}},{"code_sha256_prefix":"e70eb36cf08faee4","entry":"get_ckpt_path","repo":"wzhouxiff/restoreformerplusplus","repo_kind":"official","path":"RestoreFormer/util.py","file_url":"https://github.com/wzhouxiff/restoreformerplusplus/blob/HEAD/RestoreFormer/util.py","link_basis":"harvester_set","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":"e70eb36cf08faee4"}},{"code_sha256_prefix":"07d90bd6ae1be7db","entry":"md5_hash","repo":"wzhouxiff/restoreformerplusplus","repo_kind":"official","path":"RestoreFormer/util.py","file_url":"https://github.com/wzhouxiff/restoreformerplusplus/blob/HEAD/RestoreFormer/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":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"07d90bd6ae1be7db"}},{"code_sha256_prefix":"3137073275f8c21a","entry":"nonlinearity","repo":"wzhouxiff/restoreformerplusplus","repo_kind":"official","path":"gradio_demo/RestoreFormer_arch.py","file_url":"https://github.com/wzhouxiff/restoreformerplusplus/blob/HEAD/gradio_demo/RestoreFormer_arch.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"3137073275f8c21a"}},{"code_sha256_prefix":"7257fdf155f5ef45","entry":"normalize_tensor","repo":"wzhouxiff/restoreformerplusplus","repo_kind":"official","path":"RestoreFormer/modules/losses/lpips.py","file_url":"https://github.com/wzhouxiff/restoreformerplusplus/blob/HEAD/RestoreFormer/modules/losses/lpips.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"7257fdf155f5ef45"}},{"code_sha256_prefix":"7dbdda0920e3d074","entry":"reduce_dict","repo":"wzhouxiff/restoreformerplusplus","repo_kind":"official","path":"RestoreFormer/distributed/distributed.py","file_url":"https://github.com/wzhouxiff/restoreformerplusplus/blob/HEAD/RestoreFormer/distributed/distributed.py","link_basis":"harvester_set","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":"7dbdda0920e3d074"}},{"code_sha256_prefix":"31543f3e2c18272e","entry":"retrieve","repo":"wzhouxiff/restoreformerplusplus","repo_kind":"official","path":"RestoreFormer/util.py","file_url":"https://github.com/wzhouxiff/restoreformerplusplus/blob/HEAD/RestoreFormer/util.py","link_basis":"harvester_set","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":"31543f3e2c18272e"}},{"code_sha256_prefix":"e268053216b1dd62","entry":"spatial_average","repo":"wzhouxiff/restoreformerplusplus","repo_kind":"official","path":"RestoreFormer/modules/losses/lpips.py","file_url":"https://github.com/wzhouxiff/restoreformerplusplus/blob/HEAD/RestoreFormer/modules/losses/lpips.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e268053216b1dd62"}},{"code_sha256_prefix":"0defd439e37477e9","entry":"load_file_from_url","repo":"wzhouxiff/restoreformerplusplus","repo_kind":"official","path":"RestoreFormer/download_util.py","file_url":"https://github.com/wzhouxiff/restoreformerplusplus/blob/HEAD/RestoreFormer/download_util.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":"0defd439e37477e9"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}