paper-reading6
paper-reading about something, whatever.
Zero-1-to-3: Zero-shot One Image to 3D Object
根据一个视角的图片,合成另一个视角的图片。
主要是利用预训练扩散模型的先验,通过微调让其学习控制相机视角。
dataset获得
利用Objaverse,对每个物体,随机选取相机角度渲染对应的图片,获得图片对{
条件控制
从单张图像进行三维重建既需要低层次的感知(深度、阴影、纹理等),也需要高层次的理解(类型、功能、结构等)。
一方面,将RT与输入图片的CLIP embedding连接得到c(x,R,T)。
另一方面,将输入图片按channel连接到被去噪的图片上。
随机将两种条件置空来实现CFG。
微调
Zero123++: a Single Image to Consistent Multi-view Diffusion Base Model
主要变化是由原来生成一张新视角图像转为生成多张新视角图像,使得生成的图像之间的一致性更好。
生成策略

如图,将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

如图,将参考图像加噪后执行相同的降噪过程,并把参考图像的KV append到被降噪的多视角图像的KV上。
全局条件控制:FlexDiffuse
就是将参考图像的CLIP embedding 加到text embedding的位置。
text embedding
ViVid-1-to-3: Novel View Synthesis with Video Diffusion Models
类似上一篇,只不过使用了视频模型进行生成
由于模型在生成新视图时往往不能忠实地遵循目标摄像机的路径,而且还可能存在物体姿态误差。由于这些渲染图在作为视频观看时,会因突然的运动而看起来不像自然视频,因此使用视频扩散模型有助于消除这种误差。
视角选择
根据初始姿态和目标姿态,使用Spherical
Linear Interpolation (Slerp)获得一系列平滑的相机轨迹
Spherical Linear Interpolation
需要一些数学知识
从二维旋转引入
SO(2)群
在二维世界中,想要旋转一个向量
得到新向量
旋转前后向量的模长保持不变,即
考虑所有满足正交性的矩阵,可以得到一个群,叫做O(2)群,很容易得知:
其中
在这个群中,可以通过行列式来区分旋转和平移,行列式为1的是旋转,为-1的是平移。
我们将纯转动单独拎出来组成一个群,叫做SO(2)群。这个群元素的特征为满足正交性且行列式为1。
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角度为
设
则有
解得
所以
视频生成
生成时,使用了两个模型
其中,
MVSNet: Depth Inference for Unstructured Multi-view Stereo
基础知识,双目三维重建
三角化
已知两张图片对应点的像素坐标
直接法
把两条直线的方程变换到同一个坐标系后求交点即为P的坐标。
视频中说
由于噪声的存在,两条直线一般不相交,所以需要下面两种解法。
线性解法
问题转化为寻找P满足投影到两个平面的约束。
即
最终转化为一个有3个未知参数4个方程的超定齐次线性方程组
需要求出这个方程的最小二乘解,只需对A进行奇异值分解
非线性解法
转化为一个优化问题,最小化重投影误差。
多视图几何的关键问题
- 摄像机几何:从一张或多张图像中求解摄像机内外参数。有些情况下相机的内外参并不知道
- 场景几何:通过二至多幅图寻找3D场景坐标。
- 对应关系:将两幅图的像素点对应起来。
极几何
从数学角度描述两幅图像像素的对应关系。
本质矩阵
先假设相机内参为单位矩阵,设三维空间中
因为从
逆过来有
所以
同理
其中用到了叉乘的矩阵表示
对于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 )。但是当照相机没有平移只有旋转,不满足平面条件也可以成立。
双目立体视觉
我们考虑一个极几何的特例:平行视图,即两个图像平面平行。
极线的求解
在
利用叉乘性质,对于任何向量
带入平行视图的基本参数
所以有
所以极线为
所以极线是水平的,与
平行视图的三角测量
令B为
即视差与深度成反比。
对应点匹配
关键在于如何找到两幅图像中的对应点,只需沿着扫描线扫描即可。
- 在左图( p = (p_u, p_v) ) 处选择一个窗口 ( W ),建立向量 ( w )。
- 在右图中沿扫描线在每个位置 ( s_u ) 建立窗口 ( W' ),并获得 ( w' ) 向量。
- 计算每个 ( s_u ) 位置 ( w^T w' ) 的值。
- ( p_u' = w^T w' )。
算法

用Multi-view Stereo的方法进行深度推断。
- 特征提取
- 代价体(cost volume)构建
- 深度估计
特征提取
输入是n张图像,第一张为要估计深度的图像,叫做参考图像(reference image),其余为源图像(source image)。
用预训练的CNN提取输入图片的特征得到
代价体构建
Differentiable Homography
使用单应矩阵将源图像扭曲(warp)到参考图像的视角。
这里d为相对于参考图像的深度,
对每一张源图像,选取不同的深度,warp后都会得到一张图片,将这些图片拼接在一起,就得到了N个feature
volumes
Cost Volume
将feature volumes拼接在一起,得到一个cost volume。
逐元素意义上,使用方差作为cost volume的值。
一般意义的cost volume衡量两张图像的匹配程度,根据前面双目视觉的知识,参考图像的某一个点在源图像上对应一条极线,且每一个深度对应极线上的一个点。
对于一张参考图像
代价体正则化
根据图像特征计算出的原始代价可能会受到噪声污染(例如,由于存在非朗伯表面或物体遮挡),因此应结合平滑度约束条件来推断深度图。
使用3D的CNN进行正则化,最后沿着深度维使用softmax函数得到probability volume。
深度估计
得到probability volume后,可以直接取概率的最大值作为深度值。但是为了可微性,使用加权平均作为最终的深度
深度图细化
虽然从probability volume中获取的深度图是一个合格的输出结果,但由于正则化涉及的感受野较大,重建边界可能会出现过平滑现象,所以最后一步将初始图片与深度图输入到CNN中,利用残差得到更加精细的深度图。
SparseNeuS: Fast Generalizable Neural Surface Reconstruction from Sparse Views

关键有两点:
- Geometry encoding volume的获得
- 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算法
参考
- https://www.jianshu.com/p/5a6ade7b77b6
- https://blog.csdn.net/weixin_38060850/article/details/109143025
获得SDF预测之后,需要根据SDF值生成mesh,这里使用了marching cubes算法。
一般意义上,空间中有一个标量场,算法的目标是找到一个等值面,使得等值面上的标量场值等于某个特定值。下面不妨考虑寻找0等值面。
算法步骤
第一步,根据所需分辨率将空间划分为小立方体,每个立方体有8个顶点,每个顶点对应一个标量值。根据顶点值的正负性,一共有256种情况,实际上,考虑对称性,只有15种不同的情况。如图
假设7,5,1顶点被激活,可以从大到小表示为10100010,转为十进制为162。
一个示例代码为
1 | int cubeIndex = 0; |
第二步,根据上一步得到的十进制值,在预定义的查找表中获得每个三角面片顶点所在边的序号。
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,值越大,说明图像失真越小,图像质量越好。
两个单色
SSIM
结构相似性(Structural Similarity,SSIM)是一种衡量图像质量的指标,用于衡量经过处理后的图像与原图像的相似程度,SSIM的取值范围是[0,1],值越大,说明图像失真越小,图像质量越好。
其中,
IoU(Intersection over Union)
交并比(Intersection over Union,IoU)是一种衡量两个集合重叠程度的指标,用于衡量两个集合的交集与并集的比值,IoU的取值范围是[0,1],值越大,说明两个集合重叠程度越高。
算法流程

输入单视角图像,先使用Zero123生成新视角的图像,之后使用SparseNeuS生成3D mesh。
视角选择
使用一个两阶段的视角选择,先均匀生成出n张新视角图片,每张新视角图片再生成4张附近视角的图片。
因为cost
volume方法需要比较近的视角来寻找局部的对应关系,同时Zero123生成近的视角的效果更好。
相机仰角估计
对于重建模块,可以同时改变输入图像的方位角和半径,不会有太大影响,但是同时改变仰角就会重建的形状失真。因为相机
两个相机的相对姿态是通过物体在相机坐标系的转换矩阵RT定义的,
但是RT的取值与相机旋转角的绝对值是无关的。
估计相机仰角遵循从粗到细的方式,先用Zero123生成4张附近视角的图片,然后列举所有可能的仰角,计算重投影损失,选择最小的进行重复。
One-2-3-45++: Fast Single Image to 3D Objects with Consistent Multi-View Generation and 3D Diffusion

多视角生成
使用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。
算法流程

任务为新视图合成,将之前的单图条件扩展到多图条件。主要由三个模块组成:Target-Aware 3D Lifting,Multi-View Feature Fusion,Target-View Feature Injection。
Target-Aware 3D Lifting
这一步将2D的图像信息转为3D的信息,使用triplane作为3D表示。
先用CNN提取输入图像的特征
3D lifting module包含自注意力、交叉注意力和卷积层。
为了体现摄像机角度信息,选取一个主图像,将每个图像与主图像的相对视角通过交叉注意力作为条件输入。
Multi-View Feature Fusion
这一步融合前一步的多视角tri-plane表示,得到目标视角的图像特征。
从目标视角的光线采样点,投影到tri-plane上获得特征,再将不同视角的特征加权融合。最后将不同采样点的特征融合得到最终的特征。
加权融合需要考虑不同视角对目标视角的贡献不同,一般来说越近贡献越大。
Target-View Feature Injection
获得目标视角图像的特征后,借鉴controlNet的思路,将其作为条件指导去噪获得最终图像。
这一步的扩散模型backbone可以使用Zero-1-to-3。