SECOND算法解析

在这里插入图片描述

1.前言

在AVOD的论文解析中,我们提到了AVOD(2018)其实是MV3D(2017)论文的升级版。

相似地,本文要介绍的SECOND(2018)其实就是VoxelNet(2017)论文的升级版。

SECOND的全称是Sparsely Embedded Convolutional Detection。
论文的地址
代码的地址

论文提出的主要动机为:

(1)考虑到VoxelNet论文在运算过程中运算量较大,且速度不佳。作者引入了稀疏3D卷积去代替VoxelNet中的3D卷积层,提高了检测速度内存使用

(2)VoxelNet论文有个比较大的缺点就是在训练过程中,与真实的3D检测框相反方向的预测检测框会有较大的损失函数,从而造成训练过程不好收敛。

顺带着动机,作者又提出了一些其他的创新点:

(1)比如数据增强这块,作者使用了数据库采样的操作;

(2)对于正负样本数量的极度不平衡问题,作者借鉴了RetinaNet中采用的Focal Loss。

这篇文章有关稀疏卷积部分稍微有些难懂,我找遍了全网有关SECOND的解读,大家都跳过了稀疏卷积这块,这确实让人头大。
关于稀疏卷积

2. 网络的结构

考虑到VoxelNet通过Feature Learning Network后获得了稀疏的四维张量,而采用3D卷积直接对这四维的张量做卷积运算的话,确实耗费运算资源。SECOND作为VoxelNet的升级版,用稀疏3D卷积替换了普通3D卷积

这里我们直接给出VoxelNet的结构图,然后再此基础上进行修改,获得SECOND的网络结构图,分别如下两张图所示。
在这里插入图片描述

图1 VoxelNet网络结构

在这里插入图片描述

图2 SECOND 网络结构
这么一看,大家就很容易看的出来两者之间的**共性**和**差异**了。接下来以我自己不成文的见解,简单聊聊**稀疏卷积**。

2.1 稀疏卷积

作者在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. In practice, we can gather the data directly from the original sparse data by using a preconstructed input–output index rule matrix.

如下图所示,可以归纳为:

  • 将稀疏的输入特征通过gather操作获得密集的gather特征
  • 然后使用GEMM对密集的gather特征进行卷积操作,获得密集的输出特征
  • 通过预先构建的输入-输出索引规则矩阵,将密集的输出特征映射到稀疏的输出特征。

这个输入-输出索引规则矩阵很明显就是稀疏卷积的关键所在了。
在这里插入图片描述

图3 稀疏卷积操作

这里简单说一下输入-输出索引规则矩阵的生成规则。作者在原文中提到:

A more direct approach to rule generation is to iterate over the input points to find the outputs related to each input point and store the corresponding indexes into the rules. During the iterative process, a table is needed to check the existence of each output location to decide whether to accumulate the data using a global output index counter.

大致的意思就是:

  • 迭代输入点以获取每个输入点对应的输出,并将对应的索引存储到规则中
  • 迭代过程中,建立一个表来检查每个输出位置是否真实存在

作者在SECOND中是这样实现的:

  1. 收集输入索引(input indexes)和相关的空间索引(associated spatial indexes),并复制输出位置(Duplicate output locations);
  2. 在空间索引上执行unique parallel算法,获得输出索引(output indexes)和对应的空间索引(associated spatial indexes)。
  3. 生成一个与稀疏数据的相同空间维度的缓冲区,用于查找表
  4. 最后,对规则进行迭代,并使用存储的空间索引来获得每个输入索引对应的输出索引

具体的伪代码实现如下(我按照上面的步骤进行了一一对应):
在这里插入图片描述
至此,我对作者在原文中提到的稀疏卷积的解释就到此结束了。这个稀疏卷积结合submanifold convolutional layer实现了Sparse Convolutional Middle Layers,具体结果图如下:
在这里插入图片描述

图4 Sparse Convolutional Middle Layers
## 2.2 方向回归 上面聊完了稀疏卷积后,SECOND中还有一个重要的创新,就是对**物体方向估计**进行了重新的建模。

这里,作者在最后的RPN层(原来是两个分支,用来物体分类和位置回归)多引入了一个分支(如下图5所示),用来对物体方向进行分类。为什么是分类不是回归呢?
在这里插入图片描述

图5 RPN简图

这里我们简单聊聊在VoxelNet中是如何训练模型以达到确定方向的目的的。

在VoxelNet中,一个3D BBox被建模为一个7维向量表示,分别为 ( x c , y c , z c , l , w , h , θ ) (x_c,y_c,z_c,l,w,h,θ) xc,yc,zc,l,w,h,θ 训练过程中,对这7个变量采用Smooth L1损失进行回归训练。

这会造成什么问题呢?

大家设想下,当同一个3D检测框的预测方向恰好与真实方向相反的时候,上述的7个变量的前6个变量的回归损失较小,而最后一个方向的回归损失会很大,这其实并不利于模型训练。

**原因:**损失函数的改进主要是对这个差值进行的对称化,你可以理解成预测的一个角度是1°,但另一个预测的角度是359°,如果真值是0°的话,那么预测角度减去真值角的差值在这两种情况下就会很大,但实际他俩个都是只差了1°就预测准了,所以要利用sin来解决这个问题

为了解决这个问题,作者引入了对方向角的回归损失,定义如下:

L θ = S m o o t h L 1 ( s i n ( θ p − θ t ) ) L_θ = SmoothL1(sin(θ_p-θ_t)) Lθ=SmoothL1(sin(θpθt))

θ p θ_p θp 为预测的方向角, θ t θ_t θt 为真实的方向角。

那么当 θ p = θ t ± π θ_p = θ_t ± π θp=θt±π的时候,该损失趋向于0,这样更利于模型训练

这时候大家可能会问了,那这样的话,模型预测方向很可能与真实方向相差180度呀。

这时候作者提出了另一种解决方法(也就是RPN中的direction classifer分支),作者将车头是否区分正确直接通过一个softmax loss来进行约束。如果 θ > 0 θ>0 θ>0则为正, θ < 0 θ<0 θ<0则为负。那么这就是个简单的二分类问题了,也就是结构图中direction classifer。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《C语言数据结构与算法分析(第2版)PDF》是一本关于数据结构和算法分析的书籍。本书通过使用C语言来介绍不同的数据结构和算法,并提供了大量的代码示例和分析。该书的第二版修订了第一版的内容,并添加了一些新的章节和案例研究。 本书适合那些对数据结构和算法有兴趣的人,特别是对使用C语言进行编程的人。通过学习本书,读者将能够了解不同数据结构的基本概念和实现方法,并学会如何通过算法来解决各种问题。 本书的内容包括线性表、栈、队列、树、图等常见数据结构,以及排序和查找等经典算法。每一章都以非常详细的方式介绍了每个数据结构的定义、操作和应用。同时,本书还强调了算法分析的重要性,并对算法的时间复杂度进行了解释和实践。 此外,本书还介绍了一些高级主题,如哈希表、堆、图算法等。这些主题可以帮助读者深入了解数据结构和算法,并探索更多的应用领域。 总的来说,《C语言数据结构与算法分析(第2版)PDF》是一本全面介绍数据结构和算法的书籍,并提供了大量的代码示例和实践。通过学习本书,读者将能够掌握使用C语言实现各种数据结构和算法的技巧,并为以后的编程工作打下坚实的基础。 ### 回答2: 《数据结构与算法分析——C语言描述》第二版的PDF是一本介绍数据结构和算法的书籍。该书以C语言作为编程语言,详细讲解了多种常见的数据结构和算法实现的原理和应用。 该书的内容包括线性数据结构(如数组、链表、栈、队列)、树结构(如二叉树、AVL树、B树、堆)、图结构、排序算法(如冒泡排序、快速排序、归并排序等)、查找算法(如顺序查找、二分查找、哈希查找等)等。 书中通过数学分析和伪代码的形式,清晰地阐述了各种数据结构和算法的工作原理和复杂度分析。同时,书中还提供了大量的示例代码和练习题,帮助读者理解和掌握相关知识,并提供了源码和习题答案的下载链接。 对于已经有一定编程基础的读者来说,该书是一本非常有价值的学习资料。它不仅帮助读者建立起对数据结构和算法的深刻理解,还能提升读者的编程能力和解决实际问题的能力。 总而言之,《数据结构与算法分析——C语言描述》第二版的PDF是一本全面介绍数据结构和算法的书籍,适合想要深入学习和应用相关知识的读者使用。 ### 回答3: 《数据结构与算法分析 C 语言描述第二版 PDF》是一本经典的计算机科学教材,深入讲解了数据结构和算法的概念、原理和应用。本书主要分为两个部分:数据结构和算法分析。 在数据结构的部分,书中详细介绍了常用的线性数据结构,如数组、链表、栈和队列,以及非线性数据结构,如树、图和堆。每个数据结构都包括了相应的定义、实现和操作方法,帮助读者理解其内部机制和使用场景。此外,书中还介绍了各种常见的数据结构应用,如哈希表、二叉搜索树和图的遍历算法等,让读者能够将所学的知识应用到实际问题解决中。 在算法分析的部分,书中讲解了常见的算法设计方法和分析技术。首先介绍了基本的排序和搜索算法,并深入解析它们的时间复杂度和空间复杂度,帮助读者理解算法效率的评估标准。随后,书中介绍了递归和动态规划等高级算法设计技术,以及贪心算法和分治算法的应用。最后,书中还讨论了常见的图算法,如最短路径算法和最小生成树算法等。通过深入讲解算法的设计思路和实现细节,读者可以提高自己的算法设计和分析能力。 总之,《数据结构与算法分析 C 语言描述第二版 PDF》是一本全面、系统的计算机科学教材,适用于学习和掌握数据结构和算法基础知识的读者。无论是计算机科学专业的学生、软件工程师,还是对计算机科学感兴趣的人士,都可以从这本书中获得宝贵的知识和实践经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值