图像修复之Image Inpainting for Irregular Holes Using Partial Convolutions
1. 摘要现有的基于深度学习的图像修补方法在损坏的图像上使用标准卷积网络,使用卷积滤波器响应以有效像素以及掩蔽孔中的替代值(通常为平均值)为条件。 这通常会导致诸如颜色差异和模糊等伪影。 后处理通常用于减少这些工件,但代价很高,可能会失败。 我们提出使用部分卷积,部分卷积指的是卷积只在图片的有效区域进行(mask部分为0),并且图片的mask会随着网络的层数加深不断迭代和收缩,也就是说带有mask
1. 摘要
现有的基于深度学习的图像修补方法在损坏的图像上使用标准卷积网络,使用卷积滤波器响应以有效像素以及掩蔽孔中的替代值(通常为平均值)为条件。 这通常会导致诸如颜色差异和模糊等伪影。 后处理通常用于减少这些工件,但代价很高,可能会失败。 我们提出使用部分卷积,部分卷积指的是卷积只在图片的有效区域进行(mask部分为0),并且图片的mask会随着网络的层数加深不断迭代和收缩,也就是说带有mask的图片和mask均参与训练,取得了很好的效果。
图. 从左到右,从上到下:2(a):带孔的图像。 2(b):PatchMatch [3]的修复结果。 2(c):Iizuka等人的修改结果[1]。 2(d):余等人[2]。 2(e)和2(f)使用与3.2节相同的网络架构,但使用典型的卷积网络,2(e)使用像素值127.5初始化空洞。 2(f)使用平均ImageNet像素值。 2(g):我们基于部分卷积的结果与孔值无关。
2. 已有方法介绍
2.1 传统方法:
- PatchMatch:基于图片统计信息,迭代搜索最适合补全的patch,补全的结果也比较平滑。但是单张图片的统计信息往往比较受限制,并且这个算法不包括视觉语义。
2.2 基于深度网络的方法
目前由于图片中孔的大小不同会带来不同的补全伪影,所以现在的方法都会在网络预测之后再加上后处理过程:
- Globally and locally consistent image completion:使用encoder-decoder结构生成图片(encoder-decoder使用CNN),在训练阶段使用全局判别器(整张图片)和局部判别器(mask区域)对生成结果进行评价。后处理将补全区域的边缘与周围像素混合,采用Fast Marching和Poisson Image Editing。
- Generative image inpainting with contextual attention:基本思路和上一篇的文章相同,只是在生成图片的时候分为两个阶段,一阶段网络进行粗略预测,采用reconstruction loss;二阶段网络进行精细预测,采用reconstruction loss和GAN losses。直观地说,精细网络比缺少区域的原始图像拥有更完整的场景,所以它的编码器可以比粗网络学习更好的特征表示。此外引入attention机制,加入contextual attention layer(加在二阶段),因为卷积神经网络逐层地处理具有局部卷积核的图像特征,所以对于从远处空间位置获取特征没有效果。后处理阶段实际为二阶段网络。
- masked and re-normalization convolution的概念来自于Segmentation-aware convolutional networks using local attention masks,但是这篇文章没有执行更新mask的操作。
3. 相关工作
传统方法,基于邻近像素,只能解决小mask的问题,并且mask区域的像素需要和周围像素差不多:
- Image inpainting
- Filling-in by joint interpolation of vector fields and gray levels
- Patch based methods,在当前图像或者其他图像中搜索相似的patch来进行补全,但是计算量很大:
- Image quilting for texture synthesis and transfer
- Texture optimization for examplebased synthesis
基于深度学习的图像补全方法:
- Context encoders: Feature learning by inpainting:对于128x128的带有64x64中心mask的图片先编码到低维特征空间,再解码成64x64大小的图片。
- High-resolution image inpainting using multi-scale neural patch synthesis:将上一篇文章的结果作为输入,将纹理信息从非mask区域传播到mask区域。
- Contextual-based Image Inpainting: Infer, Match, and Translate:将mask区域作模糊填充得到的图片作为网络输入,然后迭代,用特征空间中距离最近的非mask区域的patch逐渐代替模糊填充的mask
- Semantic Image Inpainting with Deep Generative Models:在潜在空间中寻找带有mask图片的最接近的编码,以此来限制mask区域的输出。
- Deep Image Prior:仅仅依靠生成模型的结构就可以复原原始图片,但是对于不同的图片需要不同的参数。这篇文章提出的模型无法使用skip links(U-net),skip links可以用于生成很好的细节信息。
和本文相似的一些做法:
- Conditional Image Generation with PixelCNN Decoders:合成图片,通过之前合成的像素来限制下一个像素的合成。
- Normalized and Differential Convolution:主要介绍标准化卷积,Partial Convolutions可以认为是Normalized Convolution的一种特殊情况。
本文的主要贡献在于:使用PConv对于带有mask的图像进行操作,因为PConv可以对于mask的周围区域进行预测,换句话说在一层PConv中,mask的周围可以产生一些有效值。基于所产生的有效值可以对于mask进行收缩,在进入decoder阶段之前,只要网络深度足够,mask区域大小可以收缩到0。加入mask update仅仅是为了标记哪些值是有效的(因为输入的图片大小和mask大小是一样的,卷积核大小也是一样的,唯一不同是:图片的卷积核会不断更新,mask的卷积核永远为1)。
4. 本文提出的方法
我们提出的模型使用堆叠的部分卷积运算和掩膜更新步骤来执行图像修复。我们首先定义我们的卷积和掩膜更新机制,然后讨论模型架构和损失函数。
4.1 部分卷积层
为简洁起见,我们将部分卷积运算和掩膜更新函数联合称为部分卷积层。
设W是卷积滤波器的权重,b是相应的偏差。 X是当前卷积(滑动)窗口的特征值(像素值),M是相应的二进制掩膜。每个位置的部分卷积被表示为:
其中⊙表示单元乘法。 可以看出,输出值仅取决于非屏蔽输入。 比例因子1/sum(M)应用适当的缩放比例来调整有效(未屏蔽)输入的变化量。
在每次部分卷积操作之后,我们将更新我们的掩膜。 我们的屏蔽规则很简单:如果卷积能够在至少一个有效输入值上调整其输出,则我们移除该位置的掩膜。 这表示为:
并且可以在任何深度学习框架中轻松实施,作为正向传球的一部分。在部分卷积层有足够的连续应用的情况下,如果输入包含任何有效像素,则任何掩膜将最终全部为1。
4.2 网络结构
网络结构类似于U-net,encoder阶段使用ReLU,decoder阶段用LeakyReLU,alpha=0.2。BN用在除了第一层encoder和最后一层decoder之外的所有层。
部分卷积作为填充,当图像边界附近时,我们不使用任何现有的填充方案来卷积。相反,部分卷积层直接通过适当的掩膜处理。这将进一步确保图像边界上的修复内容不会受到图像外部无效值的影响,这可以解释为另一个漏洞。
4.3 损失函数
I
i
n
I_{in}
Iin: 带有mask的图片(需要补全的图片)
I
o
u
t
I_{out}
Iout:网络预测输出的图片
M:二值mask(有洞区域是0)
I
g
t
I _{gt}
Igt:Ground Truth
I
c
o
m
p
I_{comp}
Icomp:将预测图片没有洞区域的像素替换为GT之后的图片
Ψ
n
Ψ_n
Ψn:预训练模型(VGG16)第n层激活后的特征图,文章选的是三个pooling层
K
n
K_n
Kn:系数,等于1/(Cn∗Hn∗Wn)1/(C_nH_nW_n)1/(C
Pixel Loss:
Perceptual Loss:
Style Loss:
Total Variation Loss:
这里P是有洞区域。
Style Loss很重要,有助于解决鱼鳞纹和棋盘格噪声,权重不能太小,但是权重太大的话会损失高频信息。
去除棋盘伪影和鱼鳞伪影 已知感知丢失[28]会产生棋盘伪影。 Johnson等人[28]建议通过使用总变差(TV)损失来改善问题。我们发现这不是我们模型的情况。图3(b)显示了移除Style Loss而训练的模型的结果。对于我们的模型,额外的样式损失项是必要的。然而,并非所有的风格损失的权重计划都会产生合理的结果。图3(f)显示了用小的损失权重训练的模型的结果。与图3(g)中完整Loss训练模型的结果相比,它具有许多鱼鳞伪影或块状棋盘伪影。最终,风格损失的权重太大会导致高频信息的丢失。我们希望这个讨论会对那些有兴趣使用基于VGG的高层次损失的读者有所帮助。
5. 实验
5.1不规则掩膜数据集
先前的作品通过随机移除图像中的矩形区域在其数据集中生成空洞。我们认为这不足以创造我们需要的不同孔洞形状和大小。因此,我们首先收集随机条纹和任意形状的孔的蒙版。我们发现在[29]中描述的视频的两个连续帧之间的遮挡/遮挡遮罩估计方法的结果是这样的图案的良好来源。我们为训练产生了55116个掩膜,并为测试产生了24866个掩膜。在训练期间,我们通过从55116个掩膜中随机采样一个掩膜并随后进行随机扩张,旋转和裁剪来增加掩膜数据集。所有用于训练和测试的掩膜和图像尺寸为512×512。
我们从24866个掩膜开始并添加随机扩张,旋转和裁剪来创建测试集。许多先前的方法如[1]在图像边界附近的孔处的性能下降。因此,我们将测试集分为两个:带有和不带有孔的边界的边界。具有远离边界的孔的分割确保距离边界至少50个像素的距离。
我们还根据孔的大小进一步分类我们的口罩。具体而言,我们生成了6种不同孔 - 图面积比的掩膜:(0.01,0.1],(0.1,0.2],(0.2,0.3],(0.3,0.4],(0.4,0.5],(0.5 ,0.6],每个类别包含1000个带和不带边界约束的掩膜,总共创建了6 * 2 * 1000 = 12,000个掩膜,每个类别掩膜的一些例子可以在图4中找到。
5.2 训练方法
TODO
5.3 评价指标
TODO
6. 讨论和扩展
6.1 讨论
我们建议使用具有自动掩膜更新机制的部分卷积层并实现最新的图像修复结果。我们的模型可以稳健地处理任何形状,大小的位置或与图像边界的距离。此外,如图10所示,我们的性能不会随着孔的大小增加而发生灾难性的恶化。然而,我们的方法的一个局限性在于,它对于一些结构疏松的图像(例如图11中的门上的条)大多数方法,在最大的孔上挣扎。
6.2 图像超分辨率的扩展
我们还通过偏移像素和插入图像将我们的框架扩展到图像超分辨率任务。具体来说,给定具有高度H和宽度W以及放大系数K的低分辨率图像I,我们使用以下方式构造具有高度K * H和宽度K * W的输入I’:对于I中每个像素(x, y),我们把它放在I’中的(K * x +⌊K/2⌋,K * y +⌊K/2⌋),并将该位置标记为掩膜值为1.一个示例输入设置和相应的输出K = 4可以在图12中找到。我们比较图13中K = 4的两种众所周知的图像超分辨率方法SRGAN [37]和MDSR + [38]。
7. 最后
更多推荐
所有评论(0)