【论文阅读笔记】VNect: Real-time 3D human Pose Estimation with a Single RGB

2023-05-16

论文总结:

  文中方法比较简单,通过全卷积CNN预测一个heatmap及location map。location map实际上就是X, Y, Z三个方向的坐标图,找到关键点的过程为heatmap 中寻找照最大值(x, y),则在对应的X, Y, Z找到对应位置的点,组成相对根节点的3D坐标。

  由于这种3D pose估计是通过单帧进行的,无法考虑前后信息,无法在视频时间上保持动作的一致性,所以需要一系列的后处理。

论文介绍:

  论文提到,如果将3D pose 视为2D pose的隐藏变量,则会产生空间的歧义性问题。因为2D 位置稀疏序列失去了空间的前后性,如四肢的前后方向(手往前和往后在2D序列中表现的位置是一样的),这样在模糊前提下的估计会导致错误的估计。所以,为了解决这种问题,作者提出从图像特征中直接学习3D pose隐含特征的判别方法。其实,就是在图像中联合训练2D和3D pose(3D 是相对于root的3D 关节点位置,root应该是骨盆位置).

  本文的目标是在30hz以上达到高质量的姿态估计。在预测开始的时候,由于没有对象的尺度信息,所以前几帧的检测效果是不太好的,这也是方法为了适应对象的身体比例的小副作用。

  VNect的输入是连续的单目RGB图像(实际上应该每次输入是一张RGB图像),第t帧的输出为全局3D骨骼位置 P t G P^G_t PtG。CNN联合训练2D关节点位置 K t K_t Kt和相对 root 的3D关节点位置 P t L P_t^L PtL。最后将2D和3D关节点预测位置结合起来,估计出一个平滑的、时间连续的姿态 P t G ( θ , d ) P^G_t(\theta, d) PtG(θ,d),其中 d d dcamera space的全局位置, θ \theta θ是运动学骨架的关节点角度。 J J J表示关节点的数量。

CNN姿态回归

  CNN模型如上图所示。骨干网络为ResNet50,从res5a开始修改结构,最终目标是预测2D heatmap和3个location map, X, Y, Z。通过使用额外的3个location map将2D heatmap扩展成3D,方式为:找到关节点 j j j的heatmap最大值位置,依据最大值位置在 X , Y , Z X, Y, Z X,Y,Z中找到对应的 x j , y j , z j x_j, y_j, z_j xj,yj,zj存为 P L = x , y , z P^L={x, y, z} PL=x,y,z,其中 x ∈ R 1 ∗ J x\in R^{1*J} xR1J。训练损失如下公式所示,是因为作者只想让 x j , y j , z j x_j, y_j, z_j xj,yj,zj得到训练,想到的强相关加权公式。 L o s s ( x j ) = ∥ H j G T ⊙ ( X j − X j G T ) ∥ Loss(x_j)=\| H^{GT}_j \odot (X_j - X_j^{GT}) \| Loss(xj)=HjGT(XjXjGT)其中 G T GT GT表示ground truth, ⊙ \odot 表示阿达玛乘积(Hadamard procuct),实际操作为元素对应乘积,2D的ground truth heatmap H j G T H^{GT}_j HjGT

  除输入和输出外,VNect的中间还加入了和root-relative location map X j , Y j , Z j X_j, Y_j, Z_j Xj,Yj,Zj相似的 kinematic parent-relative location-maps Δ X j , Δ Y j , Δ Z j \Delta X_j, \Delta Y_j, \Delta Z_j ΔXj,ΔYj,ΔZj,然后用于计算 bone length-maps : B L j = Δ X j ⊙ Δ X j + Δ Y j ⊙ Δ Y j + Δ Z j ⊙ Δ Z j BL_j=\sqrt {\Delta X_j \odot \Delta X_j + \Delta Y_j \odot \Delta Y_j + \Delta Z_j \odot \Delta Z_j} BLj=ΔXjΔXj+ΔYjΔYj+ΔZjΔZj

  在训练的时候,加入中间监督。随着迭代的加深,逐步减少中间损失的权重。中间监督从 res4d res5a 预测 2D heatmaps 3D location maps

  作者想通过结合中间预测和中间特征,给网络一个骨干长度的明确概念,以自适应特征对象躯干。

  2D pose使用MPII和LSP进行预训练,3D pose使用MPI-INF-3DHP和Human3.6m。huamn3.6数据集,除了S9和S11都用于训练,MPI-INF-3DHP使用全部。

  图片在输入之前,也是要将对象置中的,即进行crop。VNect的方案是通过上一帧的2D pose来确定Bounding box,高度扩展0.2x,宽度扩展0.4,bounding box被水平移动到2D预测的质心,以稳定预测。最后将crop出来的图像resize到368*368,以使比例正常。

Kinematic Skeleton Fitting

  在视频中,逐帧pose估计不能充分利用运动的时间一致性,小的pose误差会导致时间上的抖动,所以作者选择做时域滤波和平滑的后处理。

  做平滑的时候,同时利用上2D pose和3D pose,最后得到的坐标由最小化下图公式的能量所得,对于骨骼关节角度 θ \theta θ和root关节点的在camera space d d d的坐标。

E I K E_{IK} EIK是3D逆运动像,与3D CNN的输出 P t L P_t^L PtL的相关性来决定整体的pose; E p r o j E_{proj} Eproj决定全局姿态 d d d,通过2D检测结果来校正3D pose;至于时间稳定度,是 E s m o o t h E_{smooth} Esmooth的功劳;若摄像机标定位置,则假定垂直视角54度。为抵消单目重建中的不确定性,对深度的大变化进行补偿 E d e p t h E_{depth} Edepth。最后使用 1 E u r o f i l t e r 1 Euro filter 1Eurofilter进行filter。

  各项的权重为 w I K = 1 , w p r o j = 44 , w s m o o t h = 0.07 , w d e p t h = 0.11 w_{IK}=1, w_{proj}=44, w_{smooth}=0.07, w_{depth}=0.11 wIK=1,wproj=44,wsmooth=0.07,wdepth=0.11。而1 Euro filter的也有相关的权重,不了解,不列了。

论文实验

  在6核Xeon CPU, 3.8GHZ和单一的Titan X GPU上运行,CNN运算时间约等于18ms,骨骼fitting约在7~10ms,前处理和filtering 5ms。
  与微软的基于RGB-D的商业软件Kinect的对比:

  和其他方法的定量对比:作者认为Res50比Res100好的原因在于使用了更大的mini-batch.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【论文阅读笔记】VNect: Real-time 3D human Pose Estimation with a Single RGB 的相关文章

  • tkinter 和 time.sleep

    我试图在等待 5 秒后删除文本框中的文本 但程序不会运行 并且会休眠其他所有内容 还有一种方法可以让我的文本框休眠 这样我就可以在文本冻结时运行其他代码 from time import time sleep from Tkinter im
  • 计算持续时间

    我有一个小的android问题 我需要一个计时器来计算从特定活动打开到单击该活动中的某个按钮的持续时间 即活动打开的时间 在谷歌搜索时 我发现了 TimerTask 但这似乎只在一定的时间间隔内运行一个线程 从我的 Android 经验来看
  • C++ timegm 将 DST 转换为未来某个给定时间的某个时区?

    我需要在我的班级中从 UTC 时间准确转换为给定时区的本地时间 无论 DST 是否有效 我的问题是 当我使用struct tm我必须提供 tm isdst 成员 或者将其保留为 1 以自动确定 from mktime 3 linux man
  • 如何使用python获取时间的秒数

    这是我的代码 last time get last time now time time last time minute seconds print Next time you add blood is minute seconds 因为
  • 更精确的 distance_of_time_in_words

    distance of time in words很棒 但有时不够精细 我需要一个能够以文字报告准确时间距离的函数 例如 上午 7 50 到上午 10 10 的距离应该是 2 小时 20 分钟 而不是 大约 2 小时 或其他什么distan
  • C 嵌入式应用程序中 time() 函数的问题

    我在用time 在 ARM 微控制器上 处理器一到达此函数就会重新启动 奇怪的是 当我处于调试模式时 代码运行得很好 但一旦我想将其应用到独立模式 我就会遇到重置 我是否忽略了什么 这个功能有替代品吗 代码部分是这样的 include
  • Unix 时间戳到 FAT 时间戳

    我正在尝试将时间结构转换为 FAT 时间戳 我的代码如下所示 unsigned long Fat tm struct pTime unsigned long FatTime 0 FatTime pTime seconds 2 gt gt 1
  • Android 日期/时间显示 0 而不是 12

    我想知道下面的代码有什么问题 Assign hour set in the picker c set Calendar HOUR selectedHour c set Calendar MINUTE selectedMinute For a
  • 在 JavaScript/Node.js 中将 Youtube Data API V3 视频持续时间格式转换为秒

    我正在尝试将 ISO 8601 字符串转换为 JS Node 中的秒 我能想到的最好的办法是 function convert time duration var a duration match d g var duration 0 if
  • 获取当前时间(以小时和分钟为单位)

    我正在尝试从系统收集信息 并且需要获取当前时间 以小时和分钟为单位 目前我有 date awk print 4 输出如下 16 18 54 怎样才能把秒数去掉呢 提供格式字符串 date H M Running man date将给出所有格
  • 如何通过使用内置的 Date 类来节省时间?

    这个问题的目的是使用内置的 Date 类收集日期 时间计算的解决方案 而不是编写冗长的复杂函数 我会自己写一些答案 如果有人想出一些非常聪明的东西 我会接受答案 但这主要是作为解决方案的集合 因为我经常看到处理日期的代码过于复杂 请记住这是
  • 哪些语言可以很好地进行日期、时间和日历操作? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 这可能是一个过分的要求 但是有没有一种语言能够真正出色地表示时间和日期操作呢 我会立即承认这是真的很难编写一个真正伟大的时间库 也就是
  • Bash:从给定时间减去 10 分钟

    在 bash 脚本中 如果我有一个代表时间的数字 格式为 hhmmss 或 hmmss 那么减去 10 分钟的最佳方法是什么 即 90000 gt 85000 这有点棘手 日期可以进行一般操作 即您可以执行以下操作 date date 10
  • 找出某个日期时间自unix纪元以来的时间?

    我想找出 2009 年 10 月 1 日 9 00 BST 的 UNIX 时间 即自 Unix 纪元以来的秒数 我如何在 Linux 命令行上执行此操作 我知道你可以使用date UNIXTIME someformat 但是unix时间是我
  • time() 会返回相同的输出吗?

    当用户注册时 我正在为 PHP 中的用户生成令牌 我想知道两个用户是否可以获得相同的令牌 因为这会破坏系统 请让我知道这是否足够 token md5 rand time 编辑 我现在正在使用我在另一个问题上找到的generate uuid
  • 仅以 int 形式显示和保存小时数

    如何仅显示小时并使用 int 变量 我的意思是打印时间 例如 20 30 44 PM 我只想存储小时 即 int 变量中的 20 小时 怎么做 有谁知道的话可以告诉我密码吗 谢谢 尝试使用日历get http docs oracle com
  • 在 KRL 中如何获取当前的年、月、日?

    我正在开发一个应用程序 需要获取当前的年 月和日 有没有办法在规则的前块中获取此信息 我可以以字符串或数字或两者的形式获取此数据吗 目前有时间函数记录在http docs kynetx com docs Time http docs kyn
  • 从纪元到相对日期的秒数

    我正在处理自纪元以来的日期 并且已经得到了 例如 date 6928727 56235 我想将其转换为另一种相对格式 以便我能够将其转换为与纪元相关的格式 使用 time gmtime date 它返回 year 1970 mon 3 da
  • 如何用C语言测量时间?

    我想知道某个代码块执行了多长时间 大约 像这样的事情 startStopwatch do some calculations stopStopwatch printf lf timeMesuredInSeconds How 您可以使用clo
  • 使用 Javascript 和 Mongodb 对时间序列数据重新采样

    时间序列数据的数据集需要从具有不规则时间间隔的数据集转换为规则时间序列 可能使用插值和重采样 蟒蛇的pandas Dataframe resample http pandas pydata org pandas docs stable ge

随机推荐

  • ROS+Gazabo+PX4仿真学习常用网站记录

    1 PX4官网 xff1a PX4 User Guide 中文网站 xff1a https docs px4 io master zh ros mavros custom messages html 2 ROS Wiki xff1a cn
  • 如何订阅(Subscribe)现有功能包节点的话题,介绍实现思路

    我们从github或其他途径获取到的ROS功能包 xff0c 如何快速的加入到自己的工程里边 xff0c 下边介绍一下我实现的思路 1 首先运行功能包 xff0c 利用 rqt graph 命令查看 节点图 xff0c 对功能包的节点和话题
  • PX4仿真时,如何在Gazebo下添加物理环境

    1 安装Gazebo xff0c 步骤略 2 下载安装Gazebo需要的世界模型 xff0c 否则自动安装速度很慢 3 在Ubuntu终端里输入 gazebo xff0c 打开一个空的 Gazebo 界面 4 点击左上方的 insert x
  • 树莓派如何使用串口,树莓派连接pixhawk

    参考链接 xff1a xff08 写的非常详细 xff0c 下述方法亲测有效 xff09 pi 3 How do I make serial work on the Raspberry Pi3 PiZeroW Pi4 or later mo
  • 树莓派备份系统

    使用 rpi backup 脚本进行备份 首先下载该脚本 xff1a git clone https github com nanhantianyi rpi backup git cd rpi backup 用法 xff1a sudo ba
  • Linux和Windows可执行文件的区分

    一些后缀区分 现在PC平台流行的可执行文件格式 xff08 Executable xff09 xff0c 主要有以下两种格式 xff08 COFF xff08 Common file format xff09 格式的变种 xff09 xff
  • 树莓派+ubuntu18.04+ROS-melodic+MAVROS+librealsense+vio+realsense_ros

    目录 一 树莓派安装ubuntu18 04 1 下载ubuntu系统文件 2 将系统文件烧入SD卡 3 强制修改HDMI输出分辨率 xff08 此步骤可忽略 xff09 4 设置wifi xff08 此步骤也可忽略 xff0c 后续连接网线
  • APM+Gazebo 垂起固定翼VTOL软件在环仿真

    APM 43 Gazebo 垂起固定翼VTOL软件在环仿真 1 APM软件环境下载并安装APM固件加入环境变量 2 运行APM仿真3 Gazebo环境安装4 增加VTOL模型5 多机仿真6 使用mavros 1 APM软件环境 参考官网链接
  • 进程间通信的五种方式

    进程间通信的意思就是在不同进程之间传递信息 它是一组编程接口 xff0c 让程序员协调不同进程 xff0c 使能够相互传递消息 IPC目的 1 xff09 数据传输 xff1a 一个进程需要将它的数据发送给另一个进程 xff0c 发送的数据
  • Arduino采集Microzone遥控器信号(ROSMicrozoneBridge)

    关注微信公众号 混沌无形 xff0c 后台回复 xff1a 13462F6 免费获取完整工程源码 xff01 本文采用Arduino mega2560的6个外部中断来采集Microzone接收机的6个通道的PPM信号 xff0c 主要是测量
  • 路径规划之基于优化的规划算法

    关注同名微信公众号 混沌无形 xff0c 阅读更多有趣好文 xff01 原文链接 xff1a 机器人曲线插值拟合算法研究现状简述 xff08 包含原文PDF百度云下载链接 xff09 第三类算法是主要是将多目标多变量多约束耦合的规划模型转化
  • 常见移动机器人多角度对比分析

    混沌无形 混沌系统是世界本质 xff0c 无形之中存在规律 机器人智能化发展从线性过渡到混沌 xff0c 本号将分享机器人全栈技术 xff08 感知 规划 控制 xff1b 软件 机械 硬件等 xff09 43篇原创内容 公众号 文末提供原
  • 麦克纳姆轮运动特性分析

    混沌无形 混沌系统是世界本质 xff0c 无形之中存在规律 机器人智能化发展从线性过渡到混沌 xff0c 本号将分享机器人全栈技术 xff08 感知 规划 控制 xff1b 软件 机械 硬件等 xff09 43篇原创内容 公众号 文末提供原
  • 全向轮运动特性分析

    文末提供原文PDF免费下载 期刊论文版式 混沌无形 混沌系统是世界本质 xff0c 无形之中存在规律 机器人智能化发展从线性过渡到混沌 xff0c 本号将分享机器人全栈技术 xff08 感知 规划 控制 xff1b 软件 机械 硬件等 xf
  • matlab稳态和时变卡尔曼滤波器Kalman filter的设计和仿真植物动力学模型案例研究

    最近我们被客户要求撰写关于卡尔曼滤波器的研究报告 xff0c 包括一些图形和统计输出 本案例研究说明了卡尔曼滤波器的设计和仿真 考虑稳态和时变卡尔曼滤波器 植物动力学 考虑一个在输入u n 上有加性高斯噪声w n 此外 xff0c 让 yv
  • 正点原子-操作系统

    正点原子另一个学习网站 http www openedv com docs book videos zdyzshipin 4free zdyz freertos book html
  • 基于stm32的减速直流电机PID算法控制

    本例程采用了HAL库进行项目开发 xff08 主要使用软件CubexMX和keil5 xff09 xff0c 文章末尾会有代码开源 xff0c 欢迎各位对文章进行指正和探讨 基于PID的减速电机控制 一 硬件模块与原理图 1 硬件组成 硬件
  • 记录一次在VM上搭建k8s集群

    安装私有镜像仓库Harbor xff1a https blog csdn net a595077052 article details 119893070 配置k8s的dashboard xff1a https blog csdn net
  • ubuntu 上 docker 安装以及配置VNCserver

    1 install Docker 安装过程 根据docker官网安装过程 根据docker官网 lt a data cke saved href 61 34 https docs docker com install linux docke
  • 【论文阅读笔记】VNect: Real-time 3D human Pose Estimation with a Single RGB

    论文总结 xff1a 文中方法比较简单 xff0c 通过全卷积CNN预测一个heatmap及location map location map实际上就是X Y Z三个方向的坐标图 xff0c 找到关键点的过程为heatmap 中寻找照最大值