[Paper Reading] HandDiff: 3D Hand Pose Estimation with Diffusion on Image-Point Cloud

HandDiff: 3D Hand Pose Estimation with Diffusion on Image-Point Cloud

HandDiff: 3D Hand Pose Estimation with Diffusion on Image-Point Cloud
时间:CVPR2024
机构:ETH & CMU & Sungkyunkwan University

TL;DR

将手部分3D点预测任务建模为点云生成任务,提出Handiff算法,以手部图像点云为条件输入,通过迭代降噪的方式预测精确的手部姿态,效果在四个benchmark上都达到SOTA。

Method



输入:手部深度图\(D_{in} ∈ R^{H×W}\), sampled 3D点云\(P_{in} ∈ R^{N ×3}\)
输出: \(J^0 ∈ R^{J×3}\)

特征提取

depth image -> CNN -> Local 2D特征
sampled 3D points -> PointNet++ -> Local 3D特征

Joint-wise Condition Extraction

提取Joint-wise的embedding特征
做法: cat[local 2d feature, 3d feature] 外接J个head,每个Head独立预测自己的joint embedding特征,该joint wise feature将作为condition信息,在diffusion每个迭代轮次均被使用。
算法pipeline看图即可,与diffusion model几乎一致了。

Code

Code Link

分析一下xx.py,Q1:模型Backbone是什么?Q2:模型预测noise还是预测去噪之后的结果?Q3:模型Loss是什么设计的?Q4:模型输出的shape是什么?Q5: 实验代码中diffusion迭代多少次? 让我们根据提供的 `handdiff.py` 文件内容来回答你的问题。

Q1: 模型的Backbone是什么?

handdiff.py 中,模型使用了 ConvNeXt 作为其backbone。ConvNeXt 是一个基于卷积神经网络的架构,它在模型中用于提取特征。在代码中,ConvNeXt 被实例化为 self.backbone,并且根据模型配置的不同(例如 'tiny', 'small', 'base', 'large'),其深度和维度会有所不同。

Q2: 模型预测noise还是预测去噪之后的结果?

模型是一个去噪模型,它预测的是去噪之后的结果。这可以从模型使用 DiffusionPoint 类这一事实中推断出来,该类在代码中用于定义扩散过程中的点。扩散模型通常用于生成或恢复数据,通过逐步去除噪声来恢复出干净的数据。

Q3: 模型Loss是什么设计的?

模型的损失函数是一个平滑的L1损失(smooth L1 loss),定义在 smooth_l1_loss 函数中。这个损失函数通常用于回归问题,它结合了L1损失和L2损失的特点,对于异常值不敏感,并且在优化过程中更加平滑。

Q4: 模型输出的shape是什么?

模型的输出是一个关节点的预测,具体来说,是一个 BxJx3 的张量,其中 B 是批次大小,J 是关节点的数量,3 代表每个关节点的 X, Y, Z 坐标。这可以从模型的 forward 方法和 get_loss 方法中的处理逻辑中看出。

Q5: 实验代码中diffusion迭代多少次?

在实验代码的配置中,迭代次数由 iters 参数控制。在 HandModel 类的初始化中,iters 被用作 VarianceSchedule 类的参数,这表明扩散过程的迭代次数。根据代码中的注释和上下文,迭代次数被设置为 opt.iters,其具体值在实验代码中被设置为500。

Q6: 文章中表格6的hypotheses指得是什么?

在文章 "HandDiff: 3D Hand Pose Estimation with Diffusion on Image-Point Cloud" 中,表格 6 显示了在去噪过程中不同假设数量(hypotheses)下的平均关节误差(mean joint error)。这里的 "hypotheses" 指的是在推断过程中,模型生成的多种可能的3D手部姿势假设。

具体来说,在扩散模型(diffusion model)中,为了提高估计的准确性,可以采用多假设策略,即生成多个不同的姿态预测。这些预测可以看作是关于真实手部姿势的不同假设。通过迭代地去噪,每个假设都会逐步改进,最终通过某种形式的集成或平均,以获得更准确的结果。

在文中的实验设置中,作者探讨了使用不同数量的假设对最终手部姿势估计性能的影响。结果表明,随着假设数量的增加,误差通常会减小,但当假设数量达到一定程度后,进一步增加带来的性能提升会变得边际化。

以上就是对 handdiff.py 文件内容的分析。如果你需要更详细的代码解释或有其他问题,请随时提问。

Experiment


Ablation

  1. using local conditions (LC); 2) using joint indicator (JI); 3) using joint-wise con- dition (JC) and LC; 4) using LC with JI; 5) using JC and LC with JI; 6) using JC and LC with JI and kinematic correspondence (KC); 7) using JC, LC with JI and KC, and multiple hypotheses (MH), which is our full configuration. Note that the use of local conditions without KC is imple- mented by applying a PointNet layer [33] on noisy joints.

总结与发散

结合diffusion的算法原理扩充了文章篇幅
将手部特征作为先验condition信息,diffusion过程更像是一个cascade的过程

相关链接

人体上Diffusion工作参考CVPR2023这篇 DiffPose: Multi-hypothesis Human Pose Estimation using Diffusion Models

资料查询

折叠Title FromChatGPT(提示词:XXX)
posted @ 2024-08-20 21:48  fariver  阅读(24)  评论(0编辑  收藏  举报