公开课精华 | 3D物体检测的发展与未来
公开课内容包括如下几部分,3D物体检测的研究背景,定义及应用,学术界近期发展主要方向,未来趋势和祁博士本人的研究心得分享。本文总结于现任Waymo高级科学家祁芮中台博士在深蓝学院关于3D物体检测的公开课研究内容。祁博士作为PointNet, PointNet++ 等目标检测知名算法提出者,主要研究方向包括深度学习,计算机视觉和自动驾驶等。
-----本文约4000字,预计阅读10分钟 -----
(建议友友们收藏后,有时间时结合公开课视频仔细学习哟~)
3D物体检测的研究背景
近几十年随着互联网行业的高速发展,我们目睹了在虚拟世界海量信息的高度整合和处理,但这些改变,似乎并没有建立和“现实世界”紧密的联系。
在Google,Facebook,Amazon这些公司如日中天的这些年,其实,现实世界也在和人工智能逐渐建立更多的联系,从2005年无人车首次完成DARPA挑战赛,到Kinect等传感器的发布,再到诸如KITTI,ShapeNet等数据集的出现,现实世界也在和AI建立更多的互动。
当下,自动驾驶也如火如荼的发展着,尽管如此,AI在物理世界,在机器人领域的应用还有很长的路要走。当下超高市值的巨头公司主要是在虚拟世界取得巨大成功的企业,那在未来五年,会不会有更多的企业通过在物理世界的AI应用,创造更高价值呢?我们拭目以待。

3D检测的介绍
3D检测算法的信息输入有很多种传感器数据来源,包括普通图像,深度图像,激光雷达的点云数据等。而处理后的输出信息也有很多可能性,包括物体的定位,形状,具体的语义——物体的状态,物体的类别等。我们通常会用平均精度(average precison)来评判检测器的好坏。
物体检测的应用领域也是非常多样的,比如在自动驾驶中,需要检测出不同物体的位置和类别;在AR中需要增加对场景的识别和理解;为了让机器人执行物体抓取等任务,我们也需要知道物体的位置,类别等等。
关于3D目标检测的算法,最早的方法是基于模板的,包括特征提取,描述,匹配,方向调整等步骤,但因为我们需要为目标对象建立对应的特定模板,然后再匹配,有时候这种方法无法应用在更广泛的物体种类和场景,同时,一系列繁杂的流程也让优化空间相对较小。
第二种常见的方法是通过聚类或分割得到可能的物体块,然后再从特征将它们分类成前景和背景。这是一种自底向上的方法。
另一种流行的方法是通过滑动窗口法把检测问题转化为分类问题,传统的分类器通常用“手工特征”和支持向量机(SVM),这一方法的主要问题在于计算量太大,因为对于空间每个位置都要进行用分类器分类;因为是局部分类,这种方法也无法充分利用场景里物体间的关系。
虽然上述关于物体检测的算法都有比较明显的问题以及局限性,但是这些方法却为后人的工作做了很重要的铺垫,而这一切,也让我们迎来了物体检测的深度学习时代的到来。而这个时刻的到来,也有三个主要的先决条件,第一个是越来越多的3D数据集和传感器的出现,第二个是针对2D图片已经有很多的突破性算法,第三个是基于点云,深度图像的深度学习方法的集体崛起。
深度学习下的3D目标检测
关于3D物体检测在深度学习时代的开始,要提到2016年的一篇论文Deep Sliding shapes for amodal 3D object Detection in RGB-D images,在这篇论文里,作者提出用深度学习来产生具体的 object proposal,而不是简单的分类,尽量它基于3D CNN的网络结构在时间和空间上都非常的占用资源,但依然不能忽略它的开创性。
而当下,关于3D物体检测主要有三种思路,第一,是以2D图像处理为驱动的算法,第二种是是以降低维度为思路的算法,而当下流行的第三种,是以利用3D信息的稀疏性(sparsity)为思路的方法。

关于图像驱动的3D目标检测,它的核心思路是利用已经比较成熟的2D目标检测器进行目标识别,之后可以直接从图像估计3D物体位置与姿态,也可以利用图像重建的三维信息或直接结合深度图像进行3D检测。
在我发布于CVPR 2018的论文 Frustum PointNets for 3D object detection from RGB-D Data中, 一种将RGB图像和点云数据数据结合进行目标检测的方法被提出,其出发点就是去充分利用RGB图像对应的高分辨率以及丰富的纹理特征,并且结合点云数据精准的3D几何信息和深度信息。
利用2D信息,我们可以得到二维的物体框,然后,在三维的视锥中,我们采用3D神经网络去寻找物体,当然,这种方法也面对一定的问题,首先就是前方障碍物的阻碍会影响物体的识别,其次,将目标与临近物体进行分割也需要技巧。
而在Frustum PointNets中,通过相对精巧的处理,比如对实例进行分割时以点云信息而不是以图像信息为准,注重对于点云进行合理的坐标转换,最后检测的效果也有了明显提高。
在KITTI数据中可以观察到对应的效果:面对较严重的遮挡,物体大部分时候还是可以被成功检测。尽管当场景光线较差,或者多个物体重叠时,检测效果依然有待提高。

除了通过图像信息来辅助物体检测外,针对3D数据,第二种思路是将三维点云信息通过核处理(kernel)或者手工的特征转化为鸟瞰图,再在网格里进行卷积处理等操作。
这种方法的优势在于计算速度快,可扩展性强,可以用在光流的预测,物体的分割等应用中。然而,这种方法的局限性在于,在更复杂的场景或者面对地面不平的路况,效果有待提高,并且因为降维过程中丢失了部分信息,最后的结果也受到影响。

最后一种方法是利用三维点云的稀疏性设计的3D物体检测算法。它的核心想法是直接在点云而不是在网格中进行计算和proposal,我们试图结合稀疏结构的网络架构和利用稀疏性的proposal方法(而不是anchor-based),比较有代表性的就包括我发表的PointNet++。
在2D检测中经常使用RPN(region proposal network)的结构,但是它的设计是基于二维图像密集的像素分布 -- RPN会在二维空间均匀的产生proposal。
但是在三维空间中,传感器一般只采集到物体表面的深度信息,而物体中心都是未被探测的,所以3D数据是十分稀疏的,直接在这种稀疏数据中采用RPN就会存在大量计算的浪费。
为了避免这种计算浪费,我们试图直接从物体表面产生proposal,提出了基于voting的思路,从物体表面的点产生通往中心的vote,再通过结合vote来产生proposal。
其实这种voting的想法在经典算法广义霍夫变换就被提出,只不过这种方法当时没有和深度学习结合,也没有整体优化,而我们的方法可以端对端进行整体优化并最终也取得了很好的效果。

对未来目标检测方向的思考
关于未来目标检测的发展,首先,我们将会有更丰富的输入信息,可能包括多相机,多个激光雷达等各种多模态的信息,如何结合和处理这些信息还有很多的工作,而且在单一传感器的检测效果收敛之后,多模态就会作为提高效果的一种重要手段,除此之外,针对时间维度的连续信息,比如视频等,如何提供一个相对平滑的结果?
还有,我们能否可以从机器学习的角度来看待物体检测,将自监督学习、半监督学习、多任务学习等和3D物体检测结合起来。检测算法的可迁移性(跨地域、跨传感器)也是一个重要课题。在机器人领域,目标检测有时候会更关注具体的实例(instance detection)而不是它对应的广义类别,这也是当下没有得到重点关注,却有很大潜力的课题。最后,针对一些细节问题,比如被大幅度遮挡的物体,或者单目相机获取的2D信息,如何从这些信息源获得更好的3D识别效果,也还是值得一定探索的。

关于科研的建议
关于学术研究,最重要的可能就是最开始的选题,如果选题的方向正确合理,那就意味着百分之五十的成功,之后如果选择的数据合适、评价标准客观,那就又成功了百分之二十五。选题的思路可以有很多种,可以依据当前技术发展的节点和对应的挑战,比如我们现在希望将AI应用到机器人身上,那么是不是就需要解决物体检测的相关问题呢?我们可以多思考一些类似的问题,争取在技术成熟前进入这个领域,开展课题研究。
横向比较同样也是一种思路,比如2D的目标检测已经做得很好了,那是不是3D的情况下也可以借鉴其思路来提高呢?还有就是在工程实践中寻找思路,比如去好的公司实习,我们可以看到公司所面对的技术难题,然后这也就是需要突破的课题。而选题失败或者失误有时候也是难免的,比如选的题目太难,无从下手,或者选的题目太广,感到无的放矢,这时候,及时的调整方向就非常重要。
在选题之后,优秀的工程能力也是很重要的,因为这才能保证快速更新迭代,在实践的过程中,跟着有经验的人学习往往是一条捷径,但我们自身也应该去主动观察思考和总结,从细节中学习并举一反三。比如在一个项目完成后,可能就会有很多延伸的想法,能否去顺着这些想法开展接下来的工作呢?这可能就会带给你更广阔的思路。
在学术研究的过程中,我们也要记得奥卡姆剃刀的原则,就是最简单的方法往往就是最正确的,去追求简约而不是复杂,对于提出的新方法,不应该去追求把它设计或者表达的高深莫测,晦涩难懂,而是应该避免过于复杂的结构,用简洁的语言把它表达清楚,对于简单的方法,有时候即使没有达到state of the art的效果,但如果它能在内存消耗和速度上展现明显的优势,那么它也不失为一种好方法。
*感谢深蓝学员何常鑫同学的整理,非常感谢祁芮中台博士对本文章的审核与修改。

关于此次公开课,大家还有疑问么?欢迎在评论区交流~
我们会将大家的疑问挑选后反馈给公开课老师哟~