什么是棋盘效应
假设反卷积生成的图像中,包含1只黑猫,黑猫身体部分的像素颜色应该是平滑过渡的。或者极端的说,身体部分应该全部都是黑色的。而在实际生成的图像中,该部分却是由深深浅浅的近黑方块组成的,很像棋盘的网络。这就是所谓的棋盘效应。
一个棋盘效应的例子如下所示,可以看出影响还是有的:
出现棋盘效应的原因
出现棋盘效应的一个原因是,当deconv的卷积核大小不能被stride整除时,反卷积就会出现重叠,会出现特征图当中数值大小不均的问题。一个原理示意图如下所示,可以看出重叠部分确实出现了伪影:
在一些成功的模型中,在堆deconvolution的时候,往往会在最后一层加入stride为1的deconvolution来消除伪影。它们可以消除频率整除其大小的棋盘效应,也可以减少其他频率小于其大小的棋盘效应,然而棋盘效应还是会出现在模型中。
解决棋盘效应的方法
第一种:调节kernel size和stride的大小关系以确保他们尽量能整除。但这个方法仍然会出现一定程度的伪影和棋盘效应。表现力相对比较强。
第二种:直接进行插值resize操作,然后再进行卷积操作。缺点是卷积在大图上进行,计算量比较大。表现力比较差。
第三种:使用subpixel conv,但是其实际上相当于对插值0的信号做卷积,而这个过程已经引入了高频信息,一旦训练不充分,就会变成artifact。