Paper Reading


[2023.07.31][ICCV23 CCFA]DiffPose: SpatioTemporal Diffusion Model for Video-Based Human Pose Estimation

Motivation

Learning representations that focus on keypoint regions is crucial for accurate localization of human joints. The adaptation of the diffusion-based methods remains unclear on how to achieve such objective.

Contribution

DiffPose, a novel diffusion architecture that formulates video-based human pose estimation as a conditional heatmap generation problem.

SpatioTemporal Representation Learner: Aggregate visual evidences across frames and uses the resulting features in each denoising step as a condition.

Lookup-based MultiScale Feature Interaction: Determine the correlations between local joints and global contexts across multiple scales and generate delicate representations that focus on keypoint regions.

characteristics

(i) the ability to combine multiple sets of pose estimates to improve prediction accuracy, particularly for challenging joints.

(ii) the ability to adjust the number of iterative steps for feature refinement without retraining the model.

Results

DiffPose sets new state-of-the-art results on three benchmarks: PoseTrack2017, PoseTrack2018, and PoseTrack21.

[2023.09.20][ICRA24 CCFB submitted]EDMP Ensemble-of-costs-guided Diffusion for Motion Planning

Motivation

Introduction

相较于传统的路径规划使用单一损失的方法,使用基于具体场景的损失例如碰撞损失collision-cost,而且集成了多个损失进行指导。

碰撞包括自我碰撞和与其他物体碰撞。

操纵任务的效果由避免碰撞且达到目标的次数决定。

古法更多是减少对特定数据集的依赖,可以作为现成的方法去进行路径规划。通常使用单一代价函数,比如减少碰撞代价、路径长度、到目标的距离,但是限制较多时不好办,而且需要精细的微调,在场景结构变化上很难捕捉差异性。

一般的神经网络方法通过行为克隆,使用神经网络学习从给定上下文(或场景)到解决方案的映射,速度快准确率高,但是在分布外的场景性能衰减较快,而且需要远程操作机器人来搜集足够的数据。

基于扩散的方法学习一个运动有效路径先验,然后在推理时进行引导,以满足特定场景的约束,同时保持运动学有效性。使用N个不同的代价函数指导扩散过程,可以产生多条路径。集成代价方法可以提高多模多样性,可以根据路径长度或平滑度等不同参数手工选择不同路径。

Contribution

EDMP结合古法和深度学习方法,首先学习一个基于运动有效路径的先验,然后在推理时使用多个成本函数直接获取不同场景的特定成本指导。

EDMP可以推广到新的甚至分布之外的场景,例如为操作器抓取任意物体进行路径规划。

EDMP可以生成多路径,提升了多模的多样性,下游规划者可以利用这一点,从一组解决方案中选择一条轨迹,以评估最佳目标。

Problem Formulation

一个机器人包含一个轨迹$\tau$,$\tau$包含一个关节点状态的序列,第i个轨迹时间步上包含m个关节点,m个节点信息对应一个状态$s_i$,在8月3号的论文中$s_i$包含位置和速度两个信息。关节点状态序列的时间范围是h,从$s_0$到$s_{h-1}$。

$\tau=[s_0,s_1,…,s_{h-1}]^T\in R^{m\times h}$

任务是优化,其中o是代价函数J的超参数

$min_{\tau} J(\tau;o,E)$

代价函数包含两个部分,第一个部分完全依赖于操纵器的运动学参数,包括关节轨迹的平滑性和可行性(例如自碰撞)。第二部分表示将操纵器运动与场景耦合的特定场景的代价。

Diffusion Based Optimal Solution

forward process

$q(\tau_t|\tau_{t-1})=\mathcal{N}(\tau_t;\sqrt{1-\beta_t}\tau_{t-1},\beta_t I)$

$\beta_t$ 控制噪声大小,一般是线性余弦或指数变化的。

从标准正态分布推出一般的正态分布,例如:

$X\sim N(\mu,\sigma^2),Z\sim N(0,1),Z=\frac{X-\mu}{\sigma}$

所以有类似的:

$\tau_t=\sqrt{1-\beta_t}\tau_{t-1}+\sqrt{\beta_t}z_{t-1}=\sqrt{1-\beta_t}(\sqrt{1-\beta_{t-1}}\tau_{t-2}+\sqrt{\beta_{t-1}}z_{t-2})+\sqrt{\beta_t}z_{t-1}$

Let $\alpha_t=1-\beta_t$

therefore, $\tau_t=\sqrt{\alpha_t\alpha_{t-1}}\tau_{t-2}+\sqrt{\alpha_t(1-\alpha_{t-1})}z_{t-2}+\sqrt{1-\alpha_t}z_{t-1}$

由于 $\sqrt{\alpha_t(1-\alpha_{t-1})}z_{t-2}\sim N(0,\alpha_t(1-\alpha_{t-1}))$
$\sqrt{1-\alpha_t}z_{t-1}\sim N(0,1-\alpha_t)$

叠加后得到 $\sqrt{\alpha_t(1-\alpha_{t-1})}z_{t-2}+\sqrt{1-\alpha_t}z_{t-1}\sim N(0,\alpha_t(1-\alpha_{t-1})+1-\alpha_t)$

therefore, $\tau_t=\sqrt{\alpha_t\alpha_{t-1}}\tau_{t-2}+\sqrt{\alpha_t(1-\alpha_{t-1})}z_{t-2}+\sqrt{1-\alpha_t}z_{t-1}$
$=\sqrt{\alpha_t\alpha_{t-1}}\tau_{t-2}+\sqrt{1-\alpha_t\alpha_{t-1}}\bar{z}_{t-2}$

Let $\bar{\alpha}_t=\prod^{T}_{i=1}\alpha_i$

therefore, $\tau_t=\sqrt{\bar{\alpha}_t}\tau_0+\sqrt{1-\bar{\alpha}_t}z$

therefore, $q(\tau_t|\tau_0)=\mathcal{N}(\tau_t;\sqrt{\bar{\alpha}_t}\tau_0,(1-\bar{\alpha}_t)I)$

这样做的好处是采样 $\tau_t$ 可以不执行前向扩散过程。

Reverse process

可以根据前向过程推出后验的扩散条件概率 $q(\tau_{t-1}|\tau_t,\tau_0)$。该式表示给定 $\tau_t$ 和 $\tau_0$ 条件下可以计算出 $\tau_{t-1}$。

推导有时间补充。。。

反向过程用参数化高斯近似这种后验分布:

$p_\theta(\tau_{t-1}|\tau_t)=\mathcal{N}(\tau_{t-1};\mu_\theta(\tau_t,t),\sum_t)$

为了简化,这里只有平均值是可以被学习的,方差部分根据前面的推导被设置为一个常数:

$\sum_t=\sigma^2_t\mathrm{I}=\tilde{\beta}_t\mathrm{I}$,

其中 $\tilde{\beta}_t=\beta_t(1-\bar{\alpha}_{t-1})/(1-\bar{\alpha_t})$

$\mu_\theta(\tau_t,t)=$

在DDPM中,由于 $\tau_0$ 可以用 $\tau_t$ 表示,且 $\tau_t$ 可以推导,即已知。噪声 $\varepsilon$ 是可以被学习的,让网络输出等于 $\varepsilon$ 即可。网络的输入只有上一步的输出 $\tau_t$,也可以是:

$\tau_t=\sqrt{\bar{\alpha}}\tau_0+\sqrt{1-\bar{\alpha_t}}\epsilon_t$

构造目标分布似然的上届,构造出一个只和均值有关的损失,再推出简化后的损失函数:

$\mathcal{L}(\theta)$

使用一个时序UNet对轨迹上的扩散模型进行编码,从后验采样相当于在将轨迹偏向任务可能性的同时从先验采样。

Conditioning on start and goal

This creates a conditioning effect on the start-goal pair, encouraging the network to generate a smooth trajectory between the two.

Guidance Process

在去噪过程中,在t时间步传递给下一步之前加入了具体场景的碰撞代价的梯度,这样做可以从代价指导的后验进行去噪,和从一个高斯分布去噪是相似的,如下一篇文章所说。

$\tau_t^*=\tau_t-\alpha\nabla J(\tau;o,E)$

$\alpha$ 是超参数(学习率),这样会指导路径尽量不要碰撞。

集成代价指导扩散

上面的公式用来自特定场景的代价函数的梯度修改从扩散先验获得的轨迹。梯度的性质会决定过程的有效性,然而这又依赖于很多因素。

代价函数的代数形式

碰撞代价是高度依赖于具体场景的。例如,基于有符号距离场的碰撞代价在起点和目标位置之间有狭窄货架的场景中表现不佳。同样,基于凸碰撞检查的碰撞代价的性能取决于我们是对每个独立航点的环境交叉体积进行惩罚(交叉体积),还是对相邻航点之间的扫描体积进行惩罚(扫描体积)。

梯度和成本超参数

每个碰撞成本模型都有一些超参数,它们也会影响方程2中的梯度下降步骤。例如,梯度权重调度,无论是自适应还是独立的,都是梯度驱动方法中的重要参数。类似地,我们发现在某些情况下,选择在优化的初始阶段扩大目标范围,有助于突显回缩行为,否则可能不太可能发生(回缩可防止机械臂与货架碰撞)。

核心思想

相较于先前(下文)直接对各个代价函数进行加权求和,本篇采用 l 个代价函数旋转,r 种针对每一个代价函数改变超参数的方案,相当于再进行 $l\times r$ 次扩散过程。外部两个循环是彼此解耦的,并在GPU上批量运行。

碰撞代价指导

GJK 算法的基本思想是通过不断收缩两个凸多边形,以找到它们之间的最小距离。该算法的核心是一个迭代过程,其中两个多边形不断靠近,直到它们非常接近或重叠。

EPA 算法的基本思想是在两个碰撞的对象之间创建一个多边形(通常是一个凸多边形),然后逐步扩大或扩展这个多边形,直到它包围了碰撞的对象或直到不再有碰撞发生。

我们计算两个物体A和B之间的碰撞成本,作为它们沿着三个轴的重叠的函数。我们称之为穿透深度。为了实现这一点,我们将每个对象封闭在一个边界框长方体中,并将相交体积 V 计算为:

$$
V(A, B) = prod(|max(min(A), min(B))
− min(max(A), max(B))|)
$$

首先将桌子上的每个物体近似为一个立方体,对应于包围整个物体的3D边界框。类似地,我们将每个机械臂链接表示为一个3D立方体,作为包围该链接的边界框。我们使用可微分正向运动学 $\mathrm{FK}(s_k[i])$ 计算给定配置 $s_k$ 下每个这些边界框的姿势,其中 $s_k[i]$ 表示第 $i$ 个链接的配置。如果场景中有 n 个障碍物,我们可以将场景近似为一个包含 n 个边界框的列表 $E\in \mathbb{R}^{n\times 4\times 4}$。每个边界框表示为大小为 4 × 4 的 SE(3) 李群中的变换矩阵。然后,我们从交叉体积计算碰撞成本,我们称之为“交叉体积成本”。对于给定的 $\tau$ 中的每个链接状态,相对于 E 中的每个障碍物的 $J_{inter}$ 交叉体积成本是:

该成本的梯度给出了关于每一个维度的穿透深度信息,计算平均值可以让链接的移动方向变得平均。如图所示,两个碰撞的物体可以各自妥协向一个平均的移动方向进发。

从扫描体积中定义了扫描体积代价:

扫描体积近似表示链接在两个相邻航点之间扫过的体积。这样的成本函数有助于考虑轨迹中相邻关节状态之间可能发生的碰撞,同时也被设为一个立方体:

EXPERIMENTS

Pybullet simulator, Franka Panda robot

Dataset: 在 M$\pi$Nets 的数据集上进行基准测试或性能评估。

训练数据集包括 6.54 百万条无碰撞轨迹。这 6.54 百万条轨迹是在各种场景中生成的(例如桌面、梳妆台和储物柜),使用了两种不同的经典规划管线:全局规划器(3.7 百万条轨迹),基于 AIT∗,以及混合规划器(3.7 百万条轨迹),它将 AIT∗ 用于在末端执行器空间进行规划,并使用 Geometric Fabrics 生成,在生成的末端执行器路标点的基础上产生几何一致运动。

混合规划器一般先生成一个粗略的,然后在细节上微调。

测试数据集包括三个数据集:(1)全局可解问题(global):包括 1800 个场景,只能通过全局规划器解决,也就是说,全局规划器可以为这些场景生成有效的无碰撞轨迹。 (2)混合可解问题(hybrid):包括 1800 个只能通过混合规划器解决的场景。 (3)两者都可解问题(both):一组 1800 个场景,可以由全局规划器和混合规划器同时解决。

训练和架构细节:

两种不同的规划器:一个在全局数据上,另一个在混合数据上。每个去噪器被建模为类似于时序UNet。

9h in RTX 2080 with 20000 timesteps

每个场景包括障碍物配置、起始位置(在关节配置中)、目标位置(在训练期间在关节配置中,测试期间在末端执行器空间中)。使用逆运动学来从末端执行器位置计算关节配置。每条轨迹包括50个路标点,包括初始和最终的关节配置。

使用12个代价,5个交叉体积,7个扫描体积。然而。

Baselines:比较基于行为克隆的规划器(M$\pi$Nets、MPNets)和两个基于随机优化的规划器(G.Fabrics、STORM),还有一个带有五次样条初始化的基于优化的规划器(CHOMP),以及一组通过OMPL实现的基于采样的规划器,用于在全局、混合和两个测试集上进行比较。

如果规划器能够生成一个避免所有碰撞并达到目标的轨迹,我们称问题成功解决。

训练分布之外的场景

让机械臂持有任意物体,对于这样的场景,EDMP 可以直接使用,而基于深度学习的方法如 M$\pi$Nets、MPNets 需要重新训练或专门的训练数据集以考虑物体。

我们还通过生成一个具有碰撞球的场景来测试,EDMP 在 10 个随机生成的包含碰撞球的场景中成功了 8 个,这表明 EDMP 已经学会了一种适用于各种场景的通用先验知识。

生成多轨迹

轨迹用余弦相似度评估,相似度小但是准确率高说明可以生成多个不同的轨迹。

Ablations

整体准确率是随代价函数数量提升的。

平均粗糙度(AR),不包括起点和目标的最大粗糙度(MRESG),第一对路径点之间的粗糙度(RF2W),以及路径点之间的粗糙度(RL2W)来衡量相邻点之间的L2距离,来探索轨迹平滑度。

Future work

手动设置的代价函数较多,自动化程度低。

[2023.08.03][Arxiv]Motion Planning Diffusion Learning and Planning of Robot Motions with Diffusion Models

Motion planning

PD控制器(Proportion-Derivative controller): 一种简单的反馈控制器,利用误差的比例项和微分项来控制系统。在机器人领域常被用来进行joints的位置控制。

反动力学控制器(Inverse dynamics controller): 通过计算机器人的动力学模型的反矩阵,可以直接计算出需要施加在各个joint上的扭矩,从而精确控制机器人的运动。它可以对机器人进行精确的轨迹控制。

主要方法是对碰撞代价函数集进行加权求和,然后最小化,一般的方法是用梯度下降(需要一阶导数),或者随机方法。

会评估采样的轨迹,并且通过在任意非光滑非凸代价下粒子的加权更新数据分布。

$p(\tau|\mathcal{O})=\frac{p(\mathcal{O}|\tau)p(\tau)}{p(\mathcal{O})}$

$p(\mathcal{O}) = \int p(\mathcal{O}|\tau) \cdot p(\tau)d\tau$

边缘似然(证据因子) $p(\mathcal{O})$ 可以归一化一个常数,通常表示给定观测数据$\mathcal{O}$的概率。

所以 $p(\tau|\mathcal{O})\propto p(\mathcal{O}|\tau)p(\tau)$

$\mathcal{O}$表示表示对起始状态和目标状态之间的无冲突路径进行编码的任务。

由于相互独立,在”Learning Implicit Priors for Motion Optimization”一文中似然因子被分解为独立的分量:

$p(\mathcal{O}|\tau)\propto \prod_ip_i(o_i|\tau)^{\lambda_i}$

$p_i(o_i|\tau)\propto e^{-c_i(\tau)}$

此过程可以看作最大后验分布MAP:

$$
\begin{align}
\tau^*&=\mathrm{arg}_{\tau}\mathrm{max}\,\mathrm{log}\,p(\mathcal{O}|\tau)p(\tau)\\
&=\mathrm{arg}_{\tau}\mathrm{max}\,\mathrm{log}\prod_ip_i(o_i|\tau)^{\lambda_i}+\mathrm{log}\,p(\tau)\\
&=\mathrm{arg}_{\tau}\mathrm{min}\sum_i\lambda_ic_i(\tau)-\mathrm{log}\,p(\tau)
\end{align}
$$

在本工作中,利用高斯过程编码出动态可行性和平滑度较高的轨迹先验,即利用可学习的扩散先验对专家数据进行编码。

Optimal sampling with guidance

纠正论文如下公式:

$p(\tau_0|\mathcal{O})=p(\tau_N)\prod^N_{t=1}p(\tau_{t-1}|\tau_t,t,\mathcal{O})$

$\mathrm{log}\,p_\theta(\tau_{t-1}|\tau_t,t)=\mathrm{log}\mathcal\,\mathcal{N}(\tau_{t-1};\mu_t=\mu_\theta(\tau_t,t),\sum_t)\propto-\frac{1}{2}(\tau_{t-1}-\mu_t)^T\sum^{-1}_t(\tau_{t-1}-\mu_t)$

$\beta_t$趋于0,所以噪声方差也趋于0,所以数据集中在均值附近。

对似然 $\mathrm{log}\,p(\mathcal{O}|\tau_{t-1})$ 在 $\tau_{t-1}=\mu_t$ 处使用一阶泰勒展开。将得到的结果乘上先验,最后计算出相应的后验。

尽管 $p(O|\tau_t)$ 包含了 $\tau_t$,但是它并不会影响到后验概率 $p(\tau_{t-1}|\tau_t,t,O)$,只是一个归一化的因子。

在对扩散先验的轨迹进行平滑采样的同时,可以将样本偏向于增加任务似然的区域,从而降低总代价目标。

在motion规划中,这些似然可以是无碰撞区域、目标集合和配置空间中的关节限制。(配置空间是一个用来描述系统所有关节位置的抽象数学空间。机器人的关节通常有物理限制,即它们不能无限制地旋转或移动。这些限制通常包括关节的最大和最小角度范围,以及可能的最大速度和加速度限制。)

为了保证任务似然的重要性,由于方差趋于0,减少了协方差部分的权重。

Motion planning costs

总代价是航点代价之和。

开始结束状态代价

对于扩散模型开始 $s_s$ 和结束状态 $s_g$ 分布可以被看作一个狄拉克分布(0的脉冲无穷大)。为了将算法实施到实际系统中,通常会将轨迹的初始和最终配置硬性设置为具体的数值。

如果生成模型不支持狄拉克分布,则增加一个初始代价,则采用二次代价,例如用L2计算初始和输入的距离 $c_{s_s}(\tau)=||s_s-\tau[0]||^2_2$

碰撞代价

在机器人身上填充 K 个球体,对于任意配置情况下,计算可微的有符号距离 d(从球体中心减去球体半径到最近一个障碍物表面的距离),记录一个边缘值 $\epsilon$,比边缘值大就记为0,比边缘值小就记录他们的差值。

自碰撞代价

将链接在同一个机器人身上的球体分为一组,然后两两计算球体之间的距离,最后求出所有成对球体的距离的均值。

关节限制代价

关节限制包括速度限制等计算违反情况的L2距离,比如最大最小速度和实际速度之间的距离,其中也包含一个边缘值,使得限制的速度是一个区间。

末端执行器代价

计算当前末端执行器姿势和目标姿势之间的 SE(3) 距离。

SE(3):特殊欧几里德群(SE(3))是一个数学概念,用于表示三维空间中物体的姿态和位置变换。它包括三维空间中的平移和旋转,因此可以描述物体在三维空间中的位置和方向。SE(3)的元素通常表示为一个四阵列,包括一个旋转矩阵 R 和一个平移矢量 p,通常记作 [R, p]。这种组合允许表示物体的姿态和位置。

SO(3):特殊正交群(SO(3))是三维空间中的特殊正交矩阵的集合,用于描述三维空间中的旋转。它包括所有具有行列式值为+1的三阶正交矩阵。SO(3)的元素通常表示为一个旋转矩阵 R,它描述物体的旋转姿态。

计算当前末端执行器姿势和目标姿势的距离代价:

高斯过程代价

对于未受控制的轨迹分布,由于轨迹中包含的是 h 时间轴上的运动情况,假设其没有明显的均值或趋势,则使用高斯过程的先验来建模。使用时间协方差矩阵 K:这是一个矩阵,其元素 K(i, j) 描述了时间步 i 和时间步 j 之间的协方差或相关性。这些协方差值可以告诉你在时间上相邻或离散的时间点之间的轨迹值如何相关。

整个公式表示了一个高斯分布的指数部分,其中状态向量 $s_t$ 和 $s_{t+1}$ 经过状态转移矩阵 $\phi_{t,t+1}$ 后的差异的平方被除以协方差矩阵的逆矩阵 $Q^{-1}_{t,t+1}$。这是高斯分布的指数部分,用于衡量状态 $s_t$ 和 $s_{t+1}$ 之间的关联或相关性。

$Q_c$ 是一个表示功率谱密度(Power Spectral Density,PSD)矩阵。

最终 GP 代价表示为:

这个代价提升了动态灵活性和平滑性。

[2023.01.15][CVPR23 CCFA]Diffusion based Generation, Optimization, and Planning in 3D Scenes

基于场景条件的Human Pose, Human Motion,
Dexterous Grasp, Path Planning for Navigation, Motion Planning (input
trajectory)

[2022.10.14][RAL22]3D contact point cloud reconstruction from vision-based tactile flow

NeRF

[2023.09.28][Arxiv]DreamGaussian Generative Gaussian Splatting for Efficient 3D Content Creation

Abstract

近年来3d生成主要是基于优化的 score distillation sampling (SDS)。这种技术的主要思想是使用一个固定的分布,例如高斯分布,作为生成模型的基础,然后通过一个神经网络(被称为”评分网络”)来修改这个基础分布,使其更接近于数据的真实分布。

现有方法每个样本优化速度较慢,本文实现了同时注重效率和质量的生成。

(纹理细化在UV空间:UV空间是一种参数化的2D空间,用于在3D模型上贴图。纹理细化通常涉及到对模型表面的纹理进行一些改进或者优化,比如消除纹理拉伸或者缝隙。
伴随的网格提取:这通常涉及到从3D点云或体素数据中提取一个表面网格。这个过程通常需要一些形状恢复算法,如Marching Cubes或者Poisson重建。)

该方法使用一个生成式的3D高斯Splatting模型来生成3D数据,然后使用一种伴随的网格提取方法来从这些生成的数据中提取出网格模型,最后在UV空间对这些模型的纹理进行细化。

对于3D生成任务,使用逐步增加3D高斯分布的密度的方法,收敛速度要比在NeRF中使用的占用剪枝方法快得多。

(“Occupancy pruning”在NeRF中,是一种用于优化NeRF模型的方法。NeRF是一种用于3D场景渲染的深度学习方法,通过在3D空间中学习一个连续的函数来预测光线在该空间中的颜色和密度。而”occupancy pruning”则是一种剪枝技术,通过去除那些对渲染结果没有贡献(即被认为是”空闲”)的3D区域,从而加速NeRF的训练和推理过程。)

本文引入一种高效的算法将3d高斯转变成纹理网格并加入一种微调阶段去改善细节。可以仅在两分钟内从单一视角图片生成高质量纹理网格。

Introduction

3d生成分为两大类:直接从输入数据(例如图像或视频)推断出3D模型的方法、先在2D空间中进行操作,然后再将结果“提升”到3D空间的方法。(inference-only 3D native methods and optimization-based
2D lifting methods)

为了解决SDS监督中的不一致和模糊性,引入NeRF方法,但是由于NeRF的渲染优化速度很慢。占用剪枝可以加速NeRF,但是当以模糊的SDS损失作为监督,以往工作只关注了重建设置。常见的空间剪枝技术无法加速生成设置。

作者表示逐步增加高斯喷射的密度。很大程度上是和生成设置的优化过程是一致的。

直接在潜在空间应用SDS损失(如在第一阶段所做的那样)会导致UV贴图上出现过饱和的块状伪影。使用基于扩散模型的图像编辑技术来执行图像空间上的监督。

Contribution

1.我们提出了一种新的3D内容创建框架,通过将高斯飞溅适应生成设置,显著减少了基于优化的2D提升方法的生成时间。

2.我们设计了一种高效的三维高斯网格提取算法和UV空间纹理细化阶段,以进一步提高生成质量。

3.在图像到3D和文本到3D任务上的大量实验表明,我们的方法有效地平衡了优化时间和生成保真度,为3D内容生成的真实世界部署释放了新的可能性。

图像到3D生成旨在从参考图像生成3D资产。这个问题也可以被表述为单视图3D重建。但这种重建设置通常会因缺乏不确定性建模而产生模糊的结果。

Approach

一阶段通过SDS将3d gaussian splitting应用到生成任务上做一个初始化。二阶段从3d高斯中提取纹理网格。三阶段,这个纹理然后会被可微渲染微调,即通过一个UV空间的微调阶段到最后的导出。

GENERATIVE GAUSSIAN SPLATTING

每个高斯球的位置由中心坐标 x(3),缩放因子 s(3) 和一个旋转四元数 q(4) 组成。还会包括用于体积渲染的透明度 $\alpha$(1) 和颜色特征 c(3),这些参数被打包到 $\theta$ 由于只需要模拟简单的漫反射颜色,因此在模型中不使用球谐函数。

(球谐函数(Spherical Harmonics)是在三维空间中表示函数的一种方法,常用于计算机图形学中来模拟复杂的光照效果,如阴影、反射和折射等。简单的漫反射颜色是指物体表面对光线的散射是均匀的,无论从哪个角度看,颜色都保持不变。这种物质的颜色称为漫反射颜色。)

将3d高斯投影到图像平面变成2d高斯。为了计算最终的颜色和alpha(透明度),将对每个像素进行从前向后的深度顺序的体积渲染。使用高度优化的渲染器优化 $\theta$(Kerbl et al. (2023))。

(”Volumetric rendering”是一种用于构建3D图像的计算机图形技术,通过在三维空间中的每个点上评估一个函数(如颜色和透明度)来生成图像。这种方法可以产生逼真的光照、阴影和深度效果。
“Front-to-back depth order”是一种遍历3D空间中的点的方法,从视觉上最近的点开始,一直到最远的点。这种方法常用于体积渲染,因为它可以有效地处理透明度和遮挡问题。)

在一个球体内随机采样位置来初始化3D高斯函数,这些高斯函数具有单位缩放(缩放因子为1)并且没有初始旋转。

在优化过程中,这些3D高斯函数会周期性地增加密度。不同于重构基线,我们从较少的高斯开始,但是更频繁地增加它的密度与生成过程保持一致。使用 SDS 优化3d高斯,在每一步中,随机采样一个围绕物体中心运动的相机姿态 p,并渲染当前视图的RGB图像 $I^p_{RGB}$ 和透明度 $I^p_A$。

在优化过程中,会线性减少时间步长 t,而这个时间步长 t 用于权衡添加到渲染的 RGB 图像中的随机噪声 $\epsilon$。然后,使用不同的2D扩散先验 $\phi$ 来引导 SDS 去噪步骤,并将其反向传播到3D高斯函数。理解一下就是让2d图去作为 condition 引导3d高斯投影出来的图去噪。

输入一张rgb图片和前景掩码(作为透明度),2d扩散先验是Zero-1-to-3 XL。SDS Loss可以表示为:

在这里,∆p 代表的是相对于参考相机 r 的相机姿态变化。也就是说,如果你有一个参考相机 r,然后有另一个相机的姿态 p,那么 ∆p 就是从 r 到 p 的相机姿态变化。

(相机姿态(camera pose)指的是相机在三维空间中的位置和方向。相机姿态由旋转和平移两部分组成,通常可以用一个四元数和一个三维向量来表示。

这个概念在很多计算机视觉的应用中都很重要,比如立体视觉、SLAM(同时定位和映射)、3D重建等等。通过知道两个相机之间的相对姿态,就可以计算出它们看到的场景的一些信息,比如深度、物体的三维形状等。)

约束参考视角下的图像透明度与输入保持一致,权重会在训练中线性增加。

text-to-3d 是利用 CLIP 的 embedding 作为输入。

总loss是三个loss的加权和。

生成的高斯模糊缺乏细节,即使是更长的SDS训练迭代。这可能是由于 SDS loss 的模糊性导致的。每一步优化会产生不一致的 3d 指导。对算法来说,很难正确地增加正在重建区域的密度或者剪除过度重建区域,如同在重建过程中一样。这个观察引导我们进行以下的网格提取和纹理细化设计。

EFFICIENT MESH EXTRACTION

由于空间密度是由大量的三维高斯函数来描述的,所以粗暴地查询一个密集的三维密度网格可能会非常慢且效率低下。

(多边形网格(Polygonal mesh)是一种广泛使用的三维(3D)表示方式,特别是在工业应用中。多边形网格由许多多边形(通常是三角形或四边形)组成,通过这些多边形的组合来近似表示一个三维物体的表面。)

颜色混合只通过投影的二维高斯函数来定义,实际上我们在看的是3D物体被投影到2D屏幕上的结果,所以二维颜色混合计算起来也更加简单和高效。作者使用一种基于块状局部密度查询和反向投影颜色的高效算法,用于提取纹理网格。体积过大的高斯将被分割或修剪。

首先将3d空间下的 $(-1,1)^3$ 分为 $16^3$ 个块,然后剔除在每个局部 block 外的中心点的高斯。然后在每个局部 block 内查询 $8^3$ 的密度网格,总计 $(8\times16)^3$ 密度网格。在网格位置x处的每次查询,我们将剩余的每个3D高斯的加权不透明度求和。这个总的不透明度可能会用来决定网格位置x处的颜色或其他图形属性。

这个公式是一个3D高斯函数的公式,表示了在点x处的密度值 d(x) 是如何计算的。其中,i表示一个特定的3D高斯,$α_i$ 是这个高斯的权重,$x_i$ 是这个高斯的中心位置,$Σ_i$ 是这个高斯的协方差矩阵。

$(x-x_i)^T\sum^{-1}_i(x-x_i)$ 这部分表示点 x 到高斯中心 $x_i$ 的距离的平方,乘以协方差矩阵的逆。这个值越大,表示点 x 离高斯中心越远,那么高斯函数的值就越小。

$Σ_i$ 是由缩放 $s_i$ 和旋转 $q_i$ 构建的协方差矩阵。这个矩阵表示了这个3D高斯在空间中的形状和方向。

然后,这个密度值 d(x) 被用来提取网格表面。具体来说,当 d(x) 大于一个经验阈值时,我们认为在点 x 处有一个表面(即在物体上),否则就认为没有。这个表面的提取过程是通过 Marching Cubes 算法来进行的,这是一种常用的体素表面提取算法。

(“Decimation”是一种降低模型复杂度的技术,它通过减少模型中的顶点和多边形数量来简化模型。这种技术通常用在模型的细节不需要太高,或者需要降低计算复杂度和内存使用的情况下。

“Remeshing”则是一种改变模型网格结构的技术,它可以使模型的网格更均匀,或者更符合某些特定的需求。比如,我们可以通过Remeshing来优化模型的形状,使其更平滑,或者更适合某些特定的渲染或模拟算法。)

所以,”Decimation和Remeshing被用来后处理提取出的网格,使其更平滑。

接着利用颜色反投影到 3d 物体上以获得纹理。3D模型的每个顶点都会被赋予一组UV坐标,这组坐标对应2D纹理图像上的一个点。

均匀地选择了8个方位角和3个仰角,再加上顶部和底部的视图,以渲染相应的RGB图像。排除了具有较小摄像机空间z方向法线的像素,以避免在网格边界处出现不稳定的投影(物体表面法线与所在视角平面近乎平行)。

UV-SPACE TEXTURE REFINEMENT

直接用 SDS Loss 微调 UV 会导致出现伪影,这是由于在可微光栅化中使用了 mipmap 纹理采样技术。在进行纹理采样时,会根据当前的采样需求选择一个或多个合适的mipmap层级进行插值。当SDS损失函数的梯度反向传播到mipmap的某个层级时,可能会推动那个层级的纹理值向某个极端方向移动,从而导致颜色过于饱和。

解决方法:由于我们已经获得了一个初始化的纹理,然后找一个任意视角下的模糊图像并对它加噪,用 2d 扩散先验引导去噪。

$\epsilon(t_{start})$ 是在 $t_{start}$ 时间步上的随机噪声,c 是 ∆p ,e 是文本 embedding。开始的时间步要小心选取限制噪声长度,使用像素级 MSE Loss。

总和仍是RGBA loss,只需要大概 50 步。

EXPERIMENTS

IMPLEMENTATION DETAILS

一阶段 500 步;二阶段 50 步。

3dgs 初始化: 0.1 opacity, grey color inside a sphere of radius 0.5

渲染分辨率从 64 提升到 512 以便于高斯喷射。随机采样 128-1024 网格。

$\lambda$ 权重会线性增加从 0 到 $10^4$ 和 $10^3$ 。

相机姿态采样半径是 2 的 2.5,i-3d、t-3d,y轴 FOV 是49度(y轴方向上的可见角度范围)。方位角范围在[-180, 180]度,俯仰角范围在[-30, 30]度。

背景随机白或黑,输入图像会被去除背景和居中预处理。3dgs是 5k 个粒子初始化,每 100 步加密,t-3d任务用 sd,速度较慢,1000个随机粒子初始化3D高斯分布,并在每50步进行加密。

GPU:V100(16GB),使用少于 8g 的显存。

尽管我们的网格质量略逊于其他基于优化的方法,但我们实现了显著的加速,超过了10倍。

LIMITATIONS

我们与以前的文本到3D工作共享一些常见问题:多面Janus问题和烘焙照明。幸运的是,可以通过最近的多视图2D扩散模型(Shi等,2023;Liu等,2023c;Zhao等,2023)和潜在BRDF自编码器(Xu等,2023b)的进展来解决这些问题。此外,我们图像到3D结果中生成的背面纹理可能看起来模糊。通过更长的第2阶段训练可以缓解这个问题。

SUPPLEMENT

透视投影矩阵

1.基于fov、aspect、n(near)、f(far)计算近裁剪面边界。

aspect表示任一裁切面的宽高比 w/h,n 表示近裁切面到相机的距离,f 表示远裁切面到相机的距离, t 是近裁切面上半高。

t=n*tan(fov/2)
b=-t
r=t*aspect
l=-r

2、一开始是将空间里的点投影到一个虚拟屏幕上,有点类似小孔成像,只不过这里把倒立的像放到正面来变成正立的。在 OpenGL 里,虚拟屏幕被设置为宽高都是 -1 到 1 的,我们只利用fovy,因为我们将这个虚拟屏幕移动到刚好卡在视锥体的视线范围内,这样只有在垂直方向上这个虚拟屏幕刚好卡满视锥体视线范围的高(高为1的位置,假设视锥体视线范围是一个长方形),这样我们就可以计算 $tan(fovy/2)=\frac{1}{d}$。对于垂直方向上的缩放,只需要考虑三角形相似,$\frac{y}{y’}=-\frac{z}{d}$,y’是虚拟屏幕上的点。(z轴是向后的)

3、处理水平方向上的坐标时,首先将实际坐标点 x 映射到虚拟屏幕所在的那个 H=2 的长方形,$x\in[-W/2,W/2]$,$\frac{x}{x_0}=-\frac{z}{d}$,$x\in[-Aspect,Aspect]$,然后进行归一化 $x’=\frac{x_0}{Aspect}$。

4、处理 z 轴归一化时,是将 $z\in[-n,-f]$ 变换到 $z\in[-1,1]$。正常的归一化表示为 $\frac{z-\frac{f+n}{2}}{\frac{f-n}{2}}$,但是考虑到近大远小,所以采用透视除法,假设变换可以表示为 $\frac{Az+B}{z}$ A 表示缩放,B 表示平移,z 表示透视除法,这样做的好处是可以让后面的点更加向 1 集中。

$\frac{Az+B}{z}\in[-1,1]$

如图所示:

学习

参考

内参矩阵

其中fx和fy是相机的水平和垂直焦距,(对于理想的针孔相机,fx=fy)。焦距的物理含义是相机中心到成像平面的距离,长度以像素为单位。cx和cy是图像原点相对于相机光心的水平和垂直偏移量。cx,cy有时候可以用图像宽和高的1/2近似,这是由于图像原点通常被定义为图像的左上角:

@property
def intrinsics(self):
    focal = self.H / (2 * np.tan(self.fovy / 2)) # 焦距
    return np.array([focal, focal, self.W // 2, self.H // 2], dtype=np.float32)

学习

[2023.08.21][Arxiv submitted]FocalDreamer Text-driven 3D Editing via Focal-fusion Assembly

Abstract

尽管 text-3d 在利用 SDS 方面取得了进展,但是最新的方法在提供可分离、精确核一致的结果方面存在不足。FocalDreamer

end


文章作者: Alex Lee
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex Lee !
评论
  目录