{"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/universal-image-restoration-pre-training-via","title":"Universal Image Restoration Pre-training via Degradation Classification","arxiv_id":"2501.15510","date":"2025-01-26","proceeding":null,"authors":["Jiakui Hu","Lujia Jin","Zhengjian Yao","Yanye Lu"],"abstract":"This paper proposes the Degradation Classification Pre-Training (DCPT), which enables models to learn how to classify the degradation type of input images for universal image restoration pre-training. Unlike the existing self-supervised pre-training methods, DCPT utilizes the degradation type of the input image as an extremely weak supervision, which can be effortlessly obtained, even intrinsic in all image restoration datasets. DCPT comprises two primary stages. Initially, image features are extracted from the encoder. Subsequently, a lightweight decoder, such as ResNet18, is leveraged to classify the degradation type of the input image solely based on the features extracted in the first stage, without utilizing the input image. The encoder is pre-trained with a straightforward yet potent DCPT, which is used to address universal image restoration and achieve outstanding performance. Following DCPT, both convolutional neural networks (CNNs) and transformers demonstrate performance improvements, with gains of up to 2.55 dB in the 10D all-in-one restoration task and 6.53 dB in the mixed degradation scenarios. Moreover, previous self-supervised pretraining methods, such as masked image modeling, discard the decoder after pre-training, while our DCPT utilizes the pre-trained parameters more effectively. This superiority arises from the degradation classifier acquired during DCPT, which facilitates transfer learning between models of identical architecture trained on diverse degradation types. Source code and models are available at https://github.com/MILab-PKU/dcpt.","url_abs":"https://arxiv.org/abs/2501.15510v1","url_pdf":"https://arxiv.org/pdf/2501.15510v1.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":"universal-image-restoration-pre-training-via","repo_url":"https://github.com/milab-pku/dcpt","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[{"task_slug":"5-degradation-blind-all-in-one-image","task_name":"5-Degradation Blind All-in-One Image Restoration"},{"task_slug":"image-restoration","task_name":"Image Restoration"},{"task_slug":"transfer-learning","task_name":"Transfer Learning"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2501.15510","atlas_url":"https://app.syntology.ai/?focus=2501.15510","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2501.15510"}},"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":"deterministic:regex_extraction","url":"https://github.com/MILab-PKU/dcpt","reach":{"status":"ok"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/milab-pku/dcpt","reach":{"status":"ok"}}],"summary":{"ran":3,"ran_draft_wrong":2,"unverified":3},"by_repo_kind":{"official":{"samples":8,"ran":5,"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":8,"samples":[{"code_sha256_prefix":"6a2524353adb66e5","entry":"BaseModel","repo":"milab-pku/dcpt","repo_kind":"official","path":"basicsr/models/degradation_classification_pretrain_model.py","file_url":"https://github.com/milab-pku/dcpt/blob/HEAD/basicsr/models/degradation_classification_pretrain_model.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":"6a2524353adb66e5"}},{"code_sha256_prefix":"ed2e0002a150698b","entry":"Registry","repo":"milab-pku/dcpt","repo_kind":"official","path":"basicsr/models/degradation_classification_pretrain_model.py","file_url":"https://github.com/milab-pku/dcpt/blob/HEAD/basicsr/models/degradation_classification_pretrain_model.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":"ed2e0002a150698b"}},{"code_sha256_prefix":"34c62f60981f053e","entry":"get_dist_info","repo":"milab-pku/dcpt","repo_kind":"official","path":"basicsr/models/degradation_classification_pretrain_model.py","file_url":"https://github.com/milab-pku/dcpt/blob/HEAD/basicsr/models/degradation_classification_pretrain_model.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"34c62f60981f053e"}},{"code_sha256_prefix":"78b9b7a499b61ec2","entry":"get_root_logger","repo":"milab-pku/dcpt","repo_kind":"official","path":"basicsr/models/degradation_classification_pretrain_model.py","file_url":"https://github.com/milab-pku/dcpt/blob/HEAD/basicsr/models/degradation_classification_pretrain_model.py","link_basis":"first_harvest_node","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":"78b9b7a499b61ec2"}},{"code_sha256_prefix":"7c6a318ab41fb56f","entry":"master_only","repo":"milab-pku/dcpt","repo_kind":"official","path":"basicsr/models/degradation_classification_pretrain_model.py","file_url":"https://github.com/milab-pku/dcpt/blob/HEAD/basicsr/models/degradation_classification_pretrain_model.py","link_basis":"first_harvest_node","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":"7c6a318ab41fb56f"}},{"code_sha256_prefix":"eb972bf3719c2f3b","entry":"DCPTModel","repo":"milab-pku/dcpt","repo_kind":"official","path":"basicsr/models/degradation_classification_pretrain_model.py","file_url":"https://github.com/milab-pku/dcpt/blob/HEAD/basicsr/models/degradation_classification_pretrain_model.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":"eb972bf3719c2f3b"}},{"code_sha256_prefix":"406917308c80d0ad","entry":"build_loss","repo":"milab-pku/dcpt","repo_kind":"official","path":"basicsr/models/degradation_classification_pretrain_model.py","file_url":"https://github.com/milab-pku/dcpt/blob/HEAD/basicsr/models/degradation_classification_pretrain_model.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":"406917308c80d0ad"}},{"code_sha256_prefix":"1364e5aeb7f4920b","entry":"build_network","repo":"milab-pku/dcpt","repo_kind":"official","path":"basicsr/models/degradation_classification_pretrain_model.py","file_url":"https://github.com/milab-pku/dcpt/blob/HEAD/basicsr/models/degradation_classification_pretrain_model.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":"1364e5aeb7f4920b"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}