问题描述
最近在训练卷积神经网络(CNN)时,只要使用逆卷积层(PyTorch中为ConvTranspose2d)进行上采样,输出图像中总会出现如下图所示的马赛克纹理,而且异常明显:
分析
虽然Deconvolution and Checkerboard Artifacts这篇文章中提到了这种马赛克纹理(文中称之为checkerboard artifact)是逆卷积层的固有问题,但是上图中的马赛克比文中给出的示例图像明显太多,使用逆卷积层是CNN中上采样的经典手段,不太可能出现如此巨大的artifact。经过反复检查代码,发现网络的实现并没有问题,马赛克确实是由逆卷积层引起的,即如果将ConvTranspose2d替换成线性插值上采样,马赛克就会消失:
反复调试无果后请教了有经验的高手,给出的结论是网络没训好……
把学习率调高10倍,再多训几十个epoch,就得到了如下结果: