跳转至

科研记录

🤖 此处会记录整理在Robotics科研过程中学习到的一些知识点、想法等等。

SMPL模型

全名是Skinned Multi-person Linear Model,实际上就是用参数化方式表示任意人体的模样。最重要的两个参数\(\beta\)参数和\(\theta\)参数,前者代表形状,后者代表k+1关节点相对于其父关节点的旋转姿态,还有一个不太重要的表面参数 \(\phi\)

SMPL模型会预设24个人体关节点,称为骨骼点。

人体模型通过Mesh网格进行表达,6890个三维端点坐标连接形成mesh。

人体模型合成分为三步:对基模版加上形状参数-->加上旋转参数-->估计骨骼点位置+蒙皮

smpl的构建过程

  1. 首先是一些标记的动捕数据

  2. 根据这些数据,计算三个变量,\(\theta_t,\beta_t,\phi_t\) 分别代表姿态参数(159维),形状参数 (16维) 和表面参数 (8维)。而对于机器人来说,最重要的实际上就是姿态参数,包括了3x52维度旋转姿态和3维度平移姿态。实际上AMASS数据集里每个片段时间上就是T帧的上述数据,存储为npz格式

  3. 然后通过SMPL模型可以获得拟合mesh的参数(存储为pkl格式),如G、T、J等等,用这些参数,可以计算出6890x3的顶点坐标,然后就可以渲染出3D人体。

SMPL、SMPLH、SMPLX区别

SMPLH加了手部参数,SMPLX加了手部和脸部参数

变分自编码器VAE及其相关变体

VAE核心思想 本质好像是用概率分布q(z|x)去近似原始后验概率p(z|x)。因此q(z|x)是编码器,p(x|z)是解码器,然后用一个目标函数来优化这俩参数。“变分”的含义在于编码器的输入不是一个向量,而是一个概率分布。

VQ-VAE 编码器的输出分为两个阶段,首先是\(z_e(x)\),代表一个向量,然后与codebook里的向量匹配,取最相近的向量k,得到新输出\(z_q(x)=e_k\)。后面解码器与VAE相同。这里的codebook是可学习的向量库。然后\(z_q(x)\)\(z_e(x)\)的梯度传播采用了直通法,直接把\(z_q(x)\)梯度复制给\(z_e(x)\)。至于encoder、codebook和decoder的训练的损失函数如下所示(sg代表不计算梯度):

\[ L=log p(x|z_q(x))+ ||sg(z_e(x))-x||_2^2 + ||z_e(x)-sg(x)||_2^2 \]