1.线性蒙皮
1.1 线性蒙皮定义
线性蒙皮:是由一系列骨骼驱动的。每个顶点会根据顶点权重图和相应的骨骼关联。根据骨骼在当前位置相对于静止位置的变换矩阵以及此顶点相对于该骨骼的权重,我们可以计算出该顶点在该骨骼影响下的位置。
假设Wij是第j个骨骼对于第i个顶点的权重,Pi是第i个顶点在静止位置的坐标,|B|是骨骼的数量, Rjt和Tjt分别是第j个骨骼在第t个位置下的旋转矩阵和位移矩阵。综上Vit, 在第t个姿势下第i个顶点的位置可以表述为:
对应公式的理解
1.1.1 权重如何获得?
1.1.1.1 有界双调和权重(Bounded Biharmonic Weights,BBW)
最小化问题可以转化为求解对应的Euler-Lagrange方程,即双调和方程Δ2wj = 0,而其同时满足设定的限制条件
(1)Euler-Lagrange方程
【参考文章】欧拉拉格朗日方程的理解
【参考文章】理解2
(2)公式
【扩展了解】线性蒙皮分解:将网格点分解为骨骼点及其线性变化。
1.1.1.2 网络
当然也可以通过网络获得
1.2 骨骼点
关节点的(x,y,z)坐标是在什么坐标系下的:相机坐标系?
1.2.1 获得骨骼点的方式
【参考文档】骨骼点数据
- 基于身体佩戴传感器的手段
优点:姿态估计结果准确,不存在因为身体遮挡导致的估计失败问题,鲁棒性高。
缺点:价格昂贵,不方便日常使用。
- 基于深度摄像头和彩色摄像头的手段
优点:方便使用,价格较为低廉,准确率较高。
缺点:对遮挡部分同样无能为力,只能通过时序上的上下文信息对某帧的遮挡部分进行推测,经常造成遮挡部分估计失败。
- 基于RGB视频的姿态估计
优点:价格最为低廉,一般摄像头就可以部署,可以大规模使用。
缺点:缺少了深度信息,导致对光照等信息比较敏感,同样无法克服遮挡部分的影响,准确率不如基于深度和彩色摄像头联合使用的效果。
1.2.2 经典网络
(1)直接预测
openpose
(2)通过静态顶点获得静态关节点
smpl
1.3 蒙皮的Q&A
参照smpl
(1)为什么需要骨骼点直接回归到网格顶点不行吗?
直接存储骨骼点的话需要大量参数(骨骼点x,y,z坐标*旋转),用骨骼点在一定程度能减少?
第一条公式表示每部分关节点对顶点的影响(在这条公式中,顶点是定值,关节点是多元的)
- W k,i :代表关节点k对顶点v的影响程度
- G’k(…):移除静态模板下的世界坐标系的变化后的关节点变化
- ti:代表顶点
(2)骨骼点一般如何获得?
在smpl中 通过一个回归器回归出来
2.RBF差值(Radial Basis Function)与PSD(Pose Space Deformation)
2.1 Q&A
Q1: the shortcomings of basic blend skinning?
PSD是为了解决 basic blend skinning(其实应该可以理解成线性混合蒙皮)的皮肤延展性欠缺
皮肤延展性欠缺出现的原因:
Q2:psd?
PSD是在骨架驱动动画中对网格进行变形的一种计算机动画技术。 这种技术的常用方法是根据关节(在本例中是肘部)弯曲的角度来改变网格(例如手臂)的形状。
进一步::wpsd
3.得到伪3d标注框的两种方式
(1)one-stage:是使用2d/3d关节点坐标进行弱监督
(2)two-stage:在预处理阶段先使用一阶段标注器获得初始的3D伪标注框,然后使用初始的3D伪标注框进行全监督并通过2d/3d关节点坐标进行弱监督
4.smpl
5.openpose
学一学openpose!!!
bottom-up https://zhuanlan.zhihu.com/p/387500023
【已看】openopse
openpose
6.smpl、smplh、smplx三个模型在选取上有什么区别?
Learning Skeletal Articulations with Neural Blend Shapes(使用神经混合形状学习骨骼关节)SIGGRAPH 2021顶刊解析
7.其他乱七八糟的论文
手工标注关键点
某个json文件:
"image_id": 57703,
"bbox": [
471.62,
46.58,
146.29,
328.61
],
"category_id": 1,
"id": 185438,
"face_box": [
0.0,
0.0,
0.0,
0.0
],
"lefthand_box": [
0.0,
0.0,
0.0,
0.0
],
"righthand_box": [
513.28,
168.39,
23.08000000000004,
27.350000000000023
],
"lefthand_kpts": [
....
],
"righthand_kpts": [
520.0,
170.0,
0.052383359521627426,
525.5,
171.5,
....
],
"face_kpts": [
.....
],
"face_valid": false,
"lefthand_valid": false,
"righthand_valid": true,
"foot_valid": true,
"foot_kpts": [
.....
]
},
{
"segmentation": [
[
176.2,
437.5,
.....
]
],
"num_keypoints": 14,
"area": 5396.2283,
"iscrowd": 0,
"keypoints": [
......
],
不清楚的点
(1)通过什么其他方式可以达成标注?
(2)smplify可以做吗?如何呈现效果?
(3)还有什么有效的方法?
dyna模型
?