{"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/blind-super-resolution-kernel-estimation","title":"Blind Super-Resolution Kernel Estimation using an Internal-GAN","arxiv_id":"1909.06581","date":"2019-09-14","proceeding":"NeurIPS 2019 12","authors":["Sefi Bell-Kligler","Assaf Shocher","Michal Irani"],"abstract":"Super resolution (SR) methods typically assume that the low-resolution (LR) image was downscaled from the unknown high-resolution (HR) image by a fixed 'ideal' downscaling kernel (e.g. Bicubic downscaling). However, this is rarely the case in real LR images, in contrast to synthetically generated SR datasets. When the assumed downscaling kernel deviates from the true one, the performance of SR methods significantly deteriorates. This gave rise to Blind-SR - namely, SR when the downscaling kernel (\"SR-kernel\") is unknown. It was further shown that the true SR-kernel is the one that maximizes the recurrence of patches across scales of the LR image. In this paper we show how this powerful cross-scale recurrence property can be realized using Deep Internal Learning. We introduce \"KernelGAN\", an image-specific Internal-GAN, which trains solely on the LR test image at test time, and learns its internal distribution of patches. Its Generator is trained to produce a downscaled version of the LR test image, such that its Discriminator cannot distinguish between the patch distribution of the downscaled image, and the patch distribution of the original LR image. The Generator, once trained, constitutes the downscaling operation with the correct image-specific SR-kernel. KernelGAN is fully unsupervised, requires no training data other than the input image itself, and leads to state-of-the-art results in Blind-SR when plugged into existing SR algorithms.","url_abs":"https://arxiv.org/abs/1909.06581v6","url_pdf":"https://arxiv.org/pdf/1909.06581v6.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":"blind-super-resolution-kernel-estimation","repo_url":"https://github.com/sefibk/KernelGAN","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"NOASSERTION"}},{"paper_slug":"blind-super-resolution-kernel-estimation","repo_url":"https://github.com/BillOuyang/KernelGan-s3","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"blind-super-resolution-kernel-estimation","repo_url":"https://github.com/Lornatang/KernelGAN","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"blind-super-resolution-kernel-estimation","repo_url":"https://github.com/RomanovIgnat/KernelGAN","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"NOASSERTION"}}],"tasks":[{"task_slug":"blind-super-resolution","task_name":"Blind Super-Resolution"},{"task_slug":"super-resolution","task_name":"Super-Resolution"}],"methods":[],"datasets_introduced":[{"slug":"div2krk","name":"DIV2KRK","full_name":"DIV2K Random Kernel"}],"methods_introduced":[],"results":[{"leaderboard":"/sota/blind-super-resolution-on-div2krk-2x","task":"Blind Super-Resolution","dataset":"DIV2KRK - 2x upscaling","model":"KernelGAN+ZSSR","rank_in_archive_order":5,"of":5,"metrics":{"PSNR":"30.36","SSIM":"0.8669"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=1909.06581","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1909.06581"}},"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":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/RomanovIgnat/KernelGAN","reach":{"status":"ok","spdx":"NOASSERTION"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/sefibk/KernelGAN","reach":{"status":"ok","spdx":"NOASSERTION"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/BillOuyang/KernelGan-s3","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/Lornatang/KernelGAN","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran":2,"ran_fixture":2,"ran_draft_wrong":1,"unverified":7},"by_repo_kind":{"listed":{"samples":12,"ran":5,"repositories":2}},"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":3,"samples":[{"code_sha256_prefix":"b921438690ac017f","entry":"contributions","repo":"Lornatang/KernelGAN","repo_kind":"listed","path":"imresize.py","file_url":"https://github.com/Lornatang/KernelGAN/blob/HEAD/imresize.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":"b921438690ac017f"}},{"code_sha256_prefix":"2c3537174371eb3d","entry":"downscale","repo":"BillOuyang/KernelGan-s3","repo_kind":"listed","path":"datagenerator/generator.py","file_url":"https://github.com/BillOuyang/KernelGan-s3/blob/HEAD/datagenerator/generator.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"2c3537174371eb3d"}},{"code_sha256_prefix":"ee75635bb6c497f1","entry":"fix_scale_and_size","repo":"Lornatang/KernelGAN","repo_kind":"listed","path":"imresize.py","file_url":"https://github.com/Lornatang/KernelGAN/blob/HEAD/imresize.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":"ee75635bb6c497f1"}},{"code_sha256_prefix":"2b6d632ae7409fb5","entry":"gen_kernel","repo":"BillOuyang/KernelGan-s3","repo_kind":"listed","path":"datagenerator/generator.py","file_url":"https://github.com/BillOuyang/KernelGan-s3/blob/HEAD/datagenerator/generator.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"2b6d632ae7409fb5"}},{"code_sha256_prefix":"247be28fb1025380","entry":"kernel_shift","repo":"BillOuyang/KernelGan-s3","repo_kind":"listed","path":"datagenerator/generator.py","file_url":"https://github.com/BillOuyang/KernelGan-s3/blob/HEAD/datagenerator/generator.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"247be28fb1025380"}},{"code_sha256_prefix":"9cb8c14a5a5d6d3b","entry":"im2tensor","repo":"Lornatang/KernelGAN","repo_kind":"listed","path":"util.py","file_url":"https://github.com/Lornatang/KernelGAN/blob/HEAD/util.py","link_basis":"harvester_set","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":"9cb8c14a5a5d6d3b"}},{"code_sha256_prefix":"7b064b7f22f1a281","entry":"imresize","repo":"Lornatang/KernelGAN","repo_kind":"listed","path":"imresize.py","file_url":"https://github.com/Lornatang/KernelGAN/blob/HEAD/imresize.py","link_basis":"harvester_set","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":"7b064b7f22f1a281"}},{"code_sha256_prefix":"aebde4515b49a7ab","entry":"kernel_shift","repo":"Lornatang/KernelGAN","repo_kind":"listed","path":"ZSSRforKernelGAN/zssr_utils.py","file_url":"https://github.com/Lornatang/KernelGAN/blob/HEAD/ZSSRforKernelGAN/zssr_utils.py","link_basis":"harvester_set","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":"aebde4515b49a7ab"}},{"code_sha256_prefix":"ae7a590467df97d5","entry":"move2cpu","repo":"Lornatang/KernelGAN","repo_kind":"listed","path":"util.py","file_url":"https://github.com/Lornatang/KernelGAN/blob/HEAD/util.py","link_basis":"harvester_set","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":"ae7a590467df97d5"}},{"code_sha256_prefix":"ce5184edff18c76c","entry":"preprocess_kernels","repo":"Lornatang/KernelGAN","repo_kind":"listed","path":"ZSSRforKernelGAN/zssr_utils.py","file_url":"https://github.com/Lornatang/KernelGAN/blob/HEAD/ZSSRforKernelGAN/zssr_utils.py","link_basis":"harvester_set","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":"ce5184edff18c76c"}},{"code_sha256_prefix":"1b0a3179c34cf2e7","entry":"random_augment","repo":"Lornatang/KernelGAN","repo_kind":"listed","path":"ZSSRforKernelGAN/zssr_utils.py","file_url":"https://github.com/Lornatang/KernelGAN/blob/HEAD/ZSSRforKernelGAN/zssr_utils.py","link_basis":"harvester_set","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":"1b0a3179c34cf2e7"}},{"code_sha256_prefix":"7a4d057c155883e4","entry":"tensor2im","repo":"Lornatang/KernelGAN","repo_kind":"listed","path":"util.py","file_url":"https://github.com/Lornatang/KernelGAN/blob/HEAD/util.py","link_basis":"harvester_set","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":"7a4d057c155883e4"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}