留个笔记自用
SpSequenceNet: Semantic Segmentation Network on 4D Point Clouds
做什么
Semantic Segmentation
目标检测( Object detection)不仅需要提供图像中物体的类别,还需要提供物体的位置(bounding box)。语义分割( Semantic segmentation)需要预测出输入图像的每一个像素点属于哪一类的标签。实例分割( instance segmentation)在语义分割的基础上,还需要区分出同一类不同的个体。
做了什么
4D点云,也就是3D点云视频上进行分割,其实还是将视频分帧,各帧来进行操作
怎么做
首先是输入,这里将点云中点的坐标(x,y,z)和点特征fi,t作为模型的输入,点云视频有n帧,每帧记录为Pt,t∈n,第t帧的点云图有mt个点,每个点pi,t={xi,t,yi,t,zi,t}三维坐标。这里采用的是基于voxel的做法,也就是将空间分grid,所以x,y,z三维均会作一个投影至新的x’,y’,z’三维点,代表了空间中grid的位置,fi,t就是voxel的feature value。所以整个分割问题就转化成了给定的pi,t点它的标签li,t
这里的输入是包含了前后两帧,这里假设是Pt-1和Pt帧,输出的是Pt帧的语义标签图,黄色是基本的神经网络块,是一个基本的三维残差网络,灰色是一个Cross-frame Global Attention(CGA)跨帧全局关注模块,红色是 Cross-frame Local Interpolation(CLI)跨帧局部插值模块,蓝色块是decoder解码器部分
这里整体的结构是遵循了Unet那样的风格实现的,但将卷积改变成了一个新的卷积方式Submanifold Sparse Convolution Network(SSCN)常用的卷积操作适用于紧密排列的数据,如图像、视频等;对于稀疏的数据,如激光雷达获取的点云,原来的卷积操作表现并不是那么好,所以使用空间稀疏卷积网络(SSCN)以处理稀疏的数据。
这里举一个例子,上图的输入是一个手写数字识别的例子,作者把上图表示出来的问题叫做“submanifold” dilation 问题 ,可以看到原始数据是非常sparse的,但是用了传统卷积之后,稀疏性很快就消失了。
这里为了理解稀疏卷积的意思,查了一个大佬的解释
简单来说就是,稀疏卷积与常规卷积的区别在于,稀疏卷积将ground state site特征维度值置为0,之后的卷积忽略0输入的site。
简单来说就是,首先pad保证经过卷积之后的数据大小与输入保持一致。规定仅当输出site对应感受野中心site为activate时,该输出site为activate。
传统卷积:卷积核遍历矩阵所有点输入。SC:在传统卷积的基础上,只对输入a个输入为activate的site进行计算;VSC:在SC的基础上,只保留active site位于感受野中心的计算。
这样就能保证数据的稀疏性仍然存在,因为卷积核不会计算非activate的位置而影响数据稀疏性
然后整体结构就剩下两个独立设计的模块,CGA和CLI
首先先是CGA,这个模块的作用是为了获取时间内上面的全局语义,通过t-1时刻的attention来对当前时刻进行mask
这里的fi,j,t-1是上一帧的feature,mt-1的意思是上一帧点云中点的总数,gj是网络中特定的一个适配器的功能,简单来说就是将feature转换成attention,在这里是用2个(1,1,1)的3D卷积和3D relu和3D BN组成
然后就可以得到
Ft是当前帧点云的feature input,得到的Ft‘就是上一帧的feature转换的attention做mask之后的特征
然后是第二个模块。CLI模块
这里是用于局部合并信息并获取两个点云帧之间的时间信息
第一步,先是定义了一个距离Dt-1,t
这里的C是由点坐标组成的矩阵,γ是超参数,这个D的意思就是模拟了欧氏距离的计算方法,计算t-1时刻中点和t时刻点的距离矩阵(注意这里使用的C内的坐标是feature)
得到D后就能取top K个最近的特征点来代表一个区域feature,这里还为每个点定义了一个权重
α和β都是参数,用于调整w的,di,j,t,t-1的意思就是Dt-1,t矩阵中位置(i,j)的值,其实也就是t-1和t次中第i个点和第j个点的距离,使用一个最小化操作使其不存在负值的权重。
理解一下这里设定这个权重的意义,就是为了给点pi,t-1做一个attention
最后就可以根据这个权重结合当前feature来得到更新后的feature
最后还是执行了一次concat操作结合原来的特征,再经过一个残差得到最后的结果
总结
1.又学会了一个新的卷积SSCN,很给力,很香
2.其余的两个模块无非就是老一套,1.时序2.全局局部3.attention