专栏首页人工智能前沿讲习CVPR2020论文解读 | VIBE:Video Inference for Human Shape

CVPR2020论文解读 | VIBE:Video Inference for Human Shape

3D人体姿态与形态估计CVPR 2020的一篇论文笔记,VIBE: Video Inference for Human Body Pose and Shape Estimation(CVPR 2020)

Paper:https://arxiv.org/pdf/1912.05656.pdf

Code:https://github.com/mkocabas/VIBE

动机

问题

  • 缺乏带标注的3D人体姿态和形态估计的数据集
  • 现有的方法不够完善
    • 无法捕获到人类实际运动的复杂性和可变性以及准确而又自然的运动序列
    • 预测的形态不够逼真,在运动学上也不够合理

解决方案

  • 利用大型动作捕捉数据集(AMASS[2])来训练基于视频的人体姿态和形态的GAN模型

贡献

  • 改进了回归器model-based fitting-in-the-loop的训练方法,并应用到视频上
  • 使用了AMASS数据集来进行对抗训练,来使回归器产生更加逼真与合理的人体形态
  • 通过定量实验比较了3D人体形态估计方法的不同temporal结构
  • 通过使用运动捕捉数据的大型数据集来训练鉴别器,实现了SOTA的性能

相关工作

有一篇做3D姿态估计的论文[3] (CVPR 2019)也用到了对抗训练。这篇文章虽然使用了3D-ground truth来训练,但是没用2D-3D对来训练网络,所以是弱监督的。由于使用了未配对的数据,GAN的输出是比较杂乱的,所以将它投影到2D平面来保证输出的3D pose相对比较准确。这里,他们都使用了对抗训练,有一个好处就是泛化能力强,可以in the wild,在另外一个域进行测试也能有较好的性能。

还有一篇3D Pose and Shape的论文HMR[4] (CVPR 2018),VIBE的预训练模型就是用的他的。这项工作从单张RGB图片重建人体的mesh,而且是end-to-end的,不需要经过2D pose进行过渡。由于使用了个Discriminator,也不需要2D-3D数据对。VIBE这篇论文是这项工作的扩展,将图片扩展到了视频。从两者的总体框图可以看出,VIBE多了GRU,还有一个motion discriminator,同时还使用AMASS数据集进行对抗训练。

方法

整体框架

方法其实很简单,基本上看图就能明白。首先通过Resnet50提取图片的空间特征,然后经过GRU处理序列,学习它的时间特征。再通过回归层得到82个SMPL参数,将这些序列参数计算对抗损失,其中motion discriminator包含GRU并引入了自注意力机制。并通过SMPL的mesh vertices得到3D关节坐标,投影得到2D坐标,并分别计算Loss。

3D人体的表示

时间编码器

  • 输入:图片序列
  • 输出:SMPL的82个参数序列
  • CNN层,GRU层,回归层

运动鉴别器

  • 输入:生成器的输出序列,82个SMPL的输入参数。AMASS数据集
  • 输出:0或1
  • GRU层,self-attention

自注意力机制

Self-attention是接在鉴别器GRU层的后面,将GRU的输出通过一个可训练的FC层得到score并与该输出相乘。

Motion Prior (MPoser)

该模块是拿来代替motion discriminator来做消融实验的,来显示提出的算法优越性。原方法是叫VPoser[5],这篇文章把它扩展成可以解决序列问题。

Loss

  • 3D, 2D, SMPL参数, 对抗损失
  • 生成器Loss之和
  • 鉴别器Loss

网络结构

  • CNN编码器: ResNet-50
  • Temporal编码器: 2层GRU
  • SMPL回归层: 2层FC
  • Motion鉴别器: 2层GRU + 2层FC的self-attention

实验

数据集

  • 训练
    • Human3.6M: 室内
    • MPI-INF-3DHP: 室外
    • AMSS: 用来对抗训练
  • 测试
    • Human3.6M: 室内
    • MPI-INF-3DHP: 室外
    • 3DPW: 用来做消融实验并显示模型在室外数据集的泛化能力

评价指标

由于用了3个数据集,又是Pose又是Mesh的,所以用的评价指标也比较多吧。

  • Mean Per Joint Position Error (MPJPE): Protocol 1,关节点坐标误差的平均值
    • 网络输出的关节点坐标与ground truth的平均欧式距离(通常转换到相机坐标)
  • Procrustes analysis MPJPE (P-MPJPE): Protocol 2,基于Procrustes分析的关节点坐标误差的平均值
    • 先对网络输出进行刚性变换(平移,旋转和缩放)向ground truth对齐后,再计算MPJPE
  • Percentage of Correct Key-points (PCK),正确关键点的百分比
    • 如果预测关节与ground truth之间的距离在特定阈值内,则检测到的关节被认为是正确的
  • Per Vertex Error (PVE),顶点误差
    • SMPL的Vertex为6890×3,计算其与ground truth之间的距离
  • Acceleration error,加速度误差
    • 预测的3D坐标与ground truth的加速度平均差 (mm/s2),用来衡量平滑性,在论文[6]中提出
    • 加速度误差计算代码如下,来源于human_dynamics
def compute_accel(joints):
       """
       Computes acceleration of 3D joints.
       Args:
           joints (Nx25x3).
       Returns:
           Accelerations (N-2).
       """
       velocities = joints[1:] - joints[:-1]
       acceleration = velocities[1:] - velocities[:-1]
       acceleration_normed = np.linalg.norm(acceleration, axis=2)
       return np.mean(acceleration_normed, axis=1)

与SOTA方法的对比

消融实验

  • Motion discriminator
  • Self-attetion的FC层数与隐藏单元个数

结论

  • 引入了循环网络架构来处理序列问题
  • 使用AMASS数据集来进行对抗训练
  • 在鉴别器中引入了自注意力机制
  • 从AMASS中学习了一个新颖的human sequence prior (MPoser) ,并显示了它不如鉴别器更有效
  • 通过消融实验评估了每个模块与参数选择对性能的影响

未来工作

  • 探索使用视频来监督单帧的方法
  • 探索dense motion cues(如光流)是否可以提供更多信息
  • 解决多人问题
  • 解决遮挡问题
  • 尝试使用其他注意力架构(如transformers)

代码运行

我用的Ubuntu16,但是OpenGL报错,无法得到渲染后的视频输出。好像是Ubuntu18可以运行,16不行?见VIBE_issuses47(https://github.com/mkocabas/VIBE/issues/47)。

参考文献

  1. Kocabas M, et al. VIBE: Video Inference for Human Body Pose and Shape Estimation, CVPR 2020.
  2. Mahmood N, et al. AMASS: Archive of motion capture as surface shapes, ICCV 2019.
  3. Wandt B, et al. Repnet: Weakly supervised training of an adversarial reprojection network for 3d human pose estimation, CVPR 2019.
  4. Kanazawa A, et al. End-to-end recovery of human shape and pose, CVPR 2018.
  5. Pavlakos G, et al. Expressive body capture: 3d hands, face, and body from a single image, CVPR 2019.
  6. Kanazawa A, et al. Learning 3d human dynamics from video, CVPR 2019.

作者:知乎—Vegetabird

地址:https://www.zhihu.com/people/vegetebird

本文分享自微信公众号 - 人工智能前沿讲习(AIFrontier)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 精选论文 | 视频目标跟踪专题【附打包下载】

    随着近年来智能城市监控的发展和自动驾驶的兴起,视频目标跟踪得到了更多的研究者的关注,其中包括单目标跟踪、多目标跟踪、跨摄像头多目标跟踪等等。目标跟踪也涉及很多相...

    马上科普尚尚
  • 【NSR特别专题】机器学习:中国的最新进展与未来展望

    编者按:《国家科学评论》于2018年1月发表“机器学习”特别专题,由周志华教授组织并撰写文章。专题内容还包括对AAAI前主席Tom Dietterich的访谈,...

    马上科普尚尚
  • CCAI 2019 | Shai Ben-David:人工智能的可学习性能否判定?

    2019年中国人工智能大会(Chinese Congress on Artificial Intelligence 2019,简称“CCAI 2019”)将于9...

    马上科普尚尚
  • Django ORM那些相关操作

    一般操作 https://docs.djangoproject.com/en/1.11/ref/models/querysets/         官网文档 常...

    新人小试
  • 浅谈MySQL中的事务隔离级别(r11笔记第86天)

    之前写了一篇浅谈事务(一),算是对事务的一个基本认识,今天来简单总结一下事务的隔离级别,虽然是老掉牙的知识点,重温一下还是值得的。 在MySQL中基...

    jeanron100
  • 【业界】是什么推动了深度学习的“寒武纪大爆炸”?

    准确地说,多伦多大学计算机科学家Alex Krizhevsky、Geoffrey Hinton和Ilya Sutskever都不知道他们要发布的是什么。那是20...

    AiTechYun
  • CAD常用基本操作

    CAD常用基本操作 1 常用工具栏的打开和关闭:工具栏上方点击右键进行选择 2 动态坐标的打开与关闭:在左下角坐标显示栏进行点击 3 对象捕捉内容的选择:A在对...

    用户7505898
  • 2018.11月Go优质开源项目

    项目描述:Build cross-platform modern desktop apps in Go + HTML5

    李海彬
  • Logistic regression 为什么用 sigmoid ?

    杨熹
  • TensorFlow从0到1 - 7 - TensorFlow线性回归的参数溢出之坑

    ? 上一篇 6 解锁梯度下降算法解释清楚了学习率(learning rate)。本篇基于对梯度下降算法和学习率的理解,去填下之前在线性回归中发现的一个坑。 ...

    袁承兴

扫码关注云+社区

领取腾讯云代金券