Image Inpainting via Conditional Texture and Structure Dual Generation 论文解读和感想

Image Inpainting via Conditional Texture and Structure Dual Generation 论文解读和感想

背景和动机

本文是一篇2021年ICCV的关于图像inpainting的文章。从题目就可以看出,本文依然是通过图像边缘信息来辅助图像inpainting。以往这类模型在纹理信息和结构信息修复和通常是割裂进行的,或者是先单独进行结构信息修复,在用其辅助整个图像的修复。然而本文却指出,由于在inpainting过程中,纹理信息和结构信息在修复时是相互影响的,二者应该是相互促进的关系,因此之前的研究中认为二者互补,将二者割裂来进行训练的方式不符合事实。

方法介绍

为了使得图像纹理信息的修复和结构信息的修复能够相互促进,本文提出了一种双流的网络结构(这里要注意,双流结构并不是两阶段网络结构):
Image Inpainting via Conditional Texture and Structure Dual Generation 论文解读和感想_第1张图片
如图所示,整个网络由三部分组成,分别是:①、纹理信息编解码器和结构信息编解码器;②、特征融合模块;③、鉴别器。
对于第①部分,是由两个相互交织在一起的U-Net网络组成,这个U-Net网络有两个输入,第一个输入是缺失图像和对应的mask,通过纹理编码器得到一连串不同尺度的特征图。第二个输入是缺失图像的edge图和对应的mask,通过结构编码器得到一连串不同尺度的特征图。之后纹理编码器的最后一层特征输出会进入到结构解码器中进行反卷积,并且在每一级反卷积时结构编码器相应分辨率的特征图都与之skip connections。对应的结构编码器的最后一级输出也输入到纹理解码器中,纹理信息编码器对应分辨率的特征图与之skip connections。这样,在纹理和结构信息恢复的过程中,就可以得到彼此的高维信息作为补充。
对于第②部分,其实是为了将第①部分得到的两种特征进行更深层次的融合。这一部分由Bi-directional Gated Feature Fusion (Bi-GFF)和Contextual Feature Aggregation (CFA)构成。
先来说Bi-GFF模块:Bi-GFF的目的是控制两种特征融合时的交互比例。
Image Inpainting via Conditional Texture and Structure Dual Generation 论文解读和感想_第2张图片对于结构特征图 F s F_s Fs,首先将其与纹理特征图 F t F_t Ft concat在一起,然后输入到一个卷积网络 g ( . ) g(.) g(.)中,我们希望得到的输出控制特征交互时 F t F_t Ft的强度,因此对于 g ( . ) g(.) g(.)的输出要经过sigmoid激活转换成概率图。我们将输出的概率图称为结构特征的控制门 G t G_t Gt门特征融合因此得名),然后 G t G_t Gt作用于 F t F_t Ft,来确定 F t F_t Ft中哪些信息应该保留的多一点,哪些应该保留的少一点。最后将保留下来的信息与 F s F_s Fs加在一起,就获得了所谓的texture-aware structure features F s ′ F'_s Fs。同样的,对于纹理特征图也获得 structure-aware texture feature F t ′ F'_t Ft。最后,将两个输出concat在一起,得到 F b = c o n c a t ( F s ′ , F t ′ ) F_b = concat(F'_s , F'_t) Fb=concat(Fs,Ft)就是Bi-GFF模块的最终输出。
再来说CFA模块:CFA的目的是强化local特征之间的相关性,这样就可以使得整个inpainting结果变得更加和谐。CFA模块可以分为两个阶段,如图所示:

Image Inpainting via Conditional Texture and Structure Dual Generation 论文解读和感想_第3张图片
第一阶段是通过attention来加强局部特征与全局之间的联系。首先CFA通过一个卷积模块将 F b F_b Fb转化为一个特征图 F F F,之后 F F F被分割为一堆 3 × 3 3 \times 3 3×3的patch。我们将这些patch做归一化内积:
在这里插入图片描述
获得第 i i i个patch和第 j j j个patch的相关性。我们通过这个方式,可以得到一个关于所有patch的相似性矩阵。由于这个相似性矩阵后面要被当做attention矩阵来用,因此我们要对其进行列sigmoid:Image Inpainting via Conditional Texture and Structure Dual Generation 论文解读和感想_第4张图片
之后,我们依照这个attention矩阵重建所有的patch:
在这里插入图片描述
这一步的意思就是每一个patch都依照attention矩阵,通过 N N N个patch(包括自身)的加权和的形式重新获得,我们将重新获得的patch再还原成特征图 F r e c F_{rec} Frec。然后是第二阶段,通过多尺度的方式对特征进行再次聚合。 F r e c F_{rec} Frec通过四种不同扩张率 1 , 2 , 4 , 8 {1,2,4,8} 1,2,4,8的扩张卷积(个人认为这个比例选择的不好,根据常识,有着大于1的公约数的扩张卷积组合会造成盲区),获得四种不同尺度的特征图 F r e c 1 , F r e c 2 , F r e c 4 , F r e c 8 F^1_{rec}, F^2_{rec}, F^4_{rec}, F^8_{rec} Frec1,Frec2,Frec4,Frec8,同时构建一个简单的生成器 G w G_w Gw用来生成上面四种特征图的权重图 W 1 , W 2 , W 3 , W 4 = S l i c e ( G w ( F r e c ) ) {W_1, W_2, W_3, W_4}=Slice(G_w(F_{rec})) W1,W2,W3,W4=Slice(Gw(Frec))。最后通过公式:
在这里插入图片描述
将不同尺度的特征图进行聚合,就获得了CFA的最终输出。
对于第③部分没什么好说的,就是简单的双流鉴别器,同时接受生成图像和生成的结构图,并将提取的特征concat在一起来判别真假。
对于损失部分,都是比较常规的损失:重构、感知、风格、对抗。唯一值得提一下的是本文额外引入了所谓的Intermediate Loss用来监督第①部分的两个生成特征图:
在这里插入图片描述
其中 P s ( . ) P_s(.) Ps(.) P t ( . ) P_t(.) Pt(.)是两个简单的残差块。由于结构特征图是0-1图,因此用二分类交叉熵来约束。

总结

这篇论文内容挺多,值得简单的总结一下:
1、首先本文使用的双流网络结构让人眼前一亮,相当于编码阶段提取对应的纹理特征和结构特征,解码阶段将另外一种特征的高纬特征用于辅助解码。然而有一点值得思考:在编码阶段,对于结构特征过深的下采样(本文最后编码器输出的特征分辨率是 2 × 2 2 \times 2 2×2)可能有利于保留全局结构,对于纹理特征是否已经被压缩的难以利用了?
2、在CFA的第一阶段,使用内积的方式计算相似度矩阵,假设 F ∈ R c , w , h F \in R^{c,w,h} FRc,w,h,则在这一步的计算量就是 O ( c × h w / 9 × h w / 9 ) O(c \times hw/9 \times hw/9) O(c×hw/9×hw/9)。是否有其他方式降低这一步的计算量?

你可能感兴趣的:(人工智能,计算机视觉,深度学习,机器学习,python)