IRCNN

GitHub
610 172 困难 1 次阅读 1周前图像
AI 解读 由 AI 自动生成,仅供参考

IRCNN 是一个专注于图像复原的开源深度学习项目,核心目标是利用训练好的卷积神经网络(CNN)去噪器作为“先验知识”,来解决各类图像退化问题。它主要解决了传统方法中“模型优化法”速度慢与“判别学习法”通用性差之间的矛盾:既保留了处理不同任务的灵活性,又具备快速高效的推理能力。

该项目特别适合计算机视觉领域的研究人员、算法开发者以及需要处理高质量图像复原任务的工程师使用。其独特的技术亮点在于引入了变量分裂技术(如半二次分裂 HQS 算法),将复杂的图像复原过程拆解,使得原本仅用于去噪的 CNN 模块能够直接嵌入到数学优化框架中。这意味着用户无需针对去模糊、图像修复、超分辨率重建或彩色图像去马赛克等特定任务重新训练模型,只需调用预训练的去噪器序列,即可高效获得优异的复原效果。作为一个源自 CVPR 2017 的经典方案,IRCNN 为低层视觉任务提供了一套模块化、即插即用的高效解决方案。

使用场景

某安防监控团队在处理夜间低光照环境下抓拍的车辆牌照时,面临图像因运动模糊和噪点干扰而难以识别的难题。

没有 IRCNN 时

  • 模型泛化能力差:针对去噪、去模糊等不同任务需分别训练专用模型,一旦场景变化(如噪声类型改变),原有模型即刻失效,重新训练成本极高。
  • 处理速度与质量难兼得:传统的基于模型优化方法虽能灵活应对多种退化情况,但迭代计算耗时过长,无法满足实时视频流的处理需求。
  • 细节恢复不足:判别式学习方法虽然速度快,但往往过度平滑图像,导致车牌边缘纹理丢失,后续 OCR 识别率大幅下降。
  • 系统架构臃肿:需要维护多套独立的算法库来应对不同的图像复原需求,增加了工程部署和维护的复杂度。

使用 IRCNN 后

  • 一套模型通吃多任务:利用变量分裂技术,将训练好的深度 CNN 去噪器作为通用先验模块,无需额外训练即可直接解决去模糊、超分辨率及图像修复等多种问题。
  • 实时性与高画质并存:结合了判别式学习的快速推理优势与模型优化方法的灵活性,在毫秒级内完成高清复原,满足实时监控要求。
  • 纹理细节精准重建:IRCNN 能有效去除高斯噪声的同时保留高频边缘信息,显著提升了模糊车牌的字符清晰度,OCR 识别准确率大幅提升。
  • 架构轻量化:仅需集成单一的去噪器模块即可构建通用的图像复原流水线,极大简化了系统架构,降低了算力资源占用。

IRCNN 通过将深度学习去噪器巧妙嵌入传统优化框架,实现了“一次训练,多任务通用”,彻底打破了低层视觉任务中速度与质量的博弈僵局。

运行环境要求

操作系统
  • Windows
GPU

必需 NVIDIA GPU,需安装 CUDA 8.0 和 cuDNN v5.1(示例中提及 Tesla K20c)

内存

未说明

依赖
notes该项目主要基于 MATLAB 和 MatConvNet 框架,而非 Python/PyTorch(README 中提到的 PyTorch 版本指向另一个仓库 DPIR)。在 Windows 上运行需预先安装 Visual Studio 2015 以编译 MEX 文件,并正确配置 CUDA 和 cuDNN 的环境变量。首次使用前需在 MATLAB 中运行编译命令以启用 GPU 支持。
python不适用 (基于 MATLAB)
MATLAB R2015b+
CUDA Toolkit 8.0
cuDNN v5.1
MatConvNet 1.0-beta25
Visual Studio 2015
IRCNN hero image

快速开始

用于图像恢复的深度CNN去噪先验学习

visitors

PyTorch版本

https://github.com/cszn/DPIR

摘要

基于模型的优化方法和判别式学习方法一直是解决低层视觉中各类逆问题的两大主流策略。 通常,这两种方法各有优劣:基于模型的优化方法在处理不同逆问题时较为灵活,但为了获得良好的性能,往往需要设计复杂的先验模型,且计算耗时较长;而判别式学习方法虽然测试速度快,但其应用范围却受限于特定任务。 近期的研究表明,借助变量分裂技术,可以将去噪先验作为模块化组件嵌入到基于模型的优化方法中,以解决其他逆问题(如去模糊)。当去噪器通过判别式学习获得时,这种集成方式具有显著优势。然而,关于与快速判别式去噪先验相结合的研究仍显不足。为此,本文旨在训练一组快速有效的CNN(卷积神经网络)去噪器,并将其集成到基于模型的优化方法中,以解决其他逆问题。实验结果表明,所学习的一组去噪器不仅能够取得令人满意的高斯去噪效果,还可以作为先验知识,为多种低层视觉应用提供良好的性能。

基本思想

借助交替方向乘子法(ADMM)和半二次分裂(HQS)等变量分裂技术,可以分别处理通用图像恢复公式中的保真项和正则化项,其中正则化项仅对应于一个去噪子问题。 因此,这使得任何判别式去噪器都可以被集成到基于模型的优化方法中,以解决各种图像恢复任务,例如:

  • 图像去模糊
  • 图像修复
  • 单幅图像超分辨率
  • 彩色图像去马赛克

这些任务无需额外训练。

半二次分裂(HQS)算法

图像去模糊

左侧为模糊图像,右侧为使用IRCNN结合其他盲去模糊方法估计的核进行去模糊后的图像。

  • Deblur_set1

  • Deblur_set2

  • Deblur_set3

使用Demo_deblur_real_application.m来测试IRCNN在其他盲去模糊方法估计的核下的图像去模糊效果。

图像修复

左侧为带掩码的图像,右侧为使用IRCNN修复后的图像。

  • Inpaint_set1

  • Inpaint_set2

上述结果可通过Demo_inpaint.mDemo_inpaint_real_application.m生成。

单幅图像超分辨率(SISR)

IRCNN 考虑了三种用于 SISR 的退化模型。

1. 双三次插值退化

y = imresize(x, 1/sf, 'bicubic') % y: 低分辨率图像; x: 清晰的高分辨率图像; sf: 缩放因子

针对双三次插值退化的 IRCNN,在性能上与 VDSR 和 DnCNN 相当。

使用 Demo_SISR_YCbCr.mDemo_SISR_RGB.m 来生成 SISR 结果。

2. 高斯核模糊后下采样

对于缩放因子为 3 的情况:

kernelsize = ceil(sigma*3)*2+1; % 或者当 sigma = 1.6 时取 7
kernel     = fspecial('gaussian',kernelsize,sigma);
blur_HR    = imfilter(im,kernel,'replicate')
LR         = imresize(blur_HR, 1/scale, 'nearest');

对于缩放因子为 2 和 4 的情况:

kernelsize = ceil(sigma*3)*2+2;
kernel     = fspecial('gaussian',kernelsize,sigma);
blur_HR    = imfilter(im, kernel,'replicate');
LR         = blur_HR(scale/2:scale:end-scale/2,scale/2:scale:end-scale/2,:);

使用 Demo_SISR_YCbCr.mDemo_SISR_RGB.m 来生成 SISR 结果。

3. 使用任意核进行模糊处理,随后通过标准的 K 倍下采样器(MATLAB 函数 ‘downsample’)进行下采样

blur_HR    = imfilter(im, kernel,'replicate'); % 核可以是任意的,例如运动模糊、高斯模糊。
for i = 1:size(x,3)
 LR(:,:,i) = downsample(downsample(blur_HR(:,:,i),sf)',sf)';
end

关于该退化模型的更多细节,请参阅以下论文。

[1] Chan, Stanley H., Xiran Wang, and Omar A. Elgendy. “用于图像恢复的即插即用 ADMM:固定点收敛及应用。” IEEE 计算成像汇刊 3.1 (2017): 84-98.

左侧是经过运动模糊核处理后的放大 3 倍的低分辨率图像,右侧是通过 IRCNN 超分辨率重建后的 3 倍图像。

左侧是低分辨率(LR)图像。右侧是通过 IRCNN 超分辨率重建后的图像。

  • SISR_set1,合成低分辨率图像的超分辨率

  • SISR_set2,真实低分辨率图像的超分辨率

使用 Demo_SISR_direct_downsampler_real_application.m 来生成上述 SISR 结果。

彩色图像去马赛克

左侧是马赛克图像。右侧是通过 IRCNN 去马赛克后的图像。

  • Set18(麦克马斯特大学,IMAX)

  • Set24(柯达)

使用 Demo_demosaiking.m 来生成上述结果。

要求与依赖项

示例:在 Windows 7 64位系统上安装 cuDNN 5.1、CUDA 8.0 GA2 和 MatConvNet(由 kusiwu 提供)

下载并安装 Visual Studio 2015。

下载并安装 CUDA 8.0 GA2: 有两个安装程序,一个是基础安装包,另一个是补丁。您需要同时下载这两个文件。 https://developer.nvidia.com/cuda-80-ga2-download-archive 先安装基础安装包(1.3GB),再安装补丁(43.1MB)。 我的 CUDA 安装路径为:'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0'。 如果安装程序没有自动设置,请手动添加 CUDA_PATH 环境变量。

下载 cuDNN 5.1。您需要注册 NVIDIA 账号后才能下载 cuDNN 5.1。请使用 Google 搜索获取下载链接。 然后将压缩包解压到 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0' 目录下。 (参考文档:http://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html) 安装过程中可能需要重启计算机。

% 下载 MatConvNet:http://www.vlfeat.org/matconvnet/download/matconvnet-1.0-beta25.tar.gz % 在您的 MATLAB 安装目录下创建一个名为 "matconvnet" 的文件夹。 % 我的 MATLAB 安装目录为:'D:\Program files\MATLAB\R2016b",您的路径可能不同,请根据实际情况修改。 % 将 MatConvNet 压缩包解压,并将文件复制到 'D:\Program files\MATLAB\R2016b\matconvnet\matconvnet-1.0-beta25' 目录下。

% 打开 MATLAB,在命令窗口中输入以下代码: % 请注意,您的路径可能会有所不同!!!选择 Visual Studio 2015 的 C 和 C++ 编译器路径。

mex -setup
mex -setup:'D:\Program files\MATLAB\R2016b\bin\win64\mexopts\msvc2015.xml' C

mex -setup C++
mex -setup:'D:\Program files\MATLAB\R2016b\bin\win64\mexopts\msvcpp2015.xml' C++

cd 'D:\Program files\MATLAB\R2016b\matconvnet\matconvnet-1.0-beta25'
addpath matlab

% 运行以下命令
vl_compilenn('enableGpu', true, 'cudaMethod', 'nvcc', ...
               'cudaRoot', 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0', ...
               'enableCudnn', true, 'cudnnRoot', 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0') ;

% 您会看到许多类似的消息,也可能出现一些警告。

% 使用 'Microsoft Visual C++ 2015 Professional' 进行编译。 % MEX 编译成功。 % 使用 'Microsoft Visual C++ 2015 Professional (C)' 进行编译。 % MEX 编译成功。

% 输入以下命令 gpuDevice 您应该会看到类似的信息,不过设备名称可能会因您的显卡而异。

CUDADevice 属性:

                  名称: 'Tesla K20c'
                 索引: 1
     计算能力: '3.0'
        支持双精度: 1
         驱动版本: 6
        工具包版本: 5.5000
    每个线程块最大线程数: 1024
      每个线程块最大共享内存: 49152
    最大线程块尺寸: [1024 1024 64]
           最大网格尺寸: [2.1475e+09 65535 65535]
             SIMD 宽度: 32
           总内存: 5.0330e+09
       可用内存: 4.9185e+09
   多处理器数量: 13
          时钟频率: 705500
           计算模式: '默认'
  GPU 数据传输与计算重叠: 1
内核执行超时: 0
      是否可映射主机内存: 1
       设备支持: 1
        设备已选中: 1

% 让我们测试一下系统。 vl_testnn

% 您会看到类似以下的消息,此测试可能需要 10 到 20 分钟。

完成 nnbilinearsampler[数据类型=single,设备=cpu]/反向传播数据一致性(ih=value2,iw=value1,oh=value1,ow=value2,multiple_grids=value1) 用时 0.00029763 秒 正在运行 nnbilinearsampler[数据类型=single,设备=cpu]/反向传播数据一致性(ih=value2,iw=value1,oh=value1,ow=value2,multiple_grids=value2) 完成 nnbilinearsampler[数据类型=single,设备=cpu]/反向传播数据一致性(ih=value2,iw=value1,oh=value1,ow=value2,multiple_grids=value2) 用时 0.00046763 秒 % 最后您应该会看到如下信息: % 总计: % 3586 项通过,0 项失败,0 项未完成。 % 测试耗时 1439.9093 秒。

测试 IRCNN 示例

将 IRCNN 解压到一个名为例如: D:\IRCNN 的文件夹中。

最后一步,在 MATLAB 命令窗口中输入以下内容:

cd 'D:\IRCNN'
Demo_demosaiking.m

引用

 @inproceedings{zhang2017learning,
   title={学习深度 CNN 去噪先验用于图像恢复},
   author={Zhang, Kai and Zuo, Wangmeng and Gu, Shuhang and Zhang, Lei},
   booktitle={IEEE 计算机视觉与模式识别会议},
   pages={3929--3938},
   year={2017},
 }

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架

PaddleOCR

PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。

74.9k|★★★☆☆|今天
语言模型图像开发框架

tesseract

Tesseract 是一款历史悠久且备受推崇的开源光学字符识别(OCR)引擎,最初由惠普实验室开发,后由 Google 维护,目前由全球社区共同贡献。它的核心功能是将图片中的文字转化为可编辑、可搜索的文本数据,有效解决了从扫描件、照片或 PDF 文档中提取文字信息的难题,是数字化归档和信息自动化的重要基础工具。 在技术层面,Tesseract 展现了强大的适应能力。从版本 4 开始,它引入了基于长短期记忆网络(LSTM)的神经网络 OCR 引擎,显著提升了行识别的准确率;同时,为了兼顾旧有需求,它依然支持传统的字符模式识别引擎。Tesseract 原生支持 UTF-8 编码,开箱即用即可识别超过 100 种语言,并兼容 PNG、JPEG、TIFF 等多种常见图像格式。输出方面,它灵活支持纯文本、hOCR、PDF、TSV 等多种格式,方便后续数据处理。 Tesseract 主要面向开发者、研究人员以及需要构建文档处理流程的企业用户。由于它本身是一个命令行工具和库(libtesseract),不包含图形用户界面(GUI),因此最适合具备一定编程能力的技术人员集成到自动化脚本或应用程序中

73.3k|★★☆☆☆|3天前
开发框架图像