VideoPose3D:基于视频的3D人体关键点检测
1. 概述
Dario Pavllo等人于2019年提出了VideoPose3D模型,旨在把输入视频转换成人体各关键点相对于根关节的相对三维位置。为了实现这一目的,作者采取的是两步走的策略。首先要利用现成的2D姿态检测算法提取出视频各帧里人体各关键点的2D坐标,然后用自己的模型对它进行进一步处理,最终输出各关键点的相对3D坐标。在所有数据都有标签的情况下,只需要用作者提到的时域膨胀卷积模型(Temporal dilated convolutional model)即可。然而,作者考虑到了,在实际情况下,带标签的真实3D姿态的数据量往往是有限的,因而他们提出了一种无监督训练的方法,需要把它与有监督训练相结合,构成了一种所谓的半监督训练方法。接下来让我们具体地看一下这两种训练过程及它们是如何结合在一起的。
2. 时域膨胀卷积模型
首先利用现成的2D姿态检测算法提取出视频各帧里人体各关键点的坐标,然后把它们拼接在一起,构成一个三维数组,作为该模型的输入。具体来说,这个数组的通道数(第3维的长度)等于关节数,代表了各个关节点的横纵坐标;第一维为设定好的帧的感受野的大小,在给定一个完整视频的情况下,我们可以综合考虑到过去以及未来的信息,所以待预测帧应当位于当前维度的中央;如果是实时的姿态估计,那么我们将只能使用过去的信息(这时的卷积操作被称为因果卷积(causal convolution) ),此时待预测帧可以位于当前维度的一端。如果是单帧预测,那么这个数组的第二维的长度为1,至于多帧预测的情况(设帧数为 , ),原文中没有提及到如何处理,个人猜测可以直接将单帧预测时的数组拼接在一起,此时第二维的长度为n。为了简单起见,我们这里只介绍单帧预测,多帧的情况可依此类推。
设,时域感受野为243帧,卷积核的长度 ,因而此时模型的输入数组的形状为 ,首先依次把它通过一个共有1024个 卷积核的卷积层,批归一化层,ReLU激活函数,dropout层,得到的中间输出的形状为 ,这种卷积实际上是一维的时域卷积,可以参考一下TCN的结构。再把它依次通过 B 个残差块,最后再通过一个卷积层得到 的输出向量。残差块的组成如下图所示,值得注意的是,第 个残差块中的前一个卷积是膨胀系数为 的膨胀卷积( ),这样做的好处是神经元的感受野能随着层数的增加而呈指数增长,使得高层神经元能综合考虑到所有输入帧的信息,从而得到更全面准确的判断。此外,在进行残差连接时,由于残差块的输入输出维度不一致,所以在把输入加到输出上之前,要先对输入进行裁剪。
3. 半监督训练方法
对于带标注的真实3D姿态样例,我们可以先使用上述模型估计出各关节点的3D坐标,然后通过计算平均每关节位置误差(mean per-joint position error, MPJPE),直接对其进行有监督的训练。然而,正如前面所言,在实际情况下,带3D标签的视频样例数目往往有限,所以他们设计了一种方法来利用无标签的视频来对模型进行训练。大体思路是,先通过上面的时域卷积模型(又被称为编码器或姿态模型),从二维坐标中估计出三维坐标,然后再通过解码器把它投影成二维坐标,并检查它与原始输入之间的一致性,这种做法实际上是受到了无监督机器翻译中的循环一致性(cycle consistency)的启发。
3.1 轨迹模型与骨长L2损失
作者提到,人体在屏幕空间上的投影不仅取决于姿态模型输出的各关节相对于根关节的坐标,而且还会受到人体的根关节在相机坐标系下的全局坐标(又被称为轨迹)的影响。设想如果没有这个全局坐标的话,人体将始终以一个固定的大小被投影到屏幕的中心。所以,作者又提出了一个所谓的轨迹模型,来对人体的轨迹做出预测,最后结合轨迹与姿态,才能得到人体在屏幕空间上的正确投影。轨迹模型与姿态模型虽然在结构上很相似,但是它们不会共享任何参数,因为作者观察到当以多任务方式训练它们时,两者之间会产生负面影响。在对轨迹模型训练时,用的是带标签的真实3D姿态数据,损失函数是作者提出的加权平均每关节位置误差(WMPJPE):
其中 是关节点在相机空间中的深度。所表示的含义是给和相机相距较远的关键点赋予较低的权重,这是因为当人体与相机离得比较远的时候,同样的绝对偏差,在投影到屏幕上后,实际观察到的偏差会比较小,而且人体与相机相隔越远,估计出精确轨迹的难度也就越大,因而所赋予的权重应随距离的增大而逐渐减小。
3.2 相关讨论
作者提出的方法还考虑到了光学成像过程对结果的影响,为此还需要用到相机的内在参数,比如焦距、主点等,以及一些非线性透镜畸变参数。虽然在实际实验中,作者发现在Human3.6M中使用的相机的光学变形现象对姿态估计的影响几乎可以忽略不计,但是作者还是把它们添加到模型中,因为它们确实能让对真实相机成像过程的建模更加准确。
4. 实验与评估
作者总共使用了三种方式对模型进行评估,此处我们只介绍其中的两种。评估方法1是使用以毫米为单位的平均每关节位置误差(MPJPE),即预测关节点与真值之间的欧氏距离。评估方法2是先通过平移、旋转、缩放来使预测与真值对齐后,再计算平均每关节位置误差,这被称为P-MPJPE。
下表显示了使用评估方法1时,作者的有4个残差块和243帧的感受野的卷积模型以及其它6个其它模型在Human3.6M数据集上的运行结果。可以看出,该模型具有比所有其他模型都更低的平均误差,并且不像其他许多模型(+)那样依赖于额外数据。在评估方法1作者所提出的模型的平均表现比以前的最佳结果好6毫米,对应于11%的误差减少。在评估方法2下,虽然优势略有减小,但仍然具有最小的平均误差。
从单帧和243帧感受野的模型的结果对比中可以看出,243帧感受野的模型的确利用了一段时间内的信息,因此其误差比前者平均低了5mm。此外,作者的模型在行走等高动态的环境下的优势会更为突出。
附:论文链接:3D human pose estimation in video with temporal convolutions and semi-supervised training
知乎链接(同一作者):VideoPose3D:基于视频的3D人体关键点检测 - 知乎 (zhihu.com)
VideoPose3D:基于视频的3D人体关键点检测相关推荐
- 基于MindStudio的3D人体关键点检测
3D人体关键点检测 1 任务介绍 人体关键点检测插件基于 MindX SDK 开发,在昇腾芯片上进行人体关键点和骨架检测,将检测结果可视化并保存.输入一幅图像,可以检测得到图像中所有行人的关键点并连接 ...
- 基于Tkinter和百度Aip的人体关键点检测
个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-104.html 最近某些项目需要用到人体姿势识别.当前有很多著 ...
- 基于深度学习目标检测和人体关键点检测的不健康坐姿检测
基于深度学习目标检测和人体关键点检测的不健康坐姿检测 代码下载链接:下载地址 0.实验结果
- 基于百度AL平台人体检测实现人体关键点检测代码
本文通过OpenCV模块调用摄像头,利用百度开放的人体关键点检测API,实现了实时对人体的关键点检测. 一.百度API获取 使用百度的API,首先要在百度AI的官网上注册帐号,然后在人体关键点识别功能 ...
- OpenMMLab AI实战营第二期|人体关键点检测与MMPose学习笔记
OpenMMLab AI实战营第二期|人体关键点检测与MMPose学习笔记 文章目录 OpenMMLab AI实战营第二期|人体关键点检测与MMPose学习笔记 一.前言 1.1 人体姿态概述 1.2 ...
- OpenMMLab-AI实战营第二期——2-1.人体关键点检测与MMPose
文章目录 1. 人体姿态估计的介绍和应用 2-1. 2D姿态估计概述 2.1 任务描述 2.2 基于回归 2.3 基于热力图 2.3.1 从数据标注生成热力图(高斯函数) 2.3.2 使用热力图训练模 ...
- 人体姿态估计(人体关键点检测)2D Pose训练代码和Android源码
人体姿态估计(人体关键点检测)2D Pose训练代码和Android源码 目录 人体姿态估计(人体关键点检测)2D Pose训练代码和Android源码 1.人体姿态估计2D Pose方法 2.人体姿 ...
- 项目开源!基于PaddleDetection打造实时人体姿态检测的多关节控制皮影机器人
本文已在[飞桨PaddlePaddle]公众号平台发布,详情请戳链接:项目开源!基于PaddleDetection打造实时人体姿态检测的多关节控制皮影机器人 皮影戏是一种以兽皮或纸板做成的人物剪影以表 ...
- Pytorch+Python实现人体关键点检测
用Python+Pytorch工程代码对人体进行关键点检测和骨架提取,并实现可视化. 使用背景: 物体检测为许多视觉任务提供动力,如实例分割.姿态估计.跟踪和动作识别.它在监控.自动驾驶和视觉答疑中有 ...
最新文章
- 磁盘配额的wmi版本(C#)
- 如何设计出优秀的Restful API?
- 定制化你的ReactNative底部导航栏
- Java数据库篇5——事务
- nginx哪个版本性能好_骁龙750g和天玑1000+哪个好-参数性能对比
- eclipse查看git地址_在 IntelliJ IDEA 中使用 Git,太方便了
- Linux命令学习 ls
- USACO 1.5 Prime Palindromes
- 夜间模式(模仿喜马拉雅FM)
- 基于Flume的美团日志收集系统
- 通俗的解释机器学习的预测原理
- 安卓按键命令库教程(紫猫版续)
- freenom域名申请教程
- python倒数切片_python的切片操作
- c语言stone题目,The bridge is made stone.A.byB.fromC.ofD.up 题目和参考答案——青夏教育精英家教网——...
- 怎样看笔记本上有无无线网卡?
- [leetcode]Majority Element II
- STM32的USART串口通信
- DSA签名简介及对其的攻击方式
- Redis批量删除keys和清空全部数据库
热门文章
- 教你发布Silverlight Bussiness Application(SQL Server 登录,局域网访问,以及使用ArcGIS Server服务需要注意的问题)...
- 公众号如何涨粉,提高阅读量
- Deep Representation Learning for Trajectory Similarity Computation
- 21岁女总裁董思阳,她做对了那些事情
- 为什么别人在微信卖东西不会被人拉黑
- 系统集成项目管理工程师学习建议
- 记录一个使用imgkit库转图片在windows上可能会出现的问题 iis OSError: [WinError 6] 句柄无效
- html+canvas 星空背景案例
- 1688电商API接口-无需多个 电商平台单独对接
- kindle for PC更新后无法打开解决方案