在 512x512 图像上训练 128x128 自编码器,重新组合后会产生奇怪的网格线

数据挖掘 神经网络 自动编码器
2022-03-05 02:37:43

所以我正在训练一个可以重新创建 128x128 图像的自动编码器,因此它可以通过首先将它们分成 128x128 块来重新创建任何图像,通过自动编码器运行它,然后将它们相互组合以形成原始图像。

我也应该使用其他尺寸,但现在我正在使用 512x512 图像进行测试。所以 :

   x = next_train_batch(25) 


    for xx in range(0,4):
        x_index = xx*128
        for y in range(0,4):
            y_index = y*128

            this_image = x[:, x_index:x_index+128, y_index:y_index+128, :]
            sess.run(training, feed_dict={x_in: this_image, step_iter_global:step_iter})

这就是我现在的做法。但这一直在发生: 在此处输入图像描述在此处输入图像描述

没错,这只是训练过程的开始。但我想我想知道为什么自动编码器很难学习补丁的边缘。这些网格线实际上仍然存在于自动编码器中某些层的可视化中(我这样做的原因是因为我正在尝试可能改进自动编码器的新层),即使输出图像没有它。

1个回答

问题是模型不知道图像在你提供给它的 128x128 裁剪之外应该是什么样子,因此它无法正确推断。一个简单的解决方法是在更大(并且重叠!)的裁剪上训练模型,例如 144x144,然后从每侧裁剪出 8 个像素。

然而,即使这种方法也不能保证没有任何可见的边缘,因为模型很难在不直接访问前一个补丁的输出的情况下强制执行这种“边界一致性”。这可以通过更强大的解码器来解决,比如PixelRNN / PixelCNN