当我们仔细观察神经网络生成的图像时,会经常看到棋盘样式的瑕疵。在一些特殊场景下这种现象更明显,尤其最近的模型。
更重要的是,这种棋盘伪影在颜色越鲜艳的区域越明显,这是为什么呢?难道神经网络不喜欢明亮的颜色吗?其实,造成这些伪影的原因很简单,不过想解决也很简单。
反卷积与重叠
当我们用神经网络生成图像时,通常会从低分辨率、高水平的描述中对其进行创造。网络可以表现粗略的图像并填充其中的细节。
为了做到这一点,我们需要将低分辨率的图像转换成高分辨率图像,这一过程通过反卷积操作进行。简单地说,反卷积图层可以让模型使用小图中的每个点来“绘制”一个更大的正方形。
但是,反卷积会很容易生成“不均匀的重叠”,使得某些区域比其他地方有更多抽象的结果。尤其是当核的尺寸(输出窗口的大小)不能被步长(顶部各点之间的距离)整除时,反卷积就会有不均匀的重叠。虽然理论上,网络可以通过权重避免这一现象,但实际上,神经网络想要完全消除这种现象是非常困难的。
重叠图案同样是二维的。两个轴上不均匀的重叠相乘,就能创造出不同程度的棋盘状伪影。
事实上,这种不均匀的重叠在两个维度上更明显,因为两个图案相乘,不均匀性是原来的平方。例如,在一维中,一个步长为2,尺寸为3的反卷积的输出是输入的两倍,但是在二维中就变成了四倍。
现在,神经网络在创造图像时通常使用多层的反卷积,经过迭代从低分辨率中创建更大尺寸的图像。虽然这些堆栈的反卷积可以消除伪影,但它们通常是混合的,会在多个尺度上产生棋盘伪影。
这些伪影在输出特殊颜色时会更加显眼,由于神经网络图层通常存在偏差(一种添加到输出中经过学习的值),很容易就输出平均色。如果一种颜色越偏离平均色,反卷积的作用就越大。
重叠和学习
理论上来说,我们的模型可以学习仔细写入不均匀重叠位置,从而让输出达到平衡。
但是要达到平衡有些难度,尤其是有多个通道的时候。想要避免伪影,就要严格限制可能用到的过滤器,牺牲模型部分性能。在实际中,神经网络要经过很长的学习才能完全避免这些伪影。
事实上,不仅仅是有着不均匀重叠的模型不会学习避免这种情况,那些有着均匀重叠的模型会经常学习核,也会造成相似的伪影。虽然对于不平均重叠来说这不是默认的情况,但对平均重叠卷积来说是很容易造成伪影的。
对过滤器来说,完全避免伪影仍然是非常重要的限制,实际上,伪影仍然会出现在这些模型中,虽然并不明显。
造成这一情况的可能有多种因素。例如,在生成对抗网络的情况下,一个关键要素可能是判别器和他的梯度,但是问题的主要还是反卷积。在最好的情况下,反卷积非常脆弱,因为它们很容易就表现出人工伪影,即使尺寸很小。最坏情况下,伪影的生成是反卷积的默认行为。
所以,还有其他上采样方法能避免伪影的出现吗?
更好的采样方法
为了避免这些瑕疵,我们想用另一种方法对反卷积进行规范。和反卷积不同,这种上采样方法不会将伪影的生成变为默认行为,理想情况下,它会进一步对抗这些伪影。
有一种方法可以确保你使用的核尺寸可以被步长整除,避免重叠。和“次像素卷积”相同,这种技术是最近提出的,在超分辨率图像上产生了巨大成功。但是,虽然这一方法有用,反卷积仍然会很容易地生成伪影。
另一种方法是将上采样分离后在更高分辨率的卷积上计算特征。例如,你可能会对图像尺寸进行改变,然后建立一个卷积层。这似乎是自然的做法,类似的方法在超分辨率图像上效果也很好。
反卷积和各种对卷积调整尺寸的方法都是线性操作,可以用矩阵解释,这也有助于我们了解它们之间的不同。
调整卷积层的尺寸可以用TensorFlow上的tf.image,resize_images( )实现,想得到最佳结果,在用tf.nn.conv2d( )进行卷积之前先使用tf.pad( )来避免边界上出现伪影。
图像生成结果
经过研究我们发现,用最近邻尺寸调整和一个卷积能在大部分语境下得出较好的结果。其中表现较好的是GAN,简单的对反卷积层进行调整,就能生成不同程度的伪影:
实际上,伪影的不同可以在训练之前就看到。如果我们看一张生成器输出的图像,初始权重是随机的,就能看到伪影。这说明伪影与生成图片的方法有关,与对抗训练无关。
另一种能够解释伪影并不是GAN独有的现象的原因是,我们将其放在另一种模型中时,调整卷积尺寸的上采样,仍然能发现这一现象。
结语
虽然用反卷积可以生成图像,但它也会导致伪影的出现。使用其他自然的替代方法可以消除这些棋盘伪影。同时,我们还提出了可以提高图像生成质量的神经网络方法,我们希望能帮助到多领域的研究者们。
-
神经网络
+关注
关注
42文章
4762浏览量
100534 -
图像
+关注
关注
2文章
1083浏览量
40413
原文标题:用缩放CNN消除反卷积带来的棋盘伪影
文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论