pointpillars代码阅读----稀疏卷积篇

Brief

最近在很多文献中都看到有稀疏卷积和流行卷积的形式,如下图的来自商汤和港科大的Part-A2 Net(19arxiv),这里的u-net实际上的绿色框表示的是submanifold卷积层,蓝色框表示的是稀疏上采样层,而黄色表示的是稀疏卷积层。
pointpillars代码阅读----稀疏卷积篇_第1张图片

在代码中如何使用

作者首先是定义一个block:每一个的block实际上是两层的sub加上一层的sp,如下:

				SubMConv3d(num_input_features, 128, 3, indice_key="subm0"),
                BatchNorm1d(128),
                nn.ReLU(),
                SubMConv3d(128, 128, 3, indice_key="subm0"),
                BatchNorm1d(128),
                nn.ReLU(),
                SpConv3d(128, 64, 3, 2,
                         padding=1),  # [41,1280,1056]→[21,640,528]
                BatchNorm1d(64),
                nn.ReLU(),

运行过程

参考我的上一篇文章,这里就不细说的。

要怎么用

这才是真正我们关心的问题,实际上SECOND作者已经把稀疏卷积写的非常容易读了,整个过程也就是从构建哈希表,到卷积,再到构建输出哈希表,最后输出,在源码中都是很容易的。
我们只需要理解作者的这个稀疏卷积的结构体,就很清晰了。
一个sparse_tensor实际上包括了以下的几个主要的tensor。

包含内容 shape 含义
features [non_empty,channel] 非空的特征,这是进行卷积的特征
indices [non_empty,4] 非空向量的索引
batch_size int

最主要的内容也就是上面的几个字段,剩下的不多做介绍

那么怎么用呢
实际上就和一般的CNN一样使用,把features嵌入到sparse tensor中,然后再送入到作者写的结构中就行了,如果自己搭建了3D稀疏网络,切记自己搭建的部分要自己写forward的话不能采用sparce seq。因为作者在报错中会把自己通过稀疏卷积搭建的架构认定为是结构错误。

你可能感兴趣的:(深度学习-点云基础网路-分类)