去噪、去水印、超分辨率,这款不用学习的神经网络无所不能

不同的神经网络可以实现给图像去噪、去水印、消除马赛克等等功能,但我们能否让一个模型完成上述所有事?事实证明 AI 确实有这样的能力。来自 Skoltech、Yandex 和牛津大学的学者们提出了一种可以满足所有大胆想法的神经网络

事情是这样的:研究人员们让一个深度卷积网络去学习复制被破坏的图像(例如加入噪点的图像),随后竟发现这个网络可以自行先学会如何重建图像。该研究的论文《Deep Image Prior》已被收录在 CVPR 2018 大会,而 GitHub 则已有 3800 个 star。

Deep Image Prior 的重要特点是,网络由始至终仅使用了输入的,被破坏过的图像做为训练,没有经历过大多数神经网络所需要的学习过程即可完成任务。它没有「看过」任何其它图像,也没有看过未受破坏的正常图像,但最终恢复的效果依然很好。这说明自然图像的局部规律和自相似性确实很强。

在 GitHub 项目中,作者如下展示了 5 种常见图像重构的效果。他们表示单个卷积网络可以完成缺失图像的修复、痕迹的移除、图像去噪、超分辨率和去除水印等,可以说该模型在理解图像先验信息下显得无所不能。当然作者表示这个项目的参数和架构都是可以调整的,它们远没有达到最优,所以感兴趣的读者快试试吧。

项目地址:https://github.com/DmitryUlyanov/deep-image-prior

其实上图中的每一项任务都有很多研究,它们假设模型能从大型真实图像数据集中学习到图像的先验信息,即像素怎样才能组合成一张「正常」的图像,这样学习到通用图像信息的模型就能用来修补图像或生成高分辨率图像了。但是这种观点正确吗?该项目的研究论文表示否定,它们只在损坏的「非正常」图像上训练同样能学习到图像的「先验」,注意这种「训练」仅表示模型在单张损坏图像上反复迭代。

网友使用 AKB-48 照片进行超分辨率的尝试。

与传统观点相反,该项目的研究论文表示未经任何「学习过程」的卷积图像生成器架构可以捕捉到大量图像数据,尤其是解决不同图像修复问题的图像数据。在卷积网络对损坏图像反复迭代时,它能自动利用图像的全局统计信息重构丢失的部分。

研究者使用未经训练的卷积网络来解决几种此类问题。研究者未在大量示例图像数据上训练卷积网络,而是直接将生成器网络应用于单个退化图像,即有损坏的自然图像。在此方法中,网络权重作为修复图像的参数权重经过随机初始化和拟合,以在提供特定退化图像和任务相关模型时能够最大化似然度。

本研究展示了,这个非常简单的方法在标准图像处理问题(如去噪、图像修复和超分辨率)中极具竞争力。除了标准图像修复任务外,该技术还可用于理解深度神经网络激活函数中的信息。

论文:Deep Image Prior

论文地址:https://sites.skoltech.ru/app/data/uploads/sites/25/2018/04/deep_image_prior.pdf

摘要:深度卷积网络已经成为图像生成和修复的常用工具。通常,其优秀性能要归功于从大量示例图像中学习逼真图像先验的能力。而这篇论文反其道而行之,展示了一种生成器网络架构,它可以在学习之前先捕捉大量低级图像数据。本论文展示了随机初始化神经网络可在标准逆问题(如去噪、超分辨率和图像修复)中作为手工先验知识(handcrafted prior)使用,且性能优越。此外,同样的先验知识还可用于反转深度神经表征以作出判断,并基于 flash-no flash 输入对来修复图像。

该方法应用广泛,且强调了标准生成器网络架构捕捉的归纳偏置(inductive bias)。它还弥补了图像修复两大流行方法之间的距离:使用深度卷积网络的基于学习的方法、基于手工图像先验知识(如自相似性)的无学习方法。

项目使用

该项目为不同的任务提供了对应的实现文档,例如 inpainting.ipynb 展示了如何做图像修复与去水印、super-resolution.ipynb 展示了如何做图像超分辨率。如下展示了项目的环境配置与安装,注意其主要使用了 PyTorch 0.4,所以已经更新到 1.0 的读者可以借助 conda 或其它工具配置一个新环境。

安装

在执行代码之前,你需要安装下列库:

  • python = 3.6

  • pytorch = 0.4

  • numpy

  • scipy

  • matplotlib

  • scikit-image

  • jupyter

以上库均可通过 conda (anaconda) 安装,如:

conda install jupyter

Docker 镜像

你也可以使用具备全部依赖项的 Docker 镜像完成环境的配置,并连接到 Jupyter Notebook。你需要确保安装了 docker 和 nvidia-docker,然后运行以下命令:

nvidia-docker build -t deep-image-prior .

然后,启动容器,如下所示:

nvidia-docker run --rm -it --ipc=host -p 8888:8888 deep-image-prior

你会得到一个 URL,使用它可连接至 Jupyter notebook。

理论水印超分辨率图像去噪
72
相关数据
激活函数技术

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

重构技术

代码重构(英语:Code refactoring)指对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果。 软件重构需要借助工具完成,重构工具能够修改代码同时修改所有引用该代码的地方。在极限编程的方法学中,重构需要单元测试来支持。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

先验知识技术

先验(apriori ;也译作 先天)在拉丁文中指“来自先前的东西”,或稍稍引申指“在经验之前”。近代西方传统中,认为先验指无需经验或先于经验获得的知识。先验知识不依赖于经验,比如,数学式子2+2=4;恒真命题“所有的单身汉一定没有结婚”;以及来自纯粹理性的推断“本体论证明”

图像处理技术

图像处理是指对图像进行分析、加工和处理,使其满足视觉、心理或其他要求的技术。 图像处理是信号处理在图像领域上的一个应用。 目前大多数的图像均是以数字形式存储,因而图像处理很多情况下指数字图像处理。

深度神经网络技术

深度神经网络(DNN)是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。

Jupyter技术

Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。 Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。 用途包括:数据清理和转换,数值模拟,统计建模,机器学习等等 。

图像修复技术

推荐文章
持续学习
不错