63、GIRAFFE: Representing Scenes as Compositional Generative Neural Feature Fields

简介

主页:https://github.com/autonomousvision/giraffe
在这里插入图片描述
将场景表示为合成生成神经特征场。对于一个随机采样的相机,基于单个特征字段来批量渲染场景的特征图像。二维神经渲染网络将特征图像转换为RGB图像。

关键假设是,将组合式3D场景表示合并到生成模型中,可以使图像合成更加可控

虽然只训练原始图像集合,在测试时,能够控制图像形成过程的相机姿势对象姿势,以及对象的形状和外观,能够分离单个物体,并允许在场景中平移和旋转它们。

将场景表示为合成生成神经特征场允许从背景分离出一个或多个对象以及单个对象的形状和外观,同时从非结构化和非固定的图像集合中学习,无需任何额外的监督

将这种场景表示与神经渲染管道相结合,可以生成快速、逼真的图像合成模型

此外,模型可以在训练数据之外进行泛化,例如,可以合成比训练图像中更多对象的场景。

注意,为了清晰起见,用颜色来可视化体而不是特征

可控的图像生成

在这里插入图片描述
虽然大多数生成模型都是2D的,但论文在生成模型中加入了合成的3D场景表示。这导致了一致的图像合成结果

与论文的方法相比,在2D操作时,翻译一个对象可能会改变另一个对象(a和b)。它进一步允许我们执行复杂的操作,如循环转换( c)或在测试时添加更多的对象(d)。这两种方法都是在双目标场景的原始未摆位图像集合上进行无监督训练。

贡献点

GIRAFFE 是一种从原始的非结构化图像集合中训练,以可控和逼真的方式生成场景的新方法。

主要见解有两个:

  1. 首先,将合成3D场景表示直接合并到生成模型中,可以实现更可控的图像合成
  2. 其次,将这种显式3D表示与神经渲染管道相结合,可以实现更快的推理和更真实的图像

为此,将场景表示为合成生成神经特征场。将场景批量渲染为分辨率相对较低的特征图像,以节省时间计算神经渲染器处理这些特征图像并输出最终渲染结果。通过这种方式,可以获得高质量的图像,并扩展到现实场景。当在原始非结构化图像集合上训练时,论文的方法允许单目标和多目标场景的可控图像合成

实现流程

目标是一个可控的图像合成管道,可以从原始图像集合进行训练,无需额外的监督。
在这里插入图片描述
生成器 G θ G_θ Gθ 取一个摄像机姿态 ξN 个形状外观编码 z s i , z a i z^i_s, z^i_a zsi,zai仿射变换 T i T_i Ti 作为输入,合成一个由 N−1个物体一个背景 组成的生成场景图像。

鉴别器 D φ D_φ Dφ生成的图像 I ^ \hat{I} I^真实图像 I 为输入,用对抗损失训练我们的完整模型。在测试时,可以控制相机的姿势物体的形状和外观代码,以及物体在场景中的姿势

橙色表示可学习操作蓝色表示不可学习操作

Objects as Neural Feature Fields

NeRF回顾

位置编码
在这里插入图片描述

在这里插入图片描述

Generative Neural Feature Fields

GRAF是一种神经辐射场的生成模型,该模型是从 unposed 的图像集合中训练出来的。

为了了解 nerf 的潜在空间,他们根据形状和外观代码 z s , z a   N ( 0 , I ) z_s, z_a ~ N (0, I) zs,za N(0,I) 对MLP进行条件调整

在这里插入图片描述
其中 M s 、 M a M_s、M_a MsMa潜码的维数

论文提出一种更有效的体积和神经渲染的结合,将GRAF的三维颜色输出公式 c 替换为更通用的 M f M_f Mf 维特征 f ,并将对象表示为生成神经特征场

在这里插入图片描述

Object Representation

NeRF和GRAF的一个关键限制整个场景都是由一个模型来表示的

当我们对分离场景中的不同实体感兴趣时,我们需要控制单个对象的姿态、形状和外观(也将背景视为对象),可以使用单独的特征场结合仿射变换来表示每个对象
在这里插入图片描述
其中 s , t ∈ R 3 s, t∈R^3 s,tR3 表示缩放平移参数,R∈SO(3)表示旋转矩阵,将点从物体转换到场景空间
在这里插入图片描述
场景空间中进行体渲染,并在其标准对象空间中评估特征场
在这里插入图片描述
这允许我们在一个场景中安排多个对象。所有对象特征字段共享它们的权重,T 从数据集相关的分布中采样

Scene Compositions

如上所述,将场景描述为 N 个实体的组合,其中前 N - 1是场景中的对象最后一个代表背景

考虑两种情况:

  1. N 在数据集中是固定的,这样图像总是包含 N−1个对象加上背景
  2. N 在数据集中是不同的

在实践中,对背景使用与对象相同的表示,除了其使用固定缩放和平移参数 s N , t N s_N, t_N sN,tN 来跨越整个场景,并以场景空间原点为中心

复合算符

为了定义复合算符 C,让我们回忆单个实体 h θ i i h^i_{θ_i} hθii 的特征场预测给定点 x观测方向 d 的密度 σ i ∈ R + σ_i∈R^+ σiR+ 和特征向量 f i ∈ R M f f_i∈R^{M_f} fiRMf。当组合非固体物体时,对于 x 处的总体密度,通常是将各个密度相加,并使用密度加权平均值来组合(x, d)处的所有特征
在这里插入图片描述
虽然简单直观,但 C 的这种选择还有一个额外的好处:确保密度大于0的所有实体的梯度流

Scene Rendering

3D Volume Rendering

体积渲染RGB颜色值,但我们将此公式扩展到渲染 M f M_f Mf 维特征向量 f

对于给定的摄像机外 ξ 值,设 { x j } j = 1 N s \{x_j\}^{N_s}_{j=1} {xj}j=1Ns 为给定像素的摄像机射线 d 上的采样点, ( σ j , f j ) = C ( x j , d ) (σ_j, f_j) = C(x_j, d) (σj,fj)=C(xj,d) 为对应的场密度 和 特征向量。体积绘制算子 π v o l π_{vol} πvol 将这些值映射到像素的最终特征向量 f
在这里插入图片描述
通过数值积分,得到 f 为
在这里插入图片描述
其中 τ j τ_j τj 为透射率, α j α_j αj x j x_j xj 的 α 值, δ j = ∣ ∣ x j + 1 − x j ∣ ∣ 2 δ_j = ||x_{j+1}−x_j||_2 δj=∣∣xj+1xj2 为相邻采样点之间的距离。通过计算每一个像素的 π v o l π_{vol} πvol 得到整个特征图像。为了提高效率,以 1 6 2 16^2 162 分辨率渲染特征图像,这低于 6 4 2 64^2 642 25 6 2 256^2 2562 像素的输出分辨率。然后,使用2D神经渲染将低分辨率的特征映射上样本到更高分辨率的RGB图像。实验证明,这有两个优点:提高渲染速度和提高图像质量。

2D Neural Rendering

神经渲染算子
在这里插入图片描述
利用权值 θ 将特征图像 I V ∈ R H V × W V × M f I_V∈R^{{H_V} ×{W_V} ×{M_f}} IVRHV×WV×Mf 映射到最终合成的图像 i ^ ∈ R H × W × 3 \hat{i}∈R^{H×W ×3} i^RH×W×3

在这里插入图片描述
灰色表示输出橙色表示可学习操作蓝色表示不可学习操作

π θ n e u r a l π^{neural}_θ πθneural 参数化为具有 leaky ReLU激活的2D卷积神经网络(CNN),并将最近邻上采样与3 × 3卷积相结合以增加空间分辨率。

这里选择小的内核尺寸和没有中间层,只允许在空间上进行小的细化,以避免在图像合成期间纠缠全局场景属性,同时允许增加输出分辨率。

在每个空间分辨率下将特征图像映射到RGB图像,并通过双线性上采样将前一个输出添加到下一个输出。这些跳跃连接确保了特征字段的强梯度流。

通过对最后的RGB层应用 sigmoid 激活,获得了最终的图像预测 I ^ \hat{I} I^

Training

完整的生成过程正式地表示为
在这里插入图片描述
N 是场景中实体的数量, N s N_s Ns 是沿着每条射线的采样点的数量, d k d_k dk 是第 k 个像素的射线, x j k x_{jk} xjk 是第 j 个采样点,第 k 个像素/射线。

在训练过程中,采样场景中实体的数量 N ~ p N p_N pN,潜在代码 z s i , z a i z^i_s, z^i_a zsi,zai ~ N (0, I),以及一个摄像机姿势 ξ ~ p ξ p_ξ pξ和 对象级转换 T i T_i Ti ~ p T p_T pT

在测试时,将 p ξ p_ξ pξ p T p_T pT 分别定义为在数据相关的摄像机仰角和有效的对象转换上的均匀分布这种选择的动机是,在大多数现实场景中,物体是任意旋转的,但不会因为重力而倾斜。相反,观察者(在我们的例子中是相机)可以自由地改变仰角

用非饱和GAN目标和R1梯度惩罚训练模型
在这里插入图片描述
其中 f (t) =−log(1 + exp(−t)), λ = 10, p D p_D pD表示数据分布。

实现细节

所有物体特征字段 { h θ i i } i = 1 N − 1 \{h^i_{θ_i}\}^{N−1}_{i=1} {hθii}i=1N1 共享它们的权重,将它们参数化为具有ReLU激活的mlp。我们使用8个层,隐藏维数为128,密度和特征头的维数分别为1, M f M_f Mf = 128。对于背景特征场 h θ N N h^N_{θ_N} hθNN,使用一半的层和隐藏维数。使用 L x L_x Lx = 2·3·10 和 L d L_d Ld = 2·3·4进行位置编码。沿着每条射线采样 M s M_s Ms = 64点,以162像素渲染特征图像 I V I_V IV。对于生成器的权值,我使用衰减为0.999的指数移动平均数。使用RMSprop优化器,批大小为32,识别器和生成器的学习率分别为1 × 10−4和5 × 10−4。对于2562像素的实验,将 M f M_f Mf = 256和一半的生成器学习率设置为2.5 × 10−4。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio Giraffe是一个用于开发Android应用程序的集成开发环境(IDE)。您可以从developer.android.google.cn/studio/archive下载Android Studio Giraffe。安装Android Studio Giraffe需要下载两个分割的压缩包,并且必须一起使用。您可以使用WinRAR来解压这些压缩包。在安装Android Studio Giraffe之前,您需要确保您的电脑满足最低系统要求。 安装Android Studio Giraffe的推荐位置如下: - Studio:D:\development\Android\Studio20223 - sdk:D:\development\Android\sdk - gradle:D:\development\Android\gradle - avd:D:\development\Android\avd 在安装Android Studio Giraffe时,建议将电脑用户名设置为英文名,并且打开虚拟化技术。当虚拟化技术开启后,您可以使用Android Studio自带的模拟器进行应用程序测试。 在配置Android Studio Giraffe时,推荐不使用代理,并选择使用阿里云的Maven仓库。以下是一些常用的阿里云Maven仓库URL: - maven { url 'https://maven.aliyun.com/repository/public/' } - maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' } - maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' } - maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' } - maven { url 'https://maven.aliyun.com/nexus/content/repositories/gradle-plugin' } - maven { url 'https://maven.aliyun.com/repository/central/' } 如果您对安装Android Studio Giraffe有任何疑问,您可以在B站Welays上找到免费的安装教学视频,也可以通过淘宝找到一键解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值