Sparse Convolution 讲解

文章目录

    • 1. 标准卷积与Sparse Conv对比
      • (1)普通卷积
      • (2) 稀疏卷积
      • (3) 改进的稀疏卷积(subm)
    • 2 Sparse Conv 官方API
    • 3. Sparse Conv 计算
      • 3. 1 Sparse Conv 计算流程
      • 3. 2 案例
        • 3.2.1 普通稀疏卷积
        • 3.2.2 subm模式的稀疏卷积

3D点云数据非常稀疏,尤其体素化处理后(比如200k的点放在1440 144041个格子中),大部分空间都没有数据,此时卷积的话基本上都是在卷空气。此时直接用标准卷积去处理数据,浪费大量的计算资源,所以对3D的点云,一般采用稀疏卷积,只对有数据的部分进行计算,从而大大提高卷积的效率。

稀疏卷积的计算和标准卷积的计算结果是一样的(SubMConv3d是有差异的),只不过稀疏卷积的对输入和输出的数据表达和标准卷积是不一样的,它通过一个feats(值)和indices(索引)来表达数据,并且只表达有值的部分,这种表示方式是一种稀疏化储存的表示方式。

1. 标准卷积与Sparse Conv对比

(1)普通卷积

在这里插入图片描述

图1:普通卷积

  • 普通卷积:利用卷积核在输入数据中滑动,对输入4x4的数据,利用3x3大小的kernel_size计算,得到4x4的输出

(2) 稀疏卷积

在这里插入图片描述

图2:稀疏卷积

稀疏卷积通过一个feats(值) 和indices(索引)来表达输入矩阵中的值(图1),并且只表达有值的部分。图1中输入tensor中有值的部分为:1,2,3 feats;对应的索引分别为(0,0),(1,1),(3,3)。可以看到,稀疏卷积(Sparse Conv)和标准卷积的计算结果是一样的,只不过表达形式不一样,稀疏卷积的结果只表达有值的部分,通过feats(值)和indices(索引)存储,这种表示方式就是一种稀疏化储存的方式。

为什么我们要用稀疏卷积呢?主要它可以实现在GPU运算时,在GPU block级别跳过一些值都是0的数据,这是因为点云是非常稀疏的,特别是将它体素化表达后,比如将20万个点放在(1440144041)个网格上,整体非常稀疏,很多空间都是0, 对于全是0的计算,是一种计算资源的浪费,而稀疏卷积就可以实现只在有值的位置进行计算(subm模式),值为0的地方在卷积的时候就跳过不计算。

(3) 改进的稀疏卷积(subm)

在这里插入图片描述

图2:subm模式的稀疏卷积
  • subm模式下的稀疏卷积是一个改进版的稀疏卷积,它和标准的稀疏卷积的区别是,标准的稀疏卷积普通的卷积计算结果是一样的,只是对结果稀疏表示。但subm模式的稀疏卷积,只在有值的地方做卷积计算
  • 比如上图中输入矩阵中有1,2,33个非0的值,此时在计算卷积的时候,会将卷积核中心对准有值的位置,然后计算卷积,经过subm卷积计算,输入有值的位置会有对应的计算结果,值为0的位置输出全是0。然后将结果稀疏表示为feats和indices。

总结

  • 标准的SparseConv卷积的次数和普通的卷积是一样的,只不过对输入和输出数据进行了稀疏化表达和存储。而subm模式下的稀疏卷积,只对输入tensor中有值的位置卷积,如果3个地方有值,则卷积3次,输出3个值。

  • 普通的稀疏卷积和标准卷积一样,输出的大小是和输入和卷积核大小相关的。而subm稀疏卷积,输入有3个地方有值,输出永远是3个值,也就是它的输出个数和输入中非零个数是一样的。

2 Sparse Conv 官方API

参考:https://github.de/traveller59/spconv/blob/master/docs/USAGE.md

import spconv.pytorch as spconv
from spconv.pytorch import functional as Fsp
from torch import nn
from spconv.pytorch.utils import PointToVoxel
from spconv.pytorch.hash import HashTable

在这里插入图片描述

3. Sparse Conv 计算

  • https://github.com/traveller59/spconv/blob/master/docs/USAGE.md
    在进行spconv(Sparse Conv)时,首先需要对lidar点云体素化,比如将lidar点映射到(1440 x 1440 x 41) 的网格上,接下来就可以对体素化后的lidar点云计算稀疏卷积。

3. 1 Sparse Conv 计算流程

(1) 点云体素化PointToVoxe

voxel generator in spconv generate indices inZYXorder, the params format are XYZ.
generated indices don't include batch axis, you need to add it by yourself.
see examples/voxel_gen.py for examples.

  • 利用PointToVoxel产生的indices,坐标顺序为ZYX,我们需要调整为XYZ
  • 产生的indices,没有batch维,需要我们自己添加一个batch_id
  • 体素化生成voxels(feats)和coords,用于后续稀疏卷积使用
  • 其中 官方提供的点云体素化案例如下:来自于USAGE.md
from spconv.pytorch.utils import PointToVoxel, gather_features_by_pc_voxel_id
# this generator generate ZYX indices.
gen = PointToVoxel(
    vsize_xyz=[0.1, 0.1, 0.1], 
    coors_range_xyz=[-80, -80, -2, 80, 80, 6], 
    num_point_features=3, 
    max_num_voxels=5000, 
    max_num_points_per_voxel=5)
pc = np.random.uniform(-10, 10, size=[1000, 3])
pc_th = torch.from_numpy(pc)
voxels, coords, num_points_per_voxel = gen(pc_th, empty_

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

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

相关文章

【算法篇】七大基于比较的排序算法精讲

目录 排序 1.直接插入排序 2.希尔排序 3.直接选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序 排序 排序算法的稳定性:假设在待排序的序列中,有多个相同的关键字,经过排序后,这些关键字的先后顺序不发生改变&#…

Spring项目问题—前后端交互:Method Not Allowed

问题 前后端交互时出现Method Not Allowed问题 Ajax中使用的是get,方法仍然出现post方法报错 Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method POST not supported] 浏览器中没有报错,只是接收不到后端返…

解锁数据潜力:OceanBase国产数据库学习不容错过的秘密!

介绍:OceanBase是一款由阿里巴巴和蚂蚁金服自主研发的通用分布式关系型数据库,它专为企业级应用而设计,具有金融级别的可靠性。以下是对OceanBase的详细介绍: 高可用性:OceanBase通过实现Paxos多数派协议和多副本特性&…

MySql入门教程--MySQL数据库基础操作

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

C语言从入门到熟悉------第四阶段

指针 地址和指针的概念 要明白什么是指针,必须先要弄清楚数据在内存中是如何存储的,又是如何被读取的。如果在程序中定义了一个变量,在对程序进行编译时,系统就会为这个变量分配内存单元。编译系统根据程序中定义的变量类型分配…

【滤波专题-第8篇】ICA降噪方法——类EMD联合ICA降噪及MATLAB代码实现(以VMD-ICA为例)

今天来介绍一种效果颇为不错的降噪方法。(针对高频白噪声) 上一篇文章我们讲到了FastICA方法。在现实世界的许多情况下,噪声往往接近高斯分布,而有用的信号(如语音、图像特征等)往往表现出非高斯的特性。F…

unity学习(60)——选择角色界面--MapHandler2-MapHandler.cs

1.新建一个脚本&#xff0c;里面有static变量loadingPlayerList using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Assets.Scripts.Model {internal class LoadData{public static List<Pl…

3D地图在BI大屏中的应用实践

前言 随着商业智能的不断发展&#xff0c;数据可视化已成为一项重要工具&#xff0c;有助于用户更好地理解数据和分析结果。其中&#xff0c;3D地图作为一种可视化工具&#xff0c;已经在BI大屏中得到了广泛地应用。 3D地图通过将地理信息与数据相结合&#xff0c;以更加直观…

【AI】用iOS的ML(机器学习)创建自己的AI App

用iOS的ML(机器学习)创建自己的AI App 目录 用iOS的ML(机器学习)创建自己的AI App机器学习如同迭代过程CoreML 的使用方法?软件要求硬件开始吧!!构建管道:设计和训练网络Keras 转 CoreML将模型集成到 Xcode 中结论推荐超级课程: Docker快速入门到精通Kubernetes入门到…

计算机网络——物理层(数据通信基础知识)

计算机网络——物理层&#xff08;1&#xff09; 物理层的基本概念数据通信的基本知识一些专业术语消息和数据信号码元 传输速率的两种表示方法带宽串行传输和并行传输同步传输和异步传输 信道基带信号调制常用编码方式 我们今天进入物理层的学习&#xff0c;如果还没有了解OSI…

Transformer代码从零解读【Pytorch官方版本】

文章目录 1、Transformer大致有3大应用2、Transformer的整体结构图3、如何处理batch-size句子长度不一致问题4、MultiHeadAttention&#xff08;多头注意力机制&#xff09;5、前馈神经网络6、Encoder中的输入masked7、完整代码补充知识&#xff1a; 1、Transformer大致有3大应…

C++ 入门篇

目录 1、了解C 2、C关键字 2、命名空间 2.1 命名空间的定义 2.2 命名空间的使用 3. C输入与输出 4.缺省参数 4.1 缺省参数的概念 4.2 缺省参数的分类 5. 函数重载 5.1 函数重载的概念 5.2 C中支持函数重载的原理--名字修饰 6. 引用 6.1 引用概念 6.2 引用…

Docker 系列2【docker安装mysql】【开启远程连接】

文章目录 前言开始步骤1.增加mysql挂载目录2.下载镜像2.启动容器具体步骤4.无法连接5.测试连接 总结 前言 本文开始&#xff0c;默认已经安装docker&#xff0c;如果你还没有完成这个步骤&#xff0c;请查看这一篇文章【docker安装与使用】 开始步骤 1.增加mysql挂载目录 m…

网络原理(1)——UDP协议

目录 一、应用层 举个例子&#xff1a;点外卖 约定数据格式简单粗暴的例子 客户端和服务器的交互&#xff1a; 序列化和返序列化 xml、json、protobuffer 1、xml 2、json 3、protobuffer 二、传输层 端口 端口号范围划分 认识知名的端口号 三、UDP协议 端口 U…

宜搭faas服务器报错Network response was not OK

[error] https://api.dingtalk.com/v1.0/yida/forms/instances? fetch error Error: Network response was not OK 不出意外的话肯定是请求代码的某个部分出了问题&#xff1a;其中formInstanceId和updateFormDataJson是业务的内容 我检查过是没问题的。appType和systemToken…

面试经典-MySQL篇

一、MySQL组成 MySQL数据库的连接池&#xff1a;由一个线程来监听一个连接上请求以及读取请求数据&#xff0c;解析出来一条我们发送过去的SQL语句SQL接口&#xff1a;负责处理接收到的SQL语句查询解析器&#xff1a;让MySQL能看懂SQL语句查询优化器&#xff1a;选择最优的查询…

【C#】【SAP2000】读取SAP2000中所有Frame对象在指定工况的温度荷载值到Grasshopper中

if (build true) {// 连接到正在运行的 SAP2000// 使用 COM 接口获取 SAP2000 的 API 对象cOAPI mySapObject (cOAPI)System.Runtime.InteropServices.Marshal.GetActiveObject("CSI.SAP2000.API.SapObject");// 获取 SAP2000 模型对象cSapModel mySapModel mySap…

Vue 项目安装依赖提示core-js版本低的处理办法

core-js2.6.12: core-js<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js3. 我是下载一个老的项目&#xff0c;npm install之后提示上面的错误&#xff1b;本…

Linux——ELK日志分析系统

实验环境 虚拟机三台CentOS 7.9&#xff0c; 组件包 elasticsearch-5.5.0.rpm elasticsearch-head.tar.gz node-v8.2.1.tar.gz phantomjs-2.1.1-linux-x86_64.tar.bz2 logstash-5.5.1.rpm kibana-5.5.1-x86_64.rpm 初始…

分享一下自己总结的7万多字java面试笔记和一些面试视频,简历啥的,已大厂上岸

分享一下自己总结的7万多字java面试笔记和一些面试视频&#xff0c;简历啥的&#xff0c;已大厂上岸 自己总结的面试简历资料&#xff1a;https://pan.quark.cn/s/8b602fe53b58 文章目录 SSMspringspring 的优点&#xff1f;IoC和AOP的理解**Bean 的生命周期****列举一些重要…