基于SMPL的三维人体重建-深度学习经典方法之VIBE

本文以开源项目VIBE[1-2]为例,介绍下采用深度学习和SMPL模板的从图片进行三维人体重建算法的整体流程。如有错误,欢迎评论指正。


一.算法流程

图1.算法流程

包含生成器模块和判别器模块,核心贡献就在于引入了GRU模块,使得当前帧包含了先前帧的先验信息,从而动作更加连贯和合理(VIBE的思路其实还是很清晰的,几张图足以概况,更多的还是在于工程实现,感兴趣的话还是得去看下源码)。

注: 这里是整个训练流程,训练结束后会拿掉判别器的部分,只需要生成器部分进行推理。

二.具体步骤

数据集

  1. MPI-INF-3DHP: 8个个体,每个个体16个视频序列,大多为室内环境采集,包含3d关节点,SMPL参数
  2. Human3.6M: 使用了7个个体,每个个体15个动作序列,受控环境下采集,包含3d关节点,SMPL参数
  3. 3DPW: 60个视频序列,室内室外均有,包含3d关节点,SMPL参数
  4. PennAction: 2326个视频序列,15种不同的动作,包含2d关节点及其置信度,2d包围盒
  5. Insta Variety: 共计长达24个小时的视频序列,Instagram上收集得到,利用openpose生成伪2d关节点
  6. PoseTrack: 1337个视频序列,包含2d关节点
  7. Kinetics-400: 具体信息不清,利用openpose生成伪2d关节点
  8. AMASS: 300个个体,11000个动作种类,共计40小时的视频,包含SMPL参数

网络结构

1) 生成器模块

图2.生成器

输入图片序列,输出SMPL系数和相机参数。

2) 判别器模块

图3.判别器

输入SMPL系数,输出动作的合理概率。

注:以上两张图还是挺好理解的,可参考GRU[4],对抗学习[6],自注意力模型[5]进行理解。

  • 输入

图片序列。

注:基于单张图片进行SMPL重建的模型最大的问题在于忽视了帧间的联系,若采用这种模型应用于视频序列,其中存在的一个问题就是人体会很抖动。

  • 输出

SMPL系数(全局姿态: 3, 关节点节点姿态: 23*3,形状系数: 10),相机参数(尺度: 1,平移: 2)

注:指推理阶段的输出,也就是生成器的输出

损失函数

1)生成器损失

式1.生成器损失

式2.三维关键点损失

式3.二维关键点损失

式4.身份姿态参数损失

式5.对抗损失

式2)、式3)含义自明;

式4)中,对于形状系数 β ^ \hat{\beta} β^,是通过对每一帧的 β t \beta_t βt做average pooling得到的;

式5)中, Θ ^ = { θ ^ 1 , . . . , θ ^ , β ^ } \hat\Theta=\{\hat\theta_1,...,\hat\theta,\hat\beta\} Θ^={θ^1,...,θ^,β^} D M \mathcal{D}_M DM表示判别器,输出的是动作的合理概率。

2)判别器损失

式6.判别器损失

式6)中, Θ \Theta Θ为来自AMASS的SMPL模型的GT系数。

三.实现

注:1)目前的开源实现[2]在训练阶段,生成器开始利用CNN提取特征和最后利用回归器生成SMPL参数的步骤,是单独利用已训练好的SPIN模型实现的,而不是联合GRU模块一起训练的,训练流程如下所示(感觉一起训练的话效果应该会更好)

图4.vibe实际实现流程

2)推理流程为

图5.vibe推理流程

四.其它

除了VIBE之外,后续有一篇改进的论文TCMR[8]。简单看了下主要是对网络结构进行了改动,但重建效果要比VIBE平滑很多,代码也开源了[9],感兴趣的读者可以自行研究下。

五.参考

[1]VIBE: Video Inference for Human Body Pose and Shape Estimation

[2][GitHub - mkocabas/VIBE: Official implementation of CVPR2020 paper "VIBE: Video Inference for Human Body Pose and Shape Estimation"](https://github.com/mkocabas/VIBE)

[3][Guided lecture: VIBE: Video Inference for Human Body Pose and Shape Estimation](https://www.youtube.com/watch?v=hErK0MamTY4&list=TLPQMTIwMjIwMjLEOfLIHvqppA&index=2)

[4][阿力阿哩哩:通熟易懂RNN|RNN与RNN的变种结构 | 上](https://zhuanlan.zhihu.com/p/105383343)

[5][soccer:Attention注意力机制与self-attention自注意力机制](https://zhuanlan.zhihu.com/p/265108616?utm_source=qq)

[6][一文读懂对抗生成学习(Generative Adversarial Nets)[GAN]](https://www.cnblogs.com/Mang0/p/10129284.html)

[7][CVPR2020论文解读 | VIBE:Video Inference for Human Shape](https://cloud.tencent.com/developer/article/1645354)

[8]Beyond Static Features for Temporally Consistent 3D Human Pose and Shape from a Video

[9][GitHub - hongsukchoi/TCMR_RELEASE: Official Pytorch implementation of "Beyond Static Features for Temporally Consistent 3D Human Pose and Shape from a Video", CVPR 2021](https://github.com/hongsukchoi/TCMR_RELEASE)

[10][python中logging日志模块详解 - 咸鱼也是有梦想的 - 博客园](https://www.cnblogs.com/xianyulouie/p/11041777.html)

[11][十指透兮的阳光:yacs的使用小记](https://zhuanlan.zhihu.com/p/366289700)

[12][GitHub - mkocabas/multi-person-tracker: Simple Multi Person Tracker implementation in PyTorch](https://github.com/mkocabas/multi-person-tracker)

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

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

相关文章

深入浅出Linux操作系统大数据定制Shell编程(六)

深入浅出Linux操作系统大数据定制Shell编 1、大数据定制-Shell编程1.1、什么是Shell1.2、Shell脚本执行方式 2、Shell变量2.1、shell变量的定义2.1.1、设置环境变量2.1.2、多行注释 2.2、位置参数变量2.2.1、语法 2.3、预定义变量2.4、运算符2.4.1、条件判断2.4.2、case语句2.4…

SQL-leetcode—1174. 即时食物配送 II

1174. 即时食物配送 II 配送表: Delivery ------------------------------------ | Column Name | Type | ------------------------------------ | delivery_id | int | | customer_id | int | | order_date | date | | customer_pref_delivery_date | date | -------------…

C#AWS signatureV4对接Amazon接口

马上要放假了,需要抓紧时间测试对接一个三方接口,对方是使用Amazon服务的,国内不多见,能查的资(代)料(码),时间紧比较紧,也没有时间去啃Amazon的文档,主要我的英文水平也不行,于是粗…

30289_SC65XX功能机MMI开发笔记(ums9117)

建立窗口步骤: 引入图片资源 放入图片 然后跑make pprj new job8 可能会有bug,宏定义 还会有开关灯报错,看命令行注释掉 接着把ture改成false 然后命令行new一遍,编译一遍没报错后 把编译器的win文件删掉, 再跑一遍虚拟机命令行…

“““【运用 R 语言里的“predict”函数针对 Cox 模型展开新数据的预测以及推理。】“““

主题与背景 本文主要介绍了如何在R语言中使用predict函数对已拟合的Cox比例风险模型进行新数据的预测和推理。Cox模型是一种常用的生存分析方法,用于评估多个因素对事件发生时间的影响。文章通过具体的代码示例展示了如何使用predict函数的不同参数来获取生存概率和…

Effective Objective-C 2.0 读书笔记—— objc_msgSend

Effective Objective-C 2.0 读书笔记—— objc_msgSend 文章目录 Effective Objective-C 2.0 读书笔记—— objc_msgSend引入——静态绑定和动态绑定OC之中动态绑定的实现方法签名方法列表 其他方法objc_msgSend_stretobjc_msgSend_fpretobjc_msgSendSuper 尾调用优化总结参考文…

验证二叉搜索树(力扣98)

根据二叉搜索树的特性,我们使用中序遍历,保证节点按从小到大的顺序遍历。既然要验证,就是看在中序遍历的条件下,各个节点的大小关系是否符合二叉搜索树的特性。双指针法和适合解决这个问题,一个指针指向当前节点&#…

【竞技宝】LPL:IG3-1击败RNG

北京时间1月26日,英雄联盟LPL2025正在如火如荼的进行之中,昨日共进行两场比赛。第二场比赛由RNG对阵IG。本场比赛,RNG在首局前期打出完美节奏后一直压制着IG拿下比赛,但此后的三局,IG发挥出自己擅长大乱斗的能力在团战…

web3py+flask+ganache的智能合约教育平台

最近在学习web3的接口文档,使用web3pyflaskganache写了一个简易的智能合约教育平台,语言用的是python,ganche直接使用的本地区块链网络,用web3py进行交互。 代码逻辑不难,可以私信或者到我的闲鱼号夏沫mds获取我的代码…

使用 Docker 运行 Oracle Database 23ai Free 容器镜像并配置密码与数据持久化

使用 Docker 运行 Oracle Database 23ai Free 容器镜像并配置密码与数据持久化 前言环境准备运行 Oracle Database 23ai Free 容器基本命令参数说明示例 注意事项高级配置参数说明 总结 前言 Oracle Database 23ai Free 是 Oracle 提供的免费版数据库,基于 Oracle …

JAVA(SpringBoot)集成Kafka实现消息发送和接收。

SpringBoot集成Kafka实现消息发送和接收。 一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者 君子之学贵一,一则明,明则有功。 一、Kafka 简介 Kafka 是由 Apache 软件基金会开发的一个开源流处理平台,最初由 Link…

Spring Boot 无缝集成SpringAI的函数调用模块

这是一个 完整的 Spring AI 函数调用实例&#xff0c;涵盖从函数定义、注册到实际调用的全流程&#xff0c;以「天气查询」功能为例&#xff0c;结合代码详细说明&#xff1a; 1. 环境准备 1.1 添加依赖 <!-- Spring AI OpenAI --> <dependency><groupId>o…

媒体新闻发稿要求有哪些?什么类型的稿件更好通过?

为了保证推送信息的内容质量&#xff0c;大型新闻媒体的审稿要求一向较为严格。尤其在商业推广的过程中&#xff0c;不少企业的宣传稿很难发布在这些大型新闻媒体平台上。 媒体新闻发稿要求有哪些&#xff1f;就让我们来了解下哪几类稿件更容易过审。 一、媒体新闻发稿要求有哪…

ui-automator定位官网文档下载及使用

一、ui-automator定位官网文档简介及下载 AndroidUiAutomator&#xff1a;移动端特有的定位方式&#xff0c;uiautomator是java实现的&#xff0c;定位类型必须写成java类型 官方地址&#xff1a;https://developer.android.com/training/testing/ui-automator.html#ui-autom…

ThreadLocal概述、解决SimpleDateFormat出现的异常、内存泄漏、弱引用、remove方法

①. ThreadLocal简介 ①. ThreadLocal是什么 ①. ThreadLocal本地线程变量,线程自带的变量副本(实现了每一个线程副本都有一个专属的本地变量,主要解决的就是让每一个线程绑定自己的值,自己用自己的,不跟别人争抢。通过使用get()和set()方法,获取默认值或将其值更改为当前线程…

总结8..

#include <stdio.h> // 定义结构体表示二叉树节点&#xff0c;包含左右子节点编号 struct node { int l; int r; } tree[100000]; // 全局变量记录二叉树最大深度&#xff0c;初始为0 int ans 0; // 深度优先搜索函数 // pos: 当前节点在数组中的位置&#xff0c…

科普篇 | “机架、塔式、刀片”三类服务器对比

一、引言 在互联网的世界里&#xff0c;服务器就像是默默运转的超级大脑&#xff0c;支撑着我们日常使用的各种网络服务。今天&#xff0c;咱们来聊聊服务器家族中的三位 “明星成员”&#xff1a;机架式服务器、塔式服务器和刀片式服务器。如果把互联网比作一座庞大的城市&…

动手学图神经网络(2):跆拳道俱乐部案例实战

动手学图神经网络(2):跆拳道俱乐部案例实战 在深度学习领域,图神经网络(GNNs)能将传统深度学习概念推广到不规则的图结构数据,使神经网络能够处理对象及其关系。将基于 PyTorch Geometric 库,一步步探索图神经网络的奥秘。 安装必要的包 首先, 安装所需的 Python 包…

【vue3组件】【大文件上传】【断点续传】支持文件分块上传,能够在上传过程中暂停、继续上传的组件

一、概述 本示例实现了一个基于 Vue3 和 TypeScript 的断点上传功能。该功能支持文件分块上传&#xff0c;能够在上传过程中暂停、继续上传&#xff0c;并且支持检测已经上传的分块&#xff0c;避免重复上传&#xff0c;提升上传效率。以下是关键的技术点与实现流程&#xff1…

OpenCV 版本不兼容导致的问题

问题和解决方案 今天运行如下代码&#xff0c;发生了意外的错误&#xff0c;代码如下&#xff0c;其中输入的 frame 来自于 OpenCV 开启数据流的读取 """ cap cv2.VideoCapture(RTSP_URL) print("链接视频流完成") while True:ret, frame cap.rea…