Cross View fusion for 3D Human Pose Estimation 论文解读
paper title: Cross View fusion for 3D Human Pose Estimation
paper link:https://arxiv.org/abs/1909.01203
oral or demo video:https://www.youtube.com/watch?v=CbTUC7kOk9o
project: -
github:https://github.com/microsoft/multiview-human-pose-estimation-pytorch
conf & anthor:ICCV 19, Haibo Qiu(USTC,MSRA) et al;
arXiv submit v1:2019.09
主要内容
这篇文章主要提出一种多视图融合的3D姿态估计方法,主要分为三部分:(1)是使用2D关键点检测网络分别对各个视图做关键点检测,(2)是对不同视图的结果进行融合,(2)是用递归的图结构模型估计3D人体姿态。
方法流程
多视图融合
由于3D姿态估计的准确性严重依赖于2D关键点检测的准确性,但是目前的2D姿态估计由于遮挡、相机视角等原因,检测结果并不能做到很准确。所以这篇文章想通过不用视角下的heatmap进行融合,以提高2D关键点的准确性。
总体的流程如下,首先多个视图得到的图片分别独立经过2D检测网络输出得到heatmap,然后将不同视图的heatmap进行融合。2D检测和融合是用一个CNN实现的,可以实现端到端的训练。
对于两个相机视图 C u , C v C_{u},C_{v} Cu,Cv,视图融合可以由以下的公式表示:
x i u ← x i u + ∑ j = 1 ∣ Z v ∣ w j , i x j v , ∀ i ∈ Z u x^{u}_{i} \leftarrow x^{u}_{i} + \sum^{|Z^{v}|}_{j=1} w_{j,i}x^{v}_{j}, \forall i \in Z^{u} xiu←xiu+j=1∑∣Zv∣wj,ixjv,∀i∈Zu
其中:
- Z u , Z v Z^{u},Z^{v} Zu,Zv分别表示视图 C u , C v C_{u},C_{v} Cu,Cv输出的heatmap上的元素集合;
- x i u , x j v x^{u}_{i},x^{v}_{j} xiu,xjv分别是示视图 C u , C v C_{u},C_{v} Cu,Cv上的第i和j个位置处的heatmap的值;
- w j , i w_{j,i} wj,i表示 C u C_{u} Cu上第i个位置对于与 C v C_{v} Cv上第j个位置的关联权重;
这个权重 w j , i w_{j,i} wj,i是通过一个全连接网络学习到的。
如下图所示,3D空间中的一个点,会在两个相机视图上成像(都能看到这个点的情况下),也就是说 C u C_{u} Cu上的一个点会和 C v C_{v} Cv上的点有关联,由于没有深度,那么根据对极线原理, C u C_{u} Cu上的一个点对应到 C v C_{v} Cv上是一条对极线。
文章中提出两种方法来学习权重,一是只学习这条对极线上的权重,其他点的权重在当前样本学习的时候置为0;二是不做限制,让网络自己去学习权重;文章实验发现这两种方法的结果差不多,最后用的后一种更简单的方法。
那在训练的过程中,网络已经学习到了相机之间的位置关系。对于这个问题,文章也提出了一种解决方案使当前模型适应于新的环境。
RPSM(递归图结构模型)
文章采用图结构表示人体: S = J 1 , J 1 , . . . , J M S={J_{1},J_{1},…,J_{M}} S=J1,J1,…,JM,其中 J i = [ x i , y i , z i ] J_{i}=[x_{i},y_{i},z_{i}] Ji=[xi,yi,zi]。给定一个3D姿态 S S S和2D的heatmap F F F,那么后验为:
p ( S ∣ F ) = 1 / Z ( F ) ∏ i = 1 M ϕ i c o n f ( J i , F ) ∏ ( m , n ) ∈ ε ψ l i m b ( J m , J n ) p(S|F) = 1/Z(F) \prod^{M}_{i=1}\phi^{conf}_{i}(J_{i},F) \prod_{(m,n) \in \varepsilon}\psi^{limb}(J_{m},J_{n}) p(S∣F)=1/Z(F)i=1∏Mϕiconf(Ji,F)(m,n)∈ε∏ψlimb(Jm,Jn)
其中:
- F F F是2D的多个视图的heatmap;
- Z ( F ) Z(F) Z(F)是配分函数;
- ε \varepsilon ε是人体关节点连接起来的边的集合;
- ϕ i c o n f ( J i , F ) \phi^{conf}_{i}(J_{i},F) ϕiconf(Ji,F)是基于多视图的2D heatmap的一元势函数;
- ψ l i m b ( J m , J n ) \psi^{limb}(J_{m},J_{n}) ψlimb(Jm,Jn)是点对势函数,编码了肢体长度约束;
人体的图模型结构如下图所示,含有17个关节点和16个边:
(1)状态空间离散化
首先根据所有视图下的人体根关节的2D位置,通过三角计算的方式计算出跟关节的3D位置。然后以此为中心设定一个边长为2000毫米的立方体,并将其划分为 N x N x N NxNxN NxNxN个小立方体网格 G G G;
(2)一元势函数
每一个人体关节点假设是网格 G G G中的一个小格子,具体由其世界坐标位置确定;使用各个相机的参数将3D关节点的位置投影到heatmap F F F上,并得到对应的confidence值,然后将所有的confidence计算均值作为一元势函数;
(3)点对势函数
离线处理时,对人体图模型的边集合 ε \varepsilon ε中的一对关节点 ( J m , J n ) (J_{m},J_{n}) (Jm,Jn)计算训练集中的平均长度 l m , n ∗ l^{*}_{m,n} lm,n∗肢体长度的先验;在预测时,点对势函数定义为:
ψ l i m b ( J m , J n ) = { 1 , i f l m , n ∈ [ l m , n ∗ − ϵ , l m , n ∗ + ϵ ] 0 , otherwise \psi^{limb}(J_{m},J_{n}) = \begin{cases} 1,if \ l_{m,n} \in [l^{*}_{m,n}-\epsilon,l^{*}_{m,n}+\epsilon] \\ 0, \text{otherwise} \end{cases} ψlimb(Jm,Jn)={ 1,if lm,n∈[lm,n∗−ϵ,lm,n∗+ϵ]0,otherwise
其中, l m , n l_{m,n} lm,n是关节点 J m , J n J_{m},J_{n} Jm,Jn之间的距离, ϵ \epsilon ϵ设置为150毫米。点对势函数这一项会使学习的3D姿态有合理的肢体长度。
最后就是要最大化后验 p ( S ∣ F ) p(S|F) p(S∣F),可以通过动态规划求解,计算复杂度是 O ( N 6 ) O(N^{6}) O(N6)。
递归图结构模型(Recursive Pictorial Structure Model)
PSM模型的精度受网格离散化的网格数目影响较大,提高网格数目能够提高精度,但是会增加计算量。文章提出一种递归调优的方法优化关节点的3D位置,将求解过程分为多个阶段,在初始阶段设置一个较小的网格划分数目(N=16),得到一个粗略的结果,然后在下一阶段,以上一步的结果位置的立方体再细化为更小的立方体,再次求解。如下。
实验结果
文章做了一些对比试验,得到一些结论:
- 在2D点准确度较差时,RPSM比Triangulation方法显著好;在2D结果比较准确的时候,效果相当;
- RPSM比PSM,可以逐步减小误差,达到收敛;
- 使用多视图特征融合,可以显著降低误差;
- 与其他方法的结果比较上,体现出更小的平均误差(31.17mm);
泛化性:
(1) 对于新数据集 TotalCapture: 结果相比其他论文更好,视图融合比使用单视图能有效提高准确性;
(2) 对于新的相机摆放设置:在一个新的相机布置环境上,使用伪随机的label进行训练,就可以达到较好的效果(43mm),并不一定需要当前的相机布置下的标注数据进行训练;
还没有评论,来说两句吧...