原论文:Pivotal Tuning for Latent-based Editing of Real Images
论文:https://arxiv.org/abs/2106.05744
代码:https://github.com/danielroich/PTI
1 GAN反演
现有的图像编辑神经网络,都是在基于图像生成神经网络所生成的基础上进行编辑的。其原因在于,,图像编辑的原理大体上可简单描述为:对图像所对应的在 lantent space 上的 lantent code 进行编辑来达到改变生成出来的图像的效果。
而对于一个真实图像,在没有找到其对应的在StyleGAN中 lantent space 的 lantent code 前则无法对其进行图像编辑。
而将真实图像投影到 GAN 的 lantent space 中得到对应 lantent code 的操作就称为 GAN 反演 ( GAN inversion ).
1.1 失真和可编辑性权衡
众所周知,StyleGAN 是基于 W W W 空间训练的。对于一个在大规模数据集上预训练的 StyleGAN 而言,对于一个取自 W W W 的 lantent code w ∈ W w \in W w∈W 可以生成具有高感知质量和低失真度的图片。但现已有研究表明: W W W 潜在空间的表达性是有限的,因为不是每个图像都可以准确地映射到 W W W 中。
这就导致了如果不加思考的将目标图像反演到 W W W 潜在空间中,可能会导致部分在 StyleGAN 训练中未包含在 W W W 潜在空间的属性也不能被映射到其中,这将不可避免地导致反演后得到的lantent code 可编辑性下降。
为了缓解这一限制,已有研究证明了任何图像都可以被反转成 W W W 的扩展,表示为 W + W+ W+,其中风格代码由许多风格向量组成。 W + W+ W+ 具有更多的自由度,因此明显比 W W W 更具表现力和可编辑性。尽管这种扩展的表现力足以表示真实图像,但却不可避免地使得生成图像失真。
这种两者不可兼得的情况,称之为:失真与可编辑性的权衡
现有的 GAN 反演的大多是围绕于如何平衡两者之间取得更好的结果而进行研究。
2 PTI
在介绍前,先看看效果:
图一:
图1所示。在应用 PTI 后可以利用基于 StyleGAN 的图像编辑技术来对真实图像进行编辑,且效果相当不错。且对于超出 W W W 的图像 ( 小丑的浓妆 ) 也可以达成很好的编辑效果。
一般而言,现有的 GAN 反转方法大致可以分为三大类别:
1:直接优化潜在向量 ( lantent vector ) 的方法,使输出图像与目标图像之间的重建误差最小
2:训练编码器将给定目标图像映射到潜在空间
3:结合以上两者
本文中的方法,Pivotal Tuning ( PTI ) 为其中的第一类方法,其主要优点在于反演效果好,主要的缺点在于需要对生成器进行微调。考虑到 StyleGAN 的训练难度,训练过程需要相当长的时间。( 笔者复现实验时,使用NVIDIA GeForce RTX4060 Laptop GPU 的笔记本电脑,对单张图片进行反演、编辑操作需要约5分钟才能完成 )
相比训练一个新的编码器的方法,PTI 通过微调生成器来使其适应输入图像。其主要流程简述如下:
1:对于一幅或一组真实图像,先利用现有的 GAN 反演技术 ( 编码器 ) 将其投影到 lantent space 得到 lantent code : w p w_{p} wp 。在这个阶段,生成器 保持冻结,训练 编码器。
2:将 w p w_{p} wp 视为锚点,微调预训练的 StyleGAN 生成器使其能够生成 w p w_{p} wp 对应的高保真图像。在这个阶段 编码器 保持冻结,训练 生成器。
这一整个过
程可以看作是先投飞镖(
w
p
w_{p}
wp)到靶子 ( lantent space ) 上,再移动靶子 ( 优化生成器 ) 让飞镖到中间 (
w
p
w_{p}
wp ->
W
W
W ) 的过程。
图二:
图二中,左边是第一步后的结果。其中我们可以看出失真和可编辑性的权衡:A位于可编辑性更强的区域但不像真实图像 ( 正中 ) ,而 B 位于可编辑性较差的地方但更像真实图像。 右边为经过 PTI 之后的结果 (优化生成器后)。其中 C 既保持了 A 的编辑能力,也实现了 B 相似的与真实图像的相似性。
我们可以将 B 看作是我们投出去的 ‘飞镖’,而 A 为靶子的中心点。而 PTI 过程就可以看作为将作为背景的靶子整体移动,使 ‘飞镖’ 移动到靶心。很显然这个过程可以通过优化实现。
3 Method
这一部分将详细说明以上两步的具体流程。
3.1 反演部分
反演部分较为简单,其主要目的是将真实图片正确得投影到 lantent space 上来为接下来的 PTI 过程提供一个起点。在该过程中作者选择将真实图像投影到 W W W 中以获得更好的可编辑性,其带来的失真问题主要由第二步的 PTI 优化生成器来解决。
有研究表明,使用噪声正则化项优化噪声向量 n n n 可以显著改善反演,因为噪声正则化阻止了噪声向量包含重要信息。这意味着一旦 w p w_p wp 被确定, n n n 值在最终的视觉外观中起次要作用。
所以,在本质上,该步骤为直接优化 lantent code w w w 和噪声向量 n n n 来重建图像。其优化目标如下:
w p , n = arg min w , n L L P I P S ( x , G ( w , n ; θ ) ) + λ n L n ( n ) w_{p},n=\arg \min_{w,n}L_{LPIPS}\left ( x,G(w,n;\theta ) \right )+\lambda _{n}L_{n}(n) wp,n=argw,nminLLPIPS(x,G(w,n;θ))+λnLn(n)
其中 G ( w , n ; θ ) G(w,n;\theta) G(w,n;θ) 为使用权值 θ \theta θ 的生成器 G G G 生成的图像, w p w_{p} wp 为所需的起点,在这里我们称其为 pivot code。LPIPS 损失为 GAN 模型常见的损失计量方法在这里不多赘述。
需要注意的是,这一部分中的 w w w 为将真实图像输入到现有的反演方法中得到的,而不是通过 StyleGAN 自带的 Mapping 部分来通过输入 z z z 生成的。
注:该部分中作者使用的 ’现有的反演方法‘ 为《Analyzing and Improving the Image Quality of StyleGAN》中提及的方法,详细请参考该论文。
3.2 PTI 部分
正如之前所说的,如果在这里直接使用 w p w_p wp 来生成反演后的图像必然会有明显的失真。
在这一部分中,首先先解冻生成器 G G G 并对其调整、优化。对于第一步中得到的 pivot code w p w_{p} wp ,设 x p = G ( w p ; θ ∗ ) x^{p}=G(w_{p};\theta^{*}) xp=G(wp;θ∗) 为使用 w p w_p wp 和调整后的权值 θ ∗ \theta^{*} θ∗ 生成的图像。有以下损失函数:
L p t = L L P I P S ( x , x p ) + λ L 2 L L 2 ( x , x p ) L_{pt}=L_{LPIPS}(x,x^{p})+\lambda_{L2}L_{L2}(x,x^{p}) Lpt=LLPIPS(x,xp)+λL2LL2(x,xp)
其中 θ \theta θ 的初始值为预训练的生成器的权重, w p w_{p} wp 为常数。通过优化该损失,对生成器 G 的权值进行调整,来使得真实图像 x x x 和生成的反演图像 x p x^{p} xp 更加相似。
该损失也可以扩展到一组图片上:
L p t = 1 N ∑ i = 1 N ( L L P I P S ( x i , x i p ) + λ L 2 L L 2 ( x i , x i p ) ) L_{pt}=\frac{1}{N}\sum_{i=1}^{N} \left ( L_{LPIPS}(x_{i},x_{i}^{p})+\lambda_{L2}L_{L2}(x_{i},x_{i}^{p}) \right ) Lpt=N1i=1∑N(LLPIPS(xi,xip)+λL2LL2(xi,xip))
其中 x i p = G ( w i ; θ ∗ ) x_{i}^{p}=G(w_{i};\theta^{*}) xip=G(wi;θ∗).
3.3 局部正规化 ( Localoty Regularization )
PTI 会引起连锁反应——由非局部 lantent code 生成的图像的视觉质量会受到其损害。
如果对图像属性编辑有了解的朋友可能更能理解上面这句话的意思。在笔者的理解看来,所谓的 PTI 部分就是另一个版本的图像属性编辑。在图像属性编辑中,我们通过编辑神经网络对 w w w 按照特定方向进行修改得到 w e d i t w_{edit} wedit ,以用来生成修改后的图像 x e d i t = G ( w e d i t ; θ ) x_{edit}=G(w_{edit};\theta) xedit=G(wedit;θ) ,再通过计算 x x x 和 x e d i t x_{edit} xedit 损失来优化编辑神经网络.。我们会发现 w p w_{p} wp 和 w e d i t w_{edit} wedit 的调优步骤十分的相像,这也就给 PTI 带来了 图像属性编辑中一个常见的问题:因为 StyleGAN 的输出相对于输入变化地平滑,因此当 w w w 移动 ( 变化 ) 时,它的邻域将被拖拽。
可以参考我前几篇阅读笔记中内容:https://blog.csdn.net/weixin_48981284/article/details/135563200
而这样的拖拽会导致图片的属性纠缠在一起。还记得我们在文章开头时提到的吗?GAN 反演技术就是为了 图像编辑技术而服务的。可编辑性的下降是不能允许的。
为了减轻这种副作用,作者引入了一个正则化项,旨在将 PTI 的变化限制在 lantent space 的局部区域。在每次迭代中,作者对一个正态分布的随机向量z进行采样,并使用 StyleGAN 的映射网络 ( Mapping network ) f f f 生成对应的 lantent code w z = f ( z ) w_{z} = f (z) wz=f(z),然后使用插值参数 α α α 在 w z w_z wz 与 w p w_p wp 之间进行插值,得到插值码 w r w_{r} wr.
其具体计算过程如下:
w
r
=
w
p
+
α
w
z
−
w
p
∥
w
z
−
w
p
∥
2
w_{r}=w_{p}+\alpha \frac{w_{z}-w_{p}}{\left \| w_{z}-w_{p} \right \|_{2} }
wr=wp+α∥wz−wp∥2wz−wp
然后再最小化使用初始权重
θ
\theta
θ 生成的图像
x
r
=
G
(
w
r
;
θ
)
x_{r}=G(w_{r};\theta)
xr=G(wr;θ) 与 优化后的权重
θ
∗
\theta^{*}
θ∗ 生成的图像
x
r
∗
=
G
(
w
r
;
θ
∗
)
x_{r}^{*}=G(w_{r};\theta^{*})
xr∗=G(wr;θ∗) 之间的损失:
L R = L L P I P S ( x r , x r ∗ ) + λ L 2 R L L 2 ( x r , x r ∗ ) L^{R}=L_{LPIPS}(x_{r},x_{r}^{*})+\lambda^{R}_{L2}L_{L2}(x_{r},x_{r}^{*}) LR=LLPIPS(xr,xr∗)+λL2RLL2(xr,xr∗)
这同样也可以扩展到一组图像的情况:
L R = 1 N r ∑ i = 1 N r ( L L P I P S ( x r , i , x r , i ∗ ) + λ L 2 R L L 2 ( x r , i , x r , i ∗ ) ) L^{R}=\frac{1}{N_{r}}\sum_{i=1}^{N_{r}} \left ( L_{LPIPS}(x_{r,i},x_{r,i}^{*})+\lambda^{R}_{L2}L_{L2}(x_{r,i},x_{r,i}^{*}) \right ) LR=Nr1i=1∑Nr(LLPIPS(xr,i,xr,i∗)+λL2RLL2(xr,i,xr,i∗))
将以上两个优化目标结合起来有:
θ ∗ = arg min θ ∗ L p t + λ R L R \theta^{*}= \arg\min_{\theta^{*}}L_{pt}+\lambda_{R}L_{R} θ∗=argθ∗minLpt+λRLR
其中 α , λ R , λ L 2 R , N r \alpha,\lambda_{R},\lambda_{L2}^{R},N_{r} α,λR,λL2R,Nr 为超参数。
4 实验部分
等我把代码完全搞懂再随着代码部分一同补充……