人体姿态ICCV2019(十一)Oral---Learnable Triangulation of Human Pose

在这里插入图片描述
原文:Learnable Triangulation of Human Pose
代码:Pytorch


       

Abstract

       本文提出 两种 基于新的可学习三角剖分方法的多视图3D人体姿态估计的新方案

  1. 第一个(baseline)解决方案是一个 基本的可微分代数三角化,加上从输入图像估计的置信权值
  2. 第二种则是基于 从中间的2D特征图进行体积聚合 的新方法。然后该聚合体通过3D卷积 精化,产生最终的3D关节点热图。

       

1. Related work

1.1 Single view 3D pose estimation

       当前单视角3D姿态估计的最新解决方案可以分为两个子类别。

  • 第一类是 使用高精度的的2D姿态估计器,然后再通过深度神经网络(FC、卷积或递归)将2D坐标提升为3D。该方案具有几个优点:简单,快速,可以在运动捕获数据上进行训练(带有骨架/视图增强),并且可以在训练后更换2D backbone。

  • 第二类是使用卷积神经网络 直接从图像回归3D坐标。当前的最佳解决方案是使用姿势的体积表示。

1.2 Multi-view view 3D pose estimation

       基于多视角的工作中很少使用体积姿态表示。具体来说,有些工作使用2D关节点概率热图(从预先训练的2D关节点检测器获得),然后通过随后的不可学习的聚合将其转化到体积层面。

       本文工作与上面不同之处有二。

  • 本文以一种可学习的方式处理体积信息。
  • 可以端到端地训练网络。

       D.Tome etc 采用多阶段方法,其中使用了外部的3D姿势先验来从2D关节推断出3D姿势。在第一个阶段,所有的视图都通过卷积神经网络来获得2D关节的热图。通过3D姿态先验空间中优化潜在坐标,以及使用热图中的最大值位置共同来推断3D姿态,在之后的每个阶段中,将3D姿势重新投影回所有摄影机视图,并与来自上一层的预测(通过卷积网络)融合在一起。接下来,根据热图最大值的位置重新估算3D姿态,然后重复该过程。这样的程序允许通过对人体姿势的间接整体推理来校正2D联合热图的预测

       本文工作与上面不同之处则是:

  • 上面工作没有从3D预测到2D热图的梯度流,因此没有直接信号来校正3D坐标的预测。

       

2. Method

 
参数说明:

  • C C C cameras;
  • 已知的投影矩阵 P c P_{c} Pc
  • 世界坐标系下的3D坐标位置 y j , t \mathbf{y}_{j, t} yj,t(其中 j ∈ ( 1 … J ) j \in(1 \ldots J) j(1J) t t t 则是表示时间。 (由于每一帧都是独立来处理,没有使用到时间信息,为简要说明之后省略 t t t 来陈述);

       对于每一帧都使用Bounding box来对图像进行裁剪,这些边界框可以通过现成的2D人类检测器进行估算,也可以通过GT值来进行估算。

  • 裁剪后的图像 I c I_{c} Ic
  • 将输入的图像输入到 ResNet-152 网络里,输出用 g θ g_{\theta} gθ 表示;
  • 将上面的输出再通过一系列反卷积得到 中间层热图,用 f θ f_{\theta} fθ 表示;
  • 最后通过 1×1 卷积网将中间热图转化为关节点热图 h θ h_{\theta} hθ

       

2.1. Algebraic triangulation approach

       基线代数三角剖分方法的主要缺点是,来自不同相机的图像 I c I_{c} Ic 彼此独立地处理,因此,没有简单的方法可以预先添加3D人体姿势,也无法过滤掉错误投影矩阵的相机。

在这里插入图片描述

  • 先从裁剪的图像里得到相对应的关节点热图:
                                        H c , j = h θ ( I c ) j H_{c, j}=h_{\theta}\left(I_{c}\right)_{j} Hc,j=hθ(Ic)j
  • 为估算出2D位置,首先计算 softmax
                   H c , j ′ = exp ⁡ ( α H c , j ) / ( ∑ r x = 1 W ∑ r y = 1 H exp ⁡ ( α H c , j ( r ) ) ) H_{c, j}^{\prime}=\exp \left(\alpha H_{c, j}\right) /\left(\sum_{r_{x}=1}^{W} \sum_{r_{y}=1}^{H} \exp \left(\alpha H_{c, j}(\mathbf{r})\right)\right) Hc,j=exp(αHc,j)/(rx=1Wry=1Hexp(αHc,j(r)))
  • 再通过 soft-argmax 得到位置:
                            x c , j = ∑ r x = 1 W ∑ r y = 1 H r ⋅ ( H c , j ′ ( r ) ) \mathbf{x}_{c, j}=\sum_{r_{x}=1}^{W} \sum_{r_{y}=1}^{H} \mathbf{r} \cdot\left(H_{c, j}^{\prime}(\mathbf{r})\right) xc,j=rx=1Wry=1Hr(Hc,j(r))
  • 最后从2D估计点来得到3D点 y j \mathbf{y}_{j} yj

在这里插入图片描述

  • 由于使用 RANSAC 会完全阻断到排除相机的梯度流,因此加上权值:
                                        ( w j ∘ A j ) y ~ j = 0 \left(\mathbf{w}_{j} \circ A_{j}\right) \tilde{\mathbf{y}}_{j}=0 (wjAj)y~j=0
    其中 w j = ( w 1 , j , w 1 , j , w 2 , j , w 2 , j , … , , w C , j , w C , j ) \mathbf{w}_{j}=\left(w_{1, j}, w_{1, j}, w_{2, j}, w_{2, j}, \ldots,, w_{C, j}, w_{C, j}\right) wj=(w1,j,w1,j,w2,j,w2,j,,,wC,j,wC,j) ∘ \circ 代表哈达玛(Hadamard)积,即基本矩阵相乘;
                                        w c , j = ( q ϕ ( g θ ( I c ) ) ) j w_{c, j}=\left(q^{\phi}\left(g^{\theta}\left(I_{c}\right)\right)\right)_{j} wc,j=(qϕ(gθ(Ic)))j
  • 最后求解出 y j \mathbf{y}_{j} yj
                                            y = y ~ / ( y ~ ) 4 \mathbf{y}=\tilde{\mathbf{y}} /(\tilde{\mathbf{y}})_{4} y=y~/(y~)4

       

2.2. Volumetric triangulation approach

       为了解决这个问题,我们建议使用更复杂,更强大的三角剖分程序。我们将2D主干生成的特征图投影到3D体积中。这是通过将2D网络的输出沿3D立方体内部的投射光线投射到人周围来填充3D立方体来完成的。
在这里插入图片描述

  • 对于体积三角剖分方法,不必需要关节点热图,只用中间热图即可,因此将 f θ ( I c ) f^{\theta}\left(I_{c}\right) fθ(Ic) 输入到权值为 γ \gamma γ 的单层卷积网络 o γ o^{\gamma} oγ 中:
                                 M c , k = o γ ( f θ ( I c ) ) k M_{c, k}=o^{\gamma}\left(f^{\theta}\left(I_{c}\right)\right)_{k} Mc,k=oγ(fθ(Ic))k
  • 为得到体积格子volumetric grid,先采用2.1. 节介绍的代数三角剖分baseline来估计人体根节点骨盆的世界坐标,再以根节点骨盆为中心生成一个 L × L × L L \times L \times L L×L×L 的3D bounding box,最后用体素块来离散化bounding box,得到 V coords  ∈ R 64 , 64 , 64 , 3 V^{\text {coords }} \in \mathbb{R}^{64,64,64,3} Vcoords R64,64,64,3
  • 对于每个视角,将3D坐标投影到2D,即: V c proj  = P c V coords  V_{c}^{\text {proj }}=P_{c} V^{\text {coords }} Vcproj =PcVcoords ,其中 V proj  ∈ R 64 , 64 , 64 , 2 V^{\text {proj }} \in \mathbb{R}^{64,64,64,2} Vproj R64,64,64,2
  • 然后双线性填充: V c , k view  = M c , k { V c proj  } V_{c, k}^{\text {view }}=M_{c, k}\left\{V_{c}^{\text {proj }}\right\} Vc,kview =Mc,k{Vcproj }
  • 最后将所有的体积块聚合(此处有三种方法)
  1. 直接求和:
                                        V k input  = ∑ c V c , k view  V_{k}^{\text {input }}=\sum_{c} V_{c, k}^{\text {view }} Vkinput =cVc,kview 
           
  2. 使用归一化置信度:
                                 V k input  = ∑ c ( d c ⋅ V c , k view  ) / ∑ c d c V_{k}^{\text {input }}=\sum_{c}\left(d_{c} \cdot V_{c, k}^{\text {view }}\right) / \sum_{c} d_{c} Vkinput =c(dcVc,kview )/cdc
                  其中:归一化置信度–> d c d_{c} dc obtained similarly to w c w_{c} wc using a branch attached to backbone
           
  3. 计算体积系数 V c , k w V_{c, k}^{w} Vc,kw,等同于 d c d_{c} dc 所扮演的角色:
                          V c , k w = exp ⁡ ( V c , k view  ) / ∑ c exp ⁡ ( V c , k view  ) V_{c, k}^{w}=\exp \left(V_{c, k}^{\text {view }}\right) / \sum_{c} \exp \left(V_{c, k}^{\text {view }}\right) Vc,kw=exp(Vc,kview )/cexp(Vc,kview )
                                 V k input  = ∑ c V c , k w ∘ V c view  V_{k}^{\text {input }}=\sum_{c} V_{c, k}^{w} \circ V_{c}^{\text {view }} Vkinput =cVc,kwVcview 
  • 最后将生成的 V k input  V_{k}^{\text {input }} Vkinput  输入到 V2V 网络里得到3D关节点。

       

3. Experiments

3.1. Human3.6M

在这里插入图片描述

3.2. CMU

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值