3D点云学习:SA-SSD①

0.序言

硕士阶段开始接触基于深度学习的自动驾驶课题,主要研究方向是基于激光雷达的环境感知。目前环境感知的结果包括:语义分割,目标识别和目标跟踪。在这里记录一下自己看过的论文,用的时候可以方便的找到。

1.论文简介

源码链接: https://github.com/skyhehe123/SA-SSD.
论文链接: https://www4.comp.polyu.edu.hk/~cslzhang/paper/SA-SSD.pdf.
SA-SSD这是一篇来自 港理工和阿里达摩院的合作文章。投出了一种基于single-stage的,voxel-based的3D点云目标识别算法,算法的输入只有点云,而不包括图像。其中主要的创新点包括:

auxiliary network

SA-SSD算法的输出结果是3D目标识别框,但在训练时,作者引入了辅助网络auxiliary network,对3D点云的语义分割结果和中心点预测结果进行训练,并对目标识别网络和语义分割网络的共同部分backbone network进行优化。在test及infer时,auxiliary network没有被执行。
3D点云学习:SA-SSD①_第1张图片

PS Warp

在进行3D目标识别任务时,bbox和cls的误差计算是分别进行的,因此会导致the misalignment between the predicted bounding boxes and orresponding confidence maps问题,也就是框与分类结果不匹配。作者设计了一个PSWarphead(part-sensetive)环节。

3D点云学习:SA-SSD①_第2张图片由于笔者还是个理论小白,这部分理解比较困难。在论文中,作者主要是将PSWarping部分与PSRoIAlign算法进行了比较,因此从理解PSRoIAlign开始。
PSRoIAlign:
参考博客: PSRoIAlign.
PSRoIAlign主要用于防止在将原始数据中的bboxes转化到特征图下的维度时(笔者认为实际网络误差主要来自于另一种情况:即在特征图下生成一整个候选框所代表的特征时),由于量化(取整)而导致的误差,详情可见参考博客。
PSWarping:
在detection network部分,由于网络的降采样,特征图的大小变为了原体素空间BEV图的1/8大小,并且此时候选框的参数是float类型的,不是整数,若采用取整,即用其中某个区域特征图像素快的特征值来描述框里面对应位置的特征,就会引入上面所说的误差。PSWarping采用的方法是直接在folat类型的bbox参数下,从框中均匀采样出47(可以变化)个点的坐标,使用双线性插值,从特征图tensor中插值出这些点的特征,再对47个点的特征求均值,即求得bbox所代表的特征。这种特征得到的误差是单独的(属于extra_head),在bbox_head中,也计算了一种代表每一个框的特征,使用的方式是线性连接层,两个方法计算的损失互不影响,独立存在。

误差计算

根据论文介绍,模型误差主要包括以下几个部分:
L = Lcls + ωLbox + µLseg + λLctr
在实际代码中,误差的表示形式与论文有所差异,主要包含:
auxiliary network的loss:

return dict(
    aux_loss_cls = aux_loss_cls,
    aux_loss_reg = aux_loss_reg,
)

bbox_head的loss:

return dict(rpn_loc_loss=loc_loss_reduced, rpn_cls_loss=cls_loss_reduced, rpn_dir_loss=dir_loss_reduced)

extra_head的 loss:

return dict(loss_cls=cls_loss_reduced,)

其中针对不同的任务,使用focal loss、smooth l1、交叉熵损失等不同方法。

接下来对源码进行复现和注释。

你可能感兴趣的:(点云目标识别)