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

SparseConv原理

1.Sparse Conv 的核心思想(非常重要)

Sparse conv 并不是“数学上的新卷积”,而是数据结构 + 调度方式变了。

关键变化只有两点:

1️⃣ 不再用 dense tensor,而是用「稀疏表示」

典型表示方式:

features: [N, C] # 只有 N 个非空 voxel indices: [N, 4] # (batch_id, z, y, x)

而不是:

[B, C, Z, Y, X] # 巨大的 dense tensor

2️⃣ 卷积时,只对“活跃 voxel”计算

对每个非空 voxel

  • 枚举 kernel offset(如 3×3×3)

  • 查找邻居 voxel 是否存在

  • 存在 → 参与计算

  • 不存在 →直接跳过

本质上就是:

hash table / coordinate map + gather/scatter

2. Voxel表达方式的理解

只保留了N个有点云的Voxel,所以Voxel是稀疏的比较好理解,比较疑惑的是:

indices: [N, 4],是如何表达邻居关系的?

indices是非空 voxel 的网格索引

indices: [N, 4] (batch_id, z, y, x)

这里的z, y, x

  • 不是原始点云坐标

  • 不是连续物理坐标

  • voxel grid 的离散整数索引

也就是说:

(x_index, y_index, z_index) = floor((point_xyz - min_range) / voxel_size)

例如:

voxel_size = 0.2m min_x = -40m 物理 x = -39.6m → x_index = floor(( -39.6 - (-40) ) / 0.2) → x_index = 2

所以:

✅ 它是“物理空间离散化后的坐标”


它能表达前后左右关系吗?

答案是:

✅ 能表达
❌ 但只是“栅格级别”的表达


为什么能表达?

因为 voxel grid 是规则网格。

假设:

voxel_size = 0.2m

那么:

(x, y, z) (x+1, y, z)

在物理空间中:相差 0.2m

所以:

  • x+1 = 物理空间向某个方向移动一个 voxel

  • y+1 = 正交方向移动

  • z+1 = 高度方向移动

Sparse Conv 的本质

在规则 voxel 网格上
只对 active voxel 进行卷积
用“坐标查找”代替 dense 扫描。

现在假设你已经有:

features: [N, C] indices: [N, 4] # (b, z, y, x) spatial_shape = [Z, Y, X]

我们用最精简 + 工程视角讲清楚Sparse Conv 到底做了什么。

具体做法(4步)


① 建立坐标哈希表

把所有 active voxel 放进 hash map:

(b, z, y, x) → feature_row_id

作用:

O(1) 判断某个 voxel 是否存在


② 枚举 kernel offset

例如 3×3×3:

offsets = { (-1,-1,-1), ... ( 1, 1, 1) }

这是卷积的“邻域定义”。


③ 构建 indice pairs(核心)

对每个 active voxel:

for each offset: neighbor = (z+dz, y+dy, x+dx) if neighbor 在 hash_map 中: 记录 (input_id, output_id)

最终得到:

pairs[k] = [ (in_id1, out_id7), (in_id5, out_id2), ... ]

这一步完成:

稀疏邻居关系构建


④ 真正的卷积计算

对于每个 kernel offset k:

out[out_ids] += W[k] @ in[in_ids]

实现方式:

gather → matmul → scatter_add

这就是 sparse conv 的全部数学计算。

http://www.jsqmd.com/news/421806/

相关文章:

  • GDKOI J 幸福指数 补题记录
  • 玩转西门子S7-1200:从零到实战的硬核指南
  • Mise 是一种好软件
  • 2026年北京发电机租赁推荐厂家:大型发电机、静音发电机、柴油发电机、发电车、UPS应急电源 - 海棠依旧大
  • SimuRTS提供完整HIL测试解决方案!
  • Flutter 真机 Debug 报 VM Service 连接失败(Android / iOS 通用)— 代理环境变量导致
  • 体验凯云SimuRTS+研华HIL实时机,助力项目快速落地
  • 解决MI50在Ollama0.17.4无法运行最新的Qwen3.5模型的问题
  • 国产IDE产品生态全景图
  • 打造飞机 “神经中枢” 的可靠性基石
  • 2/28
  • JAVA运算符有优先级?
  • 探索大数据领域Kafka的分区与副本策略
  • TPG型多工位(模拟)弹簧疲劳试验机
  • 高效稳定24V 3A开关电源方案:原理图、PCB设计、变压器规格书及适合T1-2电源应用
  • Web前端面试结束,一下子收到2个offer...
  • AI原生应用与业务流程增强的协同发展策略
  • 三元运算符
  • js中,什么是快速排序(Quick Sort)
  • fs文件系统模块
  • Azure DevOps:移除TFVC中过时的签入策略
  • 前端组件库开发实践:从零到发布
  • 滚动锁定:用户向上翻看历史时,如何阻止 AI 新消息把它“顶”下去?
  • 深度测评:哪个执业医师课程通过率最高? - 医考机构品牌测评专家
  • 2011-2024年各省、地级市公众环境关注度数据
  • 开源一个 React 股票 K 线图组件,传个股票代码就能画图
  • 为什么我就想要「线性历史 + Signed Commits」,GitHub 却把我当猴耍 ️
  • 2026.2.28 模拟赛
  • 基于C-V2X的协同感知、协同预测与协同规划:标准、现状与未来展望
  • 7. STL简介