【论文解读】MV3D-Net、AVOD-Net用于自动驾驶的多视图3D目标检测网络

作者‖ 黎国溥,3D视觉开发者社区签约作者,CSDN博客专家,华为云-云享专家
编辑‖ 3D视觉开发者社区

前言

MV3D-Net 融合了视觉图像和激光雷达点云信息;输入数据有三种,分别是点云俯视图、点云前视图和RGB图像。通过特征提取、特征整合和特征融合,最终得到类别标签、3D边界框。这样的设计既能减少计算量,又保留了主要的特征信息。

MV3D-Net 开源代码:https://github.com/bostondiditeam/MV3D
MV3D-Net 论文地址:Multi-View 3D Object Detection Network for Autonomous Driving

AVOD-Net算是MV3D-Net的加强版,它也融合了视觉图像和激光雷达点云信息。但它去掉了激光点云的前视图输入、去掉了俯视图中的强度信息;输入数据有二种,分别是点云俯视图和RGB图像。AVOD-Net使用FPN来提取特征,同时添加边界框的几何约束,整体模型效果有提升。

AVOD-Net 开源代码:https://github.com/kujason/avod
AVOD-Net 论文地址:Joint 3D Proposal Generation and Object Detection from View Aggregation


本文思路是先介绍MV3D-Net,再介绍AVOD-Net;在理解MV3D-Net的基础上,去看AVOD-Net做出了哪些改变和对应效果如何。

一、MV3D-Net篇

1.1、框架了解

先看下总体网络结构:下图中的紫色圆圈中M是表示:基于元素的均值。
在这里插入图片描述

输入的数据:有三种,分别是点云俯视图、点云前视图和二维RGB图像。“点云投影”,其实并非简单地把三维压成二维,而是提取了高程、密度、光强等特征,分别作为像素值,得到的二维投影图片。
输出数据:类别标签、3D边界框。

1.1.1 网络的主体部分

在这里插入图片描述

网络的主体结构的思路流程:
1)提取特征。
提取点云俯视图特征;
提取点云前视图特征;
提取图像特征。
2)从点云俯视图特征中计算ROI候选区域。
3)把候选区域分别与提取到的点云俯视图特征、点云前视图特征和图像特征进行整合。
先把俯视图候选区域投影到前视图和图像中;
再经过ROI pooling整合成同一维度。

1.1.2 网络的融合部分

融合部分部是把整合后的数据进行融合,最终得到类别标签、3D边界框。
在这里插入图片描述

上图中的紫色圆圈中M是表示:基于元素的均值。

1.2、MV3D的点云处理

MV3D将点云和图片数据映射到三个维度进行融合,从而获得更准确的定位和检测的结果。这三个维度分别为点云的俯视图、点云的前视图以及图片。
在这里插入图片描述

1.2.1 提取点云俯视图

点云俯视图由高度强度密度组成;作者将点云数据投影到分辨率为0.1的二维网格中。
高度图的获取方式为:将每个网格中所有点高度的最大值记做高度特征。为了编码更多的高度特征,将点云被分为M块,每一个块都计算相应的高度图,从而获得了M个高度图
强度图的获取方式为:每个单元格中有最大高度的点的映射值。
密度图的获取方式为:统计每个单元中点云的个数,并且按照公式:
在这里插入图片描述

其中N为单元格中的点的数目。强度和密度特征计算的是整个点云,而高度特征是计算M切片,所以,总的俯视图被编码为(M + 2)个通道的特征。

1.2.2 提取点云前视图

由于激光点云非常稀疏的时候,投影到2D图上也会非常稀疏。相反,作者将它投影到一个圆柱面生成一个稠密的前视图。 假设3D坐标为:
在这里插入图片描述

那么前视图坐标:
在这里插入图片描述
可以通过如下式子计算
在这里插入图片描述

1.3、MV3D的图像处理

采用经典的VGG-16来提取图像特征,下图是VGG-16的网络结构。
在这里插入图片描述

VGG-16结构中有13个卷积层和3个全链接层,它的结构简洁,整个网络都使用了同样大小的卷积核尺寸(3x3)和最大池化尺寸(2x2)。它验证了通过不断加深网络结构可以提升性能。但VGG-16耗费更多计算资源,并且使用了更多的参数,导致更多的内存占用(140M)。

1.4、俯视图计算候选区域

物体投射到俯视图时,保持了物体的物理尺寸,从而具有较小的尺寸方差,这在前视图/图像平面的情况下不具备的。在俯视图中,物体占据不同的空间,从而避免遮挡问题。
在道路场景中,由于目标通常位于地面平面上,并在垂直位置的方差较小,可以为获得准确的3Dbounding box提供良好基础。候选区域网络是RPN,下面介绍一下它的原理。
RPN全称是Region Proposal Network,也可理解为区域生成网络,或区域候选网络;它是用来提取候选框的。

1.4.1 RPN的由来

在RCNN和Fast RCNN等物体检测架构中,提取候选框的方法通常是传统的Selective Search,比较耗时。
在Faster RCNN中,RPN专门用来提取候选框,这也是RPN第一次被使用;RPN耗时少。Faster RCNN = RPN + Fast RCNN。

1.4.2 RPN思路流程

RPN网络的任务是找到proposals。输入:feature map。输出:proposal。
在这里插入图片描述

RPN总体流程:

  1. 生成anchors(anchor boxes)。
  2. 判断每个 anchor box 为 foreground(包含物体) 或者background(背景) ,二分类;softmax分类器提取positvie anchors 。
  3. 边界框回归(bounding box regression) 对 anchor box 进行微调,使得 positive anchor 和真实框(Ground Truth Box)更加接近。
  4. Proposal Layer生成proposals。

1.4.3 feature maps与锚框 anchor boxes

feature maps 的每一个点都配9个锚框,作为初始的检测框。重要的事说三遍:**锚框作为初始的检测框!、锚框作为初始的检测框!、锚框作为初始的检测框!**虽然这样得到的检测框很不准确,但后面可通过 bounding box regression 来修正检测框的位置。

在这里插入图片描述

下面介绍那9个anchor boxes 锚框,先看看它的形状:
在这里插入图片描述

这里一共有9个框框,绿色3个,红色3个,蓝色3个。有3种形状,长宽比分别是1:1, 1:2, 2:1

1.4.4 判断anchor boxes是否包含物体

在feature map上,设置了密密麻麻的候选anchor boxes 锚框。为什么会有这么多?因为 feature maps 的每一个点都配9个锚框,如果一共有1900个点,那一共有1900*9=17100个锚框了。
在这里插入图片描述

设 feature maps 的尺寸为 WH,那么总共有 WH*9个锚框。(W:feature maps的宽;H:feature maps 的高。)
然后用cnn去判断哪些anchor box是里面有目标的positive anchor,哪些是没目标的negative anchor。所以,RPN做的只是个二分类。
关于cnn的模型结构,可以参考下图:
在这里插入图片描述

1.4.5 修正边界框

已知anchor box 包含物体称为positive anchors,那怎么调整,才能使得 anchor box 与 ground truth 更接近?
在这里插入图片描述

图中红框为positive anchors,绿框为真实框(Ground Truth Box,简称GT)
positive anchors 和GT的梯度可以有dx, dy, dw, dh四个变换表示,bounding box regression通过线性回归学习到这个四个梯度,使positive anchors 不断逼近GT,从而获得更精确的proposal。
bounding box regression 思路,简单一点的,可以先做平移,再做缩放,最终包含物体anchor box和真实框很接近。

1.4.6 Proposal(最有可能包含物体的区域)

通过上面的判断anchor boxes是否包含物体,对有物体的anchor boxes通过回归进行修正它的尺子,最终包含物体anchor box和真实框很接近。RPN会输出一些框框,和这些框框包含物体的概率。
总结一下,Proposal 的输入有三个:
softmax 分类矩阵
Bounding Box Regression 坐标矩阵
im_info 保存了缩放的信息
输出为:
rpn_rois: RPN 产生的 ROIs(Region of Interests,感兴趣的区域)
rpn_roi_probs: 表示ROI包含物体的概率。
RPN 只挑选出了可能包含物体的区域(rpn_rois)以及其包含物体的概率(rpn_roi_probs)。在后续处理中,设定一个阈值 threshold,如果某个ROI包含物体的概率的概率大于阈值,再判断其类别;否则直接忽略。

1.5、特征整合

把候选区域分别与提取的特征进行整合。
特征整合流程:
• a. 把俯视图候选区域投影到前视图和图像中
• b. 经过ROI pooling整合成同一维度

在这里插入图片描述

1.6、特征融合

有了整合后的数据,需要对特征进行融合,最终得到类别标签、3D边界框。
作者介绍了三种不同的融合方式,分别为
• a、Early Fusion 早期融合
• b、Late Fusion 后期融合
• c、Deep Fusion 深度融合。
各自的结构如下图所示。
在这里插入图片描述

上图中的紫色圆圈中M是表示:基于元素的均值。C是表示:串接。
最终选择了Deep Fusion 深度融合。融合的特征用作:分类任务(人/车/…)、更精细化的3D Box回归(包含对物体朝向的估计)。

1.7、模型效果

和其他模型对比的数据:
在这里插入图片描述
在这里插入图片描述

检测效果:
在这里插入图片描述

1.8、模型代码

代码地址:https://github.com/bostondiditeam/MV3D
作者使用KITTI提供的原始数据,点击链接
在这里插入图片描述

上图是用于原型制作的数据集 。
我们使用了[同步+校正数据] + [校准](校准矩阵)+ [轨迹]()
所以输入数据结构是这样的:
在这里插入图片描述

运行 src/data.py 后,我们获得MV3D网络所需的输入。它保存在kitti中。
在这里插入图片描述

上图是激光雷达俯视图(data.py后)
在这里插入图片描述

上图是将 3D 边界框投影回相机图像中。

二、AVOD-Net篇

2.1、框架了解

先看下总体网络结构:(可以点击图片放大查看)
在这里插入图片描述

输入的数据:有二种,分别是点云俯视图和二维RGB图像。输出数据:类别标签、3D边界框。
**相对于MV3D-Net的改进措施:**去掉了激光点云的前视图输入。在俯视图中去掉了强度信息。去掉这两个信息仍然能取得号的效果,就说明俯视图和图像信息已经能够完整诠释三维环境了。

2.2、提取特征

AVOD-Net如何提取特征的?它主要提取出二部分数据,分别是图像特征、点云俯视图特征。其中图像+点云俯视图融合特征,在数据整合起到作用。后面将这二种特征进行融合。
在这里插入图片描述

它使用了全分辨率特征,所以为了在整合时降低维度,先进性了1X1的卷积。
AVOD使用的是FPN,MV3D-Net 是使用的VGG16做特征提取。下面介绍一下FPN网络的原理。
FPN,全名是Feature Pyramid Networks,中文称为特征金字塔网络;它是目前用于目标检测、语义分割、行为识别等方面比较重要的一个部分,对于提高模型性能具有较好的表现。
在特征提取中,低层的特征语义信息比较少,但目标位置准确,分辨率高。高层的特征语义信息比较丰富,但是目标位置比较粗略,分辨率低和比较抽象。于是有些算法采用多尺度特征融合的方式,在融合后的特征做预测。
FPN的预测是在不同特征层独立进行的,即:同时利用低层特征高分辨率和高层特征的高语义信息,通过融合这些不同层的特征达到预测的效果。FPN作者认为足够低层高分辨的特征对于检测小物体是很有帮助的。

2.2.1 FPN特征金字塔

FPN的顶层特征通过上采样和低层特征做融合,并且每层都是独立预测的;它使每一层不同尺度的特征图都具有较强的语义信息。
在这里插入图片描述
对比:FPN特征金字塔与多尺度特征融合
多尺度特征融合的方式,在融合后的特征做预测。经过多次上采样并融合特征到最后一步,拿最后一步生成的特征做预。
FPN是在不同特征层独立进行预测。

2.2.2 FPN网络结构

FPN的主网络采用ResNet,网络结构思路是一个自底向上的线路,一个自顶向下的线路,横向连接(lateral connection)。
在这里插入图片描述

11的卷积核减少卷积核的个数,也就是减少feature map的个数,并不改变feature map的尺寸大小。
自底向上的过程也称为下采样,feature map尺寸在逐渐减小,同时提取到的特征语义信息逐渐丰富。在下采样过程中,feature map的大小在经过某些层后会改变,而在经过其他一些层的时候不会改变,作者将不改变feature map大小的层归为一个stage,因此每次抽取的特征都是每个stage的最后一个层输出,这样就能构成特征金字塔。
自顶向下的过程也称为上采样进行,而横向连接则是将上采样的结果和自底向上生成的相同大小的feature map进行融合。其中,1
1的卷积核减少卷积核的个数,也就是减少feature map的个数,并不改变其尺寸大小。
在融合之后还会再采用3*3的卷积核对每个融合结果进行卷积,目的是消除上采样的混叠效应(aliasing effect)。并假设生成的feature map结果是P2,P3,P4,P5,和原来自底向上的卷积结果C2,C3,C4,C5一一对应。
FPN同时使用低层特征高分辨率和高层特征的高语义信息,通过融合这些不同层的特征达到预测的效果。

2.3、数据整合

AVOD使用的是裁剪和调整(crop and resize),数据整合结构如下图所示。
在这里插入图片描述

2.4、边界框的几何约束

AVOD在3D Bounding Box的编码上添加了几何约束。MV3D, Axis Aligned, AVOD三种不同的3D Bounding Box编码方式如下图所示,
在这里插入图片描述

AVOD利用一个底面以及高度约束了3D Bounding Box的几何形状,即要求其为一个长方体。MV3D只是给出了8个顶点,没有任何的几何约束关系。
此外,MV3D中8个顶点需要一个24维(3x8)的向量表示,而AVOD只需要一个10维(2x4+1+1)的向量即可,做到了很好的编码降维工作。

2.5、模型效果

与其他模型的对比:
在这里插入图片描述

在KITTI上,AVOD目前(2018.7.23)名列前茅,在精度和速度上都表现较好,与MV3D, VoxelNet, F-PointNet对比的结果如下表所示。
在这里插入图片描述

模型预测效果:
在这里插入图片描述

2.6、模型代码

AVOD-Net 开源代码:https://github.com/kujason/avod
作者代码的运行环境:
**系统:**Ubuntu 16.04
****深度框架:****TensorFlow1.3(GPU 版本)
**其他依赖库:**numpy>=1.13.0 、opencv-python 、pandas、pillow、protobuf==3.2.0 、scipy、sklearn 等。
**数据集:**在Kitti 对象检测数据集上进行训练。

版权声明:本文为奥比中光3D视觉开发者社区特约作者授权原创发布,未经授权不得转载,本文仅做学术分享,版权归原作者所有,若涉及侵权内容请联系删文。

3D视觉开发者社区是由奥比中光给所有开发者打造的分享与交流平台,旨在将3D视觉技术开放给开发者。平台为开发者提供3D视觉领域免费课程、奥比中光独家资源与专业技术支持。点击加入3D视觉开发者社区,和开发者们一起讨论分享吧~

或可微信关注官方公众号 3D视觉开发者社区 ,获取更多干货知识哦。

猜你喜欢

转载自blog.csdn.net/limingmin2020/article/details/124337965