Deep Image Prior

1. Abstract

  the structure of a generator network is sufficient to capture a great deal of low-level image statistics prior to any learning
  这是这篇的spotlight, 认为GAN的结构本身就可以获取图像的low-level statistics, 而不需要进行学习

  we show that a randomly-initialized neural network can be used as a handcrafted prior with excellent results in standard inverse problems such as denoising, superresolution,and inpainting
  这里handcrafted prior的意思就是把参数随机初始化的网络作为一个特征提取器(就好像之前我们用的如HOG等这样人为设计的特征提取方式)来完成NR, SR, Inpainting等task


  For instance, the authors of recently showed that the same image classification network that generalizes well when trained on genuine data can also overfit when presented with random labels.
https://www.cnblogs.com/shouhuxianjian/p/8006847.html
  这篇文章的核心其实是在说, 不能简单的将模型的性能归功于大量图像数据本身的信息, 网络结构本身的作用并没有得到充分的理解, 这是C.Zhang等人之前的paper, Understanding deep learning reqires rethinking generalization, 在这篇论文中, 用在一个训练集上表现很好的网络结构去基于另一个label都是随机给的数据集上进行训练, 出现了overfit
  我其实不太理解这里的逻辑, 如果一个训练集的标注是随机的, 也就是错的, 那你怎么判定什么叫overfit, 就是什么叫判断错了??有必要看一下这篇原文

2. Main idea

  消噪, 超分辨率, 修复等task都以表示成一个能量最小化的优化问题

  E(x;x0 )是一个任务依赖的数据项, x0 是一个噪音的(低分辨率, 被遮挡)图片, R(x)是一个抓取自然图片上通用先验的正则化项, 它可以是一个图像的Total Variation(TV), 从而希望训练好的模型能够包含统一区域


  文中是把R(x)用CNN implicitly提取到的prior替代, 所以写成了

  z是网络的输入, 为random initialization, Θ为网络参数, 最优值通过训练得到。
  为什么说是把R(x)用CNN implicitly提取的prior替代了呢, 因为一旦得到了最优的参数, 把z输进去即可得到最优的x, 而x是由网络得到的, 因此implicitly获得了网络给予的先验约束, 换句话说, 如果图像可以基于一个具体的CNN结构从z中推测得出的话, R(x)=0, 如果不是得话, R(x)=+∞
  问题就从在图像空间中寻找答案(argminx)换成了在参数空间中寻找答案(argminθ)


  网络结构影响的是搜索解空间的方式, 比如对梯度下降法如何下降有主要影响, 我们的网络对于noise有较高的阻抗(impedance), 这也是为什么我们可以用这个方法来还原图像, 换句话说, 就是为什么一个high-capacity的网络结构本身可以作为一个先验

image prior

  这个图说明, 我们的结构对自然图像fit的最快, 噪声也能fit, 但是就比较reluctant, 或者说网络参数对自然图像有low impedence, 而对噪声有high impedance, 所以可以用来去噪。就是说, 一幅图像, 给足够的iteration step, 总是可以学的很像的, 但是先学的是主要pattern, 然后才会去学detail, 那我们就是控制什么时候学好了主要的pattern停止iter, 这样作为detail的noise就不会还原, 这样就去噪了
  在文章中是这样说的,
  we show that the network resists “bad” solutions and descends much more quickly towards naturally-looking images.
  网络结构之所以可以作为先验, 是因为网络比较抵制"坏"的解, 而对于看似自然的图片收敛的更快, 也就说它会抑制噪声的产生, 而首先去学自然的feature


下面是去噪的结果示例

denoise result

基本方法

  • random input z(在inpainting task中可能会换成meshgrid渐变pattern), 重点是z是不变的, 而且这个z的大小一定和最终输出的x是一样的

  • 将degraded图像, 如LR, noisy, JPEG-bloked作为网络要拟合的对象, 就是图中的x0。进行训练, 即最终的目标是要x和退化后的图像尽量像

  • 从上面的结果示例可以看出, 网络会优先你和natural-looking的图像, 然后再degrade, 因此, 需要在得到某个结果较好的iteration停止迭代更新, 认为找到了一个使E最小的Θ

  • 在截断处输出的图像(x)即为还原的结果, 即

  基本的结构就是下面这样, 整个网络是一个hourglass architecture, hourglass就是沙漏形状, 就是encoder-decoder结构

下面是具体的architecture

total architecture

在结构上多说两句, 作者使用了LeakyReLU来作为激活函数, 下采样是基于卷积调整stride来实现, 并没有用max_pooling, 上采样作者选bi-linear upsample和nearest upsample, 另外也试了deConv, 但效果不好, 除了feauture inversion实验外, 其他都用的是refection padding而没有用zero padding
We use reflection padding instead of zero padding in convolution layers everywhere except for the feature inversion experiment(from Supplementary Material)

3. Discussion

  这个Discussion Section并不是对文章的翻译, 而是自己的理解, 有下面几个问题

  • Super Resolution
      对于Inpainting和NR这些task来说, 退化前后resolution是一样的, 所以网络学习的最终目标都是让x尽量像x0
      但是SR task最终的目标是一个HR, 而给的Ground Truth是LR, 这个怎么办??

  也就是说d是一个down-sample过程, SR的loss function是要让down sample的结果接近LR图像

  • 优劣
      Deep Image Prior的优点很明显,
      ① 不需要大规模的Train data, 得到一张还原图需要的就是退化图和一个合适的网络
      ② 思路也很简单, 就是利用网络结构本身的先验知识(先学nature-looking, 再学noise)
      ③ 同时这个架构就像一个Swiss knife一样可以一揽子解决NR/SR/Inpainting等restration problems
      缺点也很明显
      ① 就是慢啊, 相当于在线训练, 计算量非常可观, 看那个去噪的例子, 用了2400 iters才跑出结果, 根据作者的说法, 512x512的图像, 在GPU上还要好几分钟才能出结果, 所以, 这个方案是没法用到芯片上的
      we have shown that fitting a randomly-initialized ConvNet to corrupted images works as a “Swiss knife” for restoration problems. While practically slow (taking several minutes of GPU computation per image), this approach does not require modeling of the degradation process or pre-training
      ② 我怎么知道什么时候应该停止iteration, 就是说我怎么判定的到结果是我需要的natural-looking的图像, 因为网络的最终目的是朝向退化图去的, 我能通过什么指标来知道什么时候得到最好的结果了?

  • 网络结构区分
      开始没有理解是因为和AutoEncoder搞混了, 虽然这个结构和AutoEncoder一样, 但是因为目的不同, 所以应用方式和输入输出是不同的
    https://www.cnblogs.com/yangmang/p/7428014.html
      我们之前在Change Detection上用AutoEncoder是用来提取特征, 或者说是降维用的, 那Input和Ground Truth都是原图, 因为最后encoder和decoder在推理的时候是分开用的

  还有用AutoEncoder来去噪
https://www.jianshu.com/p/f34842a3b19a
  这个问题Input是加了噪声的图像, 而Ground Truth是没加噪声的图像, 这个问题是要通过训练参数, 让经过AutoEncoder转换的图像接近没有噪声的图像, 而在Deep Image Prior中是没有数据库训练过程, 而要靠网络本身凭空生成图像(从随机初始化的图像开始), 逐步接近退化图, 在这个过程中找到natural-looking图像

你可能感兴趣的:(Deep Image Prior)