【论文笔记】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 MarchingPoisson 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(XM)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/(CnHnWn)

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=(1M)(IoutIgt)1=M(IoutIgt)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=0N1Ψn(Iout)Ψn(Igt)1+n=0N1Ψ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=0N1Kn((Ψn(Iout))T(Ψn(Iout))(Ψn(Igt))T(Ψn(Igt)))1=n=0N1Kn((Ψ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)PIcompi,j+1Icompi,j1+(i,j)P,(i+1,j)PIcompi+1,jIcompi,j1
这里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

看下结果:
结果图1
结果图2
结果图3结果图4

  • 11
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值