图像修复1: Image Inpainting for Irregular Holes Using Partial Convolutions

图像修复一直是CV领域的重点与难点, 基于深度学习的图像修复因为其可以学习到丰富的语义信息和潜在丰富的表达能力, 受到研究者们的热捧. 这篇文章主要review了NVIDIA提出的部分卷积用以图像修复.

贡献

  • 提出部分卷积与自动蒙版更新步骤配合使用, 达到sota

Partial Convolutional Layer

部分卷积公式如上, $W$ 为卷积核的权重, $b$ 为偏置, $X、M$ 分别是当前卷积窗(滑动窗口)对应的特征图以及二值掩码, ⊙ 为元素点乘, $1$ 与 $M$ 具有相同的shape, 但全为1. 比例因子$sum(1)/ sum(M)$应用适当的比例来调整有效(未屏蔽)输入量的变化. 上式表示对于任意一个以$(x,y)$ 为中心的滑动卷积窗口, 只要其对应的mask中不存在有效像素, 该位置的特征值就为0. 在每一次的部分卷积之后, 会对 mask 进行更新:

即只要该位置的卷积滑动窗口中存在一个有效像素, 就将该位置mask 设置为有效.

说明如下:

红色方框为卷积核, 蓝色为当前的输入特征, 白色为当前的无效 mask 区域, 假设卷积窗口滑动到了当前 $(x,y)$ 坐标处进行卷积, 此时 $(x,y)$ 落在无效mask内, 但是卷积核所对应的 mask 还包含了上方有效的像素, 因此会在此坐标处计算特征, 并将该坐标处的 mask 标记为有效, 这样就完成了mask 的更新. 如 b 图中黄色区域所示, 当此卷积核完成对整个输入的卷积操作后, 该卷积核所对应的 mask 中的有效区域增加–黄色部分. 随着网络的层数不断加深, 整个mask 逐渐被全部标记为有效. 网络的学习修复过程由边缘逐渐靠向中心.

网络结构

使用U-net结构, 用部分卷积替换所有卷积层, 当然了最近邻上采样、跳接也是不可少的

loss

不得不说, NVIDIA 充分考虑了各种损失, 以下分开来讲:

  1. 像素重构损失: Iout 为网络输出图像, Igt 为gt图像, $N _{I_gt} 为gt 图像(c*h*w)中的元素个数.$

2.感知损失

$I _{comp}$ 是原始的网络输出, 但是将非空洞元素直接设置为gt, Ψp 是使用VGG提取的特征图

3.样式损失: 在每个特征上执行自相关, gram 矩阵

4.total variation 损失: $R$ 为空洞区域的1像素扩展. 主要是计算两个相邻点的smooth loss.

result

就展示结果而言, 修复能力还是很强悍的.

ref

paper