阅读笔记 First Order Motion Model for Image Animation

文章解决的是图片动画的问题。假设有源图片和驱动视频,并且其中的物体是同一类的,文章的方法让源图片中的物体按照驱动视频中物体的动作而动。
文章的方法只需要一个同类物体的视频集,不需要而外的标注。

方法

该方法基于self-supervised策略,主要方法是基于训练视频中的一帧图像和和学习到的动作表示,重建出训练视频。其中,动作表示由动作特定的关键点(motion-specific keypoint)和局部仿射变换(local affine transformations)组成。注意,因为是self-supervised的方法,这里的关键点是算法学出来的,不像人脸关键点检测算法中的关键点是人为指定有具体含义的。
在这里插入图片描述
框架图如上图所示,由两个部分组成,一个是运动估计模块,一个是图像生成模块。
运动估计模块的目的是估计从驱动视频的一帧 D ∈ R 3 × H × W \mathbf D \in \mathbb R^{3\times H \times W} DR3×H×W到源图片 S ∈ R 3 × H × W \mathbf S \in \mathbb R^{3\times H \times W} SR3×H×W的稠密运动场(dense motion field)。运动场 T S ← D : R 2 → R 2 \mathcal T_{\mathbf S \leftarrow \mathbf D}: \mathbb R^2 \rightarrow \mathbb R^2 TSD:R2R2 D \mathbf D D中每个像素位置映射到对应的 S \mathbf S S T S ← D \mathcal T_{\mathbf S \leftarrow \mathbf D} TSD也被称为反向光流(backward optical flow)。使用反向光流而不是正向光流,因为可以使用双线性采样以可微分的方式有效地实现后向扭曲。

仿射变换

这里先回忆一下放射变换(Affine transformation)。
在齐次坐标上,仿射变换可以用下面的式子表示:
[ y ⃗ 1 ] = [ B b ⃗   0 , … , 0 1 ] [ x ⃗ 1 ] {\begin{bmatrix}{\vec{y}}\\1\end{bmatrix}}= {\begin{bmatrix}\mathbf B&{\vec {b}}\ \\0,\ldots ,0&1\end{bmatrix}} {\begin{bmatrix}{\vec {x}}\\1\end{bmatrix}} [y 1]=[B0,,0b  1][x 1]因为运算矩阵的最后一行是为了运算补齐用的,所以在2维图像上仿射变换由矩阵 A = [ B , b ⃗ ] ∈ R 2 × 3 \mathbf A = [\mathbf B, \vec {b}] \in \mathbb R^{2 \times 3} A=[B,b ]R2×3定义。

运动估计模块

运动估计模块分为两个部分。

粗运动估计

粗运动估计预测关键点处的运动模式,也就是反向光流 T S ← D \mathcal T_{\mathbf S \leftarrow \mathbf D} TSD T S ← D \mathcal T_{\mathbf S \leftarrow \mathbf D} TSD用在关键点附近的一阶泰勒展开近似。

假设存在一个抽象参考帧 R \mathbf R R。这样,我们需要估计两个变换:从 R \mathbf R R S \mathbf S S T S ← R \mathcal T_{\mathbf S \leftarrow \mathbf R} TSR)和从 R \mathbf R R D \mathbf D D T D ← R \mathcal T_{\mathbf D \leftarrow \mathbf R} TDR)。抽象参考帧的好处是可以让我们独立的处理 D \mathbf D D S \mathbf S S
为了描述方便,用 X \mathbf X X表示 S \mathbf S S或者 D \mathbf D D,用 p 1 , ⋯   , p K p_1,\cdots,p_K p1,,pK表示抽象参考帧 R \mathbf R R上的关键点的坐标,用 z z z表示在其他帧上的点的坐标。我们估计在关键点 p 1 , ⋯   , p K p_1,\cdots,p_K p1,,pK周围的 T X ← R \mathcal T_{\mathbf X \leftarrow \mathbf R} TXR。具体而言,我们考虑 T X ← R \mathcal T_{\mathbf X \leftarrow \mathbf R} TXR在关键点 p 1 , ⋯   , p K p_1,\cdots,p_K p1,,pK的一阶泰勒展开:
T X ← R ( p ) = T X ← R ( p k ) + ( d T X ← R ( p ) d p ∣ p = p k ) ( p − p k ) + o ( ∥ p − p k ∥ ) \mathcal T_{\mathbf X \leftarrow \mathbf R}(p)=\mathcal T_{\mathbf X \leftarrow \mathbf R}(p_k)+(\frac{d \mathcal T_{\mathbf X \leftarrow \mathbf R}(p)}{dp}|_{p=p_k})(p-p_k)+o(\|p-p_k\|) TXR(p)=TXR(pk)+(dpdTXR(p)p=pk)(ppk)+o(ppk)这可以看做一个仿射变换 A X ← R k ∈ R 2 × 3 \mathbf A^k_{\mathbf X \leftarrow \mathbf R} \in \mathbb R^{2 \times 3} AXRkR2×3 T X ← R ( p k ) \mathcal T_{\mathbf X \leftarrow \mathbf R}(p_k) TXR(pk)是平移参数, d T X ← R ( p ) d p ∣ p = p k \frac{d \mathcal T_{\mathbf X \leftarrow \mathbf R}(p)}{dp}|_{p=p_k} dpdTXR(p)p=pk是线性映射的参数。

T X ← R \mathcal T_{\mathbf X \leftarrow \mathbf R} TXR用其在K个关键点处的值和Jacobian表示。
T X ← R ( p ) ≈ { { T X ← R ( p 1 ) , d T X ← R ( p ) d p ∣ p = p 1 } , ⋯   , { T X ← R ( p K ) , d T X ← R ( p ) d p ∣ p = p K } } \mathcal T_{\mathbf X \leftarrow \mathbf R}(p) \approx \{\{ \mathcal T_{\mathbf X \leftarrow \mathbf R}(p_1),\frac{d \mathcal T_{\mathbf X \leftarrow \mathbf R}(p)}{dp}|_{p=p_1}\}, \cdots,\{ \mathcal T_{\mathbf X \leftarrow \mathbf R}(p_K),\frac{d \mathcal T_{\mathbf X \leftarrow \mathbf R}(p)}{dp}|_{p=p_K}\}\} TXR(p){ { TXR(p1),dpdTXR(p)p=p1},,{ TXR(pK),dpdTXR(p)p=pK}}
我们假设 T X ← R \mathcal T_{\mathbf X \leftarrow \mathbf R} TXR在每个关键点的局部是双射。则对于 T S ← D \mathcal T_{\mathbf S \leftarrow \mathbf D} TSD,我们有
T S ← D = T S ← R ∘ T D ← R − 1 \mathcal T_{\mathbf S \leftarrow \mathbf D}=\mathcal T_{\mathbf S \leftarrow \mathbf R} \circ \mathcal T^{-1}_{\mathbf D \leftarrow \mathbf R} TSD=TSRTDR1用一阶泰勒展开近似有
T S ← D ( z ) ≈ T S ← R ( p k ) + J k ( z − T D ← R ( p k ) ) J k = ( d T S ← R ( p ) d p ∣ p = p k ) ( d T D ← R ( p ) d p ∣ p = p k ) − 1 \mathcal T_{\mathbf S \leftarrow \mathbf D}(z) \approx \mathcal T_{\mathbf S \leftarrow \mathbf R}(p_k) + J_k(z-\mathcal T_{\mathbf D \leftarrow \mathbf R}(p_k))\\ J_k=(\frac{d \mathcal T_{\mathbf S \leftarrow \mathbf R}(p)}{dp}|_{p=p_k})(\frac{d \mathcal T_{\mathbf D \leftarrow \mathbf R}(p)}{dp}|_{p=p_k})^{-1} TSD(z)TSR(pk)+Jk(zTDR(pk))Jk=(dpdTSR(p)p=pk)(dpdTDR(p)p=pk)1 T S ← R ( p k ) \mathcal T_{\mathbf S \leftarrow \mathbf R}(p_k) TSR(pk) T D ← R ( p k ) \mathcal T_{\mathbf D \leftarrow \mathbf R}(p_k) TDR(pk)用基于U-Net的关键点预测网络(keypoint predictor network)预测。对每个关键点预测一个heatmap,总共预测K个heatmap。U-Net的decoder最后一层用softmax预测每个关键点的置信图(keypoint confidence map),也就是关键点在每个像素位置的置信度,满足 ∑ z ∈ Z W k ( z ) = 1 \sum_{z \in \mathcal Z} \mathbf W^k(z)=1 zZWk(z)=1,其中 Z \mathcal Z Z表示所有的像素位置。
T S ← R ( p k ) \mathcal T_{\mathbf S \leftarrow \mathbf R}(p_k) TSR(pk) T D ← R ( p k ) \mathcal T_{\mathbf D \leftarrow \mathbf R}(p_k) TDR(pk)相当于仿射变换中的平移参数,注意这里是两维的(z包含x和y)。平移参数用关键点置信图加权计算:
b k = ∑ z ∈ Z W k ( z ) z b^k = \sum_{z \in \mathcal Z} \mathbf W^k(z)z bk=zZWk(z)z d T S ← R ( p ) d p ∣ p = p k \frac{d \mathcal T_{\mathbf S \leftarrow \mathbf R}(p)}{dp}|_{p=p_k} dpdTSR(p)p=pk d T D ← R ( p ) d p ∣ p = p k \frac{d \mathcal T_{\mathbf D \leftarrow \mathbf R}(p)}{dp}|_{p=p_k} dpdTDR(p)p=pk相当于仿射变换中的线性变换部分,他们作为仿射变换中剩下的4个参数用keypoint predictor network的额外的4个通道估计,每个关键点4个额外的通道。用 P i j k ∈ R H × W P^k_{ij} \in \mathbb R^{H \times W} PijkRH×W表示其中一个通道的估计值,其中 i , j ∈ { 1 , 2 } i,j\in\{1,2\} i,j{ 1,2}是仿射变换的坐标。线性变换的参数用关键点置信图加权融合:
B k [ i , j ] = ∑ z ∈ Z W k ( z ) P i j k ( z ) \mathbf B^k[i,j] = \sum_{z \in \mathcal Z} \mathbf W^k(z)P^k_{ij}(z) Bk[i,j]=zZWk(z)Pijk(z)

密集运动估计

密集运动估计预测整个图像每个像素点的运动模式 T ^ S ← D \hat{\mathcal T}_{\mathbf S \leftarrow \mathbf D} T^SD

我们使用卷积网络从 K K K个关键点处的泰勒展开 T S ← D ( z ) \mathcal T_{\mathbf S \leftarrow \mathbf D}(z) TSD(z)和源图像帧 S \mathbf S S中估计 T ^ S ← D \hat{\mathcal T}_{\mathbf S \leftarrow \mathbf D} T^SD
用关键点处的变换来扭曲源图像帧 S \mathbf S S,可以得到 K K K个变换后的图像 S 1 , ⋯   , S K \mathbf S^1, \cdots, \mathbf S^K S1,,SK。另外,考虑额外的图像 S 0 = S \mathbf S^0 = \mathbf S S0=S作为背景。
对每一个关键点计算heatmap H k ( z ) \mathbf H_k(z) Hk(z)表示每个变换在哪发生。
H k ( z ) = e x p ( ( T D ← R ( p k ) − z ) 2 σ ) − e x p ( ( T S ← R ( p k ) − z ) 2 σ ) \mathbf H_k(z) = exp(\frac{(\mathcal T_{\mathbf D \leftarrow \mathbf R}(p_k)-z)^2}{\sigma}) - exp(\frac{(\mathcal T_{\mathbf S \leftarrow \mathbf R}(p_k)-z)^2}{\sigma}) Hk(z)=exp(σ(TDR(pk)z)2)exp(σ(TSR(pk)z)2)
H k \mathbf H_k Hk S 0 , ⋯   , S K \mathbf S^0, \cdots, \mathbf S^K S0,,SK拼接输入基于U-Net的稠密运动网络(dense motion network)。dense motion network估计 K + 1 K+1 K+1个掩码 M k , k = 0 , ⋯   , K \mathbf M_k, k = 0, \cdots, K Mk,k=0,,K 表示每个位置用哪个局部变换,满足 ∑ k = 0 K M k ( z ) = 1 \sum_{k=0}^K \mathbf M^k(z)=1 k=0KMk(z)=1。最后的密集运动场表示为:
T ^ S ← D ( z ) = M 0 z + ∑ k = 1 K M k ( T S ← R ( p k ) + J k ( z − T D ← R ( p k ) ) ) \hat{\mathcal T}_{\mathbf S \leftarrow \mathbf D}(z) = \mathbf M_0z + \sum_{k=1}^K \mathbf M_k(\mathcal T_{\mathbf S \leftarrow \mathbf R}(p_k) + J_k(z-\mathcal T_{\mathbf D \leftarrow \mathbf R}(p_k))) T^SD(z)=M0z+k=1KMk(TSR(pk)+Jk(zTDR(pk)))
表示为矩阵坐标变换有:
O ( z ) = M 0 ( z ) z + ∑ k = 1 K M k ( z ) A S ← D k [ z 1 ] \mathbf O(z) = \mathbf M^0(z)z + \sum_{k=1}^K \mathbf M^k(z) \mathbf A^k_{\mathbf S \leftarrow \mathbf D} {\begin{bmatrix}{z}\\1\end{bmatrix}} O(z)=M0(z)z+k=1KMk(z)ASDk[z1]

图像生成模块

1.根据上面预测的 T ^ S ← D \hat{\mathcal T}_{\mathbf S \leftarrow \mathbf D} T^SD S S S经过两个下采样卷积的特征图(feature map ) ξ ∈ R H ′ × W ′ \xi \in \mathbb R^{H'\times W'} ξRH×W使用warp操作。
2.在 S S S中存在遮挡的时候, D ′ D' D并不能完全通过warp源图像获得,而是需要inpaint。所以,预测一个遮挡图(occlusion map) O ^ S ← D ∈ [ 0 , 1 ] H ′ × W ′ \hat{\mathcal O}_{\mathbf S \leftarrow \mathbf D} \in [0,1]^{H'\times W'} O^SD[0,1]H×W,表示源图像需要被inpaint的区域。occlusion map通过在dense motion network后添加一层来预测。
经过转换的feature map可以表示为:
ξ ′ = O ^ S ← D ⊙ f w ( ξ , T ^ S ← D ) \xi' = \hat{\mathcal O}_{\mathbf S \leftarrow \mathbf D} \odot f_w(\xi, \hat{\mathcal T}_{\mathbf S \leftarrow \mathbf D}) ξ=O^SDfw(ξ,T^SD) f w f_w fw表示反向变形(back-warping)操作。经过转换的feature map输入到图像生成模块的后面层处理,最后生成图像。

训练

训练的损失由多项组成。首先是基于perceptual loss的reconstruction loss。该loss用预训练的VGG-19网络作为特征提取器,对比重建帧和驱动视频的真实帧的特征差异。

另外考虑到关键点的学习是无标签的,这会导致不稳定的表现,引入Equivariance constraint用在无监督关键点的学习中。假设图片 X X X经过一个已知的变换 T X ← Y \mathcal T_{\mathbf X \leftarrow \mathbf Y} TXY得到 Y Y Y。Equivariance constraint要求:
T X ← R ≡ T X ← Y ∘ T Y ← R \mathcal T_{\mathbf X \leftarrow \mathbf R} \equiv \mathcal T_{\mathbf X \leftarrow \mathbf Y} \circ \mathcal T_{\mathbf Y \leftarrow \mathbf R} TXRTXYTYR通过对两边进行一阶泰勒展开有,并使用L1 loss分别约束关键点处的值和Jacobian。

参考资料

《First Order Motion Model for Image Animation》
《Motion Representations for Articulated Animation》

猜你喜欢

转载自blog.csdn.net/icylling/article/details/130365274