StyleGAN3的编辑 水记
《Third Time’s the Charm? Image and Video Editing with StyleGAN3》
主页:https://yuval-alaluf.github.io/stylegan3-editing/
论文:https://arxiv.org/abs/2201.13433
项目:https://github.com/yuval-alaluf/stylegan3-editing
看这篇是因为发现在对StyleGAN3进行改动、拆分、融合一些新结构时,需要有一定的指导理论,这就需要我们做一些GAN解剖实验(或者别的什么解释性的实验),对StyleGAN3的解耦性质进行主观分析。
这时候找了一下,正好看到这篇,就不用自己做实验了。
这篇的主要贡献是做了一个能对真实视频进行编辑的反演编码器。
几个结论:
- 在 StyleGAN3 的16层中,最早两层控制平移和旋转,其中第二层主要是轻微影响, 而且不够解耦。
- 可以通过将未对齐GAN的第一层的 w 0 w_0 w0 设置为平均值 w ˉ \bar w wˉ ,从而产生伪对齐的图片。
- S \mathcal{S} S 空间的解耦能力强于 W \mathcal{W} W 和 W + \mathcal{W}+ W+ 空间。
-
W
\mathcal{W}
W 和
W
+
\mathcal{W}+
W+ 空间的线性编辑不够解耦,未对齐的GAN的解耦还会更差。
W \mathcal{W} W 和 W + \mathcal{W}+ W+ 空间的非线性编辑也不够解耦。 - S \mathcal{S} S 空间的线性编辑就能够比较好的解耦了,甚至是对 未对齐的GAN 看起来也挺 解耦 的。
看来我还是需要做实验,看看每层的解耦情况。
StyleGAN3架构
在StyleGAN中,一个简单的全连接层将 Z \mathcal{Z} Z 空间中的 z ∼ N ( 0 , 1 ) 512 z \sim \mathcal{N}(0,1)^{512} z∼N(0,1)512 映射为 W \mathcal{W} W 空间中的 w w w 。
与StyleGAN2相比,StyleGAN3不管输出图像分辨率是多少,都固定使用16层卷积层。我们将输入这些层的编码记为 ( w 0 , … , w 15 ) (w_0,\dots,w_{15}) (w0,…,w15) 。在StyleGAN2中,使用4x4的固定输入;在StyleGAN3中,使用傅里叶特征作为输入,可以用四个参数 ( sin α , cos α , x , y ) (\sin\alpha,\cos\alpha,x,y) (sinα,cosα,x,y) 来进行平移和旋转,这些参数由 w 0 w_0 w0 经过一个训练过的仿射层得到。在剩下的所有层中, w i w_i wi 都被喂给一个独立的仿射层,产生一些调制系数,用于调整卷积核的权重。
在StyleGAN2中,由这些仿射层的输出形成的空间称为 StyleSpace [73],或者 S \mathcal{S} S 空间。在本文中,我们也用相似的方法定义StyleGAN3的 S \mathcal{S} S 空间,对于 1024x1024 的生成器,有9894维。
由于平移和平面内旋转是由 w 0 w_0 w0 得到的参数显式给出的,因此可以通过连接另外一个变换很容易的调整结果。我们将这个变换参数化为三个参数 ( r , t x , t y ) \left(r, t_{x}, t_{y}\right) (r,tx,ty) ,其中 r r r 表示旋转角度, t x , t y t_x,t_y tx,ty 表示平移,最终的结果图像表示如下:
y = G ( w ; ( r , t x , t y ) ) y=G\left(w ;\left(r, t_{x}, t_{y}\right)\right) y=G(w;(r,tx,ty))
这种变换甚至可以应用于 使用 aligned 数据训练的生成器上,使其可以产生平移和旋转后的图像。如图2所示:
与之相反的,在 unaligned 数据上训练的生成器可以通过设置 w 0 w_0 w0 为生成器的平均值 w ˉ \bar w wˉ ,来“强制”生成器产生 aligned的图片,也就是 G ( ( w ˉ , w 1 , … , w 15 ) ; ( 0 , 0 , 0 ) ) G((\bar w,w_1,\dots,w_{15}) ;(0,0,0)) G((wˉ,w1,…,w15);(0,0,0)) ,如图3所示:
第一行是自由生成的图像,第二行是把 w 0 w_0 w0 替换为 w ˉ \bar w wˉ 的图像
直观地说,这种近似align可能是由于训练分布中的平均输入位姿大致对齐和居中,再加上StyleGAN3中的平移和旋转转换主要由第一层控制。
分析
控制旋转
正如之前讨论的, w 0 w_0 w0 可以控制图片内容的平移和旋转。然而,正如图3所示, w 0 w_0 w0 对每个图片的影响会有微小的差别:
可以看到,最左侧的人脸出现了轻微的旋转,但是第三列的人脸是完全竖直的。
这说明,旋转也会略微受到其他层的影响,并没有完全解耦。
为了检查这种现象的程度,我们做了两个实验,如图4 :
第一行,保持其他所有
w
w
w 不变,只变化
w
1
w_1
w1 ,注意到出现了旋转,同时也发生了其他变化,比如脸部形状和眼睛。
第二行,保持
w
0
w_0
w0 和
w
1
w_1
w1 不变,变化其他所有
w
w
w 。注意到头部姿态保持固定。
第一行,保持其他 w w w 不变,只变化 w 1 w_1 w1 。可以发现,改变 w 1 w_1 w1 可以造成平面内旋转,同时也会改变其他属性,比如脸部形状和眼睛。
第二行,保持 w 0 w_0 w0 和 w 1 w_1 w1 不变,改变其他所有 w w w 。可以发现,所有的图片都使用相同的头部姿态。
因此,我们认为后续层不会导致平移和旋转,只有 w 0 w_0 w0 和 w 1 w_1 w1 会引入平移和旋转。
不同 隐空间 的 解耦能力
为了分析 StyleGAN3 不同隐空间的解耦能力,我们使用 [73] 的方法,并且计算每种隐空间的 DCI (disentanglement / completeness / informativeness) 指标 [20] 。为了计算以上指标,我们引入预训练的属性回归器,在 [73] 中有描述。
注意,由于属性分类器是在对齐图像上训练的,很难在非对齐图像上精确计算 属性分数。为此,我们给分类器提供的是 伪对齐图像,是用前一节提到的方法构造的。
在表1中,我们报告了 Z \mathcal{Z} Z 空间、 W \mathcal{W} W 空间、 S \mathcal{S} S 空间 的 DCI 指标:
Z
,
W
,
S
\mathcal{Z},\mathcal{W},\mathcal{S}
Z,W,S 三种空间 的 DCI 指标,使用 FFHQ 数据集
其中 (A) 表示使用对齐的图片训练,(UA)表示使用未对齐的图片训练
注意这里没有评估
W
+
\mathcal{W}+
W+ 空间,后面讲了为什么
S \mathcal{S} S 空间在所有StyleGAN3和StyleGAN2中都有更高的 DCI 得分。更进一步的说,在StyleGAN3中 Z \mathcal{Z} Z 和 W \mathcal{W} W 的差距变小了, W \mathcal{W} W 和 S \mathcal{S} S 的差距变大了。这都说明 StyleGAN3 更适合在 S \mathcal{S} S 空间中编辑。
我们本来也要评估 W + \mathcal{W}+ W+ 空间。我们随机采样很多 w ∈ W w\in\mathcal{W} w∈W 然后拼接他们,得到 W + \mathcal{W}+ W+ 空间中的隐编码。这样得到的图片非常不自然,在这种图片上使用预训练的 DCI 分类器会得到不准确的结果。
图片编辑
本节中,我们实验了不同图像编辑技术在 StyleGAN3 中的效果。在 W , W + , S \mathcal{W},\mathcal{W}+,\mathcal{S} W,W+,S 中进行评估。
使用线性隐方向编辑
我们使用 InterFaceGAN [60] 来寻找 对齐和未对齐的StyleGAN 的 W \mathcal{W} W 空间中的线性方向。
编辑对齐的图像很简单,我们使用 StyleGAN2 中的方法 [36] :给定一个随机采样的隐编码 w ∈ W w\in\mathcal{W} w∈W ,一个编辑方向 D D D ,一个步长 δ \delta δ ,最终编辑后的图像为 G a l i g n e d ( w + δ D ; ( 0 , 0 , 0 ) ) G_{aligned}(w+\delta D;(0,0,0)) Galigned(w+δD;(0,0,0)) ,其中 G a l i g n e d G_{aligned} Galigned 表示对齐的生成器。
对于未对齐的图像,有两种选项。
第一种方法是,我们可以直接用未对齐的生成器。然而,这样做产生的一个问题是,学习这些方向所需的属性分数是从预先在对齐的图像上训练的分类器中获得(靠,没看懂)。在未对齐图像上产生的分数可能是不准确的,这会导致学习到较差的 W \mathcal{W} W 方向。为了辅助预训练的分类器,我们使用(之前提过的)伪对齐图像。将修改过的 latent 送入预训练的分类器,得到原 latent 的属性分数。然而,使用非对齐生成器的另一个问题是,它需要学习一组单独的方向。
第二种方法可以减轻上述开销,使用对齐的生成器,但是使用 用户定义 的 变换 来控制 旋转和平移。具体地说,编辑过的未对齐的图像可以由 G a l i g n e d ( w + δ D ; ( r , t x , t y ) ) G_{aligned}(w+\delta D;(r,t_x,t_y)) Galigned(w+δD;(r,tx,ty)) 合成,其中 ( r , t x , t y ) (r,t_x,t_y) (r,tx,ty) 由用户控制。
图5展示了我们用上述三种方法得到的编辑结果:
用三种方法的编辑结果。
第一行表示直接编辑对齐GAN
第二行表示将未对齐GAN做伪对齐,再编辑
第三行表示编辑对齐GAN,额外做平移和旋转达成非对齐的效果
注意到,可以用 G a l i g n e d G_{aligned} Galigned 或者 G u n a l i g n e d G_{unaligned} Gunaligned 实现相当的非对齐编辑效果。
我们也发现 G u n a l i g n e d G_{unaligned} Gunaligned 中找到的编辑方向往往解耦更差。比如,图5第二行第二列,姿态变化时,表情也跟着改变了。
我们认为这种耦合性有两个原因:
- 伪对齐的图像对于使用对齐图像训练的分类器来说仍然属于域外图像,所以分类器的评分不够准确。
- 线性的编辑方向使得解耦变得更难了。
考虑到未对齐的图像可以通过对齐的生成器来编辑,而且结果质量更高,(正如StyleGAN3原文所展示的),后续我们都分析对齐的生成器。
使用非线性的隐路径编辑
很多不同的工作都展示了 非线性的隐路径编辑 可以实现更真实、更解耦的编辑 [4,27] 。
我们现在用 StyleCLIP 映射器技术 [48] 研究 W + \mathcal{W}+ W+ 空间中的 非线性的隐编码编辑路径。
结果如图6展示:
使用 StyleCLIP映射器技术 在
W
+
\mathcal{W}+
W+ 空间中 编辑 未对齐生成器 的产生的图片。
最左边两张是原图。
注意到即使使用非线性的编辑路径,编辑效果仍然还是很耦合。(编辑表情和头发时,背景和人物身份发生了变化)
可以看到编辑结果还是很耦合。比如背景通常有很大变化,甚至是在局部编辑中也是这样,比如“angry”的结果。
这个结果使得我们想试试 S \mathcal{S} S 空间是否能有比 W \mathcal{W} W 和 W + \mathcal{W}+ W+ 更好的解耦能力。
使用 S \mathcal{S} S 空间中的隐方向进行编辑
回忆一下我们的 DCI 指标, S \mathcal{S} S 的解耦能力是最好的。
我们使用 StyleCLIP [48] 来寻找 S \mathcal{S} S 空间中的 全局的线性编辑方向。
图7展示了编辑结果:
使用 StyleCLIP 在 S \mathcal{S} S 空间中编辑的结果。
可以看到,对于人脸可以在 对齐 和未对齐 的图片上获得解耦的效果。背景很好的保留了,人物身份也很好的保留了,编辑的局部性也更好了。
注意到,这种解耦性对 动物脸 和 风景 数据集 也管用。动物的毛色、姿态、背景都很好的保留了。另外,风景中的关键内容也保住了,比如湖(上面那行)和道路(下面那行)。
那这么看, S \mathcal{S} S 空间中的线性编辑即使是对未对齐的GAN也很解耦唉。
StyleGAN3反演
给定一个目标图像,我们搜索其隐编码 w ^ \hat w w^ :
w ^ = arg min w L ( x , G ( w ; ( r , t x , t y ) ) \hat{w}=\underset{w}{\arg \min } \mathcal{L}\left(x, G\left(w ;\left(r, t_{x}, t_{y}\right)\right)\right. w^=wargminL(x,G(w;(r,tx,ty))
其中 L \mathcal{L} L 表示 L2 或者 LPIPS 重建损失。
由于想用StyleGAN3编辑真实视频,我们更倾向于使用编码器反演(而不是基于优化的反演),这样可能可以实现更好的时间一致性,因为编码器自然的偏爱学习低频表示 [54,68]。
更正式地说,我们试图在大量图像 { x i } i = 1 N \left\{x_{i}\right\}_{i=1}^{N} {xi}i=1N 上训练一个编码器 E E E ,目标函数如下:
∑ i = 1 N L ( x i , G ( E ( x i ) ) ) \sum_{i=1}^{N} \mathcal{L}\left(x_{i}, G\left(E\left(x_{i}\right)\right)\right) i=1∑NL(xi,G(E(xi)))
(这个式子其实就是在所有图片上算重建损失)
对于一个隐编码 w = E ( x ) w=E(x) w=E(x) ,会传给生成器一个额外的变换,用于控制重建出的图像的平移和旋转,也就是说 y = G ( w ; ( r , t x , t y ) ) y=G(w;(r,t_x,t_y)) y=G(w;(r,tx,ty)) 。最终,给定对隐编码的操作 f f f ,可以得到编辑后的图像:
y e d i t = G ( f ( w ) ; ( r , t x , t y ) ) y_{edit}=G(f(w);(r,t_x,t_y)) yedit=G(f(w);(r,tx,ty))
设计编码器网络
为了能对 已对齐 和 未对齐 的图像进行反演和编辑,我们的反演方法必须能生成两种类型的图片。
一个自然的方法是,在两种类型的图片上训练一个编码器,并且和一个未对齐的编码器配对。具体地说,我们可以使用现有StyleGAN2编码器的训练方法 [6,55,67],在未对齐的图像上最小化重建误差。然而,我们发现这种方案很难捕获 未对齐人脸图像中的高可变性,导致重建质量差,消融实验 见 附录E3 。
编码未对齐的图像
我们只用对齐的图像训练一个编码器。正如前面所说的,对齐的GAN只要额外做一个平移旋转变换,就能用于编辑未对齐图像。这样就简化了编码器的训练目标。
对于未对齐的图像 x u n a l i g n e d x_{unaligned} xunaligned 我们使用一个现成的 人脸检测器 [39] 来对齐图像,得到输入图像的对齐过的版本 x a l i g n e d x_{aligned} xaligned 。然后,通过检测并对齐 x u n a l i g n e d x_{unaligned} xunaligned 和 x a l i g n e d x_{aligned} xaligned 的眼睛,我们计算两张图片之间的平移 ( t x , t y ) (t_x,t_y) (tx,ty) 和旋转 r r r 参数。详情见 附录C 。
于是,反演结果 和 重建结果 按如下方式计算:
w aligned = E ( x aligned ) y unaligned = G ( w aligned ; ( r , t x , t y ) ) \begin{aligned}w_{\text {aligned }} &=E\left(x_{\text {aligned }}\right) \\y_{\text {unaligned }} &=G\left(w_{\text {aligned }} ;\left(r, t_{x}, t_{y}\right)\right)\end{aligned} waligned yunaligned =E(xaligned )=G(waligned ;(r,tx,ty))
额外细节
我们采用了 pSp [55] 和 e4e [67] 编码器 进行反演任务。我们还额外采用了 ReStyle [6] 的迭代优化方案。 详情请见附录 E.1 。
将图像反演到StyleGAN3中
评估 反演效果
(比较了一下相同反演方案在StyleGAN2中的表现)
反演后重建效果的直观比较
反演后重建效果的量化指标比较
评估 可编辑性
现在我们评估 ReStyle编码器的 可编辑性。
反演结果的可编辑性。
第二、三列是StyleGAN2的编辑结果
第三、四列是StyleGAN3的编辑结果
看起来 ReStyle e 4 e \text{ReStyle}_{e4e} ReStylee4e 编码器 比 ReStyle p S p \text{ReStyle}_{pSp} ReStylepSp 编码器 的 可编辑性 更强(怎么看出来的,我感觉差不多啊)。当然,这两个都比StyleGAN2强多了。
视频的编辑和反演
看起来很简单,就是每帧反演一个隐编码,做编辑,做时间平滑
有时间再仔细看看
附录
W + \mathcal{W}+ W+ 空间的解耦分析(只是讲了下为啥没法算DCI指标)
之前我们计算的 DCI 指标,其中 disentanglement 衡量每个latent通道对单个属性的控制能力,completeness 衡量是否每个属性都能被单个 latent 通道控制,informativeness 衡量了给定一个latent被属性分类器正确分类的精度。
然而, W + \mathcal{W}+ W+ 空间不适合这种度量,因为 W + \mathcal{W}+ W+ 空间中的随机采样经常产生不自然的图像,使得分类器不能合理评估。
而且在随机采样时,StyleGAN3会比StyleGAN2产生更多的伪影。
最终我们放弃计算 W + \mathcal{W}+ W+ 空间的 DCI 指标。