IBRNet 水记(稀疏视角重建)

IBRNet 水记(稀疏视角重建)

主页:https://ibrnet.github.io/

论文:https://arxiv.org/abs/2102.13090

解读:

解读:

BV1t3411J7d3 (IBRNet)

  • 这个UP还讲了 MVSNeRF ,一个后来的更好的稀疏视角NeRF

    BV1G3411M7Ko (MVSNeRF)

    在MVSNeRF里面有做对比试验,IBRNet在新场景上微调的能力太弱(又慢又不收敛)
    记得后面去仔细看看MVSNeRF


看这篇主要是想看看他是怎么融合多视角信息的,所谓的均值-方差池化到底是什么东西。

他计算体密度的思路很有意思,处于表面上的点 更有可能在 多视角 下显现出 局部外观的一致性。所以,可以用 检查多视角特征的一致性的方式 来推理出 体密度。

体密度的获取比较麻烦,简单来说就是把该点所有视角的图片特征 { f i } i = 1 N ∈ R d \left \{ \mathbf{f}_{i}\right\}_{i=1}^{N} \in \mathbb{R}^{d} {fi}i=1NRd (拼接上均值 μ ∈ R d \boldsymbol{\mu} \in \mathbb{R}^{d} μRd 和 方差 v ∈ R d \mathbf{v} \in \mathbb{R}^{d} vRd )过一遍 MLP,得到多视角感知特征 { f i ′ } i = 1 N ∈ R d \left \{ \mathbf{f}_{i}^{\prime}\right\}_{i=1}^{N}\in \mathbb{R}^{d} {fi}i=1NRd 和权重 { w i } i = 1 N ∈ [ 0 , 1 ] \left\{w_{i}\right\}_{i=1}^{N}\in [0,1] {wi}i=1N[0,1] 。做加权和(池化),再经过一个 MLP 得到该点的 体密度特征 f σ ∈ R d σ \mathbf{f}_{\sigma} \in \mathbb{R}^{d_{\sigma}} fσRdσ 。然后把同一条射线上的所有点的 体密度特征 { f σ } \{\mathbf{f}_{\sigma} \} {fσ} 输入一个 transformer ,得到它们的 体密度。

颜色是靠现有颜色的加权和。预测一个权重,用 输入图像 上的投影位置的颜色 做 加权和。

概览

IBRNet 水记(稀疏视角重建)_第1张图片

这个图只是说明他在渲染时,用了个 transformer ,用于计算体密度,具体还得看下面那张更详细的图

方法

多视角特征增强

我们观察到,处于表面上的点 更有可能在 多视角 下显现出 局部外观的一致性。

所以,可以用 检查多视角特征的一致性的方式 来推理出 体密度。

一种可能的方案是,类似PointNet [52] ,输入多视角的特征,然后把 特征的均值方差 输入 MLP 计算 权重,然后根据权重进行 全局池化(就是加权平均)。

(以下用 { f i } i = 1 N ∈ R d \left \{ \mathbf{f}_{i}\right\}_{i=1}^{N} \in \mathbb{R}^{d} {fi}i=1NRd 表示某个点的多视角特征)

IBRNet 水记(稀疏视角重建)_第2张图片

具体来说,我们先从多视角特征中 { f i } i = 1 N \left \{ \mathbf{f}_{i}\right\}_{i=1}^{N} {fi}i=1N 中计算 per-element 的 均值 μ ∈ R d \boldsymbol{\mu} \in \mathbb{R}^{d} μRd 和 方差 v ∈ R d \mathbf{v} \in \mathbb{R}^{d} vRd ,以捕获全局信息。然后,把每个 f i \mathbf{f}_i fi μ \boldsymbol{\mu} μ v \mathbf{v} v 连接起来,作为特征(这样就把全局信息和局部信息拼接到一起了)。

把拼接后的特征,输入一个共享的小 MLP 中,该 MLP 每次读入一个连接后特征 ( f i , μ , v ) (\mathbf{f}_i,\boldsymbol{\mu},\mathbf{v}) (fi,μ,v) ,输出一个多视图感知特征 f i ′ ∈ R d \mathbf{f}_{i}^{\prime}\in \mathbb{R}^{d} fiRd 和一个 权重 w i ∈ [ 0 , 1 ] w_i\in [0,1] wi[0,1]

然后我们将 { f i ′ } i = 1 N \left \{ \mathbf{f}_{i}^{\prime}\right\}_{i=1}^{N} {fi}i=1N 池化成一个向量,经过一个 MLP ,得到 该点的体密度特征 f σ ∈ R d σ \mathbf{f}_{\sigma} \in \mathbb{R}^{d_{\sigma}} fσRdσ ,这个 f σ \mathbf{f}_\sigma fσ 后续会和该射线上的其他点一起送入一个 transformer ,计算出每个点的体密度。

池化的方式是,用 { w i } i = 1 N \left\{w_{i}\right\}_{i=1}^{N} {wi}i=1N { f i ′ } i = 1 N \left \{ \mathbf{f}_{i}^{\prime}\right\}_{i=1}^{N} {fi}i=1N 求加权平均。

(池化应该就是这么简单,不过原文还提到了方差也会参与池化,但是没讲清楚,我严重怀疑是他写嗨了手滑了打错了,方差应该就是只在计算权重和特征的时候用到了。如果实在不放心,后面去看看 PointNet 里面的池化是怎么用方差的,再确认一下,说不定方差真的要参与池化)

原文如下

We pool these new features { f i ′ } i = 1 N \left \{ \mathbf{f}_{i}^{\prime}\right\}_{i=1}^{N} {fi}i=1N by computing their weighted average and variance using weights { w i } i = 1 N \left\{w_{i}\right\}_{i=1}^{N} {wi}i=1N

你可能感兴趣的:(我的论文笔记,深度学习,计算机视觉,人工智能)