图像修复DeepFillv2:Free-Form Image Inpainting with Gated Convolution(ICCV2019)

    科技2022-08-14  134

    Paper:https://arxiv.org/pdf/1806.03589.pdf Code:https://github.com/JiahuiYu/generative_inpainting

    普通CNN在inpainting的弊端

    普通卷积的权重共享无差别的滑过所有pixels或feature。并不会区分是valid的或是带修补区域的,一并做统一处理。而待修补区域部分本身是没有语义信息的,是invalid,和已知区域做一样的处理是不合适的。通常会导致视觉伪影,颜色差异,模糊和明显的边缘反应。

    Partial convolution

    Paper:Partial Convolutions for Image Inpainting 参考博客 为了解决上述普通卷积带来的影响,曾有人提出过 partial convolution的方案,即每次卷积前先乘以mask部分,即只输入带语义部分。 其公式如下:相对于普通卷积的 x = W T X + b x = W^TX+b x=WTX+b,其在输入前多了个点乘Mask的过程, s u m ( 1 ) s u m ( M ) sum(1) \over sum(M) sum(M)sum(1)用于调整有效输入,即求平均。 x ′ = { W T ( X ⊙ M ) sum ⁡ ( 1 ) sum ⁡ ( M ) + b ,  if  sum ⁡ ( M ) > 0 0 ,  otherwise  x^{\prime}=\left\{\begin{array}{ll} \mathbf{W}^{T}(\mathbf{X} \odot \mathbf{M}) \frac{\operatorname{sum}(\mathbf{1})}{\operatorname{sum}(\mathbf{M})}+b, & \text { if } \operatorname{sum}(\mathbf{M})>0 \\ 0, & \text { otherwise } \end{array}\right. x={WT(XM)sum(M)sum(1)+b,0, if sum(M)>0 otherwise  但是随着网络深度的增加,其感受野也在持续增加,特征映射回输入。本来无语义的invalid部分也慢慢变成valid部分。此时若从头到尾使用相同的Mask就不合适了,而且其输出结果待修复处就没得到任何信息了(被Mask抹掉了)。因此随着网络深度的增加,Mask也一直在更新。其更新规则如下式。 m ′ = { 1 ,  if  sum ⁡ ( M ) > 0 0 ,  otherwise  m^{\prime}=\left\{\begin{array}{ll} 1, & \text { if } \operatorname{sum}(\mathbf{M})>0 \\ 0, & \text { otherwise } \end{array}\right. m={1,0, if sum(M)>0 otherwise  就是一个形态学膨胀的过程,其更新思路应该也是和形态学膨胀类似。

    Partial convolution缺陷

    列出了3点缺陷

    若要在修复过程中可交互生成指定的外轮廓,这部分算valid还是invalid不能定义。mask更新一直是一个形态学膨胀过程,直至最后变成全1的过程,则深层网络时,对于输入的每个feature到底是指前景还是背景,无法分辨。(文中写的一堆,不是很清楚作者要表达的意思,可能就是mask更新时,无论valid pixel数量为1还是为9,都一样的更新为1,即公式中的 i f   s u m ( M ) > 0   u p d a t e   1 if \ sum(M)>0 \ update \ 1 if sum(M)>0 update 1) 对于上述缺陷,提出gate convolution(Mask更新由网络去学习)

    Gated Convolution

    Gate和Mask差不多一个意思,都是类似一个开关控制通道是否开通的意思一样。不同的是Maks是一个{0,1}二值模板,而文中的Gate是一个[0,1]中的连续值,相当于soft版本。 与Mask不同的是,gate是动态生成mask的过程。实验中可视化时发现Gate Conv不仅可以解决上述的Partial Conv的不足之处,在深层网络的一些channel中,还得到了语义分割信息(可能是inpainting学习过程中,学到了语义信息。但这个不一定是Gate Conv带来的吧?Gate是作者给予的解释。但在网络看来就是2路卷积,唯一不同的只有激活函数)

    Spectral-Normalized Markovian Discriminator (SN-PatchGAN)

    之前的填补都是矩形区域,可以把该区域直接输入GAN的discriminator中,用GAN来增强inpainting效果。但GAN的discriminator是个分类器,输入为一张图片。现在输入换成了各种不规则形状的填补区域。因此提出SN-PatchGAN Loss。 L G = − E z ∼ P z ( z ) [ D s n ( G ( z ) ) ] L D s n = E x ∼ P data ( x ) [ Re ⁡ L U ( 1 − D s n ( x ) ) ] + E z ∼ P z ( z ) [ Re ⁡ L U ( 1 + D s n ( z ) ) ] \mathcal{L}_{G}=-\mathbb{E}_{z \sim \mathbb{P}_{z}(z)}\left[D^{s n}(G(z))\right] \\ \mathcal L_{D^{s n}}=\mathbb E_{x \sim P_{\text {data}(x)}}\left[\operatorname{Re} L U\left(1-D^{s n}(x)\right)\right]+\mathbb E_{z \sim P_{z}(z)}\left[\operatorname{Re} L U\left(1+D^{s n}(z)\right)\right] LG=EzPz(z)[Dsn(G(z))]LDsn=ExPdata(x)[ReLU(1Dsn(x))]+EzPz(z)[ReLU(1+Dsn(z))] D s n D^{sn} Dsn:spectral-normalized discriminator

    Extension to User-Guided Image Inpainting

    自定义轮廓,其输入为5通道,RGB+mask+sketch。其中sketch在训练时由ground truth边缘检测器HED生成。好像没加特定的loss去优化这部分。

    Processed: 0.018, SQL: 8