paper-reading6

paper-reading about something, whatever.

Zero-1-to-3: Zero-shot One Image to 3D Object

根据一个视角的图片,合成另一个视角的图片。

主要是利用预训练扩散模型的先验,通过微调让其学习控制相机视角。

dataset获得

利用Objaverse,对每个物体,随机选取相机角度渲染对应的图片,获得图片对{},其中RT均为后一张图片对前一张图片的相对角度。

条件控制

从单张图像进行三维重建既需要低层次的感知(深度、阴影、纹理等),也需要高层次的理解(类型、功能、结构等)。

一方面,将RT与输入图片的CLIP embedding连接得到c(x,R,T)。

另一方面,将输入图片按channel连接到被去噪的图片上。

随机将两种条件置空来实现CFG。

微调

Zero123++: a Single Image to Consistent Multi-view Diffusion Base Model

主要变化是由原来生成一张新视角图像转为生成多张新视角图像,使得生成的图像之间的一致性更好。

生成策略

layout

如图,将6幅多视角图片以3*2的方式平铺到一帧。

视角选择

在绝对相机姿态上训练模型会导致难以辨认物体方向。
Zero123使用相对姿态,但后续额外需要一个模组估计照相机的仰角,会带来误差。
所以Zero123++使用绝对的仰角相对的方位角

噪声强度 Noise Schedule

Stable Diffusion使用scaled-linear schedule,其SNR比较高。
早期降噪过程低SNR的步骤对生成全局低频信号很关键,scaled-linear schedule的这些步骤较少,会导致低频信号多样性较高,这对于单张图片生成是有利的,但不利于维持多张图片的一致性。
所以换成SNR较低的linear schedule

前文也提到,在Zero123高分辨率训练时会出现不稳定的现象,所以降低了分辨率。
降低分辨率可以看做是提高了噪声强度,即降低SNR,与改变schedule的效果是一样的。
因为分辨率较高的自然图像往往在(附近)像素中表现出较高的冗余度,因此在相同水平的独立噪声下,被破坏的信息较少,显得less noisy。

局部条件控制:Scaled Reference Attention

Scaled Reference Attention

如图,将参考图像加噪后执行相同的降噪过程,并把参考图像的KV append到被降噪的多视角图像的KV上。

全局条件控制:FlexDiffuse

就是将参考图像的CLIP embedding 加到text embedding的位置。

text embedding ,L为text token的数量,D为embedding的维度。image embedding ,定义一个可学习的参数,则

ViVid-1-to-3: Novel View Synthesis with Video Diffusion Models

类似上一篇,只不过使用了视频模型进行生成

由于模型在生成新视图时往往不能忠实地遵循目标摄像机的路径,而且还可能存在物体姿态误差。由于这些渲染图在作为视频观看时,会因突然的运动而看起来不像自然视频,因此使用视频扩散模型有助于消除这种误差。

视角选择

根据初始姿态目标姿态,使用Spherical Linear Interpolation (Slerp)获得一系列平滑的相机轨迹

Spherical Linear Interpolation

需要一些数学知识

从二维旋转引入

SO(2)群

在二维世界中,想要旋转一个向量,可以对其乘一个旋转矩阵

得到新向量

旋转前后向量的模长保持不变,即,可以推出,即旋转矩阵是正交矩阵。

考虑所有满足正交性的矩阵,可以得到一个群,叫做O(2)群,很容易得知:

其中是单位矩阵,是分别绕x轴和y轴对称的矩阵,即

在这个群中,可以通过行列式来区分旋转和平移,行列式为1的是旋转,为-1的是平移。

我们将纯转动单独拎出来组成一个群,叫做SO(2)群。这个群元素的特征为满足正交性且行列式为1。

U(1)群

我们也可以从复数的角度看旋转,即将二维向量看作复数,旋转矩阵可以看作复数,作为旋转的负数z满足,同样可以构造出一个群,叫做U(1)群

SO(2)和U(1)是同构的,可以很容易构造出一个对应关系

考虑三维旋转

三维旋转可以有三种方式表达,本质上是一样的

我们可以类似的定义SO(3)群来描述三维旋转矩阵组成的群。
同样的我们也想类比复数构建一个代数系统,找到一个对应的群,叫做SU(2)群

SU(2)群

这种代数系统叫做四元数

为什么是四元数而不是三元数,有Frobenius定理:实数域上的有限维可除代数只有实数、复数、四元数

四元数表示:,其中都是实数,是四元数单位,满足以下关系:

单位四元数:

规定一个对应关系

可以将四元数表示为矩阵形式

由此定义一个复矩阵构成的群,叫做SU(2)群,满足以下关系:

三维旋转关系

对于一个三维向量,沿着向量旋转角度,可以得到新向量,则

q需要满足单位四元数的条件。

注意q和-q表示同一个旋转,因此SO(3)群是SU(2)群的双覆盖

四元数的Slerp插值

将四元数看做旋转,需要对其进行插值,得到均匀的旋转。

设初始四元数为p,目标四元数为q,插值四元数为r,pq角度为,则在t时刻,r与p夹角为,与q夹角为

则有

解得

所以

视频生成

生成时,使用了两个模型

其中,是用于合成新视角的模型,文中使用Zero- 1-to-3 XL是视频模型,文中使用ZeroScope

MVSNet: Depth Inference for Unstructured Multi-view Stereo

基础知识,双目三维重建

三角化

已知两张图片对应点的像素坐标,相机内参,以及R,T,求解P点的三维坐标。

直接法

把两条直线的方程变换到同一个坐标系后求交点即为P的坐标。
视频中说,但是不太理解。

由于噪声的存在,两条直线一般不相交,所以需要下面两种解法。

线性解法

问题转化为寻找P满足投影到两个平面的约束。

最终转化为一个有3个未知参数4个方程的超定齐次线性方程组

需要求出这个方程的最小二乘解,只需对A进行奇异值分解,P为V的最后一列。

非线性解法

转化为一个优化问题,最小化重投影误差。

多视图几何的关键问题

  1. 摄像机几何:从一张或多张图像中求解摄像机内外参数。有些情况下相机的内外参并不知道
  2. 场景几何:通过二至多幅图寻找3D场景坐标。
  3. 对应关系:将两幅图的像素点对应起来。

极几何

从数学角度描述两幅图像像素的对应关系。

本质矩阵

先假设相机内参为单位矩阵,设三维空间中坐标系下的坐标为坐标系下的坐标为

因为从的坐标变换为

逆过来有

所以坐标系下的坐标为
同理坐标系下的坐标为。 两者叉乘的结果垂直于p点,即

其中用到了叉乘的矩阵表示

叫做本质矩阵,满足

对于E有一些性质:

  • p对应的极线是
  • p'对应的极线是
  • ,因为任意的对应的极线l都经过e点,即对任意的p'都成立。同理,
  • E的秩为2

基础矩阵

对一般的相机内参,将其变换到单位矩阵的情况下,有

所以有

其中叫做基础矩阵

对于F有一些性质:

  • p对应的极线是
  • p'对应的极线是

  • F的秩为2
  • F的自由度为7

单应矩阵

假如我们知道P在一个平面上,我们就可以实现坐标的对应。

已知:第一个摄像机的内参矩阵为 ( K ),第二个摄像机的内参矩阵为 ( K' ),第二个摄像机相对于第一个摄像机的位置为 ( (R, t) ),( n ) 为平面 ( ) 在第一个摄像机坐标系下的单位法向量,( d ) 为坐标原点到平面 ( ) 的距离。

结论:平面 ( ) 的单应矩阵为

其中,

平面 ( ) 的方程为

证明: - ( M = K(I, 0) ) - ( M' = K'(R, t) ) - ( P = (^T, 1)^T )

根据定义,有:

进一步得到:

最终结果为:

其中

H成立的条件为点在同一个平面上,即 ( n^T = d )。但是当照相机没有平移只有旋转,不满足平面条件也可以成立。

双目立体视觉

我们考虑一个极几何的特例:平行视图,即两个图像平面平行。

极线的求解

图像中,对应的投影,则其像素坐标为

利用叉乘性质,对于任何向量 ,如果 可逆,相差一个尺度情况下,有

带入平行视图的基本参数

所以有

所以极线为

所以极线是水平的,与的v坐标一致。

平行视图的三角测量

令B为的距离,f为焦距,z为点的深度,有

即视差与深度成反比。

对应点匹配

关键在于如何找到两幅图像中的对应点,只需沿着扫描线扫描即可。

  1. 在左图( p = (p_u, p_v) ) 处选择一个窗口 ( W ),建立向量 ( w )。
  2. 在右图中沿扫描线在每个位置 ( s_u ) 建立窗口 ( W' ),并获得 ( w' ) 向量。
  3. 计算每个 ( s_u ) 位置 ( w^T w' ) 的值。
  4. ( p_u' = w^T w' )。

算法

MVSNet

用Multi-view Stereo的方法进行深度推断。

  1. 特征提取
  2. 代价体(cost volume)构建
  3. 深度估计

特征提取

输入是n张图像,第一张为要估计深度的图像,叫做参考图像(reference image),其余为源图像(source image)。

用预训练的CNN提取输入图片的特征得到,实验证明对特征图进行匹配效果好于直接对初始图片进行操作。

代价体构建

Differentiable Homography

使用单应矩阵将源图像扭曲(warp)到参考图像的视角。

这里d为相对于参考图像的深度,为参考图像的法向量。

对每一张源图像,选取不同的深度,warp后都会得到一张图片,将这些图片拼接在一起,就得到了N个feature volumes

Cost Volume

将feature volumes拼接在一起,得到一个cost volume。

逐元素意义上,使用方差作为cost volume的值。

一般意义的cost volume衡量两张图像的匹配程度,根据前面双目视觉的知识,参考图像的某一个点在源图像上对应一条极线,且每一个深度对应极线上的一个点。

对于一张参考图像和源图像,对于参考图像每一个像素和每一个深度,都可以在源图像上找到对应的像素,计算两者的相似度(可以直接计算单个像素的差异,也可以统计附近3*3像素的差异),从而cost volume的大小为

代价体正则化

根据图像特征计算出的原始代价可能会受到噪声污染(例如,由于存在非朗伯表面或物体遮挡),因此应结合平滑度约束条件来推断深度图。

使用3D的CNN进行正则化,最后沿着深度维使用softmax函数得到probability volume。

深度估计

得到probability volume后,可以直接取概率的最大值作为深度值。但是为了可微性,使用加权平均作为最终的深度

深度图细化

虽然从probability volume中获取的深度图是一个合格的输出结果,但由于正则化涉及的感受野较大,重建边界可能会出现过平滑现象,所以最后一步将初始图片与深度图输入到CNN中,利用残差得到更加精细的深度图。

SparseNeuS: Fast Generalizable Neural Surface Reconstruction from Sparse Views

sparseneus

关键有两点:

  1. Geometry encoding volume的获得
  2. MLP解码获得SDF和color

Geometry Encoding Volume

根据输入的图像为物体估计一个bounding box并将其划分为网格。
对于每一个顶点,将其投影到每一个视角的图像上,得到其特征值,取所有图像特征值的方差作为cost值,构建出cost volume。
使用一个3D CNN获得geometry encoding volume。

cost volume

这里的cost volume取的是bounding box每一个顶点在每一个视角的特征值的方差,MVSNet的cost volume是参考图像每一个深度每一个像素的特征值与源图像的特征值的差异,从参考图像的视角看,也可以看做是一个bounding box的各个顶点,本质是一样的。

MLP解码

对于任意一个3D位置,使用线性插值获得geometry encoding volume对应的特征值M(q),加上其位置编码后使用一个MLP获得SDF值。

对于颜色来说,很难通过稀疏的输入图像直接预测颜色值。
先将位置投影到所有输入图像得到对应的颜色值,然后使用网络预测出不同颜色的权值,通过加权得到最终的颜色值。
神经网络部分,先将3D位置投影到所有feature map得到对应的特征值,计算其均值和方差得到全局的摄影一致性信息(photographic consistency)。每一个feature都与均值方差进行拼接,后通过一个MLP获得新的feature。
最终将新的feature,此位置处的geometry encoding volume特征值以及观察视角与输入图像视角的差值一起输入到MLP中预测颜色的权值。

One-2-3-45: Any Single Image to 3D Mesh in 45 Seconds without Per-Shape Optimization

基础知识

基础知识一:marching cubes算法

参考

  1. https://www.jianshu.com/p/5a6ade7b77b6
  2. https://blog.csdn.net/weixin_38060850/article/details/109143025

获得SDF预测之后,需要根据SDF值生成mesh,这里使用了marching cubes算法。

一般意义上,空间中有一个标量场,算法的目标是找到一个等值面,使得等值面上的标量场值等于某个特定值。下面不妨考虑寻找0等值面。

算法步骤

第一步,根据所需分辨率将空间划分为小立方体,每个立方体有8个顶点,每个顶点对应一个标量值。根据顶点值的正负性,一共有256种情况,实际上,考虑对称性,只有15种不同的情况。如图

假设7,5,1顶点被激活,可以从大到小表示为10100010,转为十进制为162。

一个示例代码为

1
2
3
4
5
6
int cubeIndex = 0;        
for (int i = 0; i < 8; i++) {
if (cube.values[i] < surfacelevel) {
cubeIndex |= 1 << i;
}
}

第二步,根据上一步得到的十进制值,在预定义的查找表中获得每个三角面片顶点所在边的序号。

162返回的值为 {5,0,1,5,4,0,7,6,11},表示需要有三个三角面片,他们顶点所在的边需要分别是 {5,0,1} {5,4,0} {7,6,11}。

第三步,根据顶点的标量值线性插值得到三角面片与立方体交点的坐标。

第四步,利用中心差分法,求出当前六面体8个顶点的法向量,在采用线性插值的方法,得到三角面片各个顶点的法向。

第五步,根据各个三角面片顶点的坐标,顶点法向量进行三角面的连接。

基础知识二:图像质量评价指标

PSNR

峰值信噪比(Peak Signal-to-Noise Ratio,PSNR)是一种衡量图像质量的指标,用于衡量经过处理后的图像与原图像的相似程度,PSNR单位为dB,值越大,说明图像失真越小,图像质量越好。

两个单色图像IKMAX为像素值的最大可能值,PSNR定义为:

SSIM

结构相似性(Structural Similarity,SSIM)是一种衡量图像质量的指标,用于衡量经过处理后的图像与原图像的相似程度,SSIM的取值范围是[0,1],值越大,说明图像失真越小,图像质量越好。

其中,为两个图像,为亮度相似性,为对比度相似性,为结构相似性,为常数,用于避免分母为0。

IoU(Intersection over Union)

交并比(Intersection over Union,IoU)是一种衡量两个集合重叠程度的指标,用于衡量两个集合的交集与并集的比值,IoU的取值范围是[0,1],值越大,说明两个集合重叠程度越高。

算法流程

one-2-3-45

输入单视角图像,先使用Zero123生成新视角的图像,之后使用SparseNeuS生成3D mesh。

视角选择

使用一个两阶段的视角选择,先均匀生成出n张新视角图片,每张新视角图片再生成4张附近视角的图片。
因为cost volume方法需要比较近的视角来寻找局部的对应关系,同时Zero123生成近的视角的效果更好。

相机仰角估计

对于重建模块,可以同时改变输入图像的方位角和半径,不会有太大影响,但是同时改变仰角就会重建的形状失真。因为相机 与相机 之间的相对姿态,即使 是相同的,对于不同的 来说也是不同的。

两个相机的相对姿态是通过物体在相机坐标系的转换矩阵RT定义的, 是相同的,则R是相同的,但是不同的仰角位置,坐标系原点的位移是不一样的,即T是不同的,所以说相对姿态是不同的。
但是RT的取值与相机旋转角的绝对值是无关的。

估计相机仰角遵循从粗到细的方式,先用Zero123生成4张附近视角的图片,然后列举所有可能的仰角,计算重投影损失,选择最小的进行重复。

One-2-3-45++: Fast Single Image to 3D Objects with Consistent Multi-View Generation and 3D Diffusion

one-2-3-45++

多视角生成

使用Zero123++生成多视角图像。

3D表示

用一个SDF volume和一个color volume表示3D物体。

3D Diffusion

为了降低显存和计算,使用两阶段的3D Diffusion。

条件控制

使用DINOv2提取每张图片的local patch feature,因为局部特征更容易泛化,接着通过投影构建出一个3D feature volume,其融合了图片的特征,将其合理卷积后连接到噪声volume用于指导3D Diffusion。

同时,输入图片的CLIP embedding也作为全局条件被用于指导3D Diffusion。

DreamComposer: Controllable 3D Object Generation via Multi-View Conditions

基础知识:triplane

出自《Efficient Geometry-aware 3D Generative Adversarial Networks》

是一种显式与隐式混合的3D表示,由三个正交的特征平面组成,维度为,其中为特征平面的大小,为特征平面的通道数。
要想获得某个位置的信息,需要将其分别投影到三个特征平面上,通过插值获得3个特征,融合后通过一个MLP可获得密度颜色等信息。
相较于NeRF,triplane的优势是高效,节省计算资源,作者称其compact yet sufficiently expressive

算法流程

DreamComposer

任务为新视图合成,将之前的单图条件扩展到多图条件。主要由三个模块组成:Target-Aware 3D Lifting,Multi-View Feature Fusion,Target-View Feature Injection

Target-Aware 3D Lifting

这一步将2D的图像信息转为3D的信息,使用triplane作为3D表示。

先用CNN提取输入图像的特征,再利用一个3D lifting module将其转为tri-plane表示,得到
3D lifting module包含自注意力、交叉注意力和卷积层。
为了体现摄像机角度信息,选取一个主图像,将每个图像与主图像的相对视角通过交叉注意力作为条件输入。

Multi-View Feature Fusion

这一步融合前一步的多视角tri-plane表示,得到目标视角的图像特征。

从目标视角的光线采样点,投影到tri-plane上获得特征,再将不同视角的特征加权融合。最后将不同采样点的特征融合得到最终的特征。

加权融合需要考虑不同视角对目标视角的贡献不同,一般来说越近贡献越大。

Target-View Feature Injection

获得目标视角图像的特征后,借鉴controlNet的思路,将其作为条件指导去噪获得最终图像。
这一步的扩散模型backbone可以使用Zero-1-to-3。