paper-reading5
paper-reading about 3D scene generation
Gaussian splatting
Training-free Camera Control for Video Generation
主要流程为,根据一张输入图片合成几张遵循特定视角轨迹的图片,之后喂给一个预训练的视频生成模型。
model explicit camera motion in point cloud space
通过点云表示3D信息。
点云初始化
给定一张输入图片,先使用单目深度估计模型(Zoedepth)得到深度图,再根据RGBD数据和相机参数生成初始点云。
其中I为RGB值,D为深度值,K为相机内参,P为相机外参。
相机运动建模
相机运动被建模为相机外参的序列{
多视角渲染
根据给定的相机运动,对每个位姿进行渲染。
在这个过程中需要进行一些优化
点云更新
初始点云在一些区域会有空缺,所以需要更新。
每渲染一张新视角的图片,对图片进行修复(inpainting),之后用新图像对点云进行更新。
深度优化
估计深度的模型只会估计相对深度,所以视角改变后会有误差。按如下公式进行优化:
其中
camera-controllable video generation with the guidance of noise layout prior
就是将多视角图片加噪后作为初始噪声执行去噪过程。
ViewDiff: 3D-Consistent Image Generation with Text-to-Image Models
以文字或图片为输入,生成多视角图片(含背景)
主要创新点为在unet中增加了跨帧注意力层和一个Projection Layer。
跨帧注意力层
W是预训练的用于特征投影(feature projection)的权重矩阵,h是输入图像的特征。
还需要告诉网络每张图像的相机位姿
对KV也有类似改变。
Projection Layer
跨帧注意力层可以产生3D一致的图片,但是物体不是精确地遵循特定的相机姿态,因此需要一个Projection Layer。
根据输入图片以及相机位姿分别合成体素,之后进行合成,refinement,rendering得到输出的特征。
simple diffusion: End-to-end diffusion for high resolution images
讲了几个在生成高分辨率图像时的技巧:
Adjusting Noise Schedules
weight function中
对于通常的
为什么高分辨率加的噪声不够呢?
在unet中,图像需要经过下采样来获得低分辨率的feature map,假设使用的是average pooling,从128到64,有
则下采样后方差变小了4倍
可以进一步推广
解决方案是,以某一个分辨率为基准,对于高分辨率的图像,乘一个系数增大SNR。
ReconFusion: 3D Reconstruction with Diffusion Priors
由两部分组成:新视图生成和3D重建
新视图生成
条件指导
关键是如何把输入图像作为条件指导unet去噪。
- 对输入图像的高级语义信息,使用CLIP编码并通过cross
attention输入进unet中
- 对于相对相机姿态和几何信息,使用PixelNeRF,渲染一个目标视角的feature map,空间分辨率与图像的latents一致,然后沿着channel维度与noisy latent连接,输入进unet中。
feature map:CNN的中间产物,储存着图像的特征信息。
相较于把输入图像的latents直接连接到unet的输入,并将相对相机变换作为向量连接到CLIP embeddings,文中的方法有更好的效果。
loss设计
使用Diffusion loss
其中
此外对于PixelNeRF的参数也有一个loss:
其中
3D重建
loss设计
使用NeRF储存3D信息。
对于输入的视角(仅应用于现有的视角,不用于新合成的视角),有一个重建损失:
此外,考虑从未观测到的视角优化NeRF
对于一个新视角,先用NeRF渲染一张图片
实验中发现这个loss比SDS效果好。
CAT3D: Create Anything in 3D with Multi-View Diffusion Models
主要有两个阶段:
- 以输入视图和目标视图的摄像机姿势为条件,通过一个多视图的latent
diffusion model生成一组合成视图。
- 根据生成的多视图进行鲁棒的3D重建(使用NeRF作为表示)。
Stage 1: Multi-View Diffusion Model
- 与video latent diffusion models类似的结构,但把time
embedding替换为camera pose embedding。
- 通过3D-attention引入condition条件,从而不需要先前的PixelNeRF和CLIP
image embedding。
- 类似于simple
diffusion,把预训练的图像模型微调成多视角模型,数据的维度上升,SNR也应该相应降低,对于N个target
images,shift the log SNR ratio by log(N)
- 使用与latents大小一致的张量表示相机光线称为raymap。将摄像机姿态作为低维向量嵌入对域内样本效果很好,但与raymap相比,通用性较差。
- 对于3D物体重建,轨道相机轨迹(orbital camera
trajectory)是有效的,但是对于3D场景重建,视图需要完全覆盖场景,且取决于场景中的物体,对不同的场景特点设计不同的轨迹是必要的。
- orbital paths of different scales and heights around the center scene
- forward facing circle paths of different scales and offsets
- spline paths of different offsets
- spiral trajectories along a cylindrical path, moving into and out of
the scene.
- 3D自注意力比因式分解的2D+1D注意力效果更好,但是会产生更多的计算,所以只对较小的feature map使用。
Stage 2: Robust 3D Reconstruction with NeRF
标准的NeRF需要完全3D一致的照片作为输入,而模型生成的多视角图片不完全满足3D一致性,因此需要调整NeRF,使其对不一致的输入具有鲁棒性。
使用Zip-NeRF,做出两个改变:
- 加入一个perceptual
loss(LPIPS)衡量被渲染的图像和输入图像的差异。与光度重建损失(photometric
reconstruction loss)相比,LPIPS
强调渲染图像与观测图像之间的高级语义相似性,而忽略了低级高频细节中潜在的不一致性。
- 根据与被观测到的视角的距离,给不同的生成视角赋予不同的loss权重。
CameraCtrl: Enabling Camera Control for Text-to-Video Generation
相机参数表示
相机内外参
主要涉及三个坐标系:世界坐标系,相机坐标系,成像平面坐标系
世界坐标系(w)到相机坐标系(c)
主要涉及相机的旋转和平移
令
相机坐标系(c)到成像平面坐标系
称
从成像平面坐标系到实际图片的坐标系也需要缩放和平移
plücker coordinates
直接把KE喂进模型不是一个好的选择,一方面是平移矩阵T在大小上没有限制,另一方面模型很难把这些值与像素对应,所以使用plücker coordinates。
对图像坐标系的每一个点
轨道表达
可以用一个plücker embedding sequence