GAN的域外编辑 水记

GAN的域外编辑 水记

《Editing Out-of-domain GAN Inversion via Differential Activations》

论文:https://arxiv.org/abs/2207.08134

项目:https://github.com/HaoruiSong622/Editing-Out-of-Domain

BV1Wt4y1g7Si

有时候真实图像没法很好的反演,这样就没法很好地编辑

本文设计了一个模型,将编辑后发生变化的部分应用回原图,实现域外编辑。

这样应该有一个前提,就是要编辑的部分的反演结果要比较好。如果要编辑的部分也反演得不好,很可能就会有问题。

总的看完,这个方法感觉不够鲁棒。

个人总结

GAN的域外编辑 水记_第1张图片

大致流程

给定输入图片 I I I 和 编辑属性使用的向量 α n \alpha_n αn

先反演出 I I I 的隐编码 w w w

w w w 直接输入生成器,重建出反演的图像 I ′ I' I

w w w 做编辑后输入生成器,生成反演并编辑后的图像 T T T

用 一个模型(称为 可微分激励模型) 计算 I ′ I' I T T T 在哪些地方有差别,得到一个 权重 mask M M M

用权重 mask 指导,做 I I I T T T 的加权和,得到一个粗略的编辑后图像 F fused F_{\text{fused}} Ffused

用一个图像翻译模型(称为 去鬼影网络),输入 F fused F_{\text{fused}} Ffused ,输出完善的编辑后的图像。

可微分激励模型

用于计算 I ′ \boldsymbol{I}^{\prime} I T \boldsymbol{T} T 在哪些地方有差别,得到一个 权重 mask M M M

先准备一个可训练的编码器 E trainable ( ⋅ ) E_{\text{trainable}}(\cdot) Etrainable()

计算 I ′ I' I T T T 的编码之差 Δ = E trainable  ( I ′ ) − E trainable  ( T ) \boldsymbol{\Delta}=E_{\text {trainable }}\left(\boldsymbol{I}^{\prime}\right)-E_{\text {trainable }}(\boldsymbol{T}) Δ=Etrainable (I)Etrainable (T)

用一个轻量级的卷积分类器,分析出有哪些属性被编辑过,使用softmax交叉熵损失。

然后我们对这个卷积分类器做 CAM ,得到其注意力分布图,作为权重mask。

  • CAM的步骤

    ∂ s c ∂ H i j k \frac{\partial s_{c}}{\partial \boldsymbol{H}_{i j}^{k}} Hijksc 表示中间层特征 H H H 在第 k k k 个通道,像素坐标 ( i , j ) (i,j) (i,j) 处,关于类别 c c c 的梯度。其中 s s s 表示分类器最后一层的输出,但是不经过sofmax 。

    于是我们计算每个通道与类别相关的权重 β c k \beta_{c}^{k} βck

    β c k = 1 Z ∑ i ∑ j ⏞ global average pooling  ∂ s c ∂ H i j k \beta_{c}^{k}=\overbrace{\frac{1}{Z} \sum_{i} \sum_{j}}^{\text {global average pooling }} \frac{\partial s_{c}}{\partial \boldsymbol{H}_{i j}^{k}} βck=Z1ij global average pooling Hijksc

    其实就是通道上梯度的平均值,梯度越大说明权重越高。

    然后我们计算 CAM 图:

    M D i f f − C A M = ReLU ⁡ ( ∑ k β c k H k ) \boldsymbol{M}_{\mathrm{Diff-CAM}}=\operatorname{ReLU}\left(\sum_{k} \beta_{c}^{k} \boldsymbol{H}^{k}\right) MDiffCAM=ReLU(kβckHk)

    其实就是把 H H H 的各个通道做了加权和。

    然后把 M D i f f − C A M \boldsymbol{M}_{\mathrm{Diff-CAM}} MDiffCAM 标准化到 [0,1] 之间,就得到 权重mask 了。

去鬼影网络

一个全卷积网络,由 编码器、解码器、预训练的 StyleGAN2 生成器 这几部分组成。

我们的目的是利用预训练的GAN里的人脸先验来生成无伪影的图像。

我们把 F fused F_{\text{fused}} Ffused 输入全卷积的 编码器-解码器 网络,编码器会得到 F fused F_{\text{fused}} Ffused 的隐编码(相当于反演?那你为啥要用全卷积结构啊?输出尺寸不该是固定的吗?),解码器会得到无伪影的图像, StyleGAN也会得到无伪影的图像。我们把两个生成器和解码器的对应层特征合并,得到最终结果。(哇,效果真的差呀,还要靠特征合并才行,这不是说明训练方向都有偏差吗……是因为合成的训练数据不能满足需要吧……)

为了训练去鬼影网络,我们合成了一系列图片对 { F train  , I } \left\{\boldsymbol{F}_{\text {train }}, \boldsymbol{I}\right\} {Ftrain ,I}

F train  \boldsymbol{F}_{\text {train }} Ftrain  的合成方式如下:

F train  = T ⊙ M train  + I ⊙ ( 1 − M train  ) \boldsymbol{F}_{\text {train }}=\boldsymbol{T} \odot \boldsymbol{M}_{\text {train }}+\boldsymbol{I} \odot\left(1-\boldsymbol{M}_{\text {train }}\right) Ftrain =TMtrain +I(1Mtrain )

其中, M t r a i n \boldsymbol{M}_{\mathrm{train}} Mtrain 的合成方式如下:

M t r a i n ( i , j ) = { M Diff-CAM  ( i , j ) ,  if  M Diff-CAM  ( i , j ) ≤ 0.5 1 − M Diff-CAM  ( i , j ) ,  if  M Diff-CAM  ( i , j ) > 0.5 \boldsymbol{M}_{\mathrm{train}}(i, j)= \left\{\begin{array}{ccc} \boldsymbol{M}_{\text {Diff-CAM }}(i, j), & \text { if } \quad \boldsymbol{M}_{\text {Diff-CAM }}(i, j) \leq 0.5 \\ 1-\boldsymbol{M}_{\text {Diff-CAM }}(i, j),& \text { if } \quad \boldsymbol{M}_{\text {Diff-CAM }}(i, j)>0.5 \end{array}\right. Mtrain(i,j)={MDiff-CAM (i,j),1MDiff-CAM (i,j), if MDiff-CAM (i,j)0.5 if MDiff-CAM (i,j)>0.5

T \boldsymbol{T} T 是随机选择的,根据选择的 T \boldsymbol{T} T ,可以得到对应的 M Diff-CAM  \boldsymbol{M}_{\text {Diff-CAM }} MDiff-CAM 

这个式子把 M t r a i n \boldsymbol{M}_{\mathrm{train}} Mtrain 中所有的值都压到 [0,0.5] 之间,这样可以人为制造伪影,但是又不至于太过,这样我们就可以把 I \boldsymbol{I} I 作为 ground truth 。

用了三个损失,L2像素级重建损失、VGG16 L2感知损失、对抗损失。

你可能感兴趣的:(我的论文笔记,生成对抗网络,深度学习,计算机视觉)