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

干货第一时间送达

前言

前两篇文章:3D目标检测深度学习方法中voxel-represetnation内容综述(一)、3D目标检测深度学习方法中voxel-represetnation内容综述(二)分别介绍了当前voxel-representation方法的backbone和主流的研究进展。即目前主要可以分为如下的几个方向做出研究内容的改进:
(1)refine(2)loss(3)fusion(4)backboe -structure(5)others。
前面的文章中已经介绍到了基于refine和loss研究工作,这一篇主要介绍剩下的在3D目标检测中做研究的思路。

1. Fusion

1.1多模态融合和单模态多特征融合

就研究中的Fusion工作,也可以分为多模态信息融合和单模态多特征的融合。可以按照如下图来理解这里二者的差异,下图表示的是如果采用多传感器信息融合则是多模态,这一部分研就目前受到一些限制,比如因为view角度的不同,多传感器的信息精准融合是需要准确的信息;其次,在多传感器信息融合时需要考虑到时间帧问题,如果具有时差的数据融合也是很具有难度的。值得一提的是,目前很多研究工作都热衷于基于lidar的单模态做研究,做融合的工作还有着很大的发展空间的。

单模态多特征信息融合可以用如下的特征框表示。即可以采取多特征提取的方式对lidar数据做不同的特征提取,然后通过特征融合模块得到融合后的特征,再通过RPN网络学习到bounding-box的七个维度信息。

1.2 多模态特征融合

这里分享比较近的两篇文章。第一篇是来自浙大和阿里的合作工作,发表在AAAI20上的PI-RCNN。文章地址是:https://arxiv.org/pdf/1911.06084.
具体的网络结构如下。可以理解为一个两阶段的方法,其中stage-1是利用了在综述(一)中的backbbone提取高质量的3D候选框;而stage-2则是一个信息融合和候选框优化的过程。该阶段会利用通过对二维图像进行语义分割得到的分割后的图像信息。

具体的融合模块如下图所示。

1.首选第一步是根据image和lidar的映射关系<下面括号是补充知识>(该映射关系根据图像到点云的投影矩阵计算得到,可以表示为下图所示的意思,每一个点实际上是可以和部分像素存在空间上的映射关系的,但是值得提到的是,由于KITTI数据中的相机存在多个,并且不同相机之间的数据是存在重叠的,也就是点云中一个点的数据可能是对应着不同相机在同一时刻拍摄到的图像中的某一块像素,所以选择哪个view拍摄到的图像也是需要做研究的,此外,这种通过映射关系的融合(目前也只有这种融合)存在image和point的尺度不对等问题,也就是说point的远近在图像中所对应的pix的数量也是不一致的,但是也都符合两种传感器的特性,即越远对应的细节信息越少)。

2.根据上面的索引关系可以得到每一个点对应到二维分割的特征信息,然后作者再采用了一个注意力模块将特征维度降维提取,最后做multi-feature的concat在一起做三维点云上的refine。

本文的大概思路也就是如此,但是是第一个在将二维特征信息通过检索到三维点上的研究工作,之前的多模态融合的特征融合都是在feature上做融合,而本文的融合则是在refine模块做的融合,进一步的提高了检测的performance.

第二篇分享的文章来自CVPR20的研究工作,pointpainting。文章地址:https://arxiv.org/pdf/1911.10150.pdf
也是一个将二维分割特征融合进三维点云的多模态信息融合工作,如下。作者给出的问题是在image中可以对小物体,例如杆子和行人清晰的辨认出,但是在Lidar模态中,看上去却很相似,因此作者想把这部分在image中可以清晰被辨认出的信息融合到在点云信息中,以提升目标检测的精度。

融合的方式和上文的PI-RCNN的又不一样,本文则是将分割得到的特征直接附加给点云,再送入到目标检测的框架中,而不是在refine阶段再做特征信息融合。可以简单的理解为“early-fusion”的概念,不做过多的处理直接把分割信息和点云最原始的特征叠加在一起。作者在多个baseline上做了实验对比,均显示这种多模态分割信息是有助于做3D目标检测任务的。

1.3 单模态多特征融合

由于这个系列都在介绍lidar的研究工作,那么仅仅依靠lidar特征,做特征信息融合应该怎么做;这里把之前稍微有介绍到的文章再做另外的角度的理解。
第一篇文章是来这CVPR20的HV-Net,文章地址为:https://arxiv.org/pdf/2003.00186
如下图所示,本文的核心思想是改变多组voxel划分的参数大小,对不同尺度的信息做提取,然后再多Multi-scale的特征融合。也就是说在对每一组不同的voxel参数做特征提取时,会采用一个同样的方法做多尺度的信息提取。最后也就会对应着一组特征,再利用类似二维图像中FPN的结构对multi-scale的特征进行融合即可。

第二篇在单模态上做特征融合的工作可以是CVPR20上表现最为出色的工作PV-RCNN。之前也有很多笔者写了很多的解读。文章地址是:https://arxiv.org/pdf/1912.13192.pdf。
同时最近笔者也看了原作者在B站上关于3D目标检测的一些内容讲解,地址分享:https://www.bilibili.com/video/BV1E741177wr/
强烈推荐做相关研究的同学去看一下。
回到正文,如下图所示,PV-RCNN是一个两阶段的方法,其中stage-1也是用在综述(一)中所介绍的稀疏backbone,通过该backbone提出高质量的候选框,然后通过二阶段的优化进一步得到最终的回归框,但是在文章的refine阶段是多特征voxel特征在点上的融合,如下图所示的内容,multi-scale的voxel的特征经过索引回到point-representation,最后通过作者提出的ROI-Pooling模块得到经过融合后的key-points在grid-points上的特征表示。最后通过grid-poits做进一步候选框的优化。

可以说,本文的研究工作不仅仅是一个multi-scale的voxel的特征信息融合,同时也是point和voxel的融合。point的方法具有可变多尺度感受野的特征,而voxel的方法的高效性在本文中也得到了很好的体现。

2.Backbone-Structure

在网络结构上做出创新的工作目前都需要在representation上做出创新,比如今年CVPR20上的PointGCN通过对point-cloud做建图然后设计图卷积网络作为backbone,在笔者之前的博客中有细致的讲到过这一篇文章,按分类也不能再分为voxel-represntation的表示形式。
这里笔者也介绍两篇在voxel领域中的新的backbone-structure。

2.1 cube voxels和sphere voxels

如下图所示,为两种不同的voxel表达形式,笔者之前综述中也介绍到了cube-voxels的表达形式,但是实际上在ICCV19上的一篇文章提出了通过划分sphere来做为voxel对局部的点做特征提取。对比cube形式,sphere最大的好处在于没有朝向问题,我们知道假如目标检测的一个car在一个cube的anchor中,那么需要对该朝向首先设置一个标准值(目前是90度和180度,也有更多的,比如在文章fast-point-rcnn中设置的是45,90,135和180四个角度),但是在sphere的anchor中则不需要这样的设置,这样可以减少倍数的anchor占用。

2.2 对应研究工作

作为介绍性文章,只对文章做主要内容介绍,不做过多的探究。要想获得深刻的认识需要阅读原文和对应的代码。
第一篇文章是上面提到的ICCV19的STD,文章地址为:https://arxiv.org/pdf/1907.10471
来自腾讯优图和港科大的研究工作,是一年前的工作了。为一个两阶段的方法,如下图所示。
(1)第一个阶段PGM是通过一个man-made的球形anchor生成一个proposal(这就和voxelnet系列不一样了,voxelnet系列都是预先定义一个anchor每个anchor一个proposals,而不是要生成一个proposal,最大的区别是:voxelnet系列的特征是以小size的anchor为单位的,而这一篇文章则是以一个“proposal”提取的),作者是先通过语义信息对每一个点生成一个球形anchor,再通过nms得到最终的分类proposals,接下来是pointpool层得到每一个proposals的特征,采用的是VFE。
(2)第二阶段则是作者的IOU Branch和Box Prediction Branch的结合。(感觉这才是巨大的创新)

STD在KITTI上的表现在当时是很好的,下面这一篇是最近才放在arxiv上的研究工作,可以说是STD的后续研究,来自电子科技大学,目前就其在论文中展示的精度,超过了PV-RCNN,获得了新的冠军,按照投稿的单栏形式,应该是NIPS20。
文章地址:https://arxiv.org/pdf/2006.04043
主要网络结构如下图所示,如果说它是一个fusion的研究工作也是可以的,作者提出了新的voxel-graph的表示形式来进一步优化在voxel表示中存在的问题。voxel-based的方法对Local-pointnets的局部之间不能建立联系。所以本文从这个点出发建立了Voxel-GraphAttention Network。该网络首先在球型体素内构造局部graph,然后再通过voxels构造全局global KNN。这里的局部的graph和全局的graph用于注意力机制去强化提取到的特征。可以看出在sphere-voxel-graph的模式下特征通过图得到了更好的提取和融合。

最后看一下该文章在KITTI-test数据集上的表现,如下。可以看出比高居榜首长达半年的PV-RCNN还要推进了1个点。非常好的工作,开源后一定要研读一番。

3. 补充知识

3.1 3D-Bbox可视化

也是因为笔者最近参加了一个训练营,其中有一个赛题是和该项目相关,所以在对场景可视化方面做了一下工作。
如下图,可以看出128线的数据具有以下的几个特点:

  • 点云场景稠密

  • 场景中的object比较多,相对KITTI而言多很多,场均有50+,而kitti一帧能有10个已经是很多的了

  • 全场景的数据标注(对于KITTI而言仅仅在FOV视角下的点才得以保留,原因是KITTI的标注只有FOV内)

  • 点云数据Z轴朝上(对于KITTI是Y轴朝上,因此旋转轴是Y轴)

  • 以右手系建立,其中z轴指向上方(在KITTI中y轴指向上方),读取的文件信息(****.bin)包含了(x,y,z,intensity),也是分别和三轴位置对应。

bbox可视化

读取到的信息是Bbox的中心(x,y,z)和对应的长宽高(l,w,h分别对应着坐标轴的x,y,z三个轴),以及对应的z轴顺时针旋转角(yaw)
所以可视化的想法就是从上面的label信息得到bbox的八个角点,然后通过把对应的角点连线画出bbox即可。解决思路可以分解为两步:

1.在不考虑旋转角度情形下计算八个角点的x,y,z的坐标。

2.在得到的每一个角点的基础上加入旋转角度,这里的数据考虑的是沿着z轴的顺时针旋转。笔者以一个点为例展示三维旋转矩阵的求取。

所以最终坐标转换代码为:

defboxes3d_to_corners3d_camera(boxes3d, bottom_center=False):    boxes_num = boxes3d.shape[0]    l,w,h=boxes3d[:, 3], boxes3d[:, 4],boxes3d[:, 5]    x_corners = np.array([l / 2., l / 2., -l /2., -l / 2., l / 2., l / 2., -l / 2., -l / 2], dtype=np.float32).T    y_corners = np.array([w / 2., -w / 2., -w /2., w / 2., w / 2., -w / 2., -w / 2., w / 2.], dtype=np.float32).T    z_corners = np.array([h / 2., h / 2., h /2., h / 2., -h / 2., -h / 2., -h / 2., -h / 2.], dtype=np.float32).T    ry = boxes3d[:, 6]    zeros, ones = np.zeros(ry.size,dtype=np.float32), np.ones(ry.size, dtype=np.float32)   rot_list = np.array([[np.cos(ry), np.sin(ry),zeros ],                         [-np.sin(ry),  np.cos(ry), zeros],                         [zeros,      zeros,       ones]]) # (3, 3, N)    temp_corners =np.concatenate((x_corners.reshape(-1, 8, 1), y_corners.reshape(-1, 8, 1),                                  z_corners.reshape(-1, 8, 1)), axis=2) # (N, 8, 3)    rotated_corners = np.matmul(temp_corners,R_list)  # (N, 8, 3)    x_corners, y_corners, z_corners =rotated_corners[:, :, 0], rotated_corners[:, :, 1], rotated_corners[:, :, 2]    x_loc, y_loc, z_loc = boxes3d[:, 0],boxes3d[:, 1], boxes3d[:, 2]    x = x_loc.reshape(-1, 1) +x_corners.reshape(-1, 8)    y = y_loc.reshape(-1, 1) +y_corners.reshape(-1, 8)    z = z_loc.reshape(-1, 1) + z_corners.reshape(-1,8)    corners = np.concatenate((x.reshape(-1, 8,1), y.reshape(-1, 8, 1), z.reshape(-1, 8, 1)), axis=2)    return corners.astype(np.float32)

通过mayavi可视化如下:

推荐阅读

[1] PI-RCNN: An EfficientMulti-sensor 3D Object Detector with Point-based Attentive Cont-conv FusionModule
[2] Multi-view 3d object detection network for autonomous driving
[3] PointPainting: Sequential Fusion for 3D Object Detection
[4] HVNet: Hybrid Voxel Network for LiDAR Based 3D Object Detection
[5] STD: Sparse-to-Dense 3D Object Detector for Point Cloud

本文仅做学术分享,如有侵权,请联系删文。

推荐阅读:

  • 专辑|相机标定

  • 专辑|3D点云

  • 专辑|SLAM

  • 专辑|深度学习与自动驾驶

  • 专辑|结构光

  • 专辑|事件相机

  • 专辑|OpenCV学习

  • 专辑|学习资源汇总

  • 专辑|招聘与项目对接

  • 专辑|读书笔记

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

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

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近1000+星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

3D目标检测深度学习方法中voxel-represetnation内容综述(三)相关推荐

  1. 3D目标检测深度学习方法之voxel-represetnation内容综述(二)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前言 前面的一篇文章:3D目标检测深度学习方法中voxel-represetnation内容综述(一) ...

  2. 3D目标检测深度学习方法数据预处理综述

    作者 | 蒋天元 来源 | 3D视觉工坊(ID: QYong_2014) 这一篇的内容主要要讲一点在深度学习的3D目标检测网络中,我们都采用了哪些数据预处理的方法,主要讲两个方面的知识,第一个是rep ...

  3. 3D目标检测深度学习方法之voxel-represetnation内容综述(一)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前言 笔者上一篇文章有介绍了3D目标检测中比较重要的数据预处理的两个方面的内容,其一是几种repres ...

  4. 深度学习数据驱动_3D目标检测深度学习方法数据预处理综述

    作者 | 蒋天元 来源 | 3D视觉工坊(ID: QYong_2014) 这一篇的内容主要要讲一点在深度学习的3D目标检测网络中,我们都采用了哪些数据预处理的方法,主要讲两个方面的知识,第一个是rep ...

  5. 「 工业缺陷检测深度学习方法」最新2022研究综述

    作者丨专知 来源丨专知 编辑丨极市平台 导读 基于深度学习的工业缺陷检测方法在各种生产与运维场景中扮演着重要角色.本文将对工业缺陷检测的任务定义.难点.挑战.主流方法.公共数据集及评价指标等进行全面归 ...

  6. ECCV20| 3D目标检测时序融合网络

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文转载自「计算机视觉工坊」,该公众号重点在于介绍深度学习.智能驾驶等领域,一个小众的公众号. 论文题 ...

  7. ECCV20 3D目标检测新框架3D-CVF

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前言 这一篇文章主要介绍一篇发表在ECCV20上的采用多模态融合的3D目标检测的文章,并总结一下目前多 ...

  8. CVPR 2021 | 论文大盘点:3D目标检测

    作者丨我爱计算机视觉@知乎 来源丨https://zhuanlan.zhihu.com/p/389319123 编辑丨3D视觉工坊 本篇汇总 3D 目标检测相关论文,包含基于单目.基于深度图.基于激光 ...

  9. 史上最全综述:3D目标检测算法汇总!

    来源:自动驾驶之心 本文约16000字,建议阅读10+分钟 本文将演示如何通过阈值调优来提高模型的性能.本文的结构安排如下:首先,第2节中介绍了3D目标检测问题的定义.数据集和评价指标.然后,我们回顾 ...

最新文章

  1. ASA防火墙11 应用层检测
  2. asp php 用户登录,一个简单的asp.net 单点登录实现
  3. redis设置key的有效期
  4. Ansible Synchronize
  5. [Android开发]zip文件压缩解压缩
  6. MySQL与Redis缓存问题-开课吧
  7. Miller Robbin测试模板(无讲解)
  8. 用Jmeter+Badboy+Fiddler做接口测试
  9. C# 如何理解如下泛型约束 class AT:where T:class{}
  10. 项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(综述)
  11. arcgis怎么压缩tif文件_PDF文件怎么进行压缩?教你两招!
  12. 嵌入式开发板硬件操作入门学习3——电机驱动板
  13. 上海 -》 张家界 旅行 计划10.1
  14. node aws 内存溢出_如何使用Node和AWS S3设置简单的图像上传
  15. amazon开发者申请,pii权限申请
  16. JDBC 第一章 JDBC概述
  17. 有画快说番外篇-张聪-专题视频课程
  18. linux oracle ins 30131,Oracle安装报错:[INS-30131]Oracle Database Configuration Assistant
  19. Java工程师学习指南(2019最新版)
  20. hadoop出现Permission denied (publickey,password)的问题

热门文章

  1. JQuery Autocomplete实战
  2. 【网络文件共享】02、NFS服务基础
  3. Oracle 11gR2构建RAC之(3)--安装grid前环境检测
  4. rsyslog概要以及源码安装mysql,rsyslog输出到Mysql基于loganalyzer查看分析
  5. H3C静态路由、Track与BFD联动配置举例
  6. jQuery-this与$(this)的区别
  7. 新装myeclispse8.6GA、@Override出错
  8. 接手一个网站后应做什么
  9. 开会迟到,代码不规范,晚上八点半去健身,跟leader坐电梯自己先出去!某新入行程序员被疯狂吐槽!...
  10. 年薪80万技术专家,面试通过后,被发现简历造假!合并8年前多段工作!惨遭警告和淘汰!...