快捷搜索: 王者荣耀 脱发

图像翻译GAN生成图像有黑块的一种可能原因

注:仅供参考,提供了一种可能思路

这段时间在做一个demo,尝试复现一个经典的任务,将人像照片转化为动漫风格。训练结束后进行测试时,发生测试结果中出现黑块: 但是检查训练时生成的图像是没有问题的: 其实到这里就已经可以发现一些猫腻了。训练时有做额外的数据增强,即:

transforms.RandomPerspective(distortion_scale=0.35)

而在测试阶段显然是不能使用数据增强的。现在逻辑就变成了这样:

由于 => 训练阶段使用RandomPerspective做随机透视,导致网络生成器输入的图像有黑边 因此 => 最终得到的网络无论输入图像有没有黑边,输出结果都存在黑边。在这里的例子中体现为输出图像出现随机黑块

简单来说就是生成器overfit了数据增强所带来的黑边…那么解决方案有这么几种。要么就放弃类似的能带来黑边的数据增强,包括但不限于RandomRotation,RandomPerspective等等…但放弃数据增强本身也可能降低网络的学习性能。

另一种思路是,在测试时运用训练阶段同样的数据增强。但这里的问题在于,像透视这种东西,变换过后想要再变回来还挺麻烦,一个个去后处理纠正不太现实。个人提供一个比较奇葩的救急手法…既然网络overfit到了黑边,那我人工给图像加容易恢复的黑边就行了,最简单的方法就是用Pad:

transforms.Pad(padding=20, fill=0, padding_mode=constant)

结果如下: 因为Pad多少像素是我们可以人工指定的并且不存在随机性,因此再把生成的图像给center crop回来就好。

经验分享 程序员 微信小程序 职场和发展