SECOND 算法

date
Dec 20, 2021
Last edited time
Mar 27, 2023 09:03 AM
status
Published
slug
SECOND算法
tags
DL
CV
3D
summary
转载
type
Post
origin
Field
Plat
【3D目标检测】SECOND算法解析
前面的相关文章中,我们简单解析了自2017年来相关的 3D视觉/点云 算法。 在AVOD的论文解析中,我们提到了AVOD(2018)其实是MV3D(2017)论文的升级版。 相似地,本文要介绍的SECOND(2018)其实就是VoxelNet(2017)论文的升级版。 SECOND的全称是 Sparsely Embedded Convolutional D etection。 论文的地址为: 代码的地址为: 论文提出的 主要动机 为: (1)考虑到VoxelNet论文在运算过程中 运算量较大,且 速度不佳。作者引入了 稀疏3D卷积去代替VoxelNet中的 3D卷积层,提高了 检测速度和 内存使用 ; (2)VoxelNet论文有个比较大的缺点就是在训练过程中,与 真实的3D检测框 相反方向的 预测检测框会有 较大的损失函数, 从而造成训练过程不好收敛。 顺带着动机,作者又提出了一些其他的创新点: (1)比如数据增强这块,作者使用了数据库采样的操作; (2)对于正负样本数量的极度不平衡问题,作者借鉴了RetinaNet中采用的Focal Loss。 这篇文章有关稀疏卷积部分稍微有些难懂,我找遍了全网有关SECOND的解读,大家都跳过了稀疏卷积这块,这确实让人头大。 考虑到VoxelNet通过Feature Learning Network后获得了 稀疏的四维张量,而采用3D卷积直接对这四维的张量做卷积运算的话,确实耗费运算资源。SECOND作为VoxelNet的升级版,用 稀疏3D卷积替换了 普通3D卷积 。 这里我们直接给出VoxelNet的结构图,然后再此基础上进行修改,获得SECOND的网络结构图,分别如下两张图所示。 这么一看,大家就很容易看的出来两者之间的 共性和 差异了。接下来以我自己不成文的见解,简单聊聊 稀疏卷积 。 作者在VoxelNet的Convolutional Middle Layers的基础上引入了 Sparse Convolutional Middle Layers,稀疏卷积就用在这个模块里面。 作者在论文中提到: We need to gather the necessary input to construct the matrix, perform GEMM, and then scatter the data back.
【3D目标检测】SECOND算法解析
 
second.pytorch
traveller59Updated Mar 26, 2024

前言

本文要介绍的SECOND(2018)其实就是VoxelNet(2017)论文的升级版。
SECOND的全称是Sparsely Embedded Convolutional Detection。

动机

  1. 考虑到VoxelNet论文在运算过程中运算量较大,且速度不佳。作者引入了稀疏3D卷积去代替VoxelNet中的3D卷积层,提高了检测速度内存使用
  1. VoxelNet论文有个比较大的缺点就是在训练过程中,与真实的3D检测框相反方向的预测检测框会有较大的损失函数,从而造成训练过程不好收敛。

其他创新点

  1. 数据增强中,作者使用了数据库采样的操作;
  1. 对于正负样本数量的极度不平衡问题,作者借鉴了RetinaNet中采用的Focal Loss。

网络结构

考虑到VoxelNet通过Feature Learning Network后获得了稀疏的四维张量,而采用3D卷积直接对这四维的张量做卷积运算的话,确实耗费运算资源。SECOND作为VoxelNet的升级版,用稀疏3D卷积替换了普通3D卷积
这里我们直接给出VoxelNet的结构图,然后再此基础上进行修改,获得SECOND的网络结构图,分别如下两张图所示。
notion image
notion image

稀疏卷积结构

作者在VoxelNet的Convolutional Middle Layers的基础上引入了Sparse Convolutional Middle Layers,稀疏卷积就用在这个模块里面。
流程为:
  1. 将稀疏的输入特征通过gather操作获得密集的gather特征;
  1. 然后使用GEMM对密集的gather特征进行卷积操作,获得密集的输出特征;
  1. 通过预先构建的输入-输出索引规则矩阵,将密集的输出特征映射到稀疏的输出特征
这个输入-输出索引规则矩阵很明显就是稀疏卷积的关键所在了。
notion image
具体实现的方法这里就不多说了, 可以自己去查.

方向回归

上面聊完了稀疏卷积后,SECOND中还有一个重要的创新,就是对物体方向估计进行了重新的建模。
这里,作者在最后的RPN层(原来是两个分支,用来物体分类和位置回归)多引入了一个分支(如下图5所示),用来对物体方向进行分类。为什么是分类不是回归呢?
notion image
这里我们简单聊聊在VoxelNet中是如何训练模型以达到确定方向的目的的。
在VoxelNet中,一个3D BBox被建模为一个7维向量表示,分别为 .
训练过程中,对这7个变量采用Smooth L1损失进行回归训练。
大家设想下,当同一个3D检测框的预测方向恰好与真实方向相反的时候,上述的7个变量的前6个变量的回归损失较小,而最后一个方向的回归损失会很大,这其实并不利于模型训练。为了解决这个问题,作者引入了对方向角的回归损失,定义如下:
其中 为预测的方向角, 为真实的方向角。
那么当  的时候,该损失趋向于0,这样更利于模型训练
这样的话,模型预测方向很可能与真实方向相差180度, 对此, 作者提出了另一种解决方法(也就是RPN中的direction classifer分支,作者将车头是否区分正确直接通过一个softmax loss来进行约束。如果theta>0则为正,theta<0则为负。那么这就是个简单的二分类问题了,也就是结构图中direction classifer。
 

© Lazurite 2021 - 2024