Image Inpainting for Irregular Holes Using Partial Convolutions
论文地址
Image Inpainting for Irregular Holes Using Partial Convolutions
Author: Guilin Liu Fitsum A. Reda Kevin J. Shih Ting-Chun Wang Andrew Tao Bryan Catanzaro
NVIDIA Corporation
摘要
目前现有的基于的卷积网络的图像补全方法存在一些缺陷,如颜色不匹配和模糊等,所以会使用后处理来消除这些缺陷,但是通常失败。本文使用部分卷积来进行图像补全。部分卷积指的是卷积只在图片的有效区域进行(mask部分为0),并且图片的mask会随着网络的层数加深不断迭代和收缩,也就是说带有mask的图片和mask均参与训练,取得了很好的效果
1. 介绍
传统方法:
PatchMatch:基于图片统计信息,迭代搜索最适合补全的patch,补全的结果也比较平滑。但是单张图片的统计信息往往比较受限制,并且这个算法不包括视觉语义。
基于深度网络的方法,目前由于图片中孔的大小不同会带来不同的补全伪影,所以现在的方法都会在网络预测之后再加上后处理过程:
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的操作。
2. 相关工作
传统方法,基于邻近像素,只能解决小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)。
3. 方法
3.1 部分卷积层(PConv Layer)
W为卷积核,b是偏差,X是当前图片,M是mask。PConv可以表示为:
x
′
=
{
W
T
(
X
⊙
M
)
1
s
u
m
(
M
)
+
b
,
i
f
s
u
m
(
M
)
>
0
0
,
o
t
h
e
r
w
i
s
e
x' =\begin{cases} W^T(X \odot M) \frac{1}{sum( \bm{M})} + b, & if \ sum(\bm{M}) > 0\\ 0, & otherwise \end{cases}
x′={WT(X⊙M)sum(M)1+b,0,if sum(M)>0otherwise
此处的
1
s
u
m
(
M
)
\frac{1}{sum( \bm{M})}
sum(M)1为放缩因子,在代码实现中被替换为
1
m
e
a
n
(
M
)
\frac{1}{mean( \bm{M})}
mean(M)1。
mask更新原则:
m
′
=
{
1
,
i
f
s
u
m
(
M
)
>
0
0
,
o
t
h
e
r
w
i
s
e
m' =\begin{cases} 1, & if \ sum(\bm{M}) > 0\\ 0, & otherwise \end{cases}
m′={1,0,if sum(M)>0otherwise
其实在代码中原图和mask都参与卷积,mask区域卷积的卷积核均为一,在得到卷积之后的mask之后,比0大的置为1,否则为0,这边的卷积相当于对于图片的卷积进行标记。
3.2 网络结构
网络结构类似于U-net,encoder阶段使用ReLU,decoder阶段用LeakyReLU, a l p h a = 0.2 alpha=0.2 alpha=0.2。BN用在除了第一层encoder和最后一层decoder之外的所有层。
3.3 Loss
I
i
n
\bm{I}_{in}
Iin:带有mask的图片(需要补全的图片)
I
o
u
t
\bm{I}_{out}
Iout:网络预测输出的图片
M
\bm{M}
M:二值mask(有洞区域是0)
I
g
t
\bm{I}_{gt}
Igt:Ground Truth
I
c
o
m
p
\bm{I}_{comp}
Icomp:将预测图片没有洞区域的像素替换为GT之后的图片
Ψ
n
\bm{\Psi}_{n}
Ψn:预训练模型(VGG16)第n层激活后的特征图,文章选的是三个pooling层
K
n
\bm{K}_{n}
Kn:系数,等于
1
/
(
C
n
∗
H
n
∗
W
n
)
1/(C_n*H_n*W_n)
1/(Cn∗Hn∗Wn)
Pixel Loss:
L
h
o
l
e
=
∥
(
1
−
M
)
⊙
(
I
o
u
t
−
I
g
t
)
∥
1
L
v
a
l
i
d
=
∥
M
⊙
(
I
o
u
t
−
I
g
t
)
∥
1
\begin{aligned} {L_{hole}} & = {\left\| {\left( {1 - M} \right) \odot \left( {{I_{out}} - {I_{gt}}} \right)} \right\|_1} \\ {L_{valid}} & = {\left\| {M \odot \left( {{I_{out}} - {I_{gt}}} \right)} \right\|_1} \end{aligned}
LholeLvalid=∥(1−M)⊙(Iout−Igt)∥1=∥M⊙(Iout−Igt)∥1
Perceptual Loss:
L
p
e
r
c
e
p
t
u
a
l
=
∑
n
=
0
N
−
1
∥
Ψ
n
(
I
o
u
t
)
−
Ψ
n
(
I
g
t
)
∥
1
+
∑
n
=
0
N
−
1
∥
Ψ
n
(
I
c
o
m
p
)
−
Ψ
n
(
I
g
t
)
∥
1
{L_{perceptual}} = \sum\limits_{n = 0}^{N - 1} {{{\left\| {{\Psi _n}\left( {{I_{out}}} \right) - {\Psi _n}\left( {{I_{gt}}} \right)} \right\|}_1}} + \sum\limits_{n = 0}^{N - 1} {{{\left\| {{\Psi _n}\left( {{I_{comp}}} \right) - {\Psi _n}\left( {{I_{gt}}} \right)} \right\|}_1}}
Lperceptual=n=0∑N−1∥Ψn(Iout)−Ψn(Igt)∥1+n=0∑N−1∥Ψn(Icomp)−Ψn(Igt)∥1
Style Loss:
L
s
t
y
l
e
o
u
t
=
∑
n
=
0
N
−
1
∥
K
n
(
(
Ψ
n
(
I
o
u
t
)
)
T
(
Ψ
n
(
I
o
u
t
)
)
−
(
Ψ
n
(
I
g
t
)
)
T
(
Ψ
n
(
I
g
t
)
)
)
∥
1
L
s
t
y
l
e
c
o
m
p
=
∑
n
=
0
N
−
1
∥
K
n
(
(
Ψ
n
(
I
c
o
m
p
)
)
T
(
Ψ
n
(
I
c
o
m
p
)
)
−
(
Ψ
n
(
I
g
t
)
)
T
(
Ψ
n
(
I
g
t
)
)
)
∥
1
\begin{aligned} {L_{styl{e_{out}}}} & = {\sum\limits_{n = 0}^{N - 1} {\left\| {{K_n}\left( {{{\left( {{\Psi _n}\left( {{I_{out}}} \right)} \right)}^T}\left( {{\Psi _n}\left( {{I_{out}}} \right)} \right) - {{\left( {{\Psi _n}\left( {{I_{gt}}} \right)} \right)}^T}\left( {{\Psi _n}\left( {{I_{gt}}} \right)} \right)} \right)} \right\|} _1} \\ {L_{styl{e_{comp}}}} & = {\sum\limits_{n = 0}^{N - 1} {\left\| {{K_n}\left( {{{\left( {{\Psi _n}\left( {{I_{comp}}} \right)} \right)}^T}\left( {{\Psi _n}\left( {{I_{comp}}} \right)} \right) - {{\left( {{\Psi _n}\left( {{I_{gt}}} \right)} \right)}^T}\left( {{\Psi _n}\left( {{I_{gt}}} \right)} \right)} \right)} \right\|} _1} \end{aligned}
LstyleoutLstylecomp=n=0∑N−1∥∥∥Kn((Ψn(Iout))T(Ψn(Iout))−(Ψn(Igt))T(Ψn(Igt)))∥∥∥1=n=0∑N−1∥∥∥Kn((Ψn(Icomp))T(Ψn(Icomp))−(Ψn(Igt))T(Ψn(Igt)))∥∥∥1
Total Variation Loss:
L
t
v
=
∑
(
i
,
j
)
∈
P
,
(
i
,
j
+
1
)
∈
P
∥
I
c
o
m
p
i
,
j
+
1
−
I
c
o
m
p
i
,
j
∥
1
+
∑
(
i
,
j
)
∈
P
,
(
i
+
1
,
j
)
∈
P
∥
I
c
o
m
p
i
+
1
,
j
−
I
c
o
m
p
i
,
j
∥
1
\begin{aligned} {L_{tv}} & = \sum\limits_{(i,j) \in P,(i,j + 1) \in P} {{{\left\| {I_{comp}^{i,j + 1} - I_{comp}^{i,j}} \right\|}_1}} + \sum\limits_{(i,j) \in P,(i + 1,j) \in P} {{{\left\| {I_{comp}^{i + 1,j} - I_{comp}^{i,j}} \right\|}_1}} \end{aligned}
Ltv=(i,j)∈P,(i,j+1)∈P∑∥∥Icompi,j+1−Icompi,j∥∥1+(i,j)∈P,(i+1,j)∈P∑∥∥Icompi+1,j−Icompi,j∥∥1
这里P是有洞区域。
L
t
o
t
a
l
=
L
v
a
l
i
d
+
6
L
h
o
l
e
+
0.05
L
p
e
r
c
e
p
t
u
a
l
+
120
(
L
s
t
y
l
e
o
u
t
+
L
s
t
y
l
e
c
o
m
p
)
+
0.1
L
t
v
{L_{total}} = {L_{valid}} + 6{L_{hole}} + 0.05{L_{perceptual}} + 120\left( {{L_{styl{e_{out}}}} + {L_{styl{e_{comp}}}}} \right) + 0.1{L_{tv}}
Ltotal=Lvalid+6Lhole+0.05Lperceptual+120(Lstyleout+Lstylecomp)+0.1Ltv
Style Loss很重要,有助于解决鱼鳞纹和棋盘格噪声,权重不能太小,但是权重太大的话会损失高频信息。
4. 训练方法
1.学习率0.0002,Adam,启用BN
2.fine-tune,学习率0.00005,Adam,encoder不启用BN,decoder启用BN
5. 评价指标
Image quality assessment: from error visibility to structural similarity
1.SSIM
2.PSNR
3.MAE
4.Inception Score
看下结果: