赞
踩
本篇文章旨在将点云语义分割的复杂模型中的知识蒸馏到较轻量级的模型中。具体的实现方式为将原有的3D backbone网络的每一层进行裁剪,对每一层只保留原有通道数的一半,通过自监督蒸馏学习的方式,使得裁剪后的小模型依然能够达到原有的模型效果,提升模型的运行速度,更好地满足例如自动驾驶车辆的硬件限制。
由于点云数据的特殊性和局限性(例如离散性、无序性、密度不均匀),直接将传统的蒸馏方法应用到点云语义分割上很难取得好的效果,所以本文提出了一个新的知识蒸馏方法PVD,该模型在点(point)和体素(voxel)两种数据格式上将teacher中的隐藏知识蒸馏到student模型上
很容易注意到网络中的四个红色的箭头,这4个红色的箭头就代表着本文最重要的四个损失函数,首先看后面的两个损失,分别对应着体素和点的输出损失(KL散度),前面两个箭头代表着基于超体素而生成的超体素内部点亲和度和体素亲和度的2范数损失。下面说下网络结构,像介绍中所说,网络包含5个模块,第一个模块是多层感知机得到一个的特征图,在这个特征图上产生超体素内的point的亲和度蒸馏损失;第二个模块是体素化模块;第三个是3D卷积网络输出新的体素特征图,在这产生voxel的亲和度蒸馏损失;第四个模块是维度分解模块,该模块的作用是产生空间特征信息,将原本平面的信息转换成了包含半径、方位角、高度的空间特征信息,并在该模块后产生voxel的输出蒸馏损失;最后一个模块是由多层感知机组成的精炼模块用于产生pointwise 的类别输出,最后生成point的蒸馏损失
体素和点的输出损失公式如下,point的损失很好理解,这里的voxel的损失与传统的不同,它包含了半径、方位角、高度和类别通道的信息
本文的核心还是在空间结构信息的学习,也就是超体素内的亲和度蒸馏:
将点云数据体素化后,对得到体素点云进行超体素划分,每个超体素大小为Rs x As x Hs.
为了能够更多地选择特殊的区域(小样本的区域、稀疏区域等),本文设计了一个困难意识采样机制使得模型在选择超体素进行模型蒸馏训练时,能够更多地选择这些特殊区域的超体素从而提高模型的性能。在点云中为每一个超体素赋权重,其权重计算方式如下:
这里的是超体素到点云中心的距离,R是半径,是超体素内体素的数量
是指包含小样本的体素数量
为了保持计算的一致性(点云的不同区域和不同的点云会造成超体素内部点数量和体素数量不均衡),首先在超体素内选取个点和个体素,多出的从点数量较多的类别中删去,少的则直接补0特征向量。计算超体素内的亲和矩阵,以point为例,voxel的与之类似:
基于超体素内的亲和矩阵进行空间结构信息蒸馏,损失如下:
最终的优化目标
后面4个损失在前文已经介绍了,最前面两个损失分别是基于点的和基于体素的加权交叉熵损失,其是为了保证类别多样性,防止有的类别为空。lovasz损失是语义分割中十分常见的损失,其与普通的交叉熵损失相比会注重类别的不均衡性,在优化MIOU指标上会比普通的交叉熵损失更有效果
Point-to-Voxel Knowledge Distillation for LiDAR Semantic Segmentation
Point-to-Voxel Knowledge Distillation for LiDAR Semantic Segmentation 论文阅读CVPR2022-CSDN博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。