不仅考虑了孔的大小,还考虑了孔是否与图像边界接触的影响。
为了正确处理不规则掩码,提出使用部分卷积层,包括掩码和重新归一化卷积操作,然后是掩码更新步骤。
论文的主要贡献
提出的模型使用叠加部分卷积运算和掩码更新步骤来进行图像修复。
部分卷积层
将部分卷积运算和掩码更新函数共同称为部分卷积层。
部分卷积表示为:
其中,W为卷积滤波器的权重,b为相应的偏差。X是当前卷积(滑动)窗口的特征值(像素值),M是对应的二进制掩码,⊙ 表示逐元素乘法。
1具有与M具有相同的形状,但所有元素均为1。sum(1)/sum(M)
是一个缩放因子,用来适当的缩放来调整有效(未屏蔽)输入的变化量。可以看出,输出值仅取决于未屏蔽的输入。
在每次部分卷积操作之后,将进行更新掩码:如果卷积能够根据至少一个有效的输入值调节其输出,则将该位置标记为有效。这表示为:
在充分连续应用部分卷积层的情况下,如果输入包含任何效像素,掩码最终都将是1。
网路结构
设计了一种类似于类似于UNet的架构,将所有卷积层替换为部分卷积层,并在解码阶段使用最近邻上采样。跳过链接(skip links)将分别连接两个特征图和两个掩码,作为下一部分卷积层的特征和掩码输入。最后一个部分卷积层的输入将包含带孔的原始输入图像和原始掩模的拼接,使得模型可以复制非孔像素。
在图像边界处使用具有适当掩蔽的部分卷积来代替典型的填充,这确保图像边界处的修复内容不会受到图像外部无效值的影响。
损失函数
L1损耗分别用于空穴像素和非空穴像素的网络输出:
L h o l e = ∣ ∣ ( 1 − M ) ⊙ ( I o u t − I g t ) ∣ ∣ 1 L_{hole} = ||(1 − M) ⊙ (Iout − Igt)||_1 Lhole=∣∣(1−M)⊙(Iout−Igt)∣∣1
L v a l i d = ‖ M ⊙ ( I o u t − I g t ) ‖ 1 L_{valid} = ‖M ⊙ (Iout − Igt)‖1 Lvalid=‖M⊙(Iout−Igt)‖1
感知损失:
style损失
总变化(TV)损失
总损失Ltotal
训练过程
在单个NVIDIA V100 GPU(16GB)上进行训练,批量大小为6。 ImageNet和Places2模型训练了10天,而CelebA HQ训练3天。所有微调均在一天内完成。
局限性:无法处理一些稀疏结构的图像