VideoPose3D:基于视频的3D人体关键点检测

news2024/10/5 13:45:57

1. 概述

Dario Pavllo等人于2019年提出了VideoPose3D模型,旨在把输入视频转换成人体各关键点相对于根关节的相对三维位置。为了实现这一目的,作者采取的是两步走的策略。首先要利用现成的2D姿态检测算法提取出视频各帧里人体各关键点的2D坐标,然后用自己的模型对它进行进一步处理,最终输出各关键点的相对3D坐标。在所有数据都有标签的情况下,只需要用作者提到的时域膨胀卷积模型(Temporal dilated convolutional model)即可。然而,作者考虑到了,在实际情况下,带标签的真实3D姿态的数据量往往是有限的,因而他们提出了一种无监督训练的方法,需要把它与有监督训练相结合,构成了一种所谓的半监督训练方法。接下来让我们具体地看一下这两种训练过程及它们是如何结合在一起的。

2. 时域膨胀卷积模型

首先利用现成的2D姿态检测算法提取出视频各帧里人体各关键点的坐标(x,y),然后把它们拼接在一起,构成一个三维数组,作为该模型的输入。具体来说,这个数组的通道数(第3维的长度)等于关节数J*2,代表了各个关节点的横纵坐标;第一维为设定好的帧的感受野的大小,在给定一个完整视频的情况下,我们可以综合考虑到过去以及未来的信息,所以待预测帧应当位于当前维度的中央;如果是实时的姿态估计,那么我们将只能使用过去的信息(这时的卷积操作被称为因果卷积(causal convolution) ),此时待预测帧可以位于当前维度的一端。如果是单帧预测,那么这个数组的第二维的长度为1,至于多帧预测的情况(设帧数为 n, n\geqslant2),原文中没有提及到如何处理,个人猜测可以直接将单帧预测时的数组拼接在一起,此时第二维的长度为n。为了简单起见,我们这里只介绍单帧预测,多帧的情况可依此类推。

J=17,时域感受野为243帧,卷积核的长度 W=3 ,因而此时模型的输入数组的形状为 243\times1\times34 ,首先依次把它通过一个共有1024个 3\times1 卷积核的卷积层,批归一化层,ReLU激活函数,dropout层,得到的中间输出的形状为 241\times1\times1024 ,这种卷积实际上是一维的时域卷积,可以参考一下TCN的结构。再把它依次通过 B 个残差块,最后再通过一个卷积层得到 1\times1\times51 的输出向量。残差块的组成如下图所示,值得注意的是,第 i 个残差块中的前一个卷积是膨胀系数为 W_i 的膨胀卷积( 1\leqslant i\leqslant B ),这样做的好处是神经元的感受野能随着层数的增加而呈指数增长,使得高层神经元能综合考虑到所有输入帧的信息,从而得到更全面准确的判断。此外,在进行残差连接时,由于残差块的输入输出维度不一致,所以在把输入加到输出上之前,要先对输入进行裁剪。

提出的全卷积3D姿态估计模型的结构

 3. 半监督训练方法

对于带标注的真实3D姿态样例,我们可以先使用上述模型估计出各关节点的3D坐标,然后通过计算平均每关节位置误差(mean per-joint position error, MPJPE),直接对其进行有监督的训练。然而,正如前面所言,在实际情况下,带3D标签的视频样例数目往往有限,所以他们设计了一种方法来利用无标签的视频来对模型进行训练。大体思路是,先通过上面的时域卷积模型(又被称为编码器或姿态模型),从二维坐标中估计出三维坐标,然后再通过解码器把它投影成二维坐标,并检查它与原始输入之间的一致性,这种做法实际上是受到了无监督机器翻译中的循环一致性(cycle consistency)的启发。

3.1 轨迹模型与骨长L2损失

作者提到,人体在屏幕空间上的投影不仅取决于姿态模型输出的各关节相对于根关节的坐标,而且还会受到人体的根关节在相机坐标系下的全局坐标(又被称为轨迹)的影响。设想如果没有这个全局坐标的话,人体将始终以一个固定的大小被投影到屏幕的中心。所以,作者又提出了一个所谓的轨迹模型,来对人体的轨迹做出预测,最后结合轨迹与姿态,才能得到人体在屏幕空间上的正确投影。轨迹模型与姿态模型虽然在结构上很相似,但是它们不会共享任何参数,因为作者观察到当以多任务方式训练它们时,两者之间会产生负面影响。在对轨迹模型训练时,用的是带标签的真实3D姿态数据,损失函数是作者提出的加权平均每关节位置误差(WMPJPE):

E=\frac{1}{\mathbf y_z}\left\|f(\mathbf x)-\mathbf y\right\|

其中 \mathbf y_z 是关节点在相机空间中的深度。所表示的含义是给和相机相距较远的关键点赋予较低的权重,这是因为当人体与相机离得比较远的时候,同样的绝对偏差,在投影到屏幕上后,实际观察到的偏差会比较小,而且人体与相机相隔越远,估计出精确轨迹的难度也就越大,因而所赋予的权重应随距离的增大而逐渐减小。

以半监督方式训练的3D姿态估计模型

 3.2 相关讨论

作者提出的方法还考虑到了光学成像过程对结果的影响,为此还需要用到相机的内在参数,比如焦距、主点等,以及一些非线性透镜畸变参数。虽然在实际实验中,作者发现在Human3.6M中使用的相机的光学变形现象对姿态估计的影响几乎可以忽略不计,但是作者还是把它们添加到模型中,因为它们确实能让对真实相机成像过程的建模更加准确。

4. 实验与评估

作者总共使用了三种方式对模型进行评估,此处我们只介绍其中的两种。评估方法1是使用以毫米为单位的平均每关节位置误差(MPJPE),即预测关节点与真值之间的欧氏距离。评估方法2是先通过平移、旋转、缩放来使预测与真值对齐后,再计算平均每关节位置误差,这被称为P-MPJPE。

下表显示了使用评估方法1时,作者的有4个残差块和243帧的感受野的卷积模型以及其它6个其它模型在Human3.6M数据集上的运行结果。可以看出,该模型具有比所有其他模型都更低的平均误差,并且不像其他许多模型(+)那样依赖于额外数据。在评估方法1作者所提出的模型的平均表现比以前的最佳结果好6毫米,对应于11%的误差减少。在评估方法2下,虽然优势略有减小,但仍然具有最小的平均误差。

在Human3.6M数据集上的误差对比,†、∗、+三个符号分别代表使用了时域信息,真实的边界框和额外数据

从单帧和243帧感受野的模型的结果对比中可以看出,243帧感受野的模型的确利用了一段时间内的信息,因此其误差比前者平均低了5mm。此外,作者的模型在行走等高动态的环境下的优势会更为突出。

附:论文链接:3D human pose estimation in video with temporal convolutions and semi-supervised training

知乎链接(同一作者):VideoPose3D:基于视频的3D人体关键点检测 - 知乎 (zhihu.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/458350.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Bilibili 网页版下载视频 B站下载MP4格式视频(不用下载工具)

博主是为了给家里老人下载戏曲,一开始是单个单个解析然后下载,想多下载一些,然后用了批量方法下载很好用 通过网页版解析工具 解析单个视频 获得下载地址 复制视播放地址,如,复制播放视频时,上方的地址 然…

校园最热微信小程序——校园表白墙之我想对你说(青春感人系列)

校园最热微信小程序——校园表白墙之我想对你说(青春感人系列) 注:想要快速了解可以直接跳转到小程序视频展示(手机用户可能打不开视频,电脑用户是可以打开视频的),手机用户可以打开我的主页里面…

系统运维(Kubernetes篇)

Kubernetes(k8s) 前言 ​ 在学习过程中,我们经常会遇到遗忘的问题。为了避免忘记,多复习是非常必要的。复习可以帮助我们巩固知识,加深记忆,提高学习效率。因此,我们应该养成良好的复习习惯,定期回顾所学…

猿创征文|“云“创新展望:数据之浩瀚

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! AWS–全球云计算领导者 AWS亚马逊云科技提供全球覆盖广泛、服务深入的云平台,全球数据中心提供超过 200 项功能齐全的服务 连续 11 年被 Gartner 评为&quo…

【JUC高并发编程】—— 了解JUC

一、集合的线程安全 ArrayList 线程不安全 通过代码演示 ArrayList 集合的线程不安全问题 package com.atguigu.lock;import java.util.ArrayList; import java.util.List; import java.util.UUID;/*** author Bonbons* version 1.0* 演示List集合线程不安全问题*/ public cl…

队列的定义、基本操作、案例

📝个人主页:爱吃炫迈 💌系列专栏:数据结构与算法 🧑‍💻座右铭:道阻且长,行则将至💗 文章目录 队列队列的基本操作定义队列enqueue:向队列添加元素dequeue&am…

dockerfile镜像实战

dockerfile镜像实战 部署SSH镜像部署Systemctl镜像部署Nginx镜像部署tomcat 镜像部署mysql镜像在客户端连接mysql容器 部署SSH镜像 [rootdocker01 ~]# mkdir /opt/sshd [rootdocker01 ~]# cd /opt/sshd [rootdocker01 sshd]# vim Dockerfile#第一行必须指明基于的基础镜像 FRO…

【C语言】指针进阶[上] (字符、数组指针、指针数组、数组传参和指针传参)

简单不先于复杂,而是在复杂之后。 目录 1. 字符指针 面试题 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名 VS 数组名 3.3 数组指针的使用 4. 数组参数、指针参数 4.1 一维数组传参 4.2 二维数组传参 4.3 一级指针传参 4.4 二…

数据预处理(Data Preprocessing)

Data Preprocessing 前言Why preprocess?Major Tasks in Data PreprocessingData CleaningIncomplete (Missing) DataWhat to Consider When Handling Missing Data?MCARMARMNAR How to Handle Missing Data - ImputationMore on ImputationEven More on ImputationPreproces…

K-Means和轮廓系数

K-Means和轮廓系数 K-means(K均值)是机器学习中一种常见的无监督算法,它能够将未知标签的数据,根据它们的特征分成不同组,每一组数据又称为“簇”,每一簇的中心点称为“质心”。其基本原理过程如下&#x…

【LeetCode】数据结构题解(3)[查找链表中倒数第k个节点]

查找链表种倒数第k个节点 1.题目来源2.题目描述3.解题思路4.代码展示 所属专栏:玩转数据结构题型 博主首页:初阳785 代码托管:chuyang785 感谢大家的支持,您的点赞和关注是对我最大的支持!!! 博…

走进Dart虚拟机:深入理解高效卓越的运行机制

Dart虚拟机概述 Dart虚拟机是运行Dart代码的主要工具之一。Flutter框架使用Dart作为开发语言,因此Dart虚拟机在Flutter中扮演了非常重要的角色。 Dart虚拟机是一种解释器,它能够解释和执行Dart代码。Dart代码在虚拟机中被编译成字节码,然后…

windows开机启动软件、执行脚本,免登录账户

文章目录 前言一、打开任务计划程序1.我电脑上的是点搜索“任务计划程序”,可能每个电脑的搜索按钮不一样,自行查找2.打开后应该是长这样的 二、创建文件夹1.点击任务计划程序库、右键选择新建文件夹2.名字顺便,点击确定3.创建后如图、点击目…

Aspose.Slides for .NET V23 Crack

Aspose.Slides for .NET V23 Crack 现在,您可以在将演示文稿保存为HTML时保留文档缩放。 Aspose.Slides for.NET是一个演示文稿处理API,使应用程序能够读取、写入、修改和转换Microsoft PowerPoint演示文稿。作为一个独立的API,它提供了管理P…

【马蹄集】第八周作业

第八周作业 目录 MT2016 数据流的中位数MT2017 连续的串MT2027 一秒成零MT2033 碰碰车MT2036 移水造海 MT2016 数据流的中位数 难度:黄金  时间限制:1秒  占用内存:128M 题目描述 对于数据流问题,小码哥需要设计一个在线系统&…

RK3568芯片开发笔记——调试pwm控制红外功能

1、PWM介绍 参考博客:《ARM芯片开发(S5PV210芯片)——定时器、看门狗、RTC》; 2、配置pwm功能的方法 (1)内核层:内核代码里有pwm子系统,里面有pwm相关函数接口,如果是驱动代码里要操作pwm就需要…

从0搭建Vue3组件库(七):使用 gulp 打包组件库并实现按需加载

使用 gulp 打包组件库并实现按需加载 当我们使用 Vite 库模式打包的时候,vite 会将样式文件全部打包到同一个文件中,这样的话我们每次都要全量引入所有样式文件做不到按需引入的效果。所以打包的时候我们可以不让 vite 打包样式文件,样式文件将使用 gulp 进行打包。那么本篇文…

FBEC大会 | 瑞云科技 CTO 赵志杰:元宇宙时代的基础设施——实时云渲染

​ FBEC未来商业生态链接大会于2023年2月24日在深圳福田大中华喜来登酒店盛大召开,本次大会由广东省游戏产业协会、深圳市互联网文化市场协会指导,陀螺科技主办。 大会以“勇毅前行逐光而上”为主题,以具有行业前瞻洞察的“探索者”为视角&a…

docker以外挂目录的方式部署springboot项目

前置准备: 清单: 安装有docker的Linuxspringboot打包的jar文件(该项目只有一个返回"hello world"接口) Linux的IP地址:192.168.221.129 springboot项目的接口: 1、上传jar文件至Linux 我上传…