PointNet++改进策略 :模块改进 | SWA| PVT,融入Transformer的点云与体素的模块同时提升模型精度和效率

news2024/12/23 15:55:08

目录

    • 介绍
    • PVT原理
      • PVT的核心思想和结构
      • PVT模块结构
      • 体素分支
      • 点分支
    • 代码实现

Pasted image 20240911104414

  • 论文题目:PVT: Point-Voxel Transformer for Point Cloud Learning
  • 发布期刊:International Journal of Intelligent Systems
  • 通讯地址:杭州电子科技大学&伦敦大学学院
  • 代码地址:https://github.com/HaochengWan/PVT

介绍

这篇论文的主要内容是提出了一种新的点云学习架构,名为点体素变换器(Point-Voxel Transformer, PVT)。PVT结合了基于点的方法和基于体素的方法的优点,通过引入稀疏窗口注意力(Sparse Window Attention, SWA)模块,能够高效地从3D数据中捕获有用的特征。

论文的主要贡献包括:

  1. 提出PVT架构:这是第一个将基于点和基于体素的网络优势深度结合的Transformer方法。
  2. 引入稀疏窗口注意力(SWA)模块:该模块实现了与输入体素分辨率线性相关的计算复杂度,同时避开了空体素的无效计算。
  3. 实验验证了PVT的有效性:在多种点云学习任务(如分类和语义分割)上,PVT显示出了竞争力,并实现了相较于其他基于变换器模型10倍的推理速度提升。

PVT原理

Point-Voxel Transformer (PVT) 是一种用于点云学习的新型神经网络架构。它结合了基于点(point-based)和基于体素(voxel-based)的方法的优点,旨在提高点云数据处理的效率和性能。

PVT的核心思想和结构

  1. 结合点和体素的优势

    • 基于点的方法:直接在点云数据上进行操作,可以保留每个点的精确位置和细节信息,但是计算代价较高,尤其是在处理大规模点云数据时。
    • 基于体素的方法:通过将点云数据转换为规则的三维网格(体素),使用3D卷积神经网络进行特征提取。这种方法计算效率高,但在体素化过程中会丢失细粒度的位置信息。

    PVT 通过融合这两种方法的优势,既保持了高效的计算性能,又保留了点云的精确位置信息。

  2. 稀疏窗口注意力模块(Sparse Window Attention, SWA)

    • PVT引入了一个新的模块——稀疏窗口注意力(SWA),它能够在非空体素内局部聚合特征,避免了对空体素的无效计算,从而降低了计算复杂度。SWA的计算复杂度与体素分辨率线性相关,而不是传统方法的平方复杂度。
      Pasted image 20240911094501
图 稀疏窗口注意力模块(Sparse Window Attention, SWA)
  1. 双分支架构
    • 体素分支(Voxel Branch):负责从体素空间中聚合局部特征。体素分支使用SWA模块在体素网格内进行局部注意力计算,从而高效地提取局部特征。
    • 点分支(Point Branch):直接在点云数据上执行自注意力(self-attention)计算,捕获全局特征。该分支使用了两种不同的自注意力变体来处理不同尺度的点云数据:一种是相对注意力(Relative Attention, RA),用于小规模点云;另一种是外部注意力(External Attention, EA),用于大规模点云。

PVT模块结构

Pasted image 20240911094721

  1. 输入点云数据:将原始点云数据输入网络。
  2. 体素分支处理
    • 将点云数据体素化,形成稀疏体素结构。
    • 使用稀疏窗口注意力(SWA)在局部体素窗口中计算局部特征。
    • 应用循环窗口机制以增强跨窗口的信息交互。
    • 将体素特征解体素化,映射回点空间。
  3. 点分支处理
    • 根据点云数据规模,使用相对注意力(RA)或外部注意力(EA)计算全局特征。
  4. 特征融合
    • 将体素分支的局部特征和点分支的全局特征相加,得到融合的特征表示。
  5. 输出:根据任务(如点云分类或语义分割)生成最终的结果。

体素分支

  • 目的:用于提取点云数据的局部特征。
  • 体素化(Voxelization)
    • 将点云数据 PPP 转换为规则的三维网格或体素格式。每个体素包含一个或多个点,并生成一个稀疏体素结构表示。
  • 稀疏窗口注意力模块(Sparse Window Attention, SWA)
    • PVT引入了一个新的模块——稀疏窗口注意力(SWA),它能够在非空体素内局部聚合特征,避免了对空体素的无效计算,从而降低了计算复杂度。SWA的计算复杂度与体素分辨率线性相关,而不是传统方法的平方复杂度。
  • 循环窗口机制(Shifted Window Mechanism)
    • 使用循环窗口方法跨窗口聚合信息,这样能够在多个非重叠窗口之间进行信息交换,进一步提高特征提取的有效性和模型的感受野。
  • 解体素化(Devoxelization)
    • 将聚合后的体素特征映射回原始点云的特征空间,得到体素分支提取的局部特征。

点分支

  • 目的:用于提取点云数据的全局特征。
  • 相对注意力(Relative Attention, RA)
    • 适用于小规模点云数据。通过在点云数据上直接计算自注意力,同时引入相对位置表示(Relative Position Representations, RPR),使得模型在处理刚性变换时具有更好的鲁棒性。
  • 外部注意力(External Attention, EA)
    • 适用于大规模点云数据。EA是一种线性注意力机制,通过使用两个小型可学习的共享存储单元,以避免平方复杂度(O(N^2)),使其更适合大规模点云数据的处理。

代码实现

下面是实现PVT模块的具体细节,详细可以参照github中的代码

class PVTConv(nn.Module):
    def __init__(self, in_channels, out_channels, kernel_size, resolution, normalize=True, eps=0):
        super().__init__()
        # 初始化输入和输出通道、卷积核大小、分辨率、归一化参数
        self.in_channels = in_channels  # 输入特征的通道数
        self.out_channels = out_channels  # 输出特征的通道数
        self.kernel_size = kernel_size  # 卷积核大小
        self.resolution = resolution  # 体素分辨率
        self.boxsize = 3  # 体素化窗口大小
        self.mlp_dims = out_channels  # MLP的输出维度
        self.drop_path1 = 0.1  # Dropout路径1的比例
        self.drop_path2 = 0.2  # Dropout路径2的比例
        
        # 体素化模块,用于将点云数据转换为体素网格
        self.voxelization = Voxelization(resolution, normalize=normalize, eps=eps)
        # 体素编码器模块,用于编码体素化后的特征
        self.voxel_encoder = VoxelEncoder(in_channels, out_channels, kernel_size, resolution, self.boxsize,
                                          self.mlp_dims, self.drop_path1, self.drop_path2)
        # 3D注意力模块,用于增强体素特征
        self.SE = SE3d(out_channels)
        # 共享变换器模块,用于在点特征中引入全局上下文信息
        self.point_features = SharedTransformer(in_channels, out_channels)

    def forward(self, inputs):
        # 输入包括原始特征(features)和点的坐标(coords)
        features, coords = inputs

        # 将输入特征进行体素化,得到体素特征(voxel_features)和对应的体素坐标(voxel_coords)
        voxel_features, voxel_coords = self.voxelization(features, coords)
        
        # 对体素特征进行编码,通过体素编码器提取特征
        voxel_features = self.voxel_encoder(voxel_features)
        # 通过3D注意力模块增强体素特征
        voxel_features = self.SE(voxel_features)
        # 对体素特征进行反体素化操作,将其映射回点云特征空间
        voxel_features = F.trilinear_devoxelize(voxel_features, voxel_coords, self.resolution, self.training)
        
        # 计算相对位置,用于相对注意力计算
        pos = coords.permute(0, 2, 1)  # 将点的坐标从(B, N, 3)转换为(B, 3, N)的形状
        rel_pos = pos[:, :, None, :] - pos[:, None, :, :]  # 计算相对位置矩阵
        rel_pos = rel_pos.sum(dim=-1)  # 计算相对位置的总和
        
        # 将体素特征和点特征融合,得到最终的融合特征
        fused_features = voxel_features + self.point_features(features, rel_pos)
        # 返回融合后的特征和原始点的坐标
        return fused_features, coords

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

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

相关文章

善于善行——贵金属回收

在当今社会,贵金属回收已成为一项日益重要的产业。随 着科技的不断进步和人们对资源可持续利用的认识逐渐提高,贵金属回收的现状也备受关注。 目前,贵金属回收市场呈现出蓬勃发展的态势。一方面,贵金属如金、银、铂、钯等在众多领…

【C语言】结构体超详细全讲解 (代码+万字文字+画图讲解)

目录 1.什么是结构体类型 2.结构体变量的创建 3.结构体变量的初始化 4.结构体的特殊声明 5.typedef重定义结构体变量(两种方式) 6.结构体自引用 7.创建结构体指针变量 8.结构体内容的访问 8.1直接访问: 8.2 结构体指针访问 9.结构体内…

IPD推行成功的核心要素(二十二)IPD流程持续优化性地推出具备商业成功潜力的产品与解决方案

产品开发是非常复杂的。随着创新环境的快速发展,大部分研发型企业普遍会面临着这些核心问题:如何快速响应市场的变化?如何推出更有竞争力的产品?如何在竞争中脱颖而出?因此,往往随着企业的规模化发展&#…

深度优先搜索(DFS)在图的运行过程

深度优先搜索(DFS)在图的运行过程 深度优先搜索算法(DFS)C语言实现运行DFS并记录结果节点发现时间和完成时间:图a是一个有向图,为了清晰起见,我们首先假设图a的具体结构如下(节点和边的集合): 图a: 节点集合: {A, B, C, D, E, F} 边集合: {(A, B), (A, C), (B, D),…

带你了解Android Jetpack库中的依赖注入框架:Hilt

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 Hilt概述 Hilt是Google推出的一种用于Android的依赖注入(Dependency Injection,DI)框架,构建于…

Java 学习中使用文件、网络连接等资源时,未正确关闭资源,导致资源泄漏应该怎么办?

在Java编程中,处理文件、网络连接、数据库连接等资源时,如果没有正确关闭资源,就会发生资源泄漏。资源泄漏会导致系统性能下降、内存占用增加,甚至可能导致程序崩溃,特别是在高负载的系统中。 一、什么是资源泄漏&…

【C+继承】

继承 1.继承的概念及定义2.基类和派生类对象赋值转换3.继承中的作用域4.派生类的默认成员函数5.继承与友元6.继承与静态成员7.复杂的菱形继承及菱形虚拟继承8.继承的总结和反思 1.继承的概念及定义 ->继承的概念 继承的本质:就是继承的父类的成员 ->继承的…

《哈利波特:魔法觉醒》仅16个月欧美停服,引来“阴谋论”

易采游戏网9月11日消息:2022年,当网易宣布将与华纳兄弟合作推出《哈利波特:魔法觉醒》时,全球玩家一片欢腾。不仅在中国市场掀起了一股狂潮,也迅速进入了欧美市场,吸引了无数哈迷和卡牌游戏爱好者。令人始料…

vue+el-table 可输入表格使用上下键进行input框切换

使用上下键进行完工数量这一列的切换 <el-table :data"form.detailList" selection-change"handleChildSelection" ref"bChangeOrderChild" max-height"500"><!-- <el-table-column type"selection" width&quo…

视频融合共享平台LntonAIServer视频分析平台噪声监测优势

LntonAIServer的视频质量诊断功能中的噪声检测是一项关键技术&#xff0c;旨在帮助用户及时发现并解决视频流中的噪声问题&#xff0c;确保视频监控系统的稳定性和可靠性。 在视频监控系统中&#xff0c;噪声问题常常影响到视频画面的清晰度和可用性。噪声可能由多种因素引起&a…

基于SpringBoot+Vue的考研学习分享互助平台

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的考研学习…

仕考网:省考面试流程介绍,提前了解

省考面试流程介绍&#xff0c;一文带大家了解! 一、面试登记及抽签 考生通常需要提前10至30分钟到达指定地点进行登记。 考试工作人员核对考生身份证和面试通知书等相关证件后&#xff0c;进行抽签确定分组和进场顺序。 二、候考阶段 考生完成抽签后进入候考区等待考试。在…

空气开关跳闸的原因及解决办法

空气开关&#xff08;也称为断路器或空气断路器&#xff09;跳闸通常是因为电路中的某些问题导致的。下面是一些常见的原因及解决办法&#xff1a; 1. 过载 原因&#xff1a;当电路中的电流超过空气开关的额定值时&#xff0c;会导致过载保护动作&#xff0c;使空气开关跳闸。…

银行安全用电典型产品解决方案介绍-安科瑞-叶西平

应用背景 银行作为国家重要部门&#xff0c;是国家经济建设的中枢&#xff0c;也是消防的重点单位。用电安全是银行安全保卫工作 的一个重要环节。银行安保设施、数据中心、自助设施、办公设备等能耗单元对用电的连续性、稳定性和安 全性要求非常高&#xff0c;实时监测线路及…

一文理解单点登录与联合登录

img 如今&#xff0c;许多组织都有大量需要每天进行身份验证的应用程序。用户使用传统意义上的凭据在应用程序进行身份验证时容易遭到社会工程学攻击以及信息泄露风险。 单点登录验证&#xff08;Single Sign-On&#xff09; 单点登录身份验证&#xff0c;无论是内部还是外部…

【LabVIEW学习篇 - 24】:生产者/消费者设计模式

文章目录 生产者/消费者设计模式案例&#xff1a;控制LED等亮灭 生产者/消费者设计模式 生产者/消费者是多线程编程中最基本的一种模式&#xff0c;使用非常普遍。从软件角度看&#xff0c;生产者就是数据的提供方&#xff0c;而消费者就是数据的消费处理方&#xff0c;二者之…

基于51单片机的输液滴速吊瓶控制器proteus仿真

地址&#xff1a; https://pan.baidu.com/s/1fbDdoppvtVdg19H3qI9Vzg 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectro…

中国信通院:《大模型落地路线图研究报告(2024年)》(附下载)

前言 近日&#xff0c;中国信息通信研究院&#xff08;简称“中国信通院”&#xff09;发布《大模型落地路线图研究报告&#xff08;2024年&#xff09;》。 本报告重点梳理了大模型应用落地遵循的诊断、建设、应用、管理四个重要阶段&#xff0c;归纳总结出能力分析、需求挖…

手撕Python之正则

1.正则和re模块的联系 正则表达式是一种通用的用来简洁表达一组字符串的表达式&#xff0c;利用正则表达式可以方便快捷的匹配和筛选字符串 举个例子&#xff1a;在一堆数据中进行电话号码的寻找&#xff0c;我们需要根据电话号码的特征在这一堆数据进行电话的寻找&#xff0…

Oracle 12c 及以上版本补丁更新说明及下载方法

参考下面的文章&#xff0c;会对补丁更新的流程有一定的了解。 https://www.modb.pro/db/27255 RU&#xff08;Release Updates&#xff09;是每一个季度的版本升级。包括&#xff1a; 最新的BUG修复最新的安全漏洞补丁最新添加的功能 以19c为例&#xff0c;对应的升级版本升…