作者:蒋天园Date:2020-04-18来源:3D-VID:基于LiDar Video信息的3D目标检测框架|CVPR2020
Brief
paper地址:https://arxiv.org/pdf/2004.01389.pdf
code地址:https://github.com/yinjunbo/3DVID
这是一篇来自北理工和百度合作的文章,目前还未开源,只有项目地址,2020年3月份放置在arxiv上,已经被CVPR2020接收;从标题我们猜测该文采用的时空信息将多帧的点云信息融合做3D目标检测,目前的确是没有研究是通过视频流的方式做3D目标检测,不过这也要求数据集是一些连续的帧才能使得这样一个任务的完成,但是KITTI的确是没有满足这样的要求,因此作者在Nuscence上进行的实验。这是一个CVPR19年上的公布的数据集,这里先给出一张目前在公布的nuscence的榜单,如下,这里的榜一的文章目前将SECOND的代码重构,加入了更多SOTA的方法开源了新的3Ddetection base,即Det 3D项目,链接为:https://github.com/poodarchu/Det3D,而MEGV则是采用了多尺度检测的head,规定了不同大小的物体的检测采用不同的head,同时采用了一种数据增广方式缓解了nuscence中的longtail问题
本文主要内容
本文主要内容可以简单总结为,在目前的SoTA的文章中,第一个采用3Dvideo点云做3D目标检测的,利用了前人所没有用到的帧与帧之间的时间连续关系,为此,作者在pointpillars的基础上添加了grap-basd的GNN卷积,使得每个节点的感受野扩大,以此设计了空间特征提取模块;然后根据得到的空间特征送入由GRU为基础模块搭建的时空特征融合模块得到连续帧之间的更加丰富的特征信息,在该模块中,作者分别采用了空间注意力和“时间”注意力机制分别对前景物体加以更大注意和对运动物体加以配准。本文中并不是一个以问题为导向的思路,而是一种新奇的思想引入,但是文章任然指出,之前的方法会出现的FP问题在本文中会得到一定程度的环境。对比由问题为导向的文章3DSSD而言,本文的内容涉及更广。
Abstract
-
当前的基于LiDar输入的目标检测网络都是只使用了单帧的信息,都没有使用连续点云之间的时空信息。所以本文作者提出了一种处理点云序列的end2end的online的视频检测方法。
-
本文提出的模型由空间特征编码模块和时空特征融合模块两部分组成。这里的空间特征编码模块——PMPNet(PillarMessage Passing Network)用于编码独立的每一帧的点云特征,该模块通过迭代消息传递,自适应地从相邻节点处为该pillarnode收集节点信息,有效地扩大了该pillarnode的感受野。时空特征融合模块则是采用的时空注意力结合GRU的设计(AST-GRU)来整合时空信息,该模块通过一个attentivememory gate来加强传统的ConvGRU。其中AST-GRU模块又包含了一个空间注意力模块(STA)和TTA模块(TemporalTransformer Attention ),使得AST-GRU可以注意到前景物体和配准动态物体。
-
在nuscence上得到了sota的效果
1. Introduction
-
point cloud video的定义点云视频是一系列点云帧的集合,在数据集Nuscence中,采用的32线每一秒可以捕获20帧的点云的激光雷达。
-
单帧检测方法的弊端如果采用单帧图像直接处理就受到单帧图像就必须受到单帧图像稀疏性过大的影响,再严重一点,距离和遮挡都会成为单帧检测方法的重大阻碍。如下图所示,最上一层的检测经常处才能False-negative的结果,但是本文提出的online3D video 检测方法就可以做到更好的效果。这是因为point cloud video具有更加丰富的物体特征。 当前比较流行的一些单帧检测方法有可分为voxel-based的voxelnet、second、pointpillars和point-based的pointrcnn等方法,在本文中,作者也是采用的这种Pillar划分的方式提取特征,但是这种方法只会关注局部特征。所以作者对此提出了graph-based的方法PMPnet
-
核心问题 (1)构建3D video 目标检测的关键问题在于如何对连续的时空特征信息进行建模表示,本文中,作者提出了融合graph-based空间编码特征的模块并结合时空注意力感知模块,来捕获视频一致性。 (2)上文提到作者为了改变pillars特征提取仅仅提取一个Pillar中的特征的问题,自己设计了PMPnet,该网络把每一个非空的pillar当做图的一个节点,通过mesh从旁边节点融合特征的方式来扩大感受野,因此PMPNet通过在K-NNgraph中采用迭代的方式可以深度挖掘不同pillar节点之间的相对关系,该网络是在同一帧的点云中进行空间的特征融合。 (3)上面的PMPnet仅仅在同一帧的空间中提取到感受野更多的特征信息,然后将这些单帧的特征在作者设计的第二个网络结构AST-GRU中进行融合,ConvGRU这一篇ICLR16年的文章证实了在2Dvideo中ConvGRU是非常有效的,作者设计的AST-GRU则是把该工作通过一个注意力内存门机制来捕获连续帧点云之间的依赖关系来扩展到三维点云中处理中。 (4)在俯视图下,前景物体仅仅只占一小部分区域,背景点占据了大部分的区域,这会使得在迭代过程中,背景噪声会越来越大,因此作者采用了空间注意力模块来缓解背景噪声并强调前景物体。(5)更新memory时,旧的空间特征和新的输入之间存在没配准的问题,如果是静态物体,可以采用ego-pose信息配准,但是具有很大运动幅度的动态物体则是不能的,为了解决这问题,作者采用了短暂注意力机制(TTA)模块,自适应的捕捉连续帧中的运动关系。
-
整体设计作者首先通过PMPNet模块自适应扩大感受野的提取每一帧的空间特征,再将输出的特征序列送入AST-GRU模块。
2. Related Work
本文的这一章节主要运用了基于点云的检测方法的backbone和graph-based的方法,因此主要介绍这两方面内容。
1.LiDAR-based 3D Object Detection
作者一样把基于lidar的方法分为了三类,point-based、voxel-based和multi-sensors的方法,前面两种方法已经在前面的博文中有了挺详细的介绍,这里不再介绍。而multi-sensor的研究方法更多的是在18年以前,最新的文章有19年的MVF和AAAI的PIRCNN,采用的都是结合图像和lidar输入的检测方法,不同的是,目前这样做的方法主要有两类,其一是特征融合后在提proposals,第二种是都先提出proposals再融合。后者更像是打比赛中的模型融合的方法。
2.Graph Neural Networks
图神经网络(Graph Neural Networks, GNNs)最早是由Gori等人引入的,用来对图结构数据的内在关系进行建模。然后Scarselli等人将其扩展到不同类型的图。之后的GNN研究可以分为两个方向:(1)第一个研究方向是使用选通机制使信息能够在图中传播,比如利用RNN描述每个节点的状态或者将图形推理概括为参数化的消息传递网络。(2)另外一个研究方向是则是将CNN引入到GNN中,因此GNN在该方向下也可以叫GCNN。本文作者的PMPnet属于第一个方向中的内容,通过门控消息传递策略来捕获pillar特征,用于对每一帧的点云做特征提取。
3. Model Architecture
整体结构图如下,可以看出主包含了空间特征编码和时空特征融合两个模块。前者是对每一帧的点云提取空间特征,后者是采用空间和时间上的注意力机制对提取到的特征序列做融合。
作者首先当前帧的前一帧点云通过GPS信息将其对应的坐标转换到当前帧来,目的是消除运动影响,使静态物体在帧间对齐。然后再采用PMPnet提取空间特征和AST-GRU进行时空特征融合。
3.1 PMPnet
作者指出之前的提取voxel特征的方法VFE(被提出在voxelnet,其中SECOND1.0和pointpillars也都有使用)由于感受野的问题并不能完全挖掘voxel的特征(实际上后续有采用3DCNN或者稀疏卷积再次提取,相当于是做了感受野的扩大吧,只是在VFE层仅仅是对单个voxel进行了特征提取);因此这一部分则是为了来解决这样一个问题,即将非空的pillar当做节点,然后将其构建成图结构(怎么构建,距离?),作者称这种图结构有效的保留了非欧式的原始结构。(流型结构就是一个非欧式结构,因为点云扫描得到的都是表面点,可以这样理解)。我们记通过pillar构建的图结构为
,前者表示非空的pillar,后者表示的是边的特征。这里作者表示本文采用的是K-NN建图,采用周围的最近的几个pillar作为邻居节点。采用迭代的方式更新特征,我们假设一个pillar节点为,其对应是初始特征为,该初始特征是通过pillar内采用PFE(简化版的pointnet)提取到,整体运行流程为:
1.得到初始特征:
,这里的表示的是一个pillar节点内的点。
2.特征在图网络中传递:
(1)如下图所示,假设在第s次迭代的时候表示为坐边的形式,左上表示的是当前图的感受范围,可以看出此时的仅仅与有关,与 的特征无关,在点云中表示为左上的形式;在第s+1次迭代后,该可以看出 的特征被融合,得到了新的更大感受野的特征。
(2)上图中的mj,i表示的是两节点之间的传递信息,作者把第s+1次的信息传递定义为:
这里的hi表示的是节点特征, 是边的特征,边的特征直接定义为 ,上式表示的是从第s次的边和节点特征得到第s+1次的信息传递特征,采用的方式是FC层连接。但是一个节点相邻的节点可能不止一个,因此,在通过 更新当前节点特征之前,需要周围所有节点的传递信息进行融合得到最终的传递信息;采用最大池化:
而后再根据 对当前的节点特征进行更新:
通过上述的迭代后,节点vi就算是包含了所有邻居节点的特征信息,同时,邻居节点也包含了它邻居节点的特征;所以第s次迭代完全结束后,该点的特征也聚集了邻居的邻居的特征,使得每个节点的特征对应的感受野信息更加扩大了。
(3)传递完特征后,再采用二维卷积进一步提取高维语义信息。总结一下,上述的backbone,仅仅比pointpillars多了一步信息传递,其余的两步(PFE ,2DCNN)都是一样的。
3.2 AST-GRU
如果直接采用传统的ConvGRU对上文backbone得到的特征进行融合会得到两个问题:
1.BEV视图下的点云的的前景占比很小,在feamap中统计出来是18×8个像素值,背景点过多会导致背景噪声会主导哦Menory。
2.问题2是在连续帧中,静态物体可以通过GPS信息配准,但是动态物体却不能。针对上述的两个问题,作者的应对方法分别是在空间和时间上采用注意力机制即STA(spatial transformer attention)和TTA(temporal transformer attention)。如下图所示,STA模块专注空间中的前景信息,输出的是新的GRU的输入fea map;TTA模块配准memory中和输入的特征中的动态物体,输出配准后的memory信息。
上图的核心组件分为如下三部分:
(1)VanillaConvGRU:ConvGRU是卷积形式的GRU,相比FC的GRU具有更少的参数和更好的空间表达能力,同时比LSTM具有更少的收敛时间,其工作模式如下,动态图讲解GRU,LSTM运行模式,链接:https://towardsdatascience.com/animated-rnn-lstm-and-gru-ef124d06cf45
本文中,采用如下的公式表示使用旧memory中的状态和输入得到新memory中的状态的过程:
其中字符表示的含义由如下的表格显示:
配合上文的动态图,就可以比较清晰的知道本文中的GRU的运行流程了。
(2)STA 空间注意力模块
和以往的空间注意力机制类似,作者设计了对于输入的fea map的每一个像素采用一个加权的方式,如下公式:
其中代表的含义表示如下:
也就是说,上式表示的内容是对目标pix的输出为:和邻域Pix的加权值再和邻域信息卷积。(3)TTA 时间注意力机制前文提到,这个模块是为了对运动的物体进行配准,作者采用的是改进的DCN结构,也就是可变型卷积结构,目的是通过融合运动信息自适应的筛选出关键支持区域。DCN简化表达为下式子:
其中,下表表示字符含义:
如果将TTA模块中的输入和空间注意力模块中的输出带入,可以表示为:
可以看出实际上在TTA模块中,邻域信息也是起到了非常重要的作用的,该TTA模块由偏移量 决定,上表格中提到这里的偏移通过卷积层学习到,表达为如下:
这里面有:
ils总的来讲,该模块为了配准动态物体,采用上一次memory和本次feamap作为输入,预测了偏移值 ,和下一个的menory特征结合出得到新的输入。
3.3 Network Deta
(1)PMPNet
1.在提取pillar的特征时,采用的也是max-pooling的形式
2.中间graph-based的消息传递采用的K-NN进行建图,其中从边到节点的特征采用1×1卷积代替全连接层。
(2)Backbone Module
和以往的lidar-based的方法一样,不多介绍。
(3)AST-GRU Module
这其中采用的卷积核大小都是3×3的,除非是用1×1卷积代替全连接的形式。
(4)Detection Head
该结构的输入是经过AST-GRU迭代到最后的menory feature,loss函数和其他的lidar-based的方法一致,采用的是L1 loss和focal loss.
4. Experimental Results
nuscenes简单介绍
作者在nuscenes数据集上进行了测试, Nuscene数据集简单介绍:这个数据采集是由6个摄像头,1个LIDAR,5个RADAR,GPS,IMU采集得到,与KITTI相比,nuScenes包含7倍以上的对象注释。重要信息:
-
1000个场景,每个场景20s,这些场景使用人类专家进行了仔细注释
-
传感器安装位置和采集的数据命名:
-
数据注释:
(1)以2Hz对同步良好的关键帧(图像,激光雷达,雷达)进行采样,并将它们发送到我们的注释软件Scale进行注释。
(2)nuScenes数据集中的所有对象都带有语义类别,以及它们出现的每个帧的3D边界框和属性。
(3)一共有23个对象(截图并不完整)
-
数量一共有1000多个场景,其中700个提供为训练,150个场景作为测试,大概是KITTI的7倍左右视频中关键帧每隔0.5s标注,由10个非关键帧融合得到。信息包含为,其中最后一个信息是KITTI不含有的,表示离关键帧的时间从0~0.45.
更多细节大家可以去官网上的文档细细研究,这里不做过多介绍。本文采用在nuscenes而不在KIITTI上进行实验的原因正是KITTI并不提供3D video.
实现细节
-
对于关键帧,输入场景大小设置为[−50,50] × [−50, 50] ×[−5, 3],Pillar的划分为[0.5×0.5]。
-
点云数量的输入为16384,从原始的2w+的点云中采样得到,每个pillar中最多包含点云数量为60
-
最初的输入维度是5,在GNN中的维度变为64
-
最终在backbone中的fea map为100 × 100 × 384(和voxelnet一样的两层concat)
Qualitative Performance
如下图,对于nuscenes的10类目标检测得到的结果如下,可以看出效在大部分物体上都是达到的sota的
消融实验
下图展示了在pointpillars的基础上添加本文提出的模块后的性能提升,最后的指标不仅仅是检测的IOU值,还和很多其他指标加权得到的结果,在官网中有介绍。
推荐阅读文献
[1]Delving deeper into convolutional networks for learning videorepresentations
[2] Fast point r-cnn
[3] graph convolutional networks: Semisupervised learning via gaussianprocesses
[4]Deep hough voting for 3d object detection in point clouds