这种平衡行为的实现相当棘手,尤其是当模型有多个交互通道时。避免棋盘效应会显著限制可能的过滤器,牺牲模型容量。在实践中,神经网络很难学习完全避免这些模式。 事实上,不仅具有不均匀重叠的模型不会学习避免这种情况,而且均匀重叠的模型也经常学习会导致类似的棋盘效应的核!虽然对它们来说这不是默认的行为,不像不均匀重叠模型。但均匀重叠反卷积仍然非常容易产生棋盘效应。
最好的情况下,反卷积非常脆弱,因为它非常容易呈现人工创造的功能。最坏的是,产生棋盘效应是反卷积的默认行为。 那么,是否有一种不同的上采样(upsample)方法能更好地阻止棋盘效应? 更好的上采样方法 为了避免棋盘效应,我们想要一个常规反卷积的代替方法。与反卷积不同,这种上采样方法默认不应发生棋盘效应。理想情况下,它会进一步对抗这些棋盘效应。 方法之一是确保反卷积核的大小可以被步长整除,从而避免重叠问题。这等价于最近成功用于图像超分辨率解析的技术“子像素卷积”(sub-pixel convolution) (Shi, et al., 2016b)。但是,尽管这种方法有效,但反卷积仍然容易产生棋盘效应。 另一种方法是将上采样分离为较高分辨率的卷积到计算特征。例如,您可以调整图像大小(使用最近邻居插值或双线性插值),然后进行卷积层。这似乎是一个自然的方法,大致类似的方法在图像超分辨率(例如,Dong,et al。,2015)中工作良好。 另一种方法是从卷积操作中分离出对卷积后更高分辨率的特征图上采样来计算特征。例如,可以先缩放图像(最近邻插值或双线性插值),再卷积。这似乎是自然的方法。
反卷积与缩放卷积(resize-convolution)方法都是线性操作,并可用矩阵去解释。对于每个输出窗口,反卷积操作的输入唯一,缩放卷积会以阻碍高频棋盘效应的方式来隐式地集中权重(weight-tying)。 代码: 在TensorFlow实现缩放卷积可以使用以下代码:tf.image.resize_images() 为了得到最好的结果,在用 tf.nn.conv2d()做卷积前可以用 tf.pad() 避免边界效应。 图像生成结果 我们得到的结果让卷积层前的最邻近点的尺寸大小调整可以很好的工作,并且适用于多种情况。我们发现这一方法有用的一个例子是对抗生成网络。(在对抗生成网络中)只需简单地断开标准去卷积层(这些去卷积层用于最邻近点的尺寸调整,紧随其后的是卷积层),就能让不同的序列中的 Artifacts 消失。
事实上,在展开任何训练之前,Artifacts是可见的。如果我们看生成器产出的图像,也就是使用随机权重得出的最初结果,我们已经能看到 artifacts:这表明了,Artifacts 取决于生成图像的方法,而不是对抗训练。(还表明我们也许能够在不需要那些反馈周期很长的训练模型的情况下,学习到好的生成器设计。)
这些 Artifacts 并不是 GAN(对抗生成网络)的另一个原因是,在别的类型的模型中也见到过它们,并发现在转换到 尺寸调整卷积(resize-convolution)上采样时,它们也会消失。例如,在实时的艺术风格转换中,神经网络被训练后直接生成变化风格的图像。我们发现,在这种情况下,这些转换很容易产生棋盘效应(checkerboard artifacts),尤其是在没有专门准备应对方案的时候。 (责任编辑:本港台直播) |