目录
- 举例1
- 举例2
- 解决方法
举例1
- 当我们仔细观察由神经网络生成的图像时,我们经常会看到一种奇怪的棋盘图案。在某些情况下,它比其他情况更明显,但最近的大部分模型都表现出这种行为。如下图:
- 造成棋盘效应的原因是转置卷积的「不均匀重叠」(uneven overlap)。这种重叠会造成图像中某个部位的颜色比其他部位更深。
在下图中,顶部这层是输入层,底部这层则是操作转置卷积后的输出层。在转置卷积过程中,小的这层映射到大的那层。
在案例(a)中,其卷积步长为 1,过滤器大小为 2。正红线所标出的,输入图像上的第一个像素映射为输出图像上的第一个和第二个像素。绿线标出的则是输入图像上的第二个像素映射为输出图像上的第二个和第三个像素。这样的话,输出图像上的第二个像素就收到了输入图像上的第一个和第二个像素的双重信息,而整个卷积过程中,输出图像中间部分的像素都从输入图像中接收到了同样多的信息,这样就导致了卷积核重叠的区域。而在案例(b)中,当过滤器的大小增加到 3 时,这个接收到最多信息的中间部分缩小了。但是这样的话问题不大,因为重叠部分依旧是均匀的。在输出图像中间部分的像素从输入图像中接收到同样多的信息。 - 现在针对下面的案例,我们将卷积步长改为 2。在案例(a)中,过滤器的大小为 2,输出图像上的所有像素从输入图像中接收到同样多的信息,它们都从输入图像中接收到一个像素的信息,这里就不存在转置卷带来的重叠区域。
而在案例(b)中,当我们将过滤器大小增至 4 时,均匀的重叠区域缩小了,但是研究者依旧可以将输出图像的中间部分用作有效的输出,其中每个像素从输入图像中接收到的信息是同样多的。
然而,在案例(c)和(d)中,当过滤器大小变成 3 或 5 时,情况就变得非常有趣了。在这两个案例中,输出图像上的每个像素与其毗邻的像素所接收到的信息量都不相同。研究者在输出图像上无法找到一个连续并均匀的重叠区域。
当过滤器大小无法被卷积步长整除时,转置卷积就会出现「不均匀重叠」。这种「不均匀重叠」会造成图像中某个部位的颜色比其他部位更深,因而会带来「棋盘效应」。实际上,不均匀重叠区域会在二维上更加极端。因为二维上的两个模式会相乘,因而最终的不均匀性是原来的平方。
举例2
- (1)卷积过程中只能用到一个像素(只有一个像素值不为0)
(2)卷积过程中能用到两个像素(只有两个像素值不为0)
(3)卷积过程中能用到四个像素(有四个像素值不为0)
因为插入的值为0,使得卷积的input feature map本身就是棋盘状,所以得到的大分辨率feature map也会产生棋盘格 - 反卷积产生的棋盘格,在stride和卷积核size是整数倍的时候能够有所缓解,但是依然不能完全消除
- 为什么会有所缓解呢?
因为二者整除关系使得卷积核每次滑动能用到的非零像素的个数是一样的(或者中间区域向两边逐渐减少(而不是随着滑动反复变化产生棋盘格形状))
如:stride = 2, kernel size = 2
解决方法
- 从上述两个例子中我们应该可以理解棋盘效应,但是单纯用整除的方法其实不能解决棋盘问题,只能使得颜色轻重不同的元素聚在一起,不会穿插出现,却不能使得颜色都一致。
- 现在普遍使用双线性插值填充元素,而不是用0元素,然后再进行卷积。