稀疏卷积计算

缝合一下几篇post

Posted by tianchen on June 24, 2022

3D稀疏卷积流程

  • 输入 Sparse Voxel形式:
    • Coordinates: [N,3]
    • Input Voxel Idx: [0,1…,N]
    • Feature: [N,C]
    • Kernel Feature: [3x3x3,C_in,C_out]
  • Input Sparse Map可以由上述推得(但是不显示存储),Output Sparse Map有2种形式
    • SparseConv: 存在非稀疏度的扩张(输入只有一个中心点有feature,但是输出的时候以它为中心的3x3x3都有feature)
    • Submanifold: 与input sparse map一致
  1. 构建Input-Output Coord之间的Hash Mapping
    • (对于submanifold,这个mapping是一一映射,所以不需要构建hash table)
    • 如上图中,两个输入点,分别输出扩张到4个和6个位置,构建一个hash map将这些部分映射到输出的9个位置(2d 3x3一共有这么多输出可能点)

  1. 构建Rulebook(Kernel Offset -> (input voxel id, output voxel id)的mapping)
    • 这一过程类似2d conv之间的im2col,本质上是把输入的kenerl给unroll了,loop的最外层是kernel offset(3x3x3)
    • 对上一步建立的input output coord mapping计算kernel offset
    • 并且对kernel offset为query建立hash map

  1. 构建好Rulebook之后的整体的计算flow


Reference