社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

深度学习基于摄像头和激光雷达融合的3-D目标检测

3D视觉工坊 • 5 年前 • 1028 次点击  

点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

本文由知乎作者黄浴授权载,不得擅自二次转载。原文链https://zhuanlan.zhihu.com/p/86543002

以前在传感器融合讲过数据级的融合(深度图)和任务级的融合(比如检测),大家有时候讨论前融合和后融合的区别,或者是一种中间层融合。提到过的摄像头和激光雷达在目标检测任务的融合方法,有AVOD、PointFusion、RoarNet和F-PointNets等。这里列出一些近期的论文讨论。


“MLOD: A multi-view 3D object detection based on robust feature fusion method”, 2019, 9

本文是一个多视图标记的目标检测器(MLOD)。检测器将RGB图像和激光雷达点云作为输入,并遵循两步目标检测框架。区域提议网络(RPN)在点云的鸟瞰视图(BEV)投影中生成3D提议。第二步将3D提议边框投影到图像和BEV特征图,并将相应的图截取发送到检测头(detector head)以进行分类和边界框回归。与其他多视图方法不同,裁剪的图像特征不直接馈送到检测头,而是被深度信息掩盖以过滤掉3D边框外的部分。图像和BEV特征的融合具有挑战性,因为它们来自不同的视角。这里引入了一种新检测头,不仅可以从融合层提供检测结果,还可以从每个传感器通道提供检测结果。因此,可以用不同视图标记的数据训练目标检测器,以避免特征提取器的退化。


本文提出的两步神经网络结构如图所示。BEV图和RGB图像被馈入两个卷积神经网络获得特征。为了提高计算效率,仅使用RPN的鸟瞰视图(BEV)特征生成3D提议。基于提议的深度信息,3D提议之外的图像特征被前景掩码层(foreground mask layer)掩盖。然后,掩码的图像特征图和BEV特征图被裁剪并传递到多视图头(multi-view header),提供最终的分类、定位和定向结果。


为在提议的3D边框内正确捕获目标的图像特征,本文引入了前景掩码层来过滤掉前景特征。下图显示了前景掩码层的流程:首先,该层用3D提议投影的前视2D边框裁剪并调整其(稀疏)深度图的大小;然后将nk×nk深度图等分成k×k网格;该层计算每个网格单元中非零深度值的中值mij,因为零值表示该像素没有激光雷达点信息。


(a)



(b)


在多视图3D目标检测方法中,基于BEV的IoU来分配提议标签。但前视图的IoU可能与BEV的IoU明显不同。如图所示是将3D边框分配给负标签但在图像视图中IoU > 0.7的示例。当仅基于BEV IoU分配标签来训练目标检测器时,(前视图)图像通道的性能降低。



作者提出了一种多视图检测头,以避免RGB图像特征的衰减。下图显示了头部网络结构:关键想法是在融合层(concat)之前为每个通道添加额外的输出层;两个输出的每一个馈入到相应的子输出(sub-output)损失中。



下图给出一些直观的结果例子:每张图像检测车辆为绿色,行人为蓝色,骑车者为黄色。




“Multi-Sensor 3D Object Box Refinement for Autonomous Driving”,2019,9

这是一个在自动驾驶中多传感器细化的3D对象检测系统。单目摄像头充当2D目标提议和初始3D边框预测的基本传感器,而立体相机和激光雷达视为自适应插入式传感器,改善3D边框的定位性能。对于原始观测的每个观察元素(例如,立体视觉的像素,激光雷达的3D点),该方法将局部几何模型建模为实例向量(instance vector)表示,代表每个元素相对于目标帧的3D坐标。使用这样统一的几何表示,有利于立体视觉光度对齐(stereo photometric alignment)或点云对齐(point cloud alignment)来统一地细化3D目标位置估计。

如下图所示,首先是一个单目3D目标检测器设计。给定单个图像作为基本输入,将Faster R-CNN扩展到轻量级单目3D目标检测器,其中预测几个空间信息、2D框和目标类,以此推断初始的3D边框。如前所说,将图像或点云的目标结构信息建模为统一的实例向量表示。具体来说,如果有立体图像可用,用基于区域的FCN预测RoIAlign层之后的目标实例向量和分割掩码。将掩码实例向量锚框到初始3D边框,获得密集的目标级3D重构(图下半部分)。然后,将形状-觉察的目标补丁从左图扭曲到右图,并优化最小光度误差提高初始3D边框精度。

如果有点云数据,采用PointNet 来预测逐点实例向量。与F-PointNet类似,将视锥中包含的点云作为输入,并依次执行掩码分割和实例向量回归。基于逐点实例向量,每个3D点都与目标中心相关联,在相同表示下形成稀疏的局部形状(图上半部分)。同样,将局部结构重新投影到原始激光雷达点云,并最小化逐点距离,进一步重定位3D目标。



下图是本文单目3D目标检测的数据流:该3D检测器采用与Faster R-CNN类似的架构,使用相同区域提议网络(RPN)生成2D RoIs;RoI Align之后,特征图映射到R-CNN头部提取高级语义信息;除了目标分类和2D框回归之外,还利用其他全连接(FC)层预测几个空间属性以恢复3D边框;由于位置信息和尺寸信息的丢失,直接从裁剪图像RoI回归3D目标姿态是个病态问题,这里用基于残差的回归来预测2D投影和3D目标中心的深度;同样,采用了一个基于多格(Multi-Bin)的朝向估计策略:对目标角度位于k个格的概率进行分类,并对目标角度与边框的射线方向之间偏移角的余弦和正弦进行回归。



看到其输出的,是维度偏差、图像位置和深度偏差、多个朝向角度的概率以及偏移角度的余弦和正弦。

下图是定义实例向量的示意图:为了一致性,物理坐标归一化为[0,1]。



而如图是用于逐像素实例向量预测和掩码分割的R-CNN头架构图。



最后看一些结果示例:从上到下依次是使用单目、立体图像和激光雷达点云的3D检测结果,这里还使用实例向量表示形式可视化重建的目标形状。




“Pseudo-LiDAR++: Accurate Depth for 3D Object Detection in Autonomous Driving“, 2019,8

在3D空间检测汽车和行人等物体在自动驾驶中起着不可或缺的作用。现有方法在很大程度上依靠昂贵的激光雷达传感器来获得准确的深度信息。最近已经将伪激光雷达(pseudo-LiDAR)用作一种有前途的替代方案,仅基于立体图像的话其成本要低得多,但仍然存在明显的性能差距。

本文通过改进立体深度估计,为pseudo-LiDAR框架做出了实质性的进步。具体而言,调整立体视觉网络架构和损失函数,使其远目标的深度估计更加精确(当前这是pseudo-LiDAR的主要缺点)。这里基准的深度估计算法是CVPR‘18发表的PSM-Net(Pyramid stereo matching net work)模型。

进一步,用便宜但极稀疏的激光雷达传感器,虽然作为3D检测信息不足,但能使原来的深度估算偏移减小。这是一种在初始深度估计指导下进行深度传播的算法,将这几个精确的测深度值分散到整个深度图上。

下图是深度估计和校正方法的效果说明。绿色框是KITTI数据集车辆的真实位置。红点是通过立体视差网络获得的。通过立体深度网络(SDN,stereo depth network)获得的紫色点更接近真实。经过一些激光雷达测量值(黄色)的深度传播(蓝点)后,汽车正好位于绿色框内

下图是改进的立体深度估计流程图:(顶部)立体深度网络(SDN)从左右图像构建深度成本容积(cost volume),并对直接深度估计进行了优化;(底部)基于图的深度校正算法(GDC)通过稀疏激光雷达测量来细化深度图。其中灰色箭头表示观察点。



附上一个伪代码实现的GDC算法。



最后看一些结果图:本文在获得pseudo-LiDAR数据后,采用三个基于激光雷达点云数据的3-D目标检测算法,即AVOD、PIXOR和Point-RCNN;这里展示的是P-RCNN在KITTI验证场景不同输入点云的检测结果,包括前视图图像和鸟瞰(BEV)点图;真实边框为红色,预测边框为绿色。观察者从BEV图的左手边向右看。换句话说,右侧的真实框离观察者更远(即更深),因此很难定位。



“Improving 3D Object Detection for Pedestrians with Virtual Multi-View Synthesis Orientation Estimation”,2019,7

对于自动驾驶,准确估计行人的方向是一项重要且具有挑战性的任务。该文提出一个灵活的虚拟多视图合成(Virtual Multi-View Synthesis)模块,用于3D目标检测方法改善朝向估计。为实现精确的朝向估计,该模块使用多步过程获取所需的细粒度语义信息。

首先,使用结构保留的深度完整(depth completion)算法对场景的点云进行致密化,并用对应的RGB像素对每个点进行着色。接下来,将虚拟摄像机放置在致密点云中的每个目标周围,生成新的视点,从而保留目标的外观。该模块极大地改善了KITTI基准中具有挑战性的行人朝向估计。

如图概述3D行人姿势(pose)估计的流程图。给定一组3D检测,每个检测由质心T =(tx,ty,tz),尺寸D =(dx,dy,dz)和基于欧拉角的朝向O =(θ,φ,ψ)参数化,目的是提供感兴趣目标朝向更准确的估计。对于KITTI基准,假定俯仰角(pitch)和横滚角(roll)为零,仅考虑偏航角或航向角θyaw。

该方法核心思想是从带RGB颜色的致密点云中生成目标逼真的新视点,依此提取目标的丰富语义信息,得到更准确的朝向估计。首先,基于现有3D检测器的性能,把3D检测作为质心提议。这些提议由虚拟多视图合成模块处理,该模块用密集点云重构得到一组新视图。重要的是,这些视图是将虚拟摄像机放在和每个目标质心一致的位置在一组规范的摄像机视点中创建的。与剪裁的ROI相比,这些虚拟相机生成的目标视图更好地保留目标的3D形状和外观。

每个生成的新视图分别通过CNN,然后通过朝向回归输出头估计各自朝向。合并这些朝向估计得到最终朝向的输出。最后,由于流水线中使用的3D检测器是基于具有较高召回率(recall)的基础上选择的,这里使用鲁棒的2D检测器进行误报抑制(false positive suppression)。



如下图是虚拟相机放置示意图。虚拟相机放置在与每个目标质心等距的位置,相对于从原始相机中心到目标质心的光线,这个视点的范围是−25º至25º,如图中黑色虚线所示 (仅显示11个摄像机位置中的3个)。



最后是结果例子:文章工作采用AVOD-FPN作为3D检测器,如下图是有和无朝向模块的AVOD-FPN检测的比较。从左到右:AVOD-FPN,VMVS,真实值。AVOD-FPN可检测到所有行人实例,但对于几个目标的朝向估计很差,在检测中还包括误报。VMVS估计的朝向与实际情况更接近,同时还消除了误报。




“Class-specific Anchoring Proposal for 3D Object Recognition in LIDAR and RGB Images”,2019,7

在现实生活应用中,例如自动驾驶汽车,通常二维空间检测是不够的,需要的是对周围环境的3D精确识别和定向。因此,在3D环境下准确有效地检测目标与广泛的工业应用变得越来越相关。但是,构建检测3D目标系统是一项艰巨的任务,因为它依赖于来自不同传感数据的多模式融合。

该文工作用当前最好的3D目标检测器研究锚(anchoring)框的效果。基于目标大小和纵横比的锚框聚类,其提出一种类特定的锚框提议(CAP,Class-specific Anchoring Proposal)策略。实验看出,锚框聚类可显着增强RPN所提出的RoI性能。

如图所示,该研究RGB图像和激光雷达点云数据,探索针对3D目标识别的AVOD算法(CVPR‘17)的CAP策略的影响。该框架采用RBG图像和相应的3D点云输入,预测3维边框,将目标分为三类:自行车,行人和汽车。该框架的主要组成部分是鸟瞰视角(BEV,Bird-Eye-View)图生成、CAP策略和AVOD模型,其中模型包含三个网络:编码器-解码器网络、区域提议网络网络(RPN)和最终检测和姿态估计网络。



为了找到适合特定类锚框的大小,它用K-均值聚类和高斯混合模型(GMM)方法。根据RGB和BEV特征图对锚框进行裁剪和大小调整,生成的张量进行融合保持来自两个来源的信息。基于建议的锚框,RPN生成兴趣区域(ROI)。所选ROI覆盖了包含要检测的所需目标的区域。最终检测和姿态估计网络对ROI偏移量进行回归,并确定每个ROI的类。

最后,下图给出实验结果例子。左边是AVOD框架,而右边是CAP-AVOD框架。




“MVX-Net: Multimodal VoxelNet for 3D Object Detection”,2019,4

尽管一些方法融合了来自不同模态的数据,但是要么在复杂的流水线中依次处理模态,要么做后融合而无法在早期学习不同模态之间的交互。多模式VoxelNet(MVXNet)用语义图像特征增强激光雷达点云,并在早期学习做到图像和激光雷达特征的融合,实现精确的3D目标检测。

其中有两个融合模块:1)PointFusion,早期融合,将激光雷达传感器的点投影到图像平面,然后从预训练的2D检测器提取图像特征。然后在VoxelNet架构共同处理图像特征和相应点云的联合;2)VoxelFusion,将VoxelNet创建的非空3D体素(voxel)投影到图像上,然后用预训练的CNN模型从每个投影体素提取图像特征,之后池化这些特征并附加到每个体素的VFE(voxel feature encoding)特征编码中,由3D RPN进一步生成3D边框。最后,对KITTI数据集的评估表明,与仅用点云数据方法比,该方法性能有了显着提高。

如图是MVX-Net PointFusion方法概述。该方法用预训练的2D faster-RCNN卷积滤波器计算图像特征图。用标定信息将3D点投影到图像上,并将相应的图像特征附加到3D点上。VFE层和3D RPN处理汇总的数据并产生3D检测。



而下一个图是MVX-Net VoxelFusion方法概述。同样地,该方法用预训练的2D faster-RCNN卷积滤波器来计算图像特征图。用标定信息将非空体素投影到图像获得ROI。每个ROI的特征放入池化,并附加到VFE层计算的体素特征。3D RPN处理汇总数据并产生3D检测。



采用的Faster-RCNN框架由区域提议网络(RPN)和区域分类网络(RCN)组成。将ImageNet预训练的VGG16模型用作基本网络,并用2D检测数据集的标注数据对Faster-RCNN网络进行微调。

文章选择VoxelNet体系结构作为基础3D检测网络是因为两个主要原因:(i)消费原始点云并消除对手工特征的需求;(ii)提供自然有效的界面,用于在3D空间组合不同粒度的图像特征,即点和体素。

VoxelNet算法由三个模块组成:(i)体素特征编码(VFE)层(ii)卷积中间层,以及(iii)3D区域提议网络。

最后,下图是结果例子:(a)VoxelNet,(b)带VoxelFusion的MVX-Net,(c)带PointFusion的MVX-Net。绿色框表示检测结果,红色框突出显示漏检和误报。



“Sensor Fusion for Joint 3D Object Detection and Semantic Segmentation”,2019,4


是Uber自动驾驶的工作,是对其纯激光雷达数据的目标检测器LaserNet(CVPR‘19论文“LaserNet: An Efficient Probabilistic 3D Object Detector for Autonomous Driving”)的推广,一种图像数据与LiDAR数据融合的方法,实验表明这种传感器融合方法,特别是在长距离情况下,提高了模型的检测性能。图像数据的添加非常简单,不需要图像标注。先前的工作多是将3D目标检测和语义分割作为单独的任务进行处理,而该方法扩展了模型的功能,除了执行3D对象检测之外,还执行3D语义分割。将两个任务合并为一个模型能够更好地利用自动驾驶汽车可用的计算资源。另外,该方法可以端到端地训练无需其他2D图像标注。

首先,看看LaserNet的架构,如图所示:传感器的固有距离的视图表示构建致密的输入图像;图像通过全卷积网络传递产生一组预测;对图像中的每个激光雷达点,预测一个类别概率,然后在顶视图回归边框的概率分布;这些点分布通过mean shift聚类组合减少各个预测的噪声;整个检测器经过端到端的训练,损失在边框角点计算;在推断时,用一种自适应的非最大抑制(NMS)算法消除重复的边框分布。



现在和摄像头图像融合的方法如下图所示:两种传感器形式均表示为图像,特别是3D数据使用激光雷达的原始距离视图表示;该方法将3D点投影到2D图像上,将激光雷达点与相机的像素关联,并且此映射也用于从相机图像的信息变换(warp)到激光雷达图像;该方法并没有如图所示的将RGB值变换,而是融合CNN提取的特征;然后,将激光雷达和相机特征合为一体传递给LaserNet,然后对整个模型进行端到端训练,执行3D目标检测和语义分割。



最后,看结果如下图给出的一些有趣的成功和失败例子。(顶图)检测到一大排停放的摩托车中的每辆摩托车。(第二行)检测到距离自动驾驶车约50-60米的几辆自行车,这时候激光雷达点云是比较稀疏的。(第三行)网络将下车的大多数人点云分类为车,但是仍然产生正确的边框,这是在激光雷达点云预测边框的好处。(下图)由于右侧道路的高度陡峭变化,模型错误地将道路的点预测为背景。



“3D Object Detection Using Scale Invariant and Feature Reweighting Networks”,2019,1

该方法叫尺度不变和特征权重网络(SIFRNet,Scale Invariant and Feature Reweighting Network),用集合抽象(Set Abstraction,SA)模块和点特征传播(Feature Propagation,FP)模块改进网络。

其中Point-Unet子网实现尺度不变性并捕获朝向信息,重点是利用前视图图像和视锥(frustum)点云生成3D检测结果,T-Net子网最初是用于兴趣点的集中,在网络中使用SA模块不仅学习全局特征还考虑额外的激光雷达反射强度特征。

同时,系统中PointSIFT模块提高3D分割的性能,捕获空间不同朝向的信息以及不同尺度形状的鲁棒性;Point-SENet模块获得有用的特征并抑制较少信息的特征,该模块重新加权通道特征并更有效地估计3D边框。

如图是整个系统的流程图:注意三个模块,即Point-Unet,T-Net和Point-SENet。



关于Point-UNet的体系结构,如图所示:网络输入数据是N×3 维的3D点云,相应额外数据是3通道的N×3 RGB图像和N×1激光雷达反射强度图(N是点云数);首先,通过两个集合抽象(SA)模块提取点云特征,这些模块包括卷积和池化操作;由于Pointnet无法考虑点云的朝向信息以及缺乏形状尺度的适应性,因此引入基于Pointnet ++分割网络的PointSIFT模块;在全局SA模块之前,有两个PointSIFT模块。



再看T-Net的体系结构,如图所示,其主要估计3D边框中心,并将兴趣点转换到边框中心。在此过程之后,后续网络仅需要进一步预测最终3D边框的残差位移量。网络的输入是Point-UNet的兴趣点。提取的特征是激光雷达的反射强度。SA模块提取3D点云的全局特征。接着两个全连接层预测负中心坐标,其添加到原始输入点即实现点云的平移。该网络在功能上类似于残留网络结构的平移网络(translation network)。


Point-SENet的输入是来自T-Net的3D点云,没有用额外的特征。首先,执行2个逐点卷积以获得高维点云特征。由于一般CNN并未考虑所有通道特征的关系,导致一些无用的特征传播到后续网络,降低整个网络的性能。这里将SENet模块扩展到3D空间,直接在3D点云运行。

Point-SENet模型的第三次卷积获取SENet模块的输入特征。首先,压缩(squeeze)操作由全局最大池化层而不是全局平均池化层实现,将空间信息聚合到通道特征。其次,两个全连接层和一个sigmoid函数完成激励操作。

最后是一些结果图:第一列2D图像的2D检测结果。第二列投影在2D图像的3D框。最后一列展示激光雷达上的3D检测结果。其中真实框为红色,预测框为蓝色。

上述内容,如有侵犯版权,请联系作者,会自行删文。

重磅!3DCVer-学术交流群已成立

欢迎加入我们公众号读者群一起和同行交流,目前有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

长按加群或投稿

动驾驶交流群

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款
 圈里有高质量教程资料、可答疑解惑、助你高效解决问题

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53567
 
1028 次点击