基于NeRF的路面重建算法——RoME / EMIE-MAP / RoGS

基于NeRF的路面重建算法——RoME / EMIE-MAP / RoGS

  • 1. RoMe
    • 1.1 Mesh Initialization / Waypoint Sampling
    • 1.2 Optimization
    • 1.3 Experiments
  • 2. EMIE-MAP
    • 2.1 Road Surface Representation based on Explicit mesh and Implicit Encoding
    • 2.2 Optimizing Strategies
    • 2.3 Experiments
  • 3. RoGS
    • 3.1 Road Surface Representation Based on Guassian Surfels
    • 3.2 Optimization
    • 3.3 Experiments

使用NeRF进行路面重建的思路要从Tesla AI Day的下面这页PPT说起:
在这里插入图片描述
地面重建的目的主要用于BEV框架下的道路结构的真值标注或者网络训练,好处主要是可以基于MLP进行颜色、语义等信息的融合并保持光滑,三年过去了有几篇和该方法相关的论文,本文进行一个简单的总结

1. RoMe

RoMe是地平线2023年发布的一篇Paper,原论文为《RoMe: Towards Large Scale Road Surface Reconstruction via Mesh Representation》,该论文将路面分解为三角形网格,通过隐式建模来恢复路面的高程信息以及Pytorch3D来进行颜色和语义渲染,基于Waypoint采样进行分块渲染来实现对大规模场景的重建,算法流程图如下图所示:在这里插入图片描述

1.1 Mesh Initialization / Waypoint Sampling

RoMe算法的基本数据结构是三角形网格,每个三角网格的顶点上存储着位置 ( x , y , z ) (x, y, z) (x,y,z),颜色 ( r , g , b ) (r, g, b) (r,g,b)和语义等信息,三角形网格初始化是在自车位姿附近采样一系列的半稠密点 ( x , y ) (x, y) (x,y)作为顶点,这些顶点的高度 z z z初始化为自车位姿高度减去自车高度,后续优化过程中高度 z z z通过一个Elevation MLP输出,如上图(b)所示,作者在Ablation Study中提到,如果将高度 z z z直接作为一个优化变量会导致地面不够平滑,增加一个Elevation MLP主要是为了保持地面的平滑性,如下图所示:
在这里插入图片描述

为了实现对大规模场景进行渲染,作者使用了Waypoinnt Sampling的策略来提高效率,其核心思想就是分而治之,具体算法流程如下
在这里插入图片描述
简而言之就是先通过随机选取一个位姿点构建一个子区域进行训练优化,该子区域会覆盖一部分位姿,然后迭代贪婪地选取未被覆盖的位姿点中最远的一个构建子区域进行训练优化,直到左右位姿点被覆盖到,如下是示意图:
在这里插入图片描述

1.2 Optimization

RoMe的优化主要分为两部分:

第一部分是相机位姿的优化,相机位姿优化的主要是相机到车体的标定;

第二部分网格的优化,这部分优化的主要是三角形网格节点中存储的RGB、语义以及Elevation MLP,作者使用先Pytorch3D完成渲染,然后再图片上构建损失函数,渲染部分为: [ C j , S j , D j , Mask  j ] = MeshRender ⁡ ( π j , M ) \left[C_j, S_j, D_j, \text { Mask }_j\right]=\operatorname{MeshRender}\left(\pi_j, M\right) [Cj,Sj,Dj, Mask j]=MeshRender(πj,M)其中 C j , S j C_j, S_j Cj,Sj D j D_j Dj分别代表第 j j j帧的RGB、语义和深度图, Mask  j \text { Mask }_j  Mask j指定了图片上需要监督的部分,具体的渲染过程作者也没有在论文里详述,只是介绍了下是如何定义Pytorch3D模型中pixel-to-faces、z-buffers等输入变量,因为笔者对这部分也不是很了解因此不再深入展开,渲染后构建的损失主要包括RGB损失和语义损失两部分: L color  = 1 N ∗ sum ⁡ ( Mask ⁡ j ) ∑ j = 1 N Mask ⁡ j ∗ ∣ C j − C ˉ j ∣ L_{\text {color }}=\frac{1}{N * \operatorname{sum}\left(\operatorname{Mask}_j\right)} \sum_{j=1}^N \operatorname{Mask}_j *\left|C_j-\bar{C}_j\right| Lcolor =Nsum(Maskj)1j=1NMaskj CjCˉj L sem  = 1 N ∗ sum ⁡ ( Mask  j ) ∑ j = 1 N Mask ⁡ j ∗ C E ( S j , S ˉ j ) L_{\text {sem }}=\frac{1}{N * \operatorname{sum}\left(\text { Mask }_j\right)} \sum_{j=1}^N \operatorname{Mask}_j * C E\left(S_j, \bar{S}_j\right) Lsem =Nsum( Mask j)1j=1NMaskjCE(Sj,Sˉj)

1.3 Experiments

RoMe在效果上做到了SOTA,其的训练速度如下(感觉还是比较慢的):
在这里插入图片描述
此外论文中提到如果光照变化强烈时RoMe的算法效果会变差

2. EMIE-MAP

EMIE-MAP发表于2024年CVPR,原论文为《EMIE-MAP: Large-Scale Road Surface Reconstruction Based on Explicit Mesh and Implicit Encoding》,RoMe在光照变化强烈时效果较差,本文就是旨在解决这个问题,算法流程如下:
在这里插入图片描述

2.1 Road Surface Representation based on Explicit mesh and Implicit Encoding

EMIE-MAP的基本数据结构和RoMe基本上是一致的,通过构建三角形网格,每个顶点上保存着位置信息、颜色和语义信息,下面我们来看下EMIE-MAP和RoME的主要区别,,

对于高度信息,RoMe是直接通过一个MLP输出实际地面高度,EMIE-MAP则是通过轨迹初始化一个地面高度,然后通过MLP输出实际地面高度与初始化地面高度的差值: z r = M L P h r ( P E ( x , y ) ) , z f = z 0 + z r z_r=M L P_{h r}(P E(x, y)), z_f=z_0+z_r zr=MLPhr(PE(x,y)),zf=z0+zr作者认为这样可减小拟合难度。

对于颜色信息,颜色信息EMIE-Map在顶点上记录的不是RGB,而是颜色的编码,然后不同相机使用不同的MLP对颜色编码进行解码才或者最终的RGB: r g b i = M L P r g b − i ( l c ) r g b_i=M L P_{r g b_{-} i}\left(l_c\right) rgbi=MLPrgbi(lc)颜色编码代码场景的物理属性,而MLP解码器则学习了不同相机的属性,因此可以解决不同相机曝光不同而导致渲染效果差的问题。

2.2 Optimizing Strategies

在数据采样策略上,作者使用了基于轨迹的采样策略来提高训练效率,具体来说就是将距离相近的轨迹点放入同一个Batch进行训练,因为训练过程会提取每个轨迹点前后80米的路面进行训练,相近的轨迹点在同一个Batch可以使得每次训练迭代都发生在一个小范围区域从而加收敛;

在渲染策略上,作者没有使用原始NeRF基于Volume的渲染策略,而是根据相机投影矩阵将顶点直接投影回图像进行渲染然后建立监督,这种方式可以进一步减少计算量。

在训练损失上,作者构建了如下训练损失: L total  = λ r g b L r g b + λ sem  L sem  + λ z L z + λ smooth  L smooth  L_{\text {total }}=\lambda_{r g b} L_{r g b}+\lambda_{\text {sem }} L_{\text {sem }}+\lambda_z L_z+\lambda_{\text {smooth }} L_{\text {smooth }} Ltotal =λrgbLrgb+λsem Lsem +λzLz+λsmooth Lsmooth 其中颜色和语义损失如下: L r g b = 1 ∣ M ∣ ∑ M ∣ C − C g t ∣ , L_{r g b}=\frac{1}{|M|} \sum M\left|C-C_{g t}\right|, Lrgb=M1MCCgt, L sem  = 1 ∣ M ∣ ∑ M ⋅ C E ( S , S g t ) ,  L_{\text {sem }}=\frac{1}{|M|} \sum M \cdot C E\left(S, S_{g t}\right) \text {, } Lsem =M1MCE(S,Sgt)如果有激光存在的话可以使用激光监督高度: L z = 1 ∣ M ∣ ∑ M ∣ z − z g t ∣ . L_z=\frac{1}{|M|} \sum M\left|z-z_{g t}\right| . Lz=M1Mzzgt.同时加上一个高度的平滑损失: L smooth  = ∑ i = 1 N ∑ j ∈ N ( i ) ∣ z i − z j ∣ 2 ,  L_{\text {smooth }}=\sum_{i=1}^N \sum_{j \in N(i)}\left|z_i-z_j\right|^2 \text {, } Lsmooth =i=1NjN(i)zizj2

2.3 Experiments

在PSNR上EMIE-MAP要全面超越RoMe:
在这里插入图片描述

从Ablation Study上我们可以看到,RGM MLP和颜色编码骑着至关重要的作用:在这里插入图片描述
从下图可以看到不同相机使用不同MLP训练渲染的地图颜色会不相同:
在这里插入图片描述

3. RoGS

RoGS发表于2024年,原论文名为《RoGS: Large Scale Road Surface Reconstruction based on 2D Gaussian Splatting》,这篇论文主要是受3D Gaussian Splatting的启发,通过2D Gaussian Spaltting的加速了道路重建的渲染效率和质量。算法流程如下:
在这里插入图片描述

3.1 Road Surface Representation Based on Guassian Surfels

在3D Gaussian Spaltting中我们将3D Gassian建模为: G ( p ) = e − 1 2 p T Σ − 1 p G(p)=e^{-\frac{1}{2} p^T \Sigma^{-1} p} G(p)=e21pTΣ1p其中 Σ \Sigma Σ为3D协方差, p p p为中心坐标,为了方便进行优化,将协方差定义为: Σ = R S S T R T \Sigma=R S S^T R^T Σ=RSSTRT其中 S = Diag ⁡ ( s x , s y , s z ) S=\operatorname{Diag}\left(s_x, s_y, s_z\right) S=Diag(sx,sy,sz),当我们将 s z s_z sz设置为 0 0 0时就得到一个2D Gaussian Surfel,每个2D Gaussian Surfel村出的信息包括: Θ = { ( x , y , z ) , ( r , g , b ) , ( s x , s y ) , α , R , Sem  } \Theta=\left\{(x, y, z),(r, g, b),\left(s_x, s_y\right), \alpha, R, \text { Sem }\right\} Θ={(x,y,z),(r,g,b),(sx,sy),α,R, Sem }其中 ( r , g , b ) (r, g, b) (r,g,b)表示颜色, α \alpha α表示透明度,在初始化阶段,高度 z z z和协方差的旋转矩阵 R R R都和轨迹点的高度以及位姿保持一致。

3.2 Optimization

2D Gaussian Surfel的渲染方式和3D Gasussian Splatting保持一致,即通过世界到相机的变换矩阵 W W W以及投影矩阵的仿射近似 J J J对协方差进行投影 Σ ′ = J W Σ W T J T \Sigma^{\prime}=J W \Sigma W^T J^T Σ=JWΣWTJT然后对深度排序进行渲染: c ( p ) = ∑ k = 1 K c k α k g k ( p ) ∏ i = 1 k − 1 ( 1 − α i g i ( p ) ) \mathbf{c}(p)=\sum_{k=1}^K \mathbf{c}_k \alpha_k g_k(p) \prod_{i=1}^{k-1}\left(1-\alpha_i g_i(p)\right) c(p)=k=1Kckαkgk(p)i=1k1(1αigi(p))由于我们有可能通过不同的相机进行渲染,因为还针对不同相机的曝光参数映入了两个可学习参数 α \alpha α b b b做最后的输出: c ′ ( p ) = e a ⋅ c ( p ) + b \mathbf{c}^{\prime}(p)=e^a \cdot \mathbf{c}(p)+b c(p)=eac(p)+b损失函数和EMIE-MAP是保持一致的,即 L total  = λ color  L color  + λ sem  L sem  + λ smooth  L smooth  + λ z L z L_{\text {total }}=\lambda_{\text {color }} L_{\text {color }}+\lambda_{\text {sem }} L_{\text {sem }}+\lambda_{\text {smooth }} L_{\text {smooth }}+\lambda_z L_z Ltotal =λcolor Lcolor +λsem Lsem +λsmooth Lsmooth +λzLz

3.3 Experiments

如下是RoMe和RoGS的结果对比:
在这里插入图片描述
可以看到RoGS有15倍的速度提升,同时在渲染效果上也有变好,如下是结果对比图:
在这里插入图片描述
在论文中作者并没有展示多相机渲染的效果

以上就是最近看的三篇使用NeRF对路面进行重建的算法,在实际的工程应用中,其实用传统算法就能达到一个不错的基本面,NeRF Like的方法或者之后在纯视觉方案或者多相机重建这种更难的任务上能发挥作用吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/48373.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python报错RuntimeError: Numpy is not available

–> 141 audio torch.from_numpy(audio) 143 if device is not None: 144 audio audio.to(device) RuntimeError: Numpy is not available 使用python3.9和torch时,自动安装了Numpy2.0,一直报错, 解决方法:pip install nump…

如何在 Linux 中解压 ZIP 文件

ZIP 是一种常用的压缩文件格式,用于存储和传输多个文件。在 Linux 系统中,解压 ZIP 文件非常简单。 使用 unzip 命令 unzip 是一个专用于解压 ZIP 文件的命令行工具。要使用它,请打开终端并输入以下命令: 例如,要解…

SpringBoot整合ElasticSearch的elasticsearch-java出现jakarta.json.spi.JsonProvider报错问题

一、原因 报错内容如下 org.springframework.beans.factory.BeanCreationException: Error creating bean with name esClient defined in class path resource [com/elasticsearch/config/ElasticSearchConfig.class]: Bean instantiation via factory method failed; nes…

springboot怎么使用rides 缓存方法的返回值 完整例子

好的,下面是一个使用Spring Boot和Redis缓存方法返回值的完整示例: 添加依赖:在pom.xml中添加Spring Boot Redis依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> <…

在 CI/CD Pipeline 中实施持续测试的最佳实践!

随着软件开发周期的不断加快&#xff0c;持续集成&#xff08;CI&#xff09;和持续交付/部署&#xff08;CD&#xff09;已经成为现代软件开发的重要组成部分。在这一过程中&#xff0c;持续测试的实施对于确保代码质量、提高发布效率至关重要。本文将详细介绍在CI/CD流水线中…

JVM:JavaAgent技术

文章目录 一、Java工具的介绍二、Java Agent技术1、介绍2、静态加载模式3、动态加载模式 三、搭建java agent静态加载模式环境1、创建maven项目2、编写类和premain方法3、编写MANIFEST.MF文件4、使用maven-assembly-plugin进行打包5、创建Spring Boot应用 一、Java工具的介绍 …

有关css的题目

css样式来源有哪些&#xff1f; 内联样式&#xff1a; <a style"color: red"> </a> 内部样式&#xff1a;<style></style> 外部样式&#xff1a;写在独立的 .css文件中的 浏览器的默认样式 display有哪些属性 none - 不展示 block - 块类型…

基于深度学习的医疗数据分析

基于深度学习的医疗数据分析是将深度学习技术应用于医疗数据处理和分析&#xff0c;以提高疾病诊断、治疗规划、患者监护等方面的效率和准确性。这一领域涵盖了广泛的应用&#xff0c;包括影像分析、电子健康记录&#xff08;EHR&#xff09;处理、基因组数据分析等。以下是对这…

mac数据恢复软件哪个好用 macbook数据恢复专业软件下载 mac数据恢复概率大吗 苹果电脑数据恢复软件哪个好

作为办公的必需品&#xff0c;mac的普及率虽然比不上其他品牌的windows操作系统&#xff0c;但是使用人群也一致居高不下&#xff0c;因此&#xff0c;mac数据丢失的问题也时常发生。当数据丢失以后&#xff0c;如何找回数据成了一大难题。 一、Mac数据恢复概率大吗 一般情况下…

配置mysql8.0.21版本docker-compose启动容器

1. 总览 2 docker-compose.xml配置 version: 3 services:mysql:image: 192.168.188.131:8000/mysqlrestart: alwaysvolumes:- ./data:/var/lib/mysql- ./my.cnf:/etc/mysql/my.cnf- ./mysql-files:/var/lib/mysql-files- ./log/mysql:/var/log/mysqlenvironment:MYSQL_ROOT_PA…

掌握Perl的魔法:深入探索钩子(Hook)机制

掌握Perl的魔法&#xff1a;深入探索钩子&#xff08;Hook&#xff09;机制 在Perl编程语言中&#xff0c;钩子&#xff08;Hook&#xff09;是一种特殊的变量或函数&#xff0c;它们在特定的操作发生时自动触发。钩子可以被视为一种拦截器&#xff0c;允许程序员在程序执行的…

python中使用openpyxl库写一个简单的表格

如果你只需要写一个简单的表格并保存到Excel文件中&#xff0c;那么openpyxl或pandas都是很好的选择。这两个库都支持创建和保存Excel文件&#xff0c;并且使用起来相对简单。 以下是使用openpyxl库创建一个简单表格并保存到Excel文件的示例&#xff1a; from openpyxl impor…

huawei USG6001v1学习----NAT和智能选路

目录 1.NAT的分类 2.智能选路 1.就近选路 2.策略路由 3.智能选路 NAT:&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09; 指网络地址转换&#xff0c;1994年提出的。NAT是用于在本地网络中使用私有地址&#xff0c;在连接互联网时转而使用全局…

Skip List:平衡搜索效率与数据结构复杂性

在计算机科学中&#xff0c;跳表&#xff08;Skip List&#xff09;是一种概率型数据结构&#xff0c;它允许快速地在有序列表中进行搜索、插入和删除操作。跳表由William Pugh在1990年提出&#xff0c;它结合了链表的简单性和平衡树的高效性&#xff0c;是一种非常实用的数据结…

【MySQL】一些业务场景常见的查询,比如实现多表字段同步,递归查询等

目录 快速加注释多表关联查询更新多个字段循环查询子级方法1&#xff1a;递归查询方法2&#xff1a;循环查询 快速加注释 使用ALTER TABLE语句可以修改表结构&#xff0c;包括添加注释。以下是添加注释的语法&#xff1a; ALTER TABLE 表名 MODIFY COLUMN 列名 列类型 COMMEN…

【数据结构初阶】顺序表三道经典算法题(详解+图例)

Hello&#xff01;很高兴又见到你了~~~ 看看今天要学点什么来充实大脑吧—— 目录 1、移除元素 【思路图解】 【总结】 2、删除有序数组中的重复项 【思路图解】 【总结】 3、合并两个有序数组 【思路图解】 【总结】 至此结束&#xff0c;Show Time&#xff01; 1、…

TCP/IP协议,以及对等网络通信原理!

TCP/IP模型协议分层 应用层&#xff1a; HTTP&#xff1a;超文本传输协议&#xff08;网站访问WEB&#xff09;&#xff08;Apache、nginx&#xff09;(IIS) FTP&#xff1a;文件传输协议&#xff08;网络文件传输&#xff09; TFTP&#xff1a;简单文件传输协议&#xff0…

神经网络理论(机器学习)

motivation 如果逻辑回归的特征有很多&#xff0c;会造出现一些列问题&#xff0c;比如&#xff1a; 线性假设的限制&#xff1a; 逻辑回归是基于线性假设的分类模型&#xff0c;即认为特征与输出之间的关系是线性的。如果特征非常多或者特征与输出之间的关系是非线性的&#…

PyTorch LSTM 单步、多步时间预测

PyTorch LSTM 单步、多步时间预测 多维输入、多维输出&#xff1b;单步预测、多步滚动预测 import torch import torch.nn as nn import torch.optim as optimclass LSTMModel(nn.Module):def __init__(self, input_dim, hidden_dim, num_layers, output_dim):super(LSTMMode…

【云原生】Kubernetes微服务Istio:介绍、原理、应用及实战案例

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…