一 写在前面
未经允许,不得转载,谢谢~~~
这篇论文主要是将如何通过GCN网络实现人体从单张图像到3D mesh的重建过程的。
- 文章出处: 2019 CVPR oral
- 文章链接: https://arxiv.org/abs/1905.03244
- 项目website:https://www.seas.upenn.edu/~nkolot/projects/cmr/
- 项目代码:https://github.com/nkolot/GraphCMR/
二 主要内容
2.1 motivation
1. 任务难
从单张图像重建出三维模型这个过程本身就很难,主要有以下几点:
- multiple cameras 多相机角度;
- the excessive ambiguity 过度模糊;
- the limited training data 训练数据有限;
- the wide range of imaging conditions;相差较大的成像条件;
2. 之前的方法
- 一开始是基于优化的方法:optimization method;
- 后来比较多的是基于学习的方法:Learning-based method;
而在基于学习的方法里大多数研究的是基于什么模态进行学习,例如:
- Surface landmarks;
- pose keypoints and silhouettes ;
- semantic part segmentation ;
- raw pixels.
但是大多数的模型都是用SMPL(非常经典的做人体重建的一篇文章)的参数化表示方法作为回归目标,这一点在作者看来是非常self-constraint的。
2.2 related work
- Optimization-based shape recovery: 基于优化方法的形状重建
- Direct parametric regression: 直接参数回归
- Nonparametric shape estimation: 非参数化形状估计
- Graph CNNs: 图卷积神经网络
2.2 本文工作
- 用了一个更加混合的学习方式,保留了SMPL的模板mesh,但是并没有直接回归SMPL的模型参数,而是通过回归模板mesh上的各个点坐标来达到生成想要的人体模型的效果。
- 考虑到人体需要有很多的点来表示,所以用GCN网络。
-
具体从image到mesh的变换学习过程如下所示:
主要的pipeline为:
- 给定一张图,用任何一个经典的2D CNN都可以提出到低维的图像特征;
- 将低纬度的图像特征嵌入到template mesh的各个顶点中;
- 这样每个顶点都有其坐标位置及对应的feature vector;
- 通过GCN层来不断迭代进行优化;
- 最后得到回归后的3D mesh的各个顶点坐标,对应图中的output mesh;
三 具体实现
3.1 image-based CNN 图像特征提取网络
- 用ImageNet预训练的RestNet50作为通用的图像特征提取器;
- 对于每个输入图像,都能获取到2018D的特征向量;
- 文章中还探索了其他方式的数据,但这不是研究重点。
3.2 GCN 图卷积神经网络
本文的一个核心就是用GCN来回归mesh的各个顶点的坐标,前文所述的将二维图像特征合并到三维人体的各个顶点上去之后的迭代学习的过程就是通过GCN来实现的。
1. GCN
对于GCN,理解一下这个表示:
- X, 维度:[N,k], 表示输入的特征向量,对应上图中的
Input: Image features ⊕ template 3D coordinate
- W, 维度:[k, l ], 表示待学习的权重参数;
- A~, 维度:[N,N], 表示邻接矩阵,即反应mesh中各个顶点之间的连接关系;
这个操作其实等价于对每个顶点都做一个fc操作,然后再对相邻的顶点之间进行一次avg pooling的操作。这里avg pool的作用的可以保证相邻节点之间的平滑性,这样在loss设计的时候就不需要额外去考虑这个因素。
[未验证]体现在具体实现上应该就是先对输入X做一次fc(参数为W),然后再对邻居节点(通过A~确定)做一次avg pooling;
2. 残差结构
文章还使用残差结构来加快U型你连过程呢个,并得到质量更好的结果。
文中描述:基本的残差块结构与残差网络中的类似,做了如下改进:
-
1*1
的卷积层用per-vertex fc layer
代替; -
BN
层用grounp normalization layer
代替;
3. 其他
除了用GCN回归了mesh的顶点坐标,还回归到了相机的参数:
- scaling factor:s
- 2D translation: t
3.3 network training 模型训练过程
1. ground truth
-
Y
, 维度[N,3] , 表示目标形状的各个坐标点表示; -
X
,表示目标二维图像的2D关节点位置表示;
2.模型预测结果
-
Y^
, 模型预测得到的mesh上的各个点坐标; -
X^
, 通过将Y^
用类似于SMPL里面的方法得到3D关节点J^_3D
,然后将其映射回2D得到的关节点坐标位置。
3.loss计算
根据上述提到的3D形状及对应的2D关节点,分别构成两部分的loss:
-
形状loss:
-
关节点loss:
-
最终loss:
对于有些没有对应关节点
X^
的数据,就只用形状loss(实验证明也可以)。
四 datasets 数据集
- Human3.6M
- UP-3D
五 写在最后
有机会要跑一下源码~
最后跑个题,我爱麻麻,最大的愿望就是家人一切都好,也祝所有的天下母亲节日快乐ヾ(°∇°)ノ゙