Recovering Accurate 3D Human Pose in The Wild Using IMUs and a Moving Camera. ECCV2018 阅读理解

本文提出一个构建3D数据集的方法,并开源了一个室外多人的3D数据集,即3DPW。

           在这项工作中,我们提出了一种方法,将单个手持摄像机和一套附在肢体上的惯性测量单元(imu)结合起来,在野外估计准确的3D姿态, 这带来了许多新的挑战:移动的摄像机,航向漂移,混乱的背景,遮挡和视频中可见的许多人。

​​​​​​​

整个数据构建流程可以简述为3步:

第一步:基于第一帧,通过迭代最小化IMU输出的方向值和基于SMPL得到的方向值以及一些pose的先验约束,可以得到一个不错的SMPL pose作为初始值。

第二步:为每一个pose匹配到其对应的2d 坐标,涉及到匹配问题。

第三步:需要考虑整个视频序列以及IMU的航向漂移,通过pose可以获得SMPL输出的3D点,将其投影到图像,计算投影的2d和第二步得到的2d直接的误差,通过最小化这个误差,同时还需要最小化其他数据项,例如输出的相关方向与IMU的输出值之间的误差,关于pose的一些先验约束,例如多模态的高斯分布等。

背景知识:这里有两个背景知识,第一个就是我们所需要求解的pose和IMU读取的数值之间存在多个坐标系的转化,另外一个就是IMU受到磁场干扰会产生航向漂移。

第一个知识点:根据上图去找推到出SMPL的pose参数与IMU获取的相关数据之间的关系。即G_BS。

知识点2: IMU存在航向漂移问题,以前的处理方法是将其看作噪声或者忽略,因为往往在一个连续时间很长的情况下会放大这种问题,本文则将其建模为一个关于一个旋转角的函数。

细节概述:

先通过将SMPL拟合到3D扫描文件获取SMPL的形状参数,后期这个参数保持不变。

第一步:获取初始化pose

       先处理视频的第一帧,假设已经知道了第一帧里面的相关目标人物的pose,可以获取SMPL 骨骼和IMU 传感器的之间关系R_BS,将IMU读出的数值通过R_BS 可以推出当前骨骼真实的旋转方向。同时我们根据当前pose也推出了一个骨骼的预测的旋转方向,这样通过最小化骨骼真实的旋转方向和骨骼的预测的旋转方向,迭代优化当前人物的pose,最终得到一个还算可以的pose,作为后面的初始化pose。
第二步:配准

       首先通过人体2d pose检测器获得所有的人体2d关键点,然后将其配准到对应的3D pose,这里设计到一个多人匹配问题。不是重点

第三步:开始处理整个视频序列:类似SMPLly,最小化SMPL的3D投影的到的2d与第二步的2d关键点之间的最小值,同时还有多个数据项,例如继保持预测的数值要和IMU读出的真实数值保持尽可能小的误差等。

文章简述:

        本文联合优化一个统计体模型的姿态,相机姿态和航向漂移使用一个连续优化框架.我们在TotalCapture数据集上验证了我们的方法,该数据集提供了与地面真实值同步的视频和IMU。我们获得了26mm的精度,这使得它足够精确,可以作为基于图像的三维姿态估计的基准。使用我们的方法,我们记录了在野外的3D姿势(3DPW),这是一个新的数据集,包含了超过51000帧具有挑战性序列的准确3D姿势,包括在城市中行走、上楼梯、喝咖啡或乘坐公交车。我们将重建的三维姿态、视频、IMU和三维模型用于研究目的。

        (IMU方便携带,但是准确性受到很多影响:初始姿态,航向漂移)基于imu的系统之所以有前途,是因为它们不受固定空间的约束,因为它们是由人佩戴的。然而,在实践中,准确性受到许多因素的限制。初始姿态的不精确性会导致传感器与骨骼的错位。此外,在连续作业过程中,imu会发生航向漂移,如下图所示。

              

       这意味着,在一段时间后,每个IMU将变成不是相对于同一世界坐标系的测量。相反,每个传感器提供相对于独立坐标框架的读数,这些坐标框架慢慢地从世界框架中漂移出去。此外,由于位置漂移,无法准确地获得全局位置。此外,IMU系统不提供与图像数据同步和对齐的3D姿态。

         因此,我们提出了一种新的方法,称为视频惯性姿态(Video Inertial Poser, VIP),该方法通过在人体肢体上安装6 - 17个imu和一个手持移动手机摄像头,共同估计人在现场的姿势。使用imu可以减少任务的模糊性,但仍然存在许多挑战。首先,(对齐)视频中需要被检测到,并与IMU数据相关联,如图2所示。第二,由于航向漂移,imu不准确。第三,估计的三维姿态需要与移动摄像机的图像对齐。此外,我们在这个工作中处理的场景包括完整的遮挡,多个人,跟踪的人从摄像机视图和摄像机运动。为了解决这些问题,我们定义了一种新的基于图的关联方法,以及一种集成序列中所有帧测量值的连续位姿优化方案。为了处理噪声和不完整的数据,我们利用SMPL[14],它包含人体测量和运动学约束。

     具体来说,我们的方法有三个步骤:初始化、2d和3D关联和数据融合。在初始化过程中,我们通过将SMPL拟合到IMU方向来计算初始3D姿态。关联步骤则是通过求解一个二元二次优化问题,自动地将三维姿态与二维人体检测全序列关联起来。考虑到这些关联,在数据融合步骤中,我们定义了一个目标函数,并联合优化全序列的3D姿态、每个传感器的航向误差、相机的姿态和平移。具体地说,当(i)模型的方向和加速度接近IMU读数,(ii) SMPL 3D关节的投影接近图像中的2D CNN检测[4]时,目标被最小化。为了进一步提高结果,我们重复一次联合优化。

       通过VIP,我们可以在具有挑战性的自然场景准确地估计3D人体姿势。为了验证VIP的准确性,我们使用了最近发布的3D数据集Total Capture[39],因为它提供了与IMU数据同步的视频。VIP获得的平均3D位姿误差为26mm,这使其足够精确,可以用于基准方法处理野外数据。我们使用VIP创建了3D姿态在野外(3DPW):一个由手持视频组成的数据集,在自然视频中有真实的3D人类姿态和形状。

         为了研究目的,我们公开了3DPW,包括60个视频序列(51000帧或1700秒的视频,用手机在30Hz拍摄),IMU数据,3D扫描和18种服装变化的3D人物模型,以及所有序列中VIP的精确3D姿势重建结果。我们预计,该数据集将通过提供一个平台来定量评估和比较3D人体姿态估计方法,从而刺激新的研究。

          与我们的方法更接近的是作品[2,11],它使SMPL[14]适合2D检测。我们解决的优化问题,即使它集成了更多的传感器,也更加复杂。很少有方法能够解决多人三维姿态估计问题[31,20]。3DPW允许对所有这些方法的野外图像进行定量评估

【2】Keep it SMPL: Automatic estimation of 3D human pose and shape from a single image.

【11】Unite the people: Closing the loop between 3d and 2d human representations.

目前3DPW数据集已经公开,大家基本都是将他作为基准:

3DPW Real Virtual Humans

 3DPW 数据集简介

数据集包含:

60视频序列。 

2d pose 标注

3d pose 标注: 用我们的方法获得三维姿态。我们的方法利用视频和IMU,姿势非常准确,尽管复杂的场景。 

每一个序列中的每一帧提供了相机姿态参数

3D人体扫描和3D人体模型(可重塑和可重塑)。每个序列都包含相应的模型。 

18个穿着不同服装的3D模特。

每个部分包含的内容可以阅读 readme.txt 了解:

3DPW数据集包含多个运动序列,这些运动序列被组织为两个文件夹:imageFiles和sequenceFiles。

文件夹imageFiles包含每个序列的RGB图像。

文件夹sequenceFiles以.pkl文件的形式提供同步运动数据和SMPL模型参数。对于每个序列,.pkl文件均包含具有以下字段的字典:

-sequence:包含序列名称的字符串

-beta:用于跟踪的每个参与者的SMPL形状参数(10x1 SMPL beta参数列表)

-pose:与图像数据对齐的每个演员的SMPL身体姿势(Nx72 SMPL 关节角度列表,N = 帧数量)

-trans:与图像数据对齐的每个演员的平移参数(Nx3 根节点平移列表)

-poses_60Hz:每个演员在60Hz时的SMPL身体姿势(Nx72 SMPL 关节角度列表,N =#帧)

-trans_60Hz:每个演员在60Hz时的平移量(Nx3 根节点的平移量)

-betas_clothed:每个演员的SMPL形状参数(10x1 SMPL beta参数列表)

-v_template_clothed:

-gender:演员性别(字符串列表,“ m”或“ f”)

-texture_maps:每个演员的纹理贴图

-poses2D:每个演员以Coco格式进行2D关节检测(仅在至少正确检测到至少6个关节时提供)

-jointPositions:每个角色的3D关节位置(每个SMPL关节的Nx(24 * 3)XYZ坐标列表)

-img_frame_ids:下采样60 Hz 3D姿势的索引数组对应的图像帧ID

-cam_poses:每个图像帧的相机外部特性(Ix4x4数组,I帧乘以4x4原生刚体运动矩阵)

-campose_valid:布尔值索引数组,指示已将哪个相机姿态与图像对齐

-cam_intrinsics:相机内固有参数(K = [f_x 0 c_x; 0 f_y c_y; 0 0 1])

每个序列都有一个或两个模型,分别对应于模型特定字段的列表大小(例如Beta,姿势,trans,v_template,gender,texture_maps,jointPositions,poses2D)。

SMPL姿态和平移频率为30 Hz。它们与依赖于图像的数据(例如2D姿势,相机姿势)对齐。另外,我们提供“ poses_60Hz”和“ trans_60Hz”,其对应于IMU的60Hz的记录频率。您可以使用'img_frame_ids'下采样并对齐60Hz 3D和图像相关数据,这已经完成了计算SMPL'pose'和'trans'变量的工作。

by 为什么先生2012

知识补充:

IMU全称Inertial Measurement Unit,惯性测量单元,主要用来检测和测量加速度与旋转运动的传感器。其原理是采用惯性定律实现的,这些传感器从超小型的的MEMS传感器,到测量精度非常高的激光陀螺,无论尺寸只有几个毫米的MEMS传感器,到直径几近半米的光纤器件采用的都是这一原理。惯性定律。常见的完整表述:任何物体都要保持匀速直线运动或静止状态,直到外力迫使它改变运动状态为止

航向漂移:磁干扰会使imu的方向测量变差,从而引入相对于G_GI的时变的旋转偏移量,也俗称航向误差或航向漂移。这个偏移主要是因为将原来的全局惯性坐标系F_I转移到I扰动惯性坐标系F_I’ ,更恼火的是每个传感器关于这个漂移还不一样。在以往的工作中,多数忽略了航向漂移或将其视为噪声,但我们明确地对其建模并将其恢复为优化的一部分。具体地说,我们将其建模为一个关于纵轴的单参数的旋转函数。

(3) 参考利用下面的程序代码,完成代码注释中要求的两项任务。 import re """ 下面ref是2020年CVPR的最佳论文的pdf格式直接另存为文本文件后, 截取的参考文献前6篇的文本部分。 请利用该科研文献的这部分文本,利用正则表达式、字符串处理等方法, 编程实现对这6篇参考文献按下面的方式进行排序输出。 a.按参考文献标题排序 b.按出版年份排序 """ ref = """[1] Panos Achlioptas, Olga Diamanti, Ioannis Mitliagkas, and Leonidas Guibas. Learning representations and generative models for 3D point clouds. In Proc. ICML, 2018 [2] Pulkit Agrawal, Joao Carreira, and Jitendra Malik. Learning to see by moving. In Proc. ICCV, 2015 [3] Peter N. Belhumeur, David J. Kriegman, and Alan L. Yuille. The bas-relief ambiguity. IJCV, 1999 [4] Christoph Bregler, Aaron Hertzmann, and Henning Biermann. Recovering non-rigid 3D shape from image streams. In Proc. CVPR, 2000 [5] Angel X. Chang, Thomas Funkhouser, Leonidas Guibas. Shapenet: An information-rich 3d model reposi-tory. arXiv preprint arXiv:1512.03012, 2015 [6] Ching-Hang Chen, Ambrish Tyagi, Amit Agrawal, Dy-lan Drover, Rohith MV, Stefan Stojanov, and James M. Rehg. Unsupervised 3d pose estimation with geometric self-supervision. In Proc. CVPR, 2019""" ref_str = re.sub(r'\[([0-9]{1})\]', r'$[\1]', ref) # 添加分隔$ print(ref_str) #脚手架代码 ref_str_2 = re.sub(r'([a-zA-Z]{2})\.', r'\1.#', ref_str) # 添加分隔# print(ref_str_2) #脚手架代码 ref_str2 = ref_str_2.replace("\n", "") ref_list = ref_str2.split("$") print(ref_list) #脚手架代码 [提示: 排序可以采用内置函数sorted(),语法如下: sorted(iterable, /, *, key=None, reverse=False), 注意掌握形式参数中带“/”和“*”的用途]
05-26
代码注释如下: ```python import re # 定义参考文献字符串 ref = """[1] Panos Achlioptas, Olga Diamanti, Ioannis Mitliagkas, and Leonidas Guibas. Learning representations and generative models for 3D point clouds. In Proc. ICML, 2018 [2] Pulkit Agrawal, Joao Carreira, and Jitendra Malik. Learning to see by moving. In Proc. ICCV, 2015 [3] Peter N. Belhumeur, David J. Kriegman, and Alan L. Yuille. The bas-relief ambiguity. IJCV, 1999 [4] Christoph Bregler, Aaron Hertzmann, and Henning Biermann. Recovering non-rigid 3D shape from image streams. In Proc. CVPR, 2000 [5] Angel X. Chang, Thomas Funkhouser, Leonidas Guibas. Shapenet: An information-rich 3d model reposi-tory. arXiv preprint arXiv:1512.03012, 2015 [6] Ching-Hang Chen, Ambrish Tyagi, Amit Agrawal, Dy-lan Drover, Rohith MV, Stefan Stojanov, and James M. Rehg. Unsupervised 3d pose estimation with geometric self-supervision. In Proc. CVPR, 2019""" # 用正则表达式将参考文献编号中的中括号[]改为$,以便后续分割 ref_str = re.sub(r'\[([0-9]{1})\]', r'$[\1]', ref) # 用正则表达式将参考文献中的作者缩写后面的句号.改为#,以便后续分割 ref_str_2 = re.sub(r'([a-zA-Z]{2})\.', r'\1.#', ref_str) # 去掉参考文献中的换行符 ref_str2 = ref_str_2.replace("\n", "") # 用$分割参考文献字符串,将每个参考文献作为一个元素存入列表中 ref_list = ref_str2.split("$") # 按参考文献标题排序 ref_list_title = sorted(ref_list, key=lambda x: x.split(". ")[-1]) # 打印按参考文献标题排序后的结果 print("按参考文献标题排序:") for i in ref_list_title: print(i) # 按出版年份排序 ref_list_year = sorted(ref_list, key=lambda x: int(re.findall(r'\d{4}', x)[-1])) # 打印按出版年份排序后的结果 print("按出版年份排序:") for i in ref_list_year: print(i) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值