原文链接:https://arxiv.org/abs/2311.15260
神经辐射场(NeRF)应用在自动驾驶中,可以创建可编辑的场景数字克隆(可自由编辑视角和场景物体),以进行仿真。但目前的方法或者需要大量的训练时间,或者对传感器的建模过于简单(导致仿真和真实数据的间隙),或者性能较低。
本文提出NeuRAD,一种可编辑的新视图合成模型。该方法可以处理大型自动驾驶场景,建模了重要的传感器特性(如相机的卷帘式快门、激光雷达的光束发散)。此外,本文的模型简单,其中静态和动态元素通过位置嵌入分辨。NeuRAD有泛化性和SotA性能。
本文的NeuRAD在各数据集上均有低重建误差和推断时间,其总览如下图所示。
神经场景表达:本文使用神经特征场(NFF,是NeRF和类似方法的推广)。给定位置 x x x和视线方向 d d d,NFF输出隐式几何 s s s和特征向量 f f f,并进行体积渲染。
为提取射线 r ( τ ) = o + τ d r(\tau)=o+\tau d r(τ)=o+τd的特征,沿射线采样 N r N_r Nr个点,并使用传统的alpha合成方法聚合这些采样点的特征:
f ( r ) = ∑ i = 1 N r w i f i , w i = α i ∏ j = 1 i − 1 ( 1 − α j ) (1) f(r)=\sum_{i=1}^{N_r}w_i f_i,w_i=\alpha_i\prod_{j=1}^{i-1}(1-\alpha_j)\tag{1} f(r)=i=1∑Nrwifi,wi=αij=1∏i−1(1−αj)(1)
这里 α i \alpha_i αi表示点 x i = o + τ i d x_i=o+\tau_i d xi=o+τid的不透明度, w i w_i wi为沿射线从原点到 x i x_i xi的累积透射率。本文使用能恢复高质量几何的有符号距离函数(SDF)表达隐式几何并近似得到不透明度:
α i = 1 1 + e β s i \alpha_i=\frac{1}{1+e^{\beta s_i}} αi=1+eβsi1
其中 s i s_i si为 x i x_i xi处的SDF值, β \beta β为可学习参数。使用更精确的SDF公式能提高性能,但需要对每个3D点进行梯度计算,从而影响运行时间。
相机建模:对相机射线集合进行体积渲染,生成特征图 F ∈ R H f × W f × N f \mathcal{F}\in\mathbb{R}^{H_f\times W_f\times N_f} F∈RHf×Wf×Nf。然后使用CNN上采样渲染得到更高分辨率的最终图像 I ∈ R H I × W I × 3 \mathcal{I}\in\mathbb{R}^{H_I\times W_I\times 3} I∈RHI×WI×3。这样可以减少渲染的射线数量。
激光雷达建模:将激光雷达的发射脉冲视为射线,进行体积渲染。设激光雷达点对应的射线为 r ( τ ) = o + τ d r(\tau)=o+\tau d r(τ)=o+τd,其中 o o o为激光雷达原点, d d d为归一化光束方向。射线的期望深度 E [ D l ( r ) ] = ∑ i = 1 N r w i τ i \mathbb{E}[D_l(r)]=\sum_{i=1}^{N_r}w_i\tau_i E[Dl(r)]=∑i=1Nrwiτi。预测强度时,根据式(1)得到特征,并通过MLP。
射线丢弃的建模在激光雷达的建模中很重要,但基于物理的建模不可行,因其依赖低级传感器的(未公开的)检测逻辑。使用MLP将(1)式的输出特征映射为射线丢弃概率 p d ( r ) p_d(r) pd(r)。由于使用的数据集未作考虑,本文未建模激光雷达光束的第二返回。
将神经特征场扩展为学习函数 ( s , f ) = N F F ( x , t , d ) (s,f)=NFF(x,t,d) (s,f)=NFF(x,t,d),其中时间 t t t作为输入,以建模动态物体。
结构:给定位置 x x x和时间 t t t,本文查询参与者感知的哈希编码。然后将编码送入小型MLP计算有符号距离 s s s和中间特征 g ∈ R N g g\in\mathbb{R}^{N_g} g∈RNg。使用球面谐波编码视线方向 d d d,使模型捕捉视线相关的特征。最后,使用MLP联合处理方向编码和 g g g,使用 g g g的跳跃连接增强后,得到 f f f。
场景组成:本文将场景分解为两个部分,静态背景和刚性动态参与者集合,其中每个动态参与者由一个3D边界框和SO(3)姿态定义。其目的有二:简化学习过程与实现可编辑性(参与者可以在训练完成后被移动)。本文使用统一的NFF处理各场景元素,其中动态和静态成分的区分来自于参与者感知的哈希编码。编码策略很直接:若给定的样本 ( x , t ) (x,t) (x,t)位于边界框内,就使用一种函数编码;否则使用另一种函数。
无界静态场景:本文对静态场景使用多分辨率哈希网格。但由于静态场景的无界性,本文使用了MipNeRF-360的收缩方法,从而能使用单一哈希网格精确表达附近的道路元素和远处的云。
刚性动态参与者:若样本 ( x , t ) (x,t) (x,t)位于边界框内,则 x x x和视线方向 d d d会转化到 t t t时刻的参与者坐标系中。这使得可以像静态场景一样,从时间无关的多分辨率哈希网格中采样特征。与使用多个哈希网格表达不同参与者的方法相比,本文使用单一4D哈希网格(其中第4维度表示参与者索引),以并行采样所有参与者的特征。
多尺度场景:对汽车数据使用神经渲染的一大挑战是处理数据中的多层次细节。过去的方法如Zip-NeRF使用多采样和降权法建模视锥,能极大提高性能,但运行时间也极大增加了。
本文的方法基于哈希网格特征相对视锥的大小来进行降权。将射线 r ( τ ) = o + τ d r(\tau)=o+\tau d r(τ)=o+τd建模为金字塔,其横截面积为 A ( τ ) = r ˙ h r ˙ v τ 2 A(\tau)=\dot{r}_h\dot{r}_v\tau^2 A(τ)=r˙hr˙vτ2,其中 r ˙ h , r ˙ v \dot{r}_h,\dot{r}_v r˙h,r˙v分别为水平和垂直的光束发散性,基于图像的patch大小或激光雷达的光束发散性得到。对区间 [ τ i , τ i + 1 ) [\tau_i,\tau_{i+1}) [τi,τi+1)之间的视锥截体,记其两端的截面面积分别为 A i A_i Ai和 A i + 1 A_{i+1} Ai+1,其体积为
V i = τ i + 1 − τ i 3 ( A i + A i A i + 1 + A i + 1 ) V_i=\frac{\tau_{i+1}-\tau_i}{3}(A_i+\sqrt{A_iA_{i+1}}+A_{i+1}) Vi=3τi+1−τi(Ai+AiAi+1+Ai+1)
其位置编码 e i e_i ei为 x i = o + τ i + τ i + 1 2 d x_i=o+\frac{\tau_i+\tau_{i+1}}{2}d xi=o+2τi+τi+1d处的结果。对第 l l l层的、分辨率为 n l n_l nl的哈希网格,其位置编码的权重为 w i , l = m i n ( 1 , 1 n l V i 1 / 3 ) w_{i,l}=\mathtt{min}(1,\frac{1}{n_lV_i^{1/3}}) wi,l=min(1,nlVi1/31),即单元格大小( 1 / n l 3 1/n_l^3 1/nl3)与截锥体积之比。
高效采样:渲染大尺度场景的另一困难是高效采样。由于需要同时渲染附近物体细节丰富的纹理和远处物体的视差,沿射线均匀采样需要大量采样点,导致计算可行性低。
本文根据幂函数沿射线采样,即沿射线距离越远的地方,采样点越稀疏。但这样也需要大量的采样。因此本文使用两轮提案采样,其中轻量级NFF采样沿射线的权重分布,并根据权重采样新样本集合。这样可以得到细化的样本集合,沿射线关注相关区域,以查询完整的NFF。为监督提案网络,本文使用抗混叠在线蒸馏;额外使用激光雷达监督,对应的损失项为3.4节中的 L d \mathcal{L}^d Ld和 L w \mathcal{L}^w Lw。
建模卷帘式快门:标准的NeRF假设图像的所有像素来自相同原点 o o o,但许多相机有卷帘式快门,即像素是按顺序捕获的。此时相机的原点会在不同行之间变化。这对于侧视相机来说影响很大。激光雷达也有相同的情况,即激光雷达扫描是在一段时间内采集得到的。本文通过为每个射线分配时间,并根据估计的运动调整原点,来建模卷帘式快门。详见附录E。
不同的相机设置:不同的相机可能会有不同的捕捉参数,如曝光时间。本文为每个传感器使用简单的编码,并与 g g g一起输入第二个MLP。在体积渲染之后,也会使用这些传感器编码,从而极大地减小计算开销。
带噪声的参与者姿态:本文的模型依赖动态参与者的估计姿态。为考虑估计误差,本文将参与者姿态作为模型的可学习参数,并联合优化之。姿态被表达为平移 t ∈ R 3 t\in\mathbb{R}^3 t∈R3和旋转的6D表示。
本文使用相机和激光雷达观测作为监督 L = L image + L lidar \mathcal{L}=\mathcal{L}^\text{image}+\mathcal{L}^\text{lidar} L=Limage+Llidar。
图像损失:图像损失是逐patch计算的,然后将 N p N_p Np个patch的损失取均值。损失包含重建项和感知项:
L image = 1 N p ∑ i = 1 N p λ rgb L i rgb + λ vgg L i vgg \mathcal{L}^\text{image}=\frac{1}{N_p}\sum_{i=1}^{N_p}\lambda^\text{rgb}\mathcal{L}^\text{rgb}_i+\lambda^\text{vgg}\mathcal{L}^\text{vgg}_i Limage=Np1i=1∑NpλrgbLirgb+λvggLivgg
其中重建项 L i rgb \mathcal{L}^\text{rgb}_i Lirgb为像素之间的平方误差,感知损失 L i vgg \mathcal{L}^\text{vgg}_i Livgg与pix2pixHD中的相同。
激光雷达损失:使用激光雷达提供的几何先验,通过为激光雷达射线添加深度损失,并为空区域进行权重衰减以惩罚密度。此外,还引入强度损失和预测的射线丢弃概率损失:
L lidar = 1 N ∑ i = 1 N λ d L i d + λ int L i int + λ p d L i p d + λ w L i w \mathcal{L}^\text{lidar}=\frac{1}{N}\sum_{i=1}^{N}\lambda^\text{d}\mathcal{L}^\text{d}_i+\lambda^\text{int}\mathcal{L}^\text{int}_i+\lambda^{p_d}\mathcal{L}^{p_d}_i+\lambda^\text{w}\mathcal{L}^\text{w}_i Llidar=N1i=1∑NλdLid+λintLiint+λpdLipd+λwLiw
其中深度损失 L i d \mathcal{L}^\text{d}_i Lid和强度损失 L i int \mathcal{L}^\text{int}_i Liint为平方误差,对于丢弃的射线,不进行强度监督,仅惩罚传感器距离较低的估计。射线丢弃概率损失 L i p d \mathcal{L}^{p_d}_i Lipd使用二元交叉熵损失。权重衰减被用于激光雷达距离在 ϵ \epsilon ϵ以上的观测:
L i w = ∑ τ i , j > ϵ ∥ w i j ∥ 2 \mathcal{L}^\text{w}_i=\sum_{\tau_{i,j}>\epsilon}\|w_{ij}\|_2 Liw=τi,j>ϵ∑∥wij∥2
其中 τ i , j \tau_{i,j} τi,j为激光雷达射线 i i i上样本 x i j x_{ij} xij的距离。丢弃射线仅在特定范围内进行权重衰减。最后,省略光程损失,因其有高计算代价,而性能提升很小。
NeuRAD在所有5个数据集上的实验有相同的超参数。
相机:本文的方法有更快的训练时间和SotA的性能。
激光雷达:由于射线丢弃的建模,NeuRAD能生成真实的激光雷达点云。
本文通过横向移动自车传感器(模拟自车改道)、纵向移动自车传感器(模拟传感器的放置位置变动)、参与者移动和旋转。由于无真值图像,本文以无移动的情况做为参考,报告FID值。将优化相机姿态能进一步提高锐度。
使用CNN解码器可以极大增加质量与速度,且能减少渲染射线数并实现射线交互。精确的传感器建模(考虑卷帘式快门、将射线建模为视锥截体、传感器嵌入、考虑激光雷达射线丢弃)也能提高性能。使用统一的4D哈希网格替代独立的3D哈希网格不影响性能,但能极大提高速度。使用NeRF的密度估计替代SDF函数,性能几乎相同,这表明本文方法的灵活性:若需要建模物体表面,则可以使用SDF;但若场景存在雾、透明表面或其余SDF失效的情况,可以使用密度。
局限性:NeuRAD假设所有参与者均为刚性,不支持变形。且许多建模对于大雨或大雪等恶劣天气无效。
哈希网格:为静态场景和动态参与者使用两个不同的哈希网格。其中静态场景的哈希表远大于动态参与者,因为动态参与者在场景中的占比很小。
提案采样:首先根据幂函数 P ( 0.1 x , − 1.0 ) \mathcal{P}(0.1x,-1.0) P(0.1x,−1.0)均匀采样,并进行两轮提案采样,由两个不同的密度场表达。密度场也使用参与者感知的哈希编码,但哈希表和特征维度更小。使用线性层解码密度。
推断激光雷达射线丢弃的过程因数据集不同而不同,但总的步骤包含三步:自车运动补偿的移除、二极管索引分配和点填充。原始点云、移除自车运动补偿后的点云以及填充点的点云的如下所示。
移除自车运动补偿:由于数据集的点云是经过自车运动补偿的,即其笛卡尔坐标在公共的坐标系下。直接将其转换到球坐标下获得水平角和俯仰角是不行的。
对时间 t t t的激光雷达点 ( x , y , z ) (x,y,z) (x,y,z),首先投影到世界坐标系下,然后根据已知的激光雷达姿态线性插值,得到 t t t时刻的激光雷达姿态。对于旋转角,使用四元数表达,进行球面线性插值。然后将点云投影回传感器坐标系下,并转化为球面坐标。
二极管索引分配:数据集使用旋转激光雷达,即一组二极管绕传感器360度旋转,每一个传感器对应一个俯仰角。可根据俯仰角得到二极管的索引值。由于移除自车运动补偿的不准确性,可设计聚类算法推断二极管索引。
接下来,为每一帧定义每个二极管的俯仰角范围(在激光雷达的俯仰角范围内均匀分布),然后使用直方图划分方法根据俯仰角将点云聚类,其中划分的区间数远大于二极管数。对于落在空区间的决策边界,记为真实边界。若真实边界数小于期望边界数,则在已有边界之间进行插值,直到数量满足要求:对距离最大的两个边界,根据垂直分辨率进行尽可能多的插值,得到更多决策边界。
点填充:经历上面两步后,可推断哪些激光射线不返回点。根据激光雷达的水平分辨率,定义水平角区间,若有点落入区间,则标记为又返回;其余区间通过线性插值得到水平角和俯仰角。
上图为一帧激光雷达进行自车运动补偿后的BEV视图,可以从中间的断裂处看到卷帘式快门的影响。本文首先为每个射线分配时间戳。对于激光雷达,若数据集不提供射线时间戳,则基于水平角和传感器转速估计。对于图像,手动近似快门时间并为图像的不同行添加时间偏移量。然后线性插值传感器姿态以移动原点。此外,也在将射线样本点转化到参与者坐标系之前,插值了参与者的姿态。
提案采样:UniSim使用的基于激光雷达占用进行剪枝的均匀采样会导致无占用的远处物体被建模为天空,且近处物体则需要密集采样恢复细节。
传感器嵌入:可视化表明,忽视相机的不同设置会导致色彩和光照的偏移,通常发生在图像边缘处。引入传感器嵌入可以得到更精确的重建结果。
相机优化:NeRF依赖精确的传感器姿态,但数据集给出的姿态存在噪声。类似动态参与者姿态的优化(3.3节),本文也优化了相机的姿态。这样做能导致渲染锐度和FID指标增加,但新视图合成指标会有下降。这是因为姿态优化导致训练数据中的世界坐标和验证时的姿态不一致,使得验证时在略微偏移的位置进行渲染。可视化表明,使用相机优化能生成更清晰的图像,但评估性能更低。
可变形动态参与者:由于行人不符合刚性假设,会导致模糊的重建。
夜晚场景:夜晚场景包含大量与几何无关的测量噪声,且长的曝光时间与运动耦合,使得产生模糊或透明的参与者渲染结果;强光会导致光晕和透镜耀斑;来自自车或其余车辆的动态光照也未被建模。
时间变化的目标外表:如刹车灯和交通灯的建模,与可变形物体类似,但:不需要几何随时间变化,且可以视为离散状态;需要对其完全可编辑。