Liquid Warping GAN 水记
《Liquid Warping GAN: A Unified Framework for Human Motion Imitation, Appearance Transfer and Novel View Synthesis》
论文:https://arxiv.org/abs/1909.12224
姿态转移—Liquid Warping GAN_释然强的博客-CSDN博客
风格迁移1-04:Liquid Warping GAN(Impersonator)-白话给你讲论文-翻译无死角(1)_江南才尽,年少无知!的博客-CSDN博客
这个翻译得不太行,一堆问题
融合了生成 “新视角”,“新姿势”,“新外观” 三个功能的 GAN
能生成 “新视角” 和 “新姿势” 是因为用 SMPL 重建了三维人体模型
能生成 “新外观” 是因为他的 GAN 有一定的解耦能力(可以换衣服什么的)
他 align 的方式是,对两个图重建出 SMPL 三维网格,然后根据mesh格点的对应关系,计算光流。
GAN的目的是:背景补全,纹理和风格迁移(包括头发衣服的迁移)
感觉写得挺混乱的,可能是符号用得太多把他自己都搞晕了,而且有些地方没写清楚。
大致流程就是:
先重建SMPL三维人体,根据人体模型计算光流,用光流扭曲原图,然后送入 GAN 完善。
抠出背景,并且补全,然后把完善后的人体和背景混合,得到最终结果。
GAN 有两个作用,一个是融合目标的纹理及身份信息,一个是生成逼真的图像。
借由 GAN 中的特殊结构 LWB,在对输入图像进行完善的同时,一层层融合原图的纹理和身份信息。允许使用任意多个信息源,分别提供不同的信息(比如脸和衣服和裤子分开提供)(似乎需要人为划定mask)。
LWB 实际上就是把输入了源图像的自编码器的特征图逐层抽出, warp 之后,再逐层累加
训练步骤
(a) SMPL 人体建模
先用 HMR 解出 人体三维姿态 θ \theta θ 、 SMPL 人体参数 β \beta β 、 相机坐标 K K K
于是可以通过 人体姿态 和 人体参数 得到 SMPL 人体三维网格 M M M
我们分别计算出源图像的 { K s , θ s , β s , M s } \{K_s,\theta_s,\beta_s,M_s\} {Ks,θs,βs,Ms} 以及 参考图像的 { K r , θ r , β r , M r } \{K_r,\theta_r,\beta_r,M_r\} {Kr,θr,βr,Mr}
(b) 光流
在源图视角 K s K_s Ks 下,
渲染出源图网格 M s M_s Ms 的关联映射图 C s C_s Cs ,
渲染出参考图网格 M r M_r Mr 的关联映射图 C t C_t Ct 。(这个 C C C 估计是类似网格坐标的东西)
(使用可微分渲染,Neural Mesh Renderer (NMR)[13] )
(后面还会用到 C C C ,当成 mask 来用)
然后根据 C s C_s Cs 和 C t C_t Ct 计算光流 T 。
使用 C s C_s Cs 计算遮罩,将 I s I_s Is 分为前景图 I f t I_{ft} Ift 和 背景图 I b g I_{bg} Ibg 。
使用光流 T 将源图像 I s I_s Is 扭曲,得到 I s y n I_{syn} Isyn (似乎用了双线性采样)。
( c ) Liquid Warping GAN
完成三个工作
- 合成背景
- 基于可见部分,预测不可见部分的颜色
- 通过对 SMPL 的重建,生成衣服、头发方面的像素
GAN 分为三部分
G B G G_{BG} GBG 合成背景:
输入 I b g I_{bg} Ibg 以及对应的 mask ,输出完整背景 I ^ b g \hat I_{bg} I^bg
G S I D G_{SID} GSID 是一个降噪卷积自编码器,用于提取出源图片的身份特征
输入 masked I f t I_{ft} Ift , C s C_{s} Cs ,再结合 I ^ b g \hat I_{bg} I^bg ,尝试重建 I ^ s \hat I_{s} I^s
G T S F G_{TSF} GTSF 合成最终结果
输入 I s y n I_{syn} Isyn 和 C t C_t Ct ,再结合 I ^ b g \hat I_{bg} I^bg ,输出 I ^ t \hat I_t I^t
(感觉作用就是把 用光流扭曲出来的人体 优化一下,顺便改一下风格和纹理)
G B G , G S I D , G T S F G_{BG},G_{SID},G_{TSF} GBG,GSID,GTSF 是 ResUnet 架构(一种 ResNet 和 U-net 的结合体)
Liquid Warping Block(本文关键创新)
提出了 Liquid Warping Block ,用于向 G T S F G_{TSF} GTSF 中引入源图像的纹理、风格、颜色等信息
图示中使用了两个源,实际上可以使用任意数量的源图像
绿色和蓝色的 X s 1 l X_{s_1}^l Xs1l 和 X s 2 l X_{s_2}^l Xs2l 是 G S I D G_{SID} GSID 对两个源图像的第 l l l 层特征图
中间白色的 X t l X_t^l Xtl 是 G T S F G_{TSF} GTSF 的第 l l l 层特征图
B S ( X s 1 l , T 1 ) BS(X_{s_1}^l,T_1) BS(Xs1l,T1) 表示用双线性采样和光流 T 1 T_1 T1 来扭曲特征图
LWB 输出如下:
X ^ t l = B S ( X s 1 l , T 1 ) + B S ( X s 2 l , T 2 ) + X t l \hat X_t^l=B S(X_{s_1}^l, T_1)+B S(X_{s_2}^l, T_2)+X_t^l X^tl=BS(Xs1l,T1)+BS(Xs2l,T2)+Xtl
背景与前景的混合
G B G G_{BG} GBG 直接输出整个背景
G S I D G_{SID} GSID 和 G T S F G_{TSF} GTSF 输出 颜色图 P P P 和 注意力图 A A A (这玩意不就是透明度吗,我服了)
最终输出需要和背景混合,计算如下:
I ^ s = P s ∗ A s + I ^ b g ∗ ( 1 − A s ) I ^ t = P t ∗ A t + I ^ b g ∗ ( 1 − A t ) \begin{aligned}\hat{I}_{s} &=P_{s} * A_{s}+\hat{I}_{b g} *\left(1-A_{s}\right) \\\hat{I}_{t} &=P_{t} * A_{t}+\hat{I}_{b g} *\left(1-A_{t}\right)\end{aligned} I^sI^t=Ps∗As+I^bg∗(1−As)=Pt∗At+I^bg∗(1−At)
判别器
使用 pix2pix 架构
损失函数
用了四个损失
VGG 感知损失
L p = ∥ f ( I ^ s ) − f ( I s ) ∥ 1 + ∥ f ( I ^ t ) − f ( I r ) ∥ 1 L_{p}=\|f(\hat{I}_{s})-f(I_{s})\|_{1}+\|f(\hat{I}_{t})-f(I_{r})\|_{1} Lp=∥f(I^s)−f(Is)∥1+∥f(I^t)−f(Ir)∥1
其中 f f f 是预训练的 VGG-19
面部身份损失
L f = ∥ g ( I ^ t ) − g ( I r ) ∥ 1 L_{f}=\left\|g(\hat{I}_{t})-g\left(I_{r}\right)\right\|_{1} Lf=∥ ∥g(I^t)−g(Ir)∥ ∥1
其中 g g g 是预训练的 SphereFaceNet
对抗损失
结合 LSGAN 和 PatchGAN
L a d v G = ∑ D ( I ^ t , C t ) 2 L_{a d v}^{G}=\sum D(\hat{I}_{t}, C_{t})^{2} LadvG=∑D(I^t,Ct)2
注意力正则化损失
A 是混合背景和前景使用的注意力图(就是透明度)。
这个正则化项的目标是,令 A 光滑,并且防止饱和。
由于 A 和 P 没有相应的 ground truth ,只能靠上面几个 loss 来学。
在学习中, A 会很快饱和到 1 。
为了缓解这种情况,约束 A ,令 A 接近 3D 网格渲染出的身体轮廓 S 。
直接用 S 不太好,他很粗糙,而且不包括头发和身体。
对 A 还应用了 Total Variation Regularization [25],以补偿 S 的不足,并且加强前景背景混合的空间颜色平滑(什么玩意)。
L a = ∥ A s − S s ∥ 2 2 + ∥ A t − S t ∥ 2 2 + T V ( A s ) + T V ( A t ) 其中, T V ( A ) = ∑ [ A ( i , j ) − A ( i − 1 , j ) ] 2 + [ A ( i , j ) − A ( i , j − 1 ) ] 2 \begin{aligned} L_{a} &=\left\|A_{s}-S_{s}\right\|_{2}^{2}+\left\|A_{t}-S_{t}\right\|_{2}^{2}+T V\left(A_{s}\right)+T V\left(A_{t}\right) \\ 其中,T V(A) &=\sum[A(i, j)-A(i-1, j)]^{2}+[A(i, j)-A(i, j-1)]^{2} \end{aligned} La其中,TV(A)=∥As−Ss∥22+∥At−St∥22+TV(As)+TV(At)=∑[A(i,j)−A(i−1,j)]2+[A(i,j)−A(i,j−1)]2
推理过程
不想看了,感觉后面帮助不大