[Paper Reading] Reconstructing Hands in 3D with Transformers

news/2025/2/22 16:32:07/文章来源:https://www.cnblogs.com/fariver/p/18370002

名称

Reconstructing Hands in 3D with Transformers
时间:CVPR2024
机构:UC Berkeley, University of Michigan, New York University

TL;DR

本文提出一种使用Transformer来做Hand Tracking的算法名为HaMeR(Hand Mesh Recorvery),优势是大数据规模(利用多数据集的2D/3D标签),大模型(大Size的纯Transformer模型架构)。

Method


算法架构方面亮点是使用了纯Transformer架构(Backbone使用VIT,Head使用Transformer Decoder),不过是单目的算法。
模型
Head:预测Mano参数、3D关键点、2D关键点、相机参数(用来将3D投影至2D)
Loss:除了监督上述输出的L1/L2 Loss之外,还有一个adversarial Loss,用来判断生成的MANO参数是否是unnature的。
数据
建立HInt数据集,从Hands23、Epic-Kitchens以及Ego4D三个数据集挑选部分数据,并经过人工筛选,最终获取40.4K样本。

Code

Code Link

分析一下hamer.py,Q1:模型Backbone是什么?Q2:transformer decoder head的模型架构是如何设计的?Q3:模型Loss是什么设计的?Q4:模型输出的shape是什么? FromKimiChat 基于提供的 hamer.py 文件内容,以下是对您问题的回答:

Q1: 模型是如何预测MANO参数的?

模型使用一个Transformer解码器头(MANOTransformerDecoderHead)来预测MANO参数。
输入图像通过骨干网络(如Vision Transformer, ViT)提取特征,然后这些特征被送入Transformer解码器。
Transformer解码器利用交叉注意力机制来整合图像特征和上下文信息,生成MANO参数。
预测的MANO参数包括手部姿态(hand_pose)、形状参数(betas)和全局方向(global_orient)。
通过迭代细化过程(IEF_ITERS)来逐步优化参数预测。
Q2: Transformer Decoder Head的模型架构是如何设计的?

Transformer解码器头由多个层组成,每层包括自注意力和交叉注意力机制。
输入特征首先被转换为一系列的token,然后送入Transformer解码器。
每个Transformer层后跟一个线性层(解码器),用于将特征映射到MANO参数空间。
位置编码被添加到token中,以提供序列中的位置信息。
迭代预测允许模型在多个阶段细化其预测。
Q3: 模型Loss是什么设计的?

模型使用多种损失函数来训练网络,包括:
关键点2D损失(Keypoint2DLoss):计算预测的2D关键点与真实标注之间的差异。
关键点3D损失(Keypoint3DLoss):计算预测的3D关键点与真实标注之间的差异。
MANO参数损失(ParameterLoss):计算预测的MANO参数与真实参数之间的差异。
所有这些损失被加权求和,形成总损失,用于模型的反向传播和优化。
Q4: 模型输出的shape是什么?

模型输出包括:
预测的2D关键点(pred_keypoints_2d):形状可能是[batch_size, num_keypoints, 2]。
预测的3D关键点(pred_keypoints_3d):形状可能是[batch_size, num_keypoints, 3]。
MANO参数,包括:
global_orient:全局方向,形状可能是[batch_size, num_joints, 3]。
hand_pose:手部姿态,形状可能是[batch_size, num_joints * 3]。
betas:形状参数,形状可能是[batch_size, num_betas]。
摄像机平移(pred_cam_t):形状可能是[batch_size, 3]。
Q5: 顶点是直接预测出来的,还是通过预测出MANO参数FK出来的?

顶点不是直接预测出来的。模型预测MANO参数,然后使用这些参数作为输入来生成3D人体网格。
MANO模型根据提供的参数,包括姿态、形状和全局方向,通过正向运动学(FK)计算出网格的顶点。
Q6: 摄像机平移参数有什么用处?

摄像机平移参数(pred_cam_t)是用于3D到2D投影的关键参数,它们定义了虚拟摄像机的位置和视角。
这些参数对于将3D人体网格准确地投影到2D图像平面上至关重要,使得预测的3D姿态能够与输入图像中的实际人体姿态对齐。
它们通常与摄像机的旋转和缩放参数一起工作,以实现精确的视角和尺寸匹配。
以上信息是基于提供的 hamer.py 文件内容进行的分析。如果需要更详细的解释或有其他文件提供了额外的上下文,可能需要进一步的分析。

Experiment

两个经典测试集上的效果表现

Ablation

总结与发散

亮点是使用纯Transformer
使用adversarial Loss是创新点之一,文章没有做ablation应该提升不大

相关链接

资料查询

折叠Title FromChatGPT(提示词:XXX)

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

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

相关文章

“就是打一打”清华程思元打出百度之星20年史上罕见两连冠

8月18日,被称为“技术界奥斯卡”的2024百度之星程序设计大赛(以下简称“百度之星” )落下帷幕。近千人同场敲代码、中学生几乎垄断奖项、背靠背冠军诞生……百度之星像中国编程次世代的技术嘉年华,越来越多人加入其中。近千学霸角逐“编程奥斯卡”,初小学生比例创新高 百度…

企业级Scrum敏捷赋能课程:为企业量身定制的敏捷开发培训,旨在提升团队协作与项目交付能力,实现敏捷管理的落地。

​ ​ 课程简介: Scrum 是一种广泛应用的敏捷开发方法,用于项目管理和产品研发。该课程为期两天,专为研发管理者、项目经理、产品经理和研发团队设计。通过案例讲解和沙盘演练,学员将深入理解Scrum的核心理念,如产品价值驱动、以用户为中心、快速迭代和增量交付,掌握自管…

使用对比!SLS 数据加工 SPL 与旧版 DSL 场景对照

这里我们继续讨论在不同的数据处理需求中,新版数据加工 SPL 与旧版数据加工 DSL 的使用对照。对于数据同步的场景,即不需要做任何数据处理,新版 SPL 与旧版 DSL 均传入空逻辑即可,以下不再赘述。作者:灵圣 概述 如前一篇《SLS 数据加工全面升级,集成 SPL 语法》所述,SLS…

Jenkins与gitlab持续集成配置webhook报500错误

Hook execution failed: Failed to open TCP connection to localhost:8585 (Connection refused - connect(2) for "localhost" port 8585) 在点击push events进行测试Jenkins时,出现上图,是因为gitlab没有打开一项权限,做如下设置即可

在孩子成长路上,爱与智慧的陪伴是送给孩子最好的礼物

如今智能设备的普及、社交媒体的兴起和娱乐方式的碎片化,使我们时刻被各种信息和刺激包围,这种环境对正处于成长期的儿童影响尤为显著,他们更容易被快节奏、高刺激的内容吸引,导致专注力下降,从而影响学习和认知能力的发展。针对这一现实挑战,数业智能心大陆推出了AI儿童…

TXT 记录解析怎么做?

在当今数字化的时代,网络技术的应用越来越广泛,而域名系统(DNS)则是网络通信中至关重要的一部分。TXT 记录作为 DNS 中的一种记录类型,有着特定的用途和解析方法。 那么,TXT 记录解析究竟该怎么做呢? 一、了解 TXT 记录的概念 TXT 记录,即文本记录,是一种可以存储任意…

Kubernetes基础命令

Kubernetes 提供 kubectl 是使用 Kubernetes API 与 Kubernetes 集群的控制面进行通信的命令行工具。 这个工具叫做 kubectl。 针对配置信息,kubectl 在 $HOME/.kube 目录中查找一个名为 config 的配置文件。 你可以通过设置 KUBECONFIG 环境变量或设置 --kubeconfig 参数来指…

CRMEB多商户版前端页面安装依赖要点

CRMEB多商户版CRMEB_Mer_v2.3.2(20240710源码包).zip安装环境如下(很重要)平台管理-admin端安装依赖yarn install平台商户-mer端安装依赖yarn install平台客服-service端安装依赖npm install

打砖块小游戏html小游戏

这里提供一个打砖块小游戏html代码,有需要的小伙伴可以自己试试。body内容 点击查看代码 <select id="difficulty"><option value="easy">简单</option><option value="medium">中等</option><option value=&…

LLM应用实战: 产业治理多标签分类

本期的干货就是分享关于如何基于LLM实现数量多、层级多的多标签分类的实战经验,各位读者可以参考借鉴。1. 背景 许久未见,甚是想念~ 近期本qiang~换了工作,处于新业务适应期,因此文章有一段时间未更新,理解万岁! 现在正在着手的工作是产业治理方面,主要负责其中一个功能…

使用cilium开发ebpf程序

使用go开发ebpf程序最常见的一个框架就是cilium。开发前需要了解ebpf,了解go语言的基础知识。 在本地安装go之后下载bpf2go go get github.com/cilium/ebpf/cmd/bpf2go 从最简单的开发框架开始 下载示例源码 git clone https://github.com/cilium/ebpf.git 在ebpf/examples下是…

element ui 中日期选择器disabledDate的几种用法

现实开发中,遇到截止日期,跟着接口返回来确定的。需要用函数来实现disabledDate 这块知识,在手册文档写的也不详细。 这块实现基于element-ui 2.15.14https://blog.csdn.net/hellowang02/article/details/131575982相信坚持的力量,日复一日的习惯.