中山网站建设华联在线,安庆建设机械网站,谷歌sem推广,wordpress游客发帖插件1.Sparse Conv 的核心思想#xff08;非常重要#xff09;Sparse conv 并不是“数学上的新卷积”#xff0c;而是 数据结构 调度方式 变了。关键变化只有两点#xff1a;1️⃣ 不再用 dense tensor#xff0c;而是用「稀疏表示」典型表示方式#xff1a;features: [N, C…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 tensor2️⃣ 卷积时只对“活跃 voxel”计算对每个非空 voxel枚举 kernel offset如 3×3×3查找邻居 voxel 是否存在存在 → 参与计算不存在 →直接跳过本质上就是hash table / coordinate map gather/scatter2. 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) (x1, y, z)在物理空间中相差 0.2m所以x1 物理空间向某个方向移动一个 voxely1 正交方向移动z1 高度方向移动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×3offsets { (-1,-1,-1), ... ( 1, 1, 1) }这是卷积的“邻域定义”。③ 构建 indice pairs核心对每个 active voxelfor each offset: neighbor (zdz, ydy, xdx) if neighbor 在 hash_map 中: 记录 (input_id, output_id)最终得到pairs[k] [ (in_id1, out_id7), (in_id5, out_id2), ... ]这一步完成稀疏邻居关系构建④ 真正的卷积计算对于每个 kernel offset kout[out_ids] W[k] in[in_ids]实现方式gather → matmul → scatter_add这就是 sparse conv 的全部数学计算。