名称
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
分析一下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应该提升不大
相关链接
无