【论文阅读笔记】Camera Distance-aware Top-down Approach for 3D Multi-person Pose Estimation from Single RGB

论文地址:Camera Distance-aware Top-down Approach for 3D Multi-person Pose
Estimation from a Single RGB Image

代码地址:RootNet_3DPoseNet_3D

论文总结

  本文的方法,是在一张图片上预测两个目标:(1)3D人体位置的根节点定位;(2)相对根节点的单人3D姿态估计。和很多方法不同的是,本文在两者的实验中进行了探索,最终决定采用两个网络进行分别训练,而不是单独训练。本文的方法是多人3D姿态检测方法,其性能与当时(2019年)最好的单人3D检测性能相匹配,比当时最好的多人3D姿态检测性能更好;
  本文的方法,是top-down的方法,需要先将对象从2D图像中 crop 出来,再进行根节点和相对根节点的姿态估计,这也是因为抠出来的图片进行绝对坐标预测是困难的。算法的管道如下图所示:分为三个部分:(1)检测bounding box网络DetectNet;(2)根节点定位网络RootNet;(3)相对根节点的3D单人姿态检测网络PoseNet。这种组件组成的方式,让本文的方法可以插入到任意其他的检测网络和pose估计网络当中。框架输出多人的关键点的绝对相机中心坐标,提出了 3D 人体根节点定位网络RootNet。

  DetectNet 检测 bounding box;RootNet 定位 root 结点位置 ( x R , y R , Z R x_R,y_R,Z_R xR,yR,ZR),其中 x R x_R xR y R y_R yR是像素坐标, Z R Z_R ZR是绝对深度坐标;PoseNet 估计相对根节点的3D姿态( x j , y j , Z j r e l x_j,y_j,Z_j^{rel} xj,yj,Zjrel),其中 x j x_j xj y j y_j yj是在crop图片中的像素坐标, Z j r e l Z_j^{rel} Zjrel是相对根节点的深度值。

论文介绍

DetectNet

  Mask RCNN 作为 DetectNet。backbone 产生局部和全局特征(ResNet & FPN);RPN 产生 human bbox 候选;再通过RoIAlign 提取特征,进行分类和回归。

RootNet

  由于RootNet 预测的深度值是相机中心的坐标,所以2D图像关键点要映射到相机中心坐标空间中。
  从整张图片中定位2D姿态位置是较为容易的,因为整张图片提供了充足的信息。但是如果仅从抠出来的人体图片中去估计深度,就是很困难的了。所以,作者引入了一个新的距离度量 k k k,定义为 k = α x α y A r e a l A i m g k=\sqrt{\alpha_x\alpha_y\frac{A_{real}}{A_{img}}} k=αxαyAimgAreal   其中 α x , α y \alpha_x,\alpha_y αx,αy是 focal length 除以 x 轴和 y 轴的 per-pixel distance factors(pixel); A r e a l A_{real} Areal是人体在实际空间(real space)的面积( m m 2 mm^2 mm2); A i m g A_{img} Aimg是人体在图像空间的面积( p i x e l 2 pixel^2 pixel2)。 k k k是相机到目标的绝对深度的近似,使用它的实际面积和成像面积的比率和给定的相机参数的前提下得到的。
  相机和目标之间的距离可以如以下公式所示: d = α x l x , r e a l l x , i m g = α y l y , r e a l l y , i m g d=\alpha_x\frac{l_{x,real}}{l_{x,img}}=\alpha_y\frac{l_{y,real}}{l_{y,img}} d=αxlx,imglx,real=αyly,imgly,real  其中 l x , r e a l , l x , i m g , l y , r e a l , l y , i m g l_{x,real}, l_{x,img}, l_{y,real}, l_{y, img} lx,real,lx,img,ly,real,ly,img是一个目标在真实空间(real space, mm)和图片空间(image space, pixel)在 x 轴和 y 轴 的长度。将上面的公式等号两项相乘起来,开根号,就是第一个公式
  假定 A r e a l A_{real} Areal是一个常数, α x 和 α y \alpha_x和\alpha_y αxαy可以从数据集中获得,所以一个目标的距离可以通过bounding box的面积得到。 A i m g A_{img} Aimg在扩展到一定的长宽比(比如 1 : 1 1:1 1:1)后作为面积,。
  下图展示了 k k k值与真实距离的相关性:

  尽管k可以表示相机到人体的距离,但因为它是按照规则计算出来的,它有可能是错误的(其假定 A i m g A_{img} Aimg A r e a l A_{real} Areal在图像空间)。(1) A i m g A_{img} Aimg是扩展2D bbox 得到的。如下图4(a)所示,尽管目标到相机的距离是一样的,其也可能因为其表现不同(有不同的 A i m g A_{img} Aimg)而有不同的 k k k值。(2)如下图4(b)所示,不同的个体差异(大人和小孩的远近),不同相机距离也可以有一样的(相似的)的 A i m g A_{img} Aimg

  为解决这个问题,设计RootNet去利用图像特征纠正 A i m g A_{img} Aimg,得到最终的 k k k。作者认为图像可为RootNet提供线索,如图4(a)因为有人是蹲着的,可以告诉RootNet去增加面积 A i m g A_{img} Aimg。图4(b)为孩子的 bounding box去增加面积。具体来说,RootNet 输出一个纠正因子,与 A i m g A_{img} Aimg 相乘后得到纠正后的图像面积。

  RootNet产生校正因子 0 γ 0\gamma 0γ。具有任意相机内参( α x 和 α y \alpha_x和\alpha_y αxαy)的数据都可以在训练和测试中应用。作者将这种任意性称作camera normalization,让RootNet变得十分灵活。在训练时,不同( α x 和 α y \alpha_x和\alpha_y αxαy)的数据都用于训练。测试的时候,是没有( α x 和 α y \alpha_x和\alpha_y αxαy)的,这时候将( α x 和 α y \alpha_x和\alpha_y αxαy)设为任意数值代替,就能得到对应的深度估计值 Z R Z_R ZR

  RootNet的网络设计如下图所示:网络架构由三个部分组成:(1)backbone,提取有用的全局特征;(2)2D 图像估计。从Backbone提取feature map,并进行上采样,用三个连续的deconv/BN/ReLU。然后再使用一个 1 ∗ 1 1*1 11的conv,以生成2D heatmap(root关键点的),产生一个关节点;(3)深度估计部分。从Backbone提取feature map,再应用global average pooling,再通过 1 ∗ 1 1*1 11 conv,输出一个标量值 γ \gamma γ

  产生了 γ \gamma γ值之后,绝对深度值 Z R = k γ Z_R=\frac{k}{\sqrt{\gamma}} ZR=γ k。在实际上,可以将RootNet的输出值变成 γ ′ = 1 γ \gamma'=\frac{1}{\sqrt{\gamma}} γ=γ 1,那么绝对深度值 Z R = γ ′ k Z_R=\gamma'k ZR=γk

  RootNet 的损失函数为 L 1 L_1 L1距离, R R R为预测值, R ∗ R^* R为ground truth。 L r o o t = ∥ R − R ∗ ∥ 1 L_{root}=\| R-R^* \|_1 Lroot=RR1

PoseNet

  使用的是《Integral human pose regression》的模型。模型由两个部分组成:(1)backbone,使用ResNet从crop图片后抽取有用的global 特征;(2)姿态检测部分提取feature map进行连续的三个deconv/BN/ReLU,再加 1 ∗ 1 1*1 11 conv应用在上采用层去产生每个关节点的3D heatmap。使用soft-argmax操作去提取2D图像坐标(x_j, y_j)和相对根节点的深度值 Z j r e l Z^{rel}_j Zjrel

  PoseNet的损失函数为 L 1 L_1 L1距离, P j r e l P_j^{rel} Pjrel为相对根节点的预测坐标, P j r e l ∗ P_j^{rel*} Pjrel是相对根节点的ground truth。

论文实验

  在COCO上预训练的Mask RCNN作为DetectNet,而不经过finetune。RootNet和PoseNet的backbone为ResNet-50。在ImageNet上预训练,其余的层采用高斯分布初始化(标准差 α = 0.001 \alpha=0.001 α=0.001)。

  训练细节:视频中的每5帧选一个进行训练,每64帧选择一个进行测试。训练时,加了MPII的2D人体姿态检测进行数据扩展。一个mini-batch中,一半human3.6M数据集,一半MPII数据集。对于MPII数据集,z轴上的损失值为0。这对于RootNet和PoseNet都一样。

  为证明分离管道的有效性,让RootNet和PoseNet进行联合训练与不进行联合训练的实验结果如下:其中MRPE为根节点位置的误差均值。作者认为PoseNet和RootNet的任务关联度不高,联合训练会导致训练难度更大,导致准确度更低。

  对于一样的RootNet,更好的人体检测器能有效改善3D human 定位和3D 多人 pose 估计。但ground truth 的bbox并没有显著提高精度。所以,有理由相信在高检测AP的情况下,给定的bbox已经覆盖了大部分的人体实例。故bbox估计精度对3D多人姿态检测精度影响不大。

  与其他3D检测算法的对比:

猜你喜欢

转载自blog.csdn.net/qq_19784349/article/details/110850638