GO
FOMM需要找到一个从源帧到驱动帧的映射关系,给出最终结果,文中提出:
T
S
←
D
(
z
)
≈
T
S
←
R
(
p
k
)
+
(
d
d
p
T
S
←
R
(
p
)
∣
p
=
p
k
)
(
d
d
p
T
D
←
R
(
p
)
∣
p
=
p
k
)
(
z
−
T
D
←
R
(
p
k
)
)
\mathcal{T}_{\mathbf{S} \leftarrow \mathbf{D}}(z) \approx \mathcal{T}_{\mathbf{S} \leftarrow \mathbf{R}}\left(p_{k}\right)+\left(\left.\frac{d}{d p} \mathcal{T}_{\mathbf{S} \leftarrow \mathbf{R}}(p)\right|_{p=p_{k}}\right)\left(\left.\frac{d}{d p} \mathcal{T}_{\mathbf{D} \leftarrow \mathbf{R}}(p)\right|_{p=p_{k}}\right) \quad\left(z-\mathcal{T}_{\mathbf{D} \leftarrow \mathbf{R}}\left(p_{k}\right)\right)
TS←D(z)≈TS←R(pk)+(dpdTS←R(p)∣
∣p=pk)(dpdTD←R(p)∣
∣p=pk)(z−TD←R(pk))
我每次看到这东西都头疼,所以在这里记录一下。
首先,
T
S
←
D
(
)
\mathcal{T}_{\mathbf{S} \leftarrow \mathbf{D}}()
TS←D()你要看作是一个函数,它是一个映射关系,传入一个
z
z
z值可以得到一个输出
z
′
z'
z′,如何我们能够找到一个这样的映射关系,就等同于我们找到了源帧到驱动帧的映射关系。
文章提出,我们找到这个函数的
T
S
←
D
(
)
\mathcal{T}_{\mathbf{S} \leftarrow \mathbf{D}}()
TS←D(),因此,它对此进行了一阶泰勒展开,引出了它的名字,一阶动态模型。
对于一个函数
f
(
x
)
f(x)
f(x),如果函数
f
(
x
)
f(x)
f(x)在
x
0
x_0
x0处有
n
n
n阶导数,那么存在
x
0
x_0
x0的一个领域,对于该领域内任意一点
x
x
x,有
f
(
x
)
=
f
(
x
0
)
+
f
′
(
x
0
)
(
x
−
x
0
)
+
f
′
′
(
x
0
)
2
!
(
x
−
x
0
)
2
+
⋯
+
f
(
n
)
(
x
0
)
n
!
(
x
−
x
0
)
n
+
o
(
(
x
−
x
0
)
n
)
.
,
\begin{array}{l} f(x)=f\left(x_{0}\right)+f^{\prime}\left(x_{0}\right)\left(x-x_{0}\right)+\frac{f^{\prime \prime}\left(x_{0}\right)}{2 !}\left(x-x_{0}\right)^{2}+\cdots+\frac{f^{(n)}\left(x_{0}\right)}{n !}\left(x-x_{0}\right)^{n}+o\left(\left(x-x_{0}\right)^{n}\right) . \end{array},\\
f(x)=f(x0)+f′(x0)(x−x0)+2!f′′(x0)(x−x0)2+⋯+n!f(n)(x0)(x−x0)n+o((x−x0)n).,
我们对
T
S
←
D
(
z
)
\mathcal{T}_{\mathbf{S} \leftarrow \mathbf{D}}(z)
TS←D(z)在
z
k
z_k
zk处进行一阶泰勒展开,则
T
S
←
D
(
z
)
=
T
S
←
D
(
z
k
)
+
(
d
d
z
T
S
←
D
(
z
)
∣
z
=
z
k
)
(
z
−
z
k
)
+
o
(
∥
z
−
z
k
∥
)
\mathcal{T}_{\mathbf{S} \leftarrow \mathbf{D}}(z)=\mathcal{T}_{\mathbf{S} \leftarrow \mathbf{D}}\left(z_{k}\right)+\left(\left.\frac{d}{d z} \mathcal{T}_{\mathbf{S} \leftarrow \mathbf{D}}(z)\right|_{z=z_{k}}\right)\left(z-z_{k}\right)+o\left(\left\|z-z_{k}\right\|\right)
TS←D(z)=TS←D(zk)+(dzdTS←D(z)∣
∣z=zk)(z−zk)+o(∥z−zk∥)
那就分成了求解两部分,其中一部分是
T
S
←
D
(
z
k
)
\mathcal{T}_{\mathbf{S} \leftarrow \mathbf{D}}(z_k)
TS←D(zk),同样的,这里,我们要知道
T
S
←
D
(
)
\mathcal{T}_{\mathbf{S} \leftarrow \mathbf{D}}()
TS←D()是一个函数。
那么我们其实可以很容易的理解:
T
S
←
D
(
)
=
T
S
←
R
(
T
D
←
R
−
1
(
)
)
\mathcal{T}_{\mathbf{S} \leftarrow \mathbf{D}}()=\mathcal{T}_{\mathbf{S} \leftarrow \mathbf{R}}(\mathcal{T}_{\mathbf{D} \leftarrow \mathbf{R}}^{-1}())
TS←D()=TS←R(TD←R−1())
那么这里的
T
S
←
D
(
z
k
)
=
T
S
←
R
(
T
R
←
D
(
z
k
)
)
=
T
S
←
R
(
T
D
←
R
−
1
(
z
k
)
)
=
T
S
←
R
(
T
D
←
R
−
1
(
T
D
←
R
(
p
k
)
)
)
=
T
S
←
R
(
p
k
)
\begin{aligned} \mathcal{T}_{\mathbf{S} \leftarrow \mathbf{D}}\left(z_{k}\right) &=\mathcal{T}_{\mathbf{S}\leftarrow \mathbf{R}}( \mathcal{T}_{\mathbf{R} \leftarrow \mathbf{D}}\left(z_{k}\right)) \\ &=\mathcal{T}_{\mathbf{S}\leftarrow \mathbf{R}} ( \mathcal{T}_{\mathbf{D} \leftarrow \mathbf{R}}^{-1}\left(z_{k}\right)) \\ &=\mathcal{T}_{\mathbf{S} \leftarrow \mathbf{R}} ( \mathcal{T}_{\mathbf{D} \leftarrow \mathbf{R}}^{-1} ( \mathcal{T}_{\mathbf{D} \leftarrow \mathbf{R}}\left(p_{k}\right))) \\ &=\mathcal{T}_{\mathbf{S} \leftarrow \mathbf{R}}\left(p_{k}\right) \end{aligned}
TS←D(zk)=TS←R(TR←D(zk))=TS←R(TD←R−1(zk))=TS←R(TD←R−1(TD←R(pk)))=TS←R(pk)
注意,上述式子符号很多,很乱,这里的
z
k
z_k
zk其实是驱动帧中的关键点,通过一个映射关系
T
S
←
D
(
)
\mathcal{T}_{\mathbf{S} \leftarrow \mathbf{D}}\left(\right)
TS←D()要能够得到源帧的关键点
p
S
p_S
pS,那为什么最后写成
T
S
←
R
(
p
k
)
\mathcal{T}_{\mathbf{S} \leftarrow \mathbf{R}}\left(p_{k}\right)
TS←R(pk),因为关键点
p
k
p_k
pk是假设的参考帧的关键点。现在,其中一个我们已经求出来了,再看后面部分,后面的部分是对
T
S
←
D
(
)
\mathcal{T}_{\mathbf{S} \leftarrow \mathbf{D}}\left(\right)
TS←D()求导,得到在点
z
k
z_k
zk处的值。
我们可以通过对
T
S
←
D
(
z
)
=
T
S
←
R
(
T
D
←
R
−
1
(
z
)
)
\mathcal{T}_{\mathbf{S} \leftarrow \mathbf{D}}(z)=\mathcal{T}_{\mathbf{S} \leftarrow \mathbf{R}}(\mathcal{T}_{\mathbf{D} \leftarrow \mathbf{R}}^{-1}(z))
TS←D(z)=TS←R(TD←R−1(z))求导,根据链式法则求导得到:
(
d
d
z
T
S
←
D
(
z
)
∣
z
=
z
k
)
=
(
d
d
p
T
S
←
R
(
p
)
∣
p
=
T
R
←
D
(
z
k
)
)
(
d
d
z
T
D
←
R
−
1
(
z
)
∣
z
=
z
k
)
\left(\frac{d}{d z} \mathcal{T}_{\mathbf{S} \leftarrow \mathbf{D}}(z) \mid z=z_{k}\right)=\left(\left.\frac{d}{d p} \mathcal{T}_{\mathbf{S} \leftarrow \mathbf{R}}(p)\right|_{p=\mathcal{T}_{\mathbf{R} \leftarrow \mathbf{D}}\left(z_{k}\right)}\right)\left(\frac{d}{d z} \mathcal{T}_{\mathbf{D} \leftarrow \mathbf{R}}^{-1}(z) \mid z=z_{k}\right)
(dzdTS←D(z)∣z=zk)=(dpdTS←R(p)∣
∣p=TR←D(zk))(dzdTD←R−1(z)∣z=zk)
而
T
R
←
D
(
)
\mathcal{T}_{\mathbf{R} \leftarrow \mathbf{D}}\left(\right)
TR←D()代表的是从驱动帧到参考帧的映射,那么输入驱动帧的关键点
z
k
z_k
zk很显然就会得到参考帧的关键点
p
k
p_k
pk。
p
k
=
T
R
←
D
(
z
k
)
p_k=\mathcal{T}_{\mathbf{R} \leftarrow \mathbf{D}}\left(z_{k}\right)
pk=TR←D(zk)
因此,最终得到:
(
d
d
z
T
S
←
D
(
z
)
∣
z
=
z
k
)
=
(
d
d
p
T
S
←
R
(
p
)
∣
p
=
p
k
)
(
d
d
p
T
D
←
R
(
p
)
∣
p
=
p
k
)
−
1
\left(\frac{d}{d z} \mathcal{T}_{\mathbf{S} \leftarrow \mathbf{D}}(z) \mid z=z_{k}\right)=\left(\left.\frac{d}{d p} \mathcal{T}_{\mathbf{S} \leftarrow \mathbf{R}}(p)\right|_{p=p_{k}}\right)\left(\left.\frac{d}{d p} \mathcal{T}_{\mathbf{D} \leftarrow \mathbf{R}}(p)\right|_{p=p_{k}}\right)^{-1}
(dzdTS←D(z)∣z=zk)=(dpdTS←R(p)∣
∣p=pk)(dpdTD←R(p)∣
∣p=pk)−1
分别代入,得:
T
S
←
D
(
z
)
≈
T
S
←
R
(
p
k
)
+
(
d
d
p
T
S
←
R
(
p
)
∣
p
=
p
k
)
(
d
d
p
T
D
←
R
(
p
)
∣
p
=
p
k
)
−
1
(
z
−
T
D
←
R
(
p
k
)
)
\mathcal{T}_{\mathbf{S} \leftarrow \mathbf{D}}(z) \approx \mathcal{T}_{\mathbf{S} \leftarrow \mathbf{R}}\left(p_{k}\right)+\left(\left.\frac{d}{d p} \mathcal{T}_{\mathbf{S} \leftarrow \mathbf{R}}(p)\right|_{p=p_{k}}\right)\left(\left.\frac{d}{d p} \mathcal{T}_{\mathbf{D} \leftarrow \mathbf{R}}(p)\right|_{p=p_{k}}\right)^{-1}\left(z-\mathcal{T}_{\mathbf{D} \leftarrow \mathbf{R}}\left(p_{k}\right)\right)
TS←D(z)≈TS←R(pk)+(dpdTS←R(p)∣
∣p=pk)(dpdTD←R(p)∣
∣p=pk)−1(z−TD←R(pk))