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
traveller59 • Updated 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 - 2026