NeRF

最近神经网络界最火爆的两个技术,一个是 NeRF(NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis),另一个是 deep diffussion model,这里对 NeRF 进行调研之后进行一些总结。

感知的核心任务其实是对于周围环境的理解,对于机器人来说,只有理解了环境,然后才能做出一系列的决策。在环境理解中,三维环境重建是重要的任务之一。目前三维重建的手段是通过一系列的传感器在时空上对周围环境进行采样,而采样的结果将会作为三维重建的约束。一般来说当前的传感器有摄像头、激光雷达、毫米波雷达、超声波雷达等。而 NeRF 提出了一种如何通过一系列二维图片(摄像头)对三维重建进行约束的方法,其核心思想是建立可微的渲染方程。

1. 渲染方程(Rendering equation)

如果当前有一种对于三维环境的空间描述方法,并且清楚知道三维环境是如何在摄像头上进行成像的,则可以用图像对其进行约束,这种从三维环境到二维图像的过程被称为渲染,其核心问题是如何更好地描述真实世界的光照。

Nerf 认为整个空间由一系列的粒子构成,这些粒子一方面自身会发出光,另一方面这些粒子会吸收入射到它们的光,前者对应漫反射,后者对应遮挡。假设已知摄像头的内参\boldsymbol K、外参\boldsymbol R, \boldsymbol t,那么对于像素(u, v)^T来说,深度为z的位置在世界坐标系的位置\boldsymbol r和方向\boldsymbol d
\begin{aligned} \boldsymbol r &= \boldsymbol R^T \bigg( \boldsymbol K^{-1} \begin{bmatrix} zu \\ zv \\ z \end{bmatrix} - \boldsymbol t \bigg) \\ \quad \boldsymbol d &= \boldsymbol R^T \boldsymbol K^{-1} \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} \end{aligned}

在位置\boldsymbol r = r(z)处,取一个母线方向和\boldsymbol d相同的扁圆柱,其底面面积为E,长为\Delta z,粒子密度为\rho(\boldsymbol r),那么圆柱中的粒子个数为
n = E \Delta z \rho(\boldsymbol r)

\Delta z \to 0时,可以认为粒子几乎全部平铺在圆柱底部,如果粒子的截面积为A,那么所有粒子占据的总面积是nA,根据假设粒子会吸收入射到它们上面的光,因此光束打到圆柱上后被吸收的比例和面积占比一致为
\frac{nA}{E} = \Delta z \rho(\boldsymbol r)A

这里假设光是从外向内(摄像头光心)发射的,因此有
I(\boldsymbol r - \Delta \boldsymbol r) = (1 - \Delta z \rho(\boldsymbol r) A) I(\boldsymbol r)

取极限后可以得到微分方程
\frac{dI(\boldsymbol r)}{dz} = \lim_{\Delta z \to 0} \frac{\Delta I(\boldsymbol r)}{\Delta z} = \lim_{\Delta z \to 0} \frac{I(\boldsymbol r) - I(\boldsymbol r - \Delta \boldsymbol r)}{\Delta z} = \rho(\boldsymbol r) A I(\boldsymbol r) = \sigma(\boldsymbol r) I(\boldsymbol r)

如果考虑到粒子自身也会发光,发光量为 g(\boldsymbol r),那么有
I(\boldsymbol r - \Delta \boldsymbol r) = (1 - \Delta z \sigma(\boldsymbol r)) I(\boldsymbol r) + g(\boldsymbol r)

方程变成
\frac{dI(\boldsymbol r)}{dz} = \sigma(\boldsymbol r) I(\boldsymbol r) - g(\boldsymbol r)

该微分方程求解如下
\begin{aligned} \frac{dI(\boldsymbol r)}{dz} - \sigma(\boldsymbol r) I(\boldsymbol r) &= -g(\boldsymbol r) \\ &\Downarrow \\ \bigg[ \frac{dI(\boldsymbol r)}{dz} - \sigma(\boldsymbol r) I(\boldsymbol r) \bigg] e^{-\int_0^z\sigma(\boldsymbol r)dx} &= -g(\boldsymbol r) e^{-\int_0^z\sigma(\boldsymbol r)dx} \\ &\Downarrow \\ \frac{d}{dz} I(\boldsymbol r) e^{-\int_0^z\sigma(\boldsymbol r)dx} &= -g(\boldsymbol r) e^{-\int_0^z\sigma(\boldsymbol r)dx} \\ &\Downarrow \\ I(\boldsymbol r_f) e^{-\int_0^{z_f}\sigma(\boldsymbol r)dx} - I(\boldsymbol r_n) e^{-\int_0^{z_n}\sigma(\boldsymbol r)dx} &= -\int_{z_n}^{z_f} g(\boldsymbol r) e^{-\int_0^z\sigma(\boldsymbol r)dx} dz \\ &\Downarrow \\ I(\boldsymbol r_n) e^{-\int_0^{z_n}\sigma(\boldsymbol r)dx} &= I(\boldsymbol r_f) e^{-\int_0^{z_f}\sigma(\boldsymbol r)dx} + \int_{z_n}^{z_f} g(\boldsymbol r) e^{-\int_0^z\sigma(\boldsymbol r)dx} dz \\ &\Downarrow \\ I(\boldsymbol r_n) &= I(\boldsymbol r_f) e^{-\int_{z_n}^{z_f}\sigma(\boldsymbol r)dx} + \int_{z_n}^{z_f} g(\boldsymbol r) e^{-\int_{z_n}^z\sigma(\boldsymbol r)dx}dz \end{aligned}

正常积分的范围应该为 0 \to \infty,但是工程上是不可实现的,因此采用 \boldsymbol r_n 表示采样的最近距离,\boldsymbol r_f 表示采样的最远距离,在这样的假设下,I(\boldsymbol r_n) 表示摄像头看到的颜色,也就是需要求解的值,I(\boldsymbol r_f) 表示背景光的颜色,这个是 Nerf 原始论文中没有考虑到的项,后来在一些论文中被添加进去。在 NeRF 中认为 g(\boldsymbol r) = \sigma(\boldsymbol r) c(\boldsymbol r, \boldsymbol d),因此有了论文中的公式如下所示
I(\boldsymbol r_n) = \int_{z_n}^{z_f} \sigma(\boldsymbol r) c(\boldsymbol r, \boldsymbol d) e^{-\int_{z_n}^z\sigma(\boldsymbol r)dx}dz

注意到 NeRF 对于渲染模型的建立只考虑了遮挡和漫反射,对于其他比如多次散射等并没有考虑,如果想要考虑这些因素,可以阅读论文Optical models for direct volume rendering。为了方便编写程序,需要对上述的连续方程进行离散化,首先进行变形得到
\begin{aligned} I(\boldsymbol r_n) &= \int_{z_n}^{z_f} \sigma(\boldsymbol r) c(\boldsymbol r, \boldsymbol d) e^{-\int_{z_n}^z\sigma(\boldsymbol r)dx}dz \\ &= \int_{z_n}^{z_f} -c(\boldsymbol r, \boldsymbol d) d e^{-\int_{z_n}^z\sigma(\boldsymbol r)dx} \\ &= \sum_{z = z_n}^{z_f} -c(\boldsymbol r, \boldsymbol d)(e^{-\sum_{z_n}^z \sigma(\boldsymbol r)\Delta z} - e^{-\sum_{z_n}^{z - \Delta z}\sigma(\boldsymbol r) \Delta z}) \end{aligned}

如果在 [z_n, z_f] 上进行采样,得到一系列采样点 z_1, \cdots, z_N,因此最终的离散表达式可以写成
\begin{aligned} I(\boldsymbol r_n) = \sum_{i = 1}^{N} c(\boldsymbol r_i, \boldsymbol d_i)(e^{-\sum_{j = 1}^{i - 1}\sigma(\boldsymbol r_j) \Delta z_j} - e^{-\sum_{j = 1}^{i}\sigma(\boldsymbol r_j) \Delta z_j}) \end{aligned}

读完可能会很奇怪,这个哥们是怎么想到这种奇奇怪怪的方法的,很多人怀疑他曾经搞过射线追踪,事实上也确实是如此,在他的主页 Ben Mildenhall 上可以看到,他在校时期完成过一些和渲染、射线追踪相关的课程大作业,这也很好地解释了为什么他可以很自然地想到用神经网络来完成这项任务。

2. 三维空间描述方法

当前对三维空间描述的方法主要有以下四种:栅格、点云、隐式表达、面元


3d_model.png

3. 球谐函数(Spherical Harmonics,SH)

在采用类似 Plenoxels 思路完成三维重建过程中,一个绕不开的坎是球谐函数,其就是在球坐标系下的傅里叶展开,可以表示球坐标系下的各种函数,最开始用在游戏渲染行业。这里用它来表示空间三维点颜色(像素颜色)随着观察角度(相机移动)的不同而产生的微小变化。

在一般的论文中提到球谐函数,往往采用复球谐函数的形式,如下所示
Y_l^m(\theta, \phi) = \sqrt{\frac{(l - m)!}{(l + m)!}\frac{2l + 1}{4\pi}}P_l^m(\cos\theta)e^{im\phi}

其中 \theta, \phi 定义如下
\begin{aligned} x &= r\sin\theta \cos\phi \\ y &= r\sin\theta \sin\phi \\ z &= r\cos\theta \end{aligned}

P_l^m(x) 是伴随勒让德多项式,可以通过如下的递推公式得到结果
\begin{aligned} P_m^m(x) &= (-1)^m(2m - 1)!!(1 - x^2)^{\frac{m}{2}} \\ P_{m + 1}^m(x) &= x(2m + 1)P_m^m(x) \\ (l - m)P_l^m(x) &= x(2l - 1)P_{l - 1}^m - (l + m - 1)P_{l - 2}^m \\ \end{aligned}

这里列出最开始的几个伴随勒让德多项式的结果
\begin{aligned} P_0^0 &= 1 \\ P_1^0 &= x & P_1^1 &= -\sqrt{1 - x^2} \\ P_2^0 &= \frac{1}{2}(3x^2 - 1) & P_2^1 &= -3x\sqrt{1 - x^2} & P_2^2 &= 3(1 - x^2) \\ P_3^0 &= \frac{1}{2}(5x^3 - 3x) & P_3^1 &= \frac{3}{2}(1 - 5x^2)\sqrt{1 - x^2} & P_3^2 &= 15x(1 - x^2) & P_3^3 &= -15(1 - x^2)^{\frac{3}{2}}\\ \cdots \end{aligned}

但是在工程中,采用的一般是实球谐函数(Real Spherical Harmonics),如下所示
Y_l^m(\theta, \phi) = \begin{cases} (-1)^{|m|}\sqrt{\frac{(l - |m|)!}{(l + |m|)!}\frac{2l + 1}{2\pi}}P_l^{|m|}(\cos\theta)\cos(|m|\phi) & m > 0 \\ (-1)^{|m|}\sqrt{\frac{(l - |m|)!}{(l + |m|)!}\frac{2l + 1}{2\pi}}P_l^{|m|}(\cos\theta)\sin(|m|\phi) & m < 0 \\ \sqrt{\frac{2l + 1}{4\pi}}P_l^0(\cos\theta) & m = 0 \end{cases}
这里列出了最开始的几个实球谐函数
\begin{aligned} Y_0^0 &= \frac{1}{2}\sqrt{\frac{1}{\pi}} \\ Y_1^{-1} &= \sqrt{\frac{3}{4\pi}} \sin\theta \sin\phi \\ Y_1^{0} &= \sqrt{\frac{3}{4\pi}} \cos\theta \\ Y_1^{1} &= \sqrt{\frac{3}{4\pi}} \sin\theta \cos\phi \\ Y_2^{-2} &= \frac{1}{4}\sqrt{\frac{15}{\pi}} \sin^2\theta \sin2\phi \\ Y_2^{-1} &= \frac{1}{2}\sqrt{\frac{15}{\pi}} \sin\theta \cos\theta \sin\phi \\ Y_2^{0} &= \frac{1}{4}\sqrt{\frac{5}{\pi}} (3\cos^2\theta - 1) \\ Y_2^{1} &= \frac{1}{2}\sqrt{\frac{15}{\pi}} \sin\theta \cos\theta \cos\phi \\ Y_2^{2} &= \frac{1}{4}\sqrt{\frac{15}{\pi}}\sin^2\theta \cos2\phi \\ \cdots \end{aligned}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容