{"id":30623682,"url":"https://github.com/cszn/conversenet","last_synced_at":"2025-08-30T16:43:36.835Z","repository":{"id":309745489,"uuid":"1017899509","full_name":"cszn/ConverseNet","owner":"cszn","description":"Reverse Convolution and Its Applications to Image Restoration (ICCV, 2025)","archived":false,"fork":false,"pushed_at":"2025-08-13T14:43:00.000Z","size":189675,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-13T16:30:00.556Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cszn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-11T09:19:03.000Z","updated_at":"2025-08-13T14:43:05.000Z","dependencies_parsed_at":"2025-08-13T16:44:10.991Z","dependency_job_id":null,"html_url":"https://github.com/cszn/ConverseNet","commit_stats":null,"previous_names":["cszn/conversenet"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/cszn/ConverseNet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cszn%2FConverseNet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cszn%2FConverseNet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cszn%2FConverseNet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cszn%2FConverseNet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cszn","download_url":"https://codeload.github.com/cszn/ConverseNet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cszn%2FConverseNet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272878208,"owners_count":25008340,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-30T02:00:09.474Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-30T16:43:35.147Z","updated_at":"2025-08-30T16:43:36.824Z","avatar_url":"https://github.com/cszn.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [Reverse Convolution and Its Application to Image Restoration](https://www.arxiv.org/abs/2508.09824)\n\n[Xuhong Huang\u003csup\u003e*\u003c/sup\u003e](https://csgeekhuang.github.io/), [Shiqi Liu\u003csup\u003e*\u003c/sup\u003e](https://github.com/Stella-67), [Kai Zhang\u003csup\u003e†\u003c/sup\u003e](https://cszn.github.io/), Ying Tai, Jian Yang, Hui Zeng, [Lei Zhang](http://www4.comp.polyu.edu.hk/~cslzhang/)\n\nNanjing University, China\n\n\n___________\n\n* [Motivation](#motivation)\n* [Method](#method)\n* [Models](#models)\n* [Codes](#codes)\n* [PSNR results](#psnr-results)\n* [Visual results of Converse-DnCNN](#visual-results-of-converse-dncnn)\n* [Visual results of Converse-SRResNet](#visual-results-of-converse-srresnet)\n* [Visual results of ConverseNet](#visual-results-of-conversenet)\n* [Visual results of Converse-USRNet](#visual-results-of-converse-usrnet)\n\n\nMotivation\n----------\nConvolution and transposed convolution (often referred to as deconvolution) are fundamental operations in deep neural networks. Convolution is commonly used for feature extraction and spatial downsampling. In contrast, transposed convolution is used to upsample spatial dimensions. Due to this functional relationship, transposed convolution is sometimes described in the literature as a reverse convolution operator. However, it is not the mathematical inverse of convolution. Instead, it performs upsampling by inserting zeros between input elements, followed by a standard convolution. While this interpretation is widely accepted, implementing a reverse convolution operator has received little attention. Notably, popular deep learning frameworks such as PyTorch do not provide native support for such an operator.\n\n\u003cimg src=\"figs/image.png\" width=\"500px\"/\u003e \n\nMethod\n----------\n- We propose a novel depthwise reverse convolution operator as a first-step exploration to effectively reverse the depthwise convolution by formulating and solving a regularized least-squares optimization problem. We thoroughly investigate its kernel initialization, padding strategies, and other critical aspects to ensure its effective implementation.\n\n\u003cimg src=\"figs/algorithm.png\" width=\"400px\"/\u003e \n\n\n\u003c!-- $$\n\\mathbf{Y} = (\\mathbf{X} \\otimes \\mathbf{K})\\downarrow_{s}.\n$$\n\n$$\n\\mathbf{X} = \\mathcal{F}(\\mathbf{Y}, \\mathbf{K}, s).\n$$\n\n$$\n\\mathbf{X}^\\ast = \\arg\\min_{\\mathbf{X}} \\left\\| \\mathbf{Y} - \\left( \\mathbf{X} \\otimes \\mathbf{K} \\right) \\downarrow_{s} \\right\\|_F^2 + \\lambda \\left\\| \\mathbf{X} - \\mathbf{X}_0 \\right\\|_F^2,\n$$\n\n\n$$\n\\mathbf{X}^\\ast = \\arg\\min_{\\mathbf{X}} \\left\\| \\mathbf{Y} - \\left( \\mathbf{X} \\otimes \\mathbf{K} \\right) \\downarrow_{s} \\right\\|_F^2\n$$\n\n$$\n\\mathbf{X}^{*} = \\mathbf{F}^{-1}\\!\\left(\\frac{1}{\\lambda}\\Big(\\mathbf{L} - \\overline{\\mathbf{F}_K} \\odot_{s}\\frac{(\\mathbf{F}_K\\mathbf{L})\\Downarrow_{{s}} }{|\\mathbf{F}_K|^2\\Downarrow_{{s}} +\\lambda}\\Big)\\right)\n$$ --\u003e\n- Building upon this reverse convolution operator, we integrate it with layer normalization, 1x1 convolution, and GELU activation to form a reverse convolution block, similar to a Transformer block.\n\n\u003cimg src=\"figs/block.png\" width=\"400px\"/\u003e \n\nModels\n----------\n\n|Model|# params|\n|---|:---:|\n|[Converse-DnCNN](model_zoo/converse_dncnn.pth)     | 734,913 |\n|[Converse-SRResNet](model_zoo/converse_srresnet.pth)     | 694,208 |\n|[ConverseNet](model_zoo/conversenet.pth)     | 243,267 |\n|[Converse-USRNet](model_zoo/converse_usrnet.pth)     | 307,091 |\n\n\nCodes\n----------\n\n* [main_test_converse_dncnn.py](main_test_converse_dncnn.py):  _Code to denoise images by Converse-DnCNN_\n* [main_test_converse_srresnet.py](main_test_converse_srresnet.py):  _Code to super-resolve LR images by Converse-SRResNet_\n* [main_test_converse_usrnet.py](main_test_converse_usrnet.py):  _Code to super-resolve LR images by Converse-USRNet_\n\n\nPSNR results\n----------\n\nRun [main_test_converse_dncnn.py](main_test_converse_dncnn.py) to produce the following results.\n\n\u003cimg src=\"figs/psnr_dncnn.png\" width=\"500px\"/\u003e  \nThe table shows the number of parameters and average PSNR(dB) results of different models for Gaussian denoising with noise level 25 on Set12 and BSD68 datasets.\n\nRun [main_test_converse_srresnet.py](main_test_converse_srresnet.py) to produce the following results.\n\n\u003cimg src=\"figs/psnr_srresnet.png\" width=\"500px\"/\u003e  \nThe table shows the average PSNR(dB) results of different variants of SRResNet for super-resolution with scale factor 4.\n\nRun [main_test_converse_usrnet.py](main_test_converse_usrnet.py) to produce the following results.\n\n\u003cimg src=\"figs/psnr_usrnet.png\" width=\"500px\"/\u003e  \nThe table shows the average PSNR(dB) results of different methods on Set5, Set14, BSD100 and Urban100 datasets.\n\n\nVisual results of Converse-DnCNN\n----------\n\n\n|\u003cimg src=\"figs/noisy.png\" width=\"430x\"/\u003e |\u003cimg src=\"figs/reverse_23.53.png\" width=\"430x\"/\u003e|\n|:---:|:---:|\n|\u003ci\u003eImage with noise level uniformly ranging from 0 to 50\u003c/i\u003e|\u003ci\u003eDenoising result by Converse-DnCNN\u003c/i\u003e|\n\nVisual results of Converse-SRResNet\n----------\n\n|\u003cimg src=\"figs/downsample.png\" width=\"430x\"/\u003e |\u003cimg src=\"figs/SR_reverse.png\" width=\"430x\"/\u003e|\n|:---:|:---:|\n|\u003ci\u003eLR image\u003c/i\u003e|\u003ci\u003eSuper-resolution result by Converse-SRResNet\u003c/i\u003e|\n\nVisual results of ConverseNet\n----------\n\n|\u003cimg src=\"figs/img_088_LR_12_output.png\" width=\"430x\"/\u003e |\u003cimg src=\"figs/img_088_denoiseconverse_12_output.png\" width=\"430x\"/\u003e|\n|:---:|:---:|\n|\u003ci\u003eBlurred image\u003c/i\u003e|\u003ci\u003eDeblurring results by ConverseNet\u003c/i\u003e|\n\nVisual results of Converse-USRNet\n----------\n\n|\u003cimg src=\"figs/img_022_LR_12_output.png\" width=\"430x\"/\u003e |\u003cimg src=\"figs/img_022_standard_12_output.png\" width=\"430x\"/\u003e|\n|:---:|:---:|\n|\u003ci\u003eBlurred image\u003c/i\u003e|\u003ci\u003eDeblurring results by Converse-USRNet\u003c/i\u003e|\n\n\n\nCitation\n----------\n```\n@inproceedings{huang2025reverse,\n    title={Reverse Convolution and Its Applications to Image Restoration},\n    author={Huang, Xuhong and Liu, Shiqi and Zhang, Kai and Tai, Ying and Yang, Jian and Zeng, Hui and Zhang, Lei},\n    booktitle={International Conference on Computer Vision},\n    pages={1--10},\n    year={2025}\n}\n```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcszn%2Fconversenet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcszn%2Fconversenet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcszn%2Fconversenet/lists"}