Shape Analysis课程笔记16-Vector Fields Discretization

 

这个系列是MIT 6.838: Shape Analysis的同步课程笔记。本课程会介绍几何方法在图形学、机器学习、计算机视觉、医疗图像以及建筑设计等相关领域的原理和应用。本节主要介绍向量场在三角网格上的应用。

目前向量场在三角网格上的表示方法主要有3种:基于面的、基于边的以及基于顶点的表示方法。

Triangle-Based

离散向量场在表示时的难点在于三角网格上无法定义严格的切平面。而在基于面的表示方法中,我们直接把每个三角形所在平面当做曲面的切平面,这样就只需要为每一个面赋予平面内的一个向量就得到了向量场。

Discrete Levi-Civita Connection

基于面的方法还有一个优势在于我们可以很容易地定义平行传输,此时只需要把相邻三角形展开成平面然后直接移动向量即可。但需要注意的是由于Gauss曲率的存在,在同一顶点连接的三角形上经过平行传输一圈后向量会和初始向量存在一个夹角。

为了处理这样的问题,我们可以在进行平行传输的时候额外旋转一个角度。即为三角网格的每一条边赋予一个平面旋转,当平行传输经过这条边时需要再进行相应的旋转。

Trivial Connection

这样就可以保证向量在进行平行传输时不会有holonomy的现象,同时还可以证明如此构造的向量场是与传输路径无关的。

基于这种思路我们可以把向量场的设计转换为每条边旋转角度的计算,进而构造一个约束优化问题。

Helmholtz-Hodge Decomposition

在面上设计向量场的另一个强大工具是Helmholtz-Hodge分解(Helmholtz-Hodge decomposition),它指出任意向量场可以表示为无散场、无旋场以及调和场之和。

结合维度分析可以得到三个场的维度分别为\(\vert E \vert - 1\)、\(\vert V \vert - 1\)和\(2g\)。

实际上无散场和无旋场的维度还可以互换。

不过需要注意的是对于边上定义的场可能会出现不连续的情况。

Edge-Based

Vertex-Based

最后一种常见的表示离散向量场的方式是基于顶点的表示。这种方式的好处在于允许我们计算高阶的微分,但是需要注意在顶点上没有天然的切平面,而且也要考虑Gauss曲率的影响。

2D Planar Case

对于二维平面的情况,基于顶点的向量场表达非常容易。我们只需要为每一个顶点赋予一个平面向量,然后在三角形内对顶点进行插值即可。

平面图形的运动变形就可以基于这样的二维向量场来实现。

3D Case

在三维空间中的三角网格上则不能直接通过插值的方式来获得切向量。

在这种情况下可以考虑geodesic polar map来进行插值。

Operator-Based

除了上面介绍过的几种方式,近几年还出现了一些基于算子的向量场表示方法。

Continuous Normalizing Flows

向量场除了CG领域外在机器学习中也有着相当多的应用。normalizing flow(NF)是近几年出现的一种生成式模型,更多的技术细节可以参考论文Normalizing Flows for Probabilistic Modeling and Inference

Problem Description

NF的目标是对复杂的概率分布进行建模。这里需要说明的是现实生活中的数据往往都来自于非常复杂的概率分布,我们很难只用少量的参数来描述它们。

而NF的思路是从相对简单的basic distribution \(u \sim p_\psi(u)\)进行采样,通过设计一个映射\(T_\phi\)来获得所需的概率分布。

Sampling

为了从\(p_\psi\)中进行采样,我们一般要求已知\(p_\psi\)的pdf而且有比较简单的采样算法。在大多数情况下我们可以把(标准)正态分布作为basic distribution。

Mapping

NF的目标是学习一个basic distribution到\(p_\phi\)的映射,它一般可以由一个神经网络来表示。

我们进一步要求映射\(T_\phi\)及其逆\(T_\phi^{-1}\)是可微的,则目标分布的概率密度可以表示为:

\[p(x) = p_\psi (u) \vert \det{J_{T_\phi}(u)} \vert^{-1}, \ \text{where} \ u = T_\phi^{-1}(x)\]

其中\(J_{T_\phi}\)为映射\(T_\phi\)的Jacobian矩阵。

Example

利用NF的概率密度变换公式,我们可以把样本在目标分布上的MLE进行展开:

再结合现代神经网络库的自动微分功能就可以轻松地进行训练。

Continuous Normalizing Flow

实际上我们可以从向量场来认识NF。这里先引入continuous normalizing flow(CNF),它等价于求解一个关于时间\(t\)常微分方程:

\[\frac{d z_t}{d t} = g_\phi (t, z_t), \ \text{with} \ u=z_{t_0}, x=z_{t_1}\]

这表示basic distribution会通过一个连续的映射来流动到目标分布。而在任意时刻\(t\)上\(g_\phi (t, z_t)\)给出了\(z_t\)进行流动的方向向量,即\(g_\phi (t, z_t)\)是一个向量场。

我们在时间上进行积分就得到了概率分布之间的变换:

\[x = z_{t_1} = u + \int_{t_0}^{t_1} g_\phi (t, z_t) \ dt\] \[u = z_{t_0} = x - \int_{t_0}^{t_1} g_\phi (t, z_t) \ dt\]

Forward Euler

要求解CNF我们可以使用前向欧拉(forward Euler)进行显式积分:

Log-Density

Reference