【超分辨率】deconvolution存在的弊端及引起的棋盘效应

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shwan_ma/article/details/80874366

本篇博文主要根据《Deconvolution and Checkerboard Artifacts》这篇文章作为基础,并结合了自己的理解。如果有理解错误,欢迎指出。

提要

深度学习生成的图片中,我们往往可以看到一些伪影和棋盘效应。在一些颜色变化明显的图片中,这种情况出现的更加频繁。本文将着重分析这种情况的出现原因以及提出对应的解决办法。
这里写图片描述

Deconvolution & Overlap

当我们要用到深度学习来生成图像的时候,是往往是基于一个低分辨率且具有高层语义的图像。这会使得深度学习来对这种低分辨率图像进行填充细节。一般来说,为了执行从低分辨率图像到高分辨率图像之间的转换,我们往往要进行deconvolution。简单来说,deconvolution layer可以允许模型通过每一个点进行绘制高分辨率图像上的一个方块。
然而,在使用deconvlution的时候,如果出现kernel size与stride无法整数的时候,这时候便会发生uneven overlap。
如下图中,便会出现图像中的某个部位的颜色比其他部位更深的情况。
这里写图片描述

出现这种情况的时候,理论上是可以通过小心的学习kernel的权重来减轻这种overlap不均匀的情况,但是这也会限制模型的容量,使得network会变得更large。
在二维情况中,这种重叠的现象将更明显(出现在横纵的重叠中)
这里写图片描述

现在,生成图像时,神经网络通常使用多层反卷积,从一系列较低分辨率的描述中迭代建立更大的图像。虽然这些堆栈的反卷积可以消除棋盘效应,但它们经常混合,在更多尺度上产生棋盘效应。
这里写图片描述

在一些成功的模型中,在堆deconvolution的时候,往往会在最后一层加入stride为1的deconvolution来消除伪影。它们可以消除频率整除其大小的棋盘效应,也可以减少其他频率小于其大小的棋盘效应,然而棋盘效应还是会出现在模型中。

stride为1的情况
这里写图片描述

可以看到output的输出的颜色基本一致表示为同一种颜色(两边的可以通过padding来解决颜色不统一的问题,通常不考虑边界)

但是当进行堆deconvolution的时候,即使最后一层采用了stride=1的情况,可以发现棋盘效应还是会产生。
这里写图片描述
可以看到棋盘效应是有减轻,但无法避免。

Overlap and Learning

通过上述分析,我们将不由的想到,棋盘效应在深度学习上难道是无法避免的嘛?其实不然,深度学习有很强的拟合能力,他会去小心翼翼的去学习卷积核上的权重去避免棋盘效应。我们可以认为在本文章的例子中,由于出现overlap而导致颜色不统一。但是我们去调整权重,可以使得不均匀的overlap上的颜色也可以保持一致。

还是stride=2,kernel size=3的例子,我们去偏向学习到中间的权重大一些。
这里写图片描述
我们可以看到学习后的output基本保持一样的颜色输出,因此也不会存在棋盘效应。
这种情况可以通过去调整学习kernel去处理,但是避免棋盘效应往往会降低模型容量,会使得模型变得更大从而使得难以训练。原文的话是指: Avoiding artifacts significantly restricts the possible filters, sacrificing model capacity.

扫描二维码关注公众号,回复: 3179301 查看本文章

回过头来,我们上面是说由于是kernel size不能整除stride才会导致不均匀的overlap,从而使得出现棋盘效应。那么我们去设置kernel size和stride的关系,使得两者可以整除的话,不就能解决这个问题了么? 但是答案是否定的。
如果我们学习的kernel的权重一旦有所偏移,这种均匀的overlap也会出现棋盘效应
此时stride=2,kernel size=4
这里写图片描述

better upsampling

那么我们不禁要问,有没有更好的可以替换deconv的上采样方式存在呢?答案是肯定的。

第一种:去仔细调节kernel size和stride的大小关系以确保他们尽量能整除。在Twitter的超分辨率文章中的《Real-time single image and video super-resolution using an efficient sub-pixel convolutional neural network 》中,作者提出了一种亚像素卷积的上采样方式。这个方法及其类似于kernel size和stride之间可以整除的情况。但同上一小节分析的一样,我们可以看到这个方法仍然会出现一定程度的伪影和棋盘效应。

第二种 可以直接进行插值resize操作,然后再进行卷积操作。这种操作在超分辨率文献中很常见。举个例子,我们可以采取近邻插值或者样条插值来进行上采样。(nearest-neighbor interpolation or bilinear interpolation)

这里写图片描述

Image Generation Results

We’ve had our best results with nearest-neighbor interpolation, and had difficulty making bilinear resize work. This may simply mean that, for our models, the nearest-neighbor happened to work well with hyper-parameters optimized for deconvolution. It might also point at trickier issues with naively using bilinear interpolation, where it resists high-frequency image features too strongly. We don’t necessarily think that either approach is the final solution to upsampling, but they do fix the checkerboard artifacts.

作者在实验中采用了近邻插值所做的实验。
这里写图片描述
这里写图片描述
这里写图片描述

本文参考自:https://distill.pub/2016/deconv-checkerboard/

猜你喜欢

转载自blog.csdn.net/shwan_ma/article/details/80874366