深度学习在三维点云处理与三维重建中的应用探索

目录

点云数据处理

数据清洗

数据降噪和简化

数据配准

特征提取

数据增强

数据组织

性能考量

PointNet

PointNet++

算法问题

改进方法 

三维重建

重建算法

架构模块

流程步骤

标记说明

优点和挑战


点云数据处理

数据清洗

  1. 去噪:点云数据通常包含噪声。可以使用统计滤波、半径滤波或其他噪声移除算法来清除噪点。

  2. 异常值移除:通过分析点云数据的统计特性,移除偏离平均值或中位数特别远的点,这些通常是由于传感器误差造成的。

数据降噪和简化

  1. 体素化:用体素网格(3D像素)代替大量的点,这可以大幅减少数据量,同时保持空间结构。

  2. 下采样:使用均匀采样、随机采样或远点采样等方法来减少点数,提高处理速度。

数据配准

  1. 预对齐:如果数据来自不同的传感器或不同的时间点,可能需要进行粗配准,以确保它们在同一坐标系中。

  2. 标准化:对点云数据进行缩放和旋转,使其拥有统一的尺度和方向。

特征提取

  1. 曲面特征:提取曲率、法线等几何特征,这对于后续的分割和识别工作非常有帮助。

  2. 颜色特征:如果点云带有RGB信息,可以将颜色特征和几何特征结合起来使用。

数据增强

  1. 仿真数据:使用仿真生成的点云数据来增强训练集,特别是对于难以在现实世界中收集的情况。

  2. 数据插值:对于稀疏区域,可以使用插值算法来估计缺失的点,但要小心保持数据的真实性。

数据组织

  1. 空间索引:使用KD-Tree、八叉树等数据结构来优化查询和检索操作,对于大规模数据来说尤为重要。

  2. 分批处理:如果点云数据量非常大,需要分批次处理,以避免内存溢出。

性能考量

  1. 计算资源:预处理步骤可能需要大量计算资源。优化算法和使用GPU加速是提高效率的关键。

  2. 内存管理:在处理大规模点云数据时,有效的内存管理至关重要,以避免延迟和程序崩溃。

通过以上预处理步骤,可以确保点云数据质量和一致性,为SLAM和语义分割任务打下坚实基础。这些步骤对于处理大规模数据集来说是通用的,而对于具体的实现细节,可能还需要根据具体情况进行调整和优化。

PointNet

PointNet是一个深度学习算法,它用于三维点云的处理和分析。它的主要创新是能够直接从点云数据中学习特征,而不需要将数据转换成其他格式,比如体素(Voxel)或图像。PointNet能够处理无序的点集,并且对于点的输入顺序不敏感。这使得PointNet在三维对象识别和分类、场景语义分割和其他三维数据处理任务中非常有效。

PointNet通过使用多层感知器(MLP)网络,学习点的空间编码,并通过一个对称函数(例如最大池化函数)来确保对输入点的置换不变性。这是处理点云数据的一个重要特性,因为点云通常是无序的,并且相同的3D形状可以以任何顺序表示其点。

PointNet整体网络架构

PointNet++

PointNet++的核心思想,包括分层特征学习、基于区域的处理、最远点采样选择区域中心、以及半径参数控制局部区域大小等。PointNet++在各种3D点云理解任务上,如物体分类和部件分割,都取得了比原始PointNet更好的性能表现。

  • 分组(gouping)

例如:输入为batch*1024*6(1024个点,每个点对应3个坐标3个法向量信息)
分组后输出为:batch*128*16*6(128个中心点,每个簇16个样本)
实际计算时是选择多种半径,多种样本点个数,目的是特征更丰富PointNet++
例如:半径=(0.1,0.2,0.4);对应簇的样本个数(16,32,64)

  • 对各组进行特征提取

先进行维度变换(b*npoints*nsample*features,8*128*16*6->8*6*16*128)
进行卷积操作(例如:in=6,out=64)就得到提取的特征(8*64*16*128)
注意当前每个簇都是16个样本点,我们要每一个簇对应一个特征
按照pointnet,做MAX操作,得到8*64*128

  • 继续做多次采样,分组,卷积:

例如:采样中心点(1024->512->128)
每一次操作时,都要进行特征拼接(无论半径为0.1,0.2,0.4;以及簇采样点个数)
最终都得到batch*中心点个数*特征(但是特征个数可能不同)
执行拼接操作(b*512*128,b*512*256,b*512*512)->(b*512*896)

  • 经过多次采样,分组,pointnet得到最终整体特征,再进行分类

整个过程是一个典型的深度学习中的特征层次化提取过程,用于从原始数据中自动学习到有用的特征。在三维点云的处理中,这种方法特别有效,因为它能处理原始点云数据的无序性,并能从不同的尺度捕捉到形状和结构的特征。通过这样的处理,神经网络能够学习到复杂的模式,从而在各种任务上达到很好的性能。 

算法问题

改进方法 

整体网络模型

三维重建

重建算法

GitHub - zju3dv/NeuralRecon: Code for "NeuralRecon: Real-Time Coherent 3D Reconstruction from Monocular Video", CVPR 2021 oral

单目视频实时三维重建的NeuralRecon系统。其关键思想是通过三维稀疏卷积和GRU对每个视频片段的稀疏TSDF体积进行增量的联合重建和融合。这种设计使NeuralRecon能够实时输出准确和连贯的重建。实验表明,NeuralRecon在重建质量和运行速度上都优于最先进的方法。通过neural-recon重建的稀疏TSDF体可以直接用于3D物体检测、3D语义分割和神经渲染等下游任务。我们相信,通过与下游任务端到端的联合训练,NeuralRecon为基于学习的多视图感知和识别系统提供了新的可能性。 

https://www.youtube.com/watch?v=wuMPaUTJuO0&t=134s

这张图片描述了一个名为“NeuralRecon”的三维重建系统的架构,这个系统采用了一种粗到细(coarse-to-fine)的方法来处理图像,并生成预测的几何结构。

架构模块

  • 图像编码器: 该模块从输入视频帧中提取特征。
  • GRU: 该模块是一个循环神经网络,用于编码视频中的时间信息。
  • MLP: 该模块是一个全连接神经网络,用于预测场景中每个像素的深度。
  • 融合: 该模块结合了 MLP 和 GRU 模块的预测。
  • 上采样: 该模块将粗略深度预测上采样到所需分辨率。
  • 稀疏化: 该模块从深度图中移除异常预测。

流程步骤

  1. 从单目视频中提取特征

    • 局部视频片段中的关键帧图像首先通过图像骨干网络提取多层次特征。
  2. 反向投影和聚合成3D特征体

    • 这些多层次图像特征随后沿着对应的相机光线进行反向投影,并聚合成3D特征体
      F_{t}^{l},代表场景在粗糙的细节层次上的表示。
  3. 粗到细的TSDF预测

    • 从最粗糙的层级开始(层级0=1),系统预测一个稠密的截断符号距离场(TSDF)体积。
    • 在随后的层级中,系统对来自前一层级的TSDF体积进行上采样和细化,并与通过GRU(门控循环单元)融合模块和多层感知机(MLPs)维护在每个层级上的全局隐藏状态进行串联。
  4. 维护全局隐藏状态

    • 在不同层级中,以世界坐标系定义的特征量作为全局隐藏状态,使用GRU单元维护。这有助于随时间维持重建的连贯性。
  5. 最终重建

    • 在最后的层级,输出的TSDF S_{t}^{l}用于替换全局TSDF体积(S_{q}^{g})中的相应体素,从而在时间t产生最终的连贯重建。

PS:   TSDF是“Truncated Signed Distance Field”的缩写。在计算机视觉和图形学中,TSDF是一种用于表示三维形状的数据结构。它在体积重建领域特别受欢迎,如三维扫描和SLAM(Simultaneous Localization and Mapping)系统。 

标记说明

  • 绿色箭头(C):表示特征在不同尺度间的串联(Concatenate)。
  • 黄色箭头(S):表示稀疏化操作(Sparsify),可能是为了减少计算复杂度。
  • 蓝色箭头(U):表示上采样(Upsample),在粗到细的策略中上采样是为了细化特征。
  • 粉色块(Extract/Replace):表示从大尺度特征中提取细节,并替换原有的粗尺度特征。

优点和挑战

  • 优点:NeuralRecon的方法解决了传统基于深度的3D重建方法的两大缺点:
    • 传统方法独立地为每个关键帧估计单视图深度图,可能导致不一致性,。NeuralRecon则直接重建局部表面,确保了连贯的局部几何估计。
    • 基于深度的方法因为重叠的关键帧深度估计有冗余计算,而NeuralRecon通过预测体积表示消除了这种冗余,即使使用更大的3D CNN也能保持实时性能。
  • 挑战:虽然该系统避免了传统逐帧处理的消耗,但处理速度慢和GRU不稳定仍然是需要解决的问题。系统需要维持一个全局隐藏状态,这可能会对计算资源造成压力。

这个系统的创新之处在于使用了多尺度的方法结合深度学习来处理SLAM问题,并利用GRU网络来维持时序信息,从而提高了三维重建的效率和准确性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云计算:Linux 部署 OVS 集群(控制端)实现OpenFlow

目录 一、实验 1.环境 2.Linux 部署 OVS 集群(控制端) 3.控制端对接服务端OVS网元 4.服务端OVS添加流表 5.服务端删除OVS 二、问题 1. ODL如何查找已安装插件 2.查看流表显示不全 3.如何删除OVS流表 一、实验 1.环境 (1) 主机 表1 宿主机 主…

银行司库系统应用架构介绍

继国务院国资委印发了《关于推动中央企业加快司库体系建设进一步加强资金管理的意见》以及《关于中央企业加快建设世界一流财务管理体系的指导意见》,司库体系建设开始得到了更多重视。其中,作为改革风向标,央企数字化转型及司库建设对整个行…

Node.js从基础到高级运用】二十三、Node.js中自动重启服务器

引言 在Node.js开发过程中,我们经常需要修改代码后重启服务器来应用这些更改。手动重启不仅效率低下,而且会打断开发流程。幸运的是,有一些工具可以帮助我们自动化这个过程。本文将介绍如何使用nodemon来实现Node.js服务器的自动重启。 什么是…

OR36 链表的回文结构

描述 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。 测试样例: 1->…

Unity面经(自整)——移动开发与Shader

Unity与Android混合开发 为什么使用Flutter构建 Flutter 是 Google 的开源工具包,用于从单个代码库为移动、Web、桌面和嵌入式设备构建应用程序(一套代码跨平台构建app是它最大的优点),并且可以构建高性能、稳定和丰富UI的应用程…

Django Rest Framework的序列化和反序列化

DRF的序列化和反序列化 目录 DRF的序列化和反序列化Django传统序列化Django传统反序列化安装DRF序列化器serializers序列化反序列化反序列化保存instance和data CBV和APIView执行流程源码解析CBV源码分析APIView源码分析 DRF的Request解析魔法方法__getattr__ 什么是序列化&…

第十二届蓝桥杯大赛软件赛省赛Java 大学 B 组题解

1、ASC public class Main {public static void main(String[] args) {System.out.println(

dns服务的正反向解析

目的:完成DNS正反向解析,将步骤及测试同时提交 一、正向解析 1、准备工作 [rootserver ~]# setenforce 0 [rootserver ~]# systemctl stop firewalld 2、服务端、客户端均安装软件 [rootserver ~]# yum install bind -y [rootnode1 ~]# yum install b…

扭蛋机小程序:线上扭蛋机模式发展空间有多大?

潮玩行业近几年的发展非常快,推动了扭蛋机市场的发展,越来越多的人加入到了扭蛋机赛道中,市场迎来了新的发展期。如今,我国的二次元文化的发展不断成熟,扭蛋机主打的二次元商品迎来了更多的商业机会。 一、互联网扭蛋机…

使用shell管理和配置网络服务_1

1、请使用nmcli命令配置仅主机模式网络环境,要求如下: 1) 创建一个新的网卡连接eth1,该连接映射到ens32网卡上; 首先,确保 ens32 网卡没有被其他网络配置文件使用。然后,使用 nmcli 创建一个新的连接,并将其绑定到 e…

在Spring Boot中使用POI完成一个excel报表导入数据到MySQL的功能

最近看了自己玩过的很多项目,忽然发现有一个在实际开发中我们经常用到的功能,但是我没有正儿八经的玩过这个功能,那就是在Spring Boot中实现一个excel报表的导入导出功能,这篇博客,主要是围绕excel报表数据导入进行&am…

分享一下项目中遇到的排序失效问题

今天把原来的一个查询接口的业务代码进行了优化&#xff0c;减少了十几行冗余的代码。 原来的代码 ChongwuServiceImpl.java /*** author heyunlin* version 1.0*/ Slf4j Service public class ChongwuServiceImpl implements ChongwuService {Overridepublic JsonResult<…

云原生数据库海山(He3DB)PostgreSQL版核心设计理念

本期深入解析云原生数据库海山PostgreSQL版&#xff08;以下简称“He3DB”&#xff09;的设计理念&#xff0c;探讨在设计云原生数据库过程中遇到的工程挑战&#xff0c;并展示He3DB如何有效地解决这些问题。 He3DB是移动云受到 Amazon Aurora 论文启发而独立自主设计的云原生数…

html+javascript,用date完成,距离某一天还有多少天

图片展示: html代码 如下: <style>* {margin: 0;padding: 0;}.time-item {width: 500px;height: 45px;margin: 0 auto;}.time-item strong {background: orange;color: #fff;line-height: 100px;font-size: 40px;font-family: Arial;padding: 0 10px;margin-right: 10px…

Day98:云上攻防-云原生篇K8s安全Config泄漏Etcd存储Dashboard鉴权Proxy暴露

目录 云原生-K8s安全-etcd(Master-数据库)未授权访问 etcdV2版本利用 etcdV3版本利用 云原生-K8s安全-Dashboard(Master-web面板)未授权访问 云原生-K8s安全-Configfile鉴权文件泄漏 云原生-K8s安全-Kubectl Proxy不安全配置 知识点&#xff1a; 1、云原生-K8s安全-etcd未…

性能优化-02

uptime 依次显示当前时间、系统运行时间以及正在登录用户数&#xff0c;最后三个数字依次则是过去1分钟、5 分钟、15 分钟的平均负载(Load Average) 平均负载是指单位时间内&#xff0c;系统处于可运行状态和不可中断状态的平均进程数&#xff0c;也就是平均活跃进程数&#xf…

执行npm命令一直出现sill idealTree buildDeps怎么办?

一、问题 今天在运行npm时候一直出项sill idealTree buildDeps问题 二、 解决 1、网上查了一下&#xff0c;有网友说先删除用户界面下的npmrc文件&#xff08;注意一定是用户C:\Users\{账户}\下的.npmrc文件下不是nodejs里面&#xff09;&#xff0c;进入到对应目录下&#x…

golang实现定时监控 CLOSE_WAIT 连接的数量

文章目录 go实现定时检查大量的 CLOSE_WAIT 连接背景&#xff1a;为什么监控指定端口上的 CLOSE_WAIT 连接数量原因&#xff1a;什么是CLOSE_WAITgo实现定时检查大量的 CLOSE_WAIT 连接参考 go实现定时检查大量的 CLOSE_WAIT 连接 监控指定端口的连接状态&#xff0c;特别是关…

分类算法——KNN算法(二)

什么是K-近邻算法 1KNN原理 K Nearest Neighbor算法又叫KNN算法&#xff0c;这个算法是机器学习里面一个比较经典的算法&#xff0c;总体来说KNN算法是相对比较容易理解的算法。 定义 如果一个样本在特征空间中的k个最相似&#xff08;即特征空间中最邻近&#xff09;的样本…

搭建Python王国:初心者的武装指南

Python环境搭建与配置 进入编程世界的大门&#xff0c;选择了Python作为你的剑&#xff0c;那么接下来&#xff0c;你需要的是一把磨好的利剑——一个配置妥当的Python开发环境。本文将指引你完成这个必要的准备过程&#xff0c;从安装Python到选择合适的IDE&#xff0c;再到理…