当前位置: 首页 > news >正文

PointPillars:数据预处理

在 PointPillars 算法中,将点云划分为点柱(Pillars)是核心步骤之一,用于将稀疏点云数据转换为规则的张量表示,方便后续 2D 卷积操作。以下是点云划分为点柱的具体方法和实现步骤:


1. 点云划分为网格

将 3D 空间划分为规则的网格,形成柱状区域(Pillars)。

操作步骤:
  1. 定义网格范围和分辨率

    • 确定点云的空间范围,例如:
      X min , X max , Y min , Y max , Z min , Z max X_{\text{min}}, X_{\text{max}}, Y_{\text{min}}, Y_{\text{max}}, Z_{\text{min}}, Z_{\text{max}} Xmin,Xmax,Ymin,Ymax,Zmin,Zmax
    • 设置网格分辨率(Pillar 尺寸):
      Δ X , Δ Y \Delta X, \Delta Y ΔX,ΔY
      例如,每个 Pillar 的大小为 0.16 × 0.16 m 0.16 \times 0.16 \, \text{m} 0.16×0.16m
  2. 计算网格索引

    • 对每个点 ( x , y , z ) (x, y, z) (x,y,z),计算其在网格中的索引:
      u = ⌊ x − X min Δ X ⌋ , v = ⌊ y − Y min Δ Y ⌋ u = \lfloor \frac{x - X_{\text{min}}}{\Delta X} \rfloor, \quad v = \lfloor \frac{y - Y_{\text{min}}}{\Delta Y} \rfloor u=ΔXxXmin,v=ΔYyYmin
    • u , v u, v u,v 分别是点在 X X X Y Y Y 方向上的网格索引。

2. 构建 Pillar 数据结构

每个 Pillar 中包含若干点的特征(点云数据是稀疏的,因此部分 Pillar 可能没有点)。

操作步骤:
  1. 点分组

    • 将所有点根据其网格索引分配到对应的 Pillar 中。
    • 例如,第 ( u , v ) (u, v) (u,v) 个 Pillar 包含所有满足条件的点:
      P pillar ( u , v ) = { ( x , y , z , i ) ∣ 点的索引为  ( u , v ) } P_{\text{pillar}}(u, v) = \{ (x, y, z, i) \mid \text{点的索引为 } (u, v) \} Ppillar(u,v)={(x,y,z,i)点的索引为 (u,v)}
  2. 固定点数量

    • 为了适配神经网络,每个 Pillar 中的点数量固定为 N max N_{\text{max}} Nmax
      • 如果点数超过 N max N_{\text{max}} Nmax,随机采样。
      • 如果点数不足 N max N_{\text{max}} Nmax,用零点填充。
  3. 特征提取
    对每个点提取以下特征:

    • ( x , y , z , i ) (x, y, z, i) (x,y,z,i):点的原始坐标和反射强度。
    • 相对坐标(相对于 Pillar 中心的偏移量):
      Δ x = x − x pillar center , Δ y = y − y pillar center \Delta x = x - x_{\text{pillar center}}, \quad \Delta y = y - y_{\text{pillar center}} Δx=xxpillar center,Δy=yypillar center
  4. 形成固定维度的张量

    • 对每个 Pillar,构造 N max × D N_{\text{max}} \times D Nmax×D 的特征矩阵,其中 D D D 是特征维度(例如,原始坐标 + 相对坐标 + 强度)。

3. BEV (Bird’s Eye View) 特征图

将所有 Pillar 的特征投影到 BEV 平面,形成伪影像特征图。

操作步骤:
  1. 初始化 BEV 特征图

    • 创建一个固定大小的张量 ( H , W , C ) (H, W, C) (H,W,C),对应网格的高度、宽度和通道数。
      • H = X max − X min Δ X H = \frac{X_{\text{max}} - X_{\text{min}}}{\Delta X} H=ΔXXmaxXmin
      • W = Y max − Y min Δ Y W = \frac{Y_{\text{max}} - Y_{\text{min}}}{\Delta Y} W=ΔYYmaxYmin
  2. 填充特征图

    • 对于每个 Pillar,将其特征向量映射到特定网格单元的通道维度中。
  3. 零填充

    • 如果某些网格单元没有对应的 Pillar,用零填充。

代码实现示例

以下是一个简单的 Python 实现框架:

import numpy as npdef create_pillars(point_cloud, grid_size, pillar_size, max_points_per_pillar):"""将点云划分为点柱 (Pillars) 并提取特征。Args:point_cloud: (N, 4) 点云数据,包含 (x, y, z, intensity)grid_size: [x_min, x_max, y_min, y_max]pillar_size: [pillar_x_size, pillar_y_size]max_points_per_pillar: 每个 Pillar 的最大点数Returns:pillars: (num_pillars, max_points_per_pillar, feature_dim)"""x_min, x_max, y_min, y_max = grid_sizepillar_x_size, pillar_y_size = pillar_size# 筛选点云范围内的点mask = (point_cloud[:, 0] >= x_min) & (point_cloud[:, 0] < x_max) & \(point_cloud[:, 1] >= y_min) & (point_cloud[:, 1] < y_max)points = point_cloud[mask]# 计算网格索引x_indices = np.floor((points[:, 0] - x_min) / pillar_x_size).astype(int)y_indices = np.floor((points[:, 1] - y_min) / pillar_y_size).astype(int)# 按索引分组点num_pillars = (x_max - x_min) // pillar_x_size * (y_max - y_min) // pillar_y_sizepillars = np.zeros((num_pillars, max_points_per_pillar, 7))  # [x, y, z, intensity, delta_x, delta_y, delta_z]for i, (x_idx, y_idx) in enumerate(zip(x_indices, y_indices)):pillar_idx = x_idx * y_max + y_idx  # Pillar 的一维索引if len(pillars[pillar_idx]) < max_points_per_pillar:delta_x = points[i, 0] - (x_idx * pillar_x_size + pillar_x_size / 2)delta_y = points[i, 1] - (y_idx * pillar_y_size + pillar_y_size / 2)pillars[pillar_idx].append([*points[i, :4], delta_x, delta_y, points[i, 2]])return pillars

实践优化

  1. GPU 加速:使用 CUDA 或 TensorFlow/PyTorch 操作处理点云。
  2. 稀疏优化:利用稀疏张量库减少计算成本。
  3. 并行化:在点划分和特征提取阶段进行并行处理。

相关文章:

PointPillars:数据预处理

在 PointPillars 算法中&#xff0c;将点云划分为点柱&#xff08;Pillars&#xff09;是核心步骤之一&#xff0c;用于将稀疏点云数据转换为规则的张量表示&#xff0c;方便后续 2D 卷积操作。以下是点云划分为点柱的具体方法和实现步骤&#xff1a; 1. 点云划分为网格 将 3D…...

node.js的异步工作之---回调函数与回调地狱

回调函数&#xff1a;在 Node.js 中&#xff0c;很多 API 都是异步的&#xff0c;通常通过回调函数来处理操作完成后的结果。这种回调模式虽然非常高效&#xff0c;但会导致代码逐渐变得难以维护&#xff0c;尤其是当有多个异步操作嵌套时&#xff08;即回调地狱&#xff09;。…...

Mac Android studio 升级LadyBug 版本,所产生的bug

当Build 出现&#xff0c;这样的文字以后&#xff1a; Your build is currently configured to use incompatible Java 21.0.3 and Gradle 7.3.3. Cannot sync the project. We recommend upgrading to Gradle version 8.9. The minimum compatible Gradle version is 8.5. …...

stm32 hex文件烧写

STM32的HEX文件烧写是将编译后的程序代码&#xff08;以HEX格式存储&#xff09;下载到STM32单片机中的过程。以下是对STM32 HEX文件烧写的详细解释&#xff1a; 一、HEX文件简介 HEX文件&#xff0c;即Intel HEX文件&#xff0c;是一种由文本行组成的ASCII文件&#xff0c;每…...

【编译原理】编译原理知识点汇总·属性文法和语法制导翻译

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;编译原理_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …...

【unity c#】深入理解string,以及不同方式构造类与反射的性能测试(基于BenchmarkDotNet)

出这篇文章的主要一个原因就是ai回答的性能差异和实际测试完全不同&#xff0c;比如说是先获取构造函数再构造比Activator.CreateInstance(type)快&#xff0c;实际却相反 对测试结果的评价基于5.0&#xff0c;因为找不到unity6确切使用的net版本&#xff0c;根据c#9推测是net5…...

VSCode 插件开发实战(八):创建和管理任务 Task

前言 VSCode 的扩展能力使得开发者能够根据个人需求定制工作环境&#xff0c;自定义插件和任务管理是 VSCode 强大功能的一部分&#xff0c;通过这些功能&#xff0c;开发者可以自动化常见工作流&#xff0c;简化日常开发任务&#xff0c;提高整体开发效率。本文将详细介绍如何…...

在 Node.js 中正确处理 `async/await` 及数组迭代

在使用 Node.js 开发应用程序时&#xff0c;我们常常需要处理异步操作。例如&#xff0c;当我们从数据库获取数据、调用外部API或执行文件读取时&#xff0c;这些操作都可能需要一些时间才能完成。在这种情况下&#xff0c;我们通常会使用 async/await 语法来简化异步编程的复杂…...

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——13使用Resnet-Bin

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——13使用Resnet-Bin ​ 根据前面的内容&#xff0c;目前已经可以获取到resnet的bin模型 1 .Resnet的bin测试 ​ 这里给大家一个测试视频里面黑线的demo&#xff0c;大家可以用来测试自己的黑线识别精度 …...

FFmpeg第三话:FFmpeg 视频解码详解

FFmpeg 探索之旅 一、FFmpeg 简介与环境搭建 二、FFmpeg 主要结构体剖析 三、FFmpeg 视频解码详解 FFmpeg第三话&#xff1a;FFmpeg 视频解码详解 FFmpeg 探索之旅前言一、视频解码基础二、FFmpeg 关键 API 深度剖析&#xff08;一&#xff09;avformat_open_input()&#xff…...

解决 vue3 中 echarts图表在el-dialog中显示问题

原因&#xff1a; 第一次点开不显示图表&#xff0c;第二次点开虽然显示图表&#xff0c;但是图表挤在一起&#xff0c;页面检查发现宽高只有100px,但是明明已经设置样式宽高100% 这可能是由于 el-dialog 还没有完全渲染完成&#xff0c;而你的 echarts 组件已经开始尝试渲染图…...

C++ OpenGL学习笔记(4、绘制贴图纹理)

相关链接&#xff1a; C OpenGL学习笔记&#xff08;1、Hello World空窗口程序&#xff09; C OpenGL学习笔记&#xff08;2、绘制橙色三角形绘制、绿色随时间变化的三角形绘制&#xff09; C OpenGL学习笔记&#xff08;3、绘制彩色三角形、绘制彩色矩形&#xff09; 通过前面…...

关于我的Java考试被老师挂掉的这件事......

目录 1.事情起源 2.问题出现 3.最后的考试结果 4.问题如何解决的 5.此件事情引发我的思考 1.事情起源 现在是2024-12-25中午的13:08分&#xff0c;我于今天上虞结束了这个学期的Java课程的学习&#xff0c;上午的课程内容就是开始&#xff0c;使用MVC实现对于题目要求的这…...

Websocket客户端从Openai Realtime api Sever只收到部分数据问题分析

目录 背景 分析 解决方案 背景 正常情况下&#xff0c;会从Openai Realtime api Sever收到正常的json数据,但是当返回音频数据时&#xff0c;总会返回非json数据。这是什么问题呢&#xff1f; 分析 期望的完整响应数据如下&#xff1a; {"session": {"inp…...

Unity 6 中的新增功能

Unity 6 是 Unity 的最新版本。 一、编辑器和工作流程 Unity 6 中引入的更改 在 Linux 上实现了将文件和资源从 Unity 拖放到外部应用程序的功能。将 Asset Manager for Unity 包添加到 Package Manager > Services > Content Management 部分中。此包允许用户轻松浏览…...

[ComfyUI]颜色提取插件,Flux专属,让出图更加可控

一、介绍​ 今天介绍这个好玩的插件 ComfyUI APQNodes&#xff0c;默认的Flux模型是无法理解准确的颜色代码。​ 而这个插件可以帮我忙将输入的十六进制颜色代码转换为 FLUX.1 Dev 已知的最相似的颜色名称&#xff08;来自预先测试的 155 个颜色名称&#xff09;。​ ​ 所以就…...

【magic-dash】01:magic-dash创建单页面应用及二次开发

文章目录 一、magic-dash是什么1.1 安装1.2 使用1.2.1 查看内置项目模板1.2.2 生成指定项目模板1.2.3 查看当前magic-dash版本1.2.4 查看命令说明1.2.5 内置模板列表二、创建虚拟环境并安装magic-dash三、magic-dash单页工具应用开发3.1 创建单页面项目3.1.1 使用命令行创建单页…...

ChatGPT等大语言模型与水文水资源、水环境领域的深度融合

聚焦GPT等大语言模型与水文水资源领域的深度融合&#xff0c;通过系统化内容与实践案例&#xff0c;讲解如何高效完成时间序列分析、空间数据处理、水文模型优化以及智能科学写作等任务。同时&#xff0c;展示AI在高级机器学习模型开发、资源优化算法编程与模型微调中的最新应用…...

机器学习连载

1 机器学习基础知识 机器学习&#xff08;Machine learning&#xff09;是人工智能的子集&#xff0c;是实现人工智能的一种途径&#xff0c;但并不是唯一的途径。它是一门专门研究计算机怎样模拟或实现人类的学习行为&#xff0c;以获取新的知识或技能&#xff0c;重新组织已…...

linux查看天气预报

wttr.in 是一个简单且功能强大的命令行天气查询工具&#xff0c;实现了命令行下查看天气的炫酷效果。 开源地址&#xff1a;GitHub - chubin/wttr.in: :partly_sunny: The right way to check the weather 一. 什么是 wttr.in&#xff1f; wttr.in 是一个基于 Web 的命令行天…...

​​高频通信与航天电子的材料革命:猎板PCB高端压合基材技术解析​​

—聚酰亚胺/陶瓷基板在5G与航天场景的产业化应用​​ ​​一、极端环境材料体系&#xff1a;突破温域与频率极限​​ ​​聚酰亚胺基板&#xff08;PI&#xff09;的航天级稳定性​​ 猎板在卫星通信PCB中采用真空层压工艺处理聚酰亚胺基材&#xff08;Dk≈10.2&#xff09;&a…...

【C语言】通用统计数据结构及其更新函数(最值、变化量、总和、平均数、方差等)

【C语言】通用统计数据结构及其更新函数&#xff08;最值、变化量、总和、平均数、方差等&#xff09; 更新以gitee为准&#xff1a; gitee 文章目录 通用统计数据结构更新函数附录&#xff1a;压缩字符串、大小端格式转换压缩字符串浮点数压缩Packed-ASCII字符串 大小端转换什…...

【Java微服务组件】分布式协调P4-一文打通Redisson:从API实战到分布式锁核心源码剖析

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 有很多很多不足的地方&#xff0c;欢迎评论交流&#xff0c;感谢您的阅读和评论&#x1f604;。 目录 引言Redisson基本信息Redisson网站 Redisson应用…...

vue3 + vite实现动态路由,并进行vuex持久化设计

在后台管理系统中&#xff0c;如何根据后端返回的接口&#xff0c;来动态的设计路由呢&#xff0c;今天一片文章带你们解 1、在vuex中设置一个方法 拿到完整的路由数据 const state {routerList: []}; const mutations { dynameicMenu(state, payload) {// 第一步 通过glob…...

创建一个纯直线组成的字体库

纯直线组成的字体&#xff0c;一个“却”由五组坐标点组成&#xff0c;存储5个点共占21字节&#xff0c;使用简单&#xff0c;只要画直线即可&#xff0c; “微软雅黑”&#xff0c;2个轮廓&#xff0c;55坐标点&#xff0c;使用复杂&#xff0c;还填充。 自创直线字体 “微软…...

Seed1.5-VL登顶,国产闭源模型弯道超车丨多模态模型5月最新榜单揭晓

随着图像、文本、语音、视频等多模态信息融合能力的持续增强&#xff0c;多模态大模型在感知理解、逻辑推理和内容生成等任务中的综合表现不断提升&#xff0c;正在展现出愈发接近人类的智能水平。多模态能力也正在从底层的感知理解&#xff0c;迈向具备认知、推理、决策能力的…...

从理论崩塌到新路径:捷克科学院APL Photonics论文重构涡旋光技术边界

理论预言 vs 实验挑战 光子轨道角动量&#xff08;Orbital Angular Momentum, OAM&#xff09;作为光场调控的新维度&#xff0c;曾被理论预言可突破传统拉曼散射的对称性限制——尤其是通过涡旋光&#xff08;如拉盖尔高斯光束&#xff09;激发晶体中常规手段无法探测的"…...

大模型安全测试报告:千问、GPT 全系列、豆包、Claude 表现优异,DeepSeek、Grok-3 与 Kimi 存在安全隐患

大模型安全测试报告&#xff1a;千问、GPT 全系列、豆包、Claude 表现优异&#xff0c;DeepSeek、Grok-3 与 Kimi 存在安全隐患 引言 随着生成式人工智能技术的快速演进&#xff0c;大语言模型&#xff08;LLM&#xff09;正在广泛应用于企业服务、政务系统、教育平台、金融风…...

厂区能源监控系统:网关赋能下的高效能源管理与环保监测

在现代工业生产领域&#xff0c;能源的有效利用与环境保护是企业实现可持续发展的两大关键要素。厂区能源监控系统借助先进的信息技术与自动化控制手段&#xff0c;对厂区内能源消耗及污水处理等核心环节展开实时监控与精细化管理。其中&#xff0c;御控网关作为系统关键枢纽&a…...

使用xdocreport导出word

之前java总用freemaker进行导出&#xff0c;但是改xml实在是太繁琐了&#xff0c;这次找了另一个工具进行体验. 一、简单导出 pom引入 <dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.core</arti…...