公开课精华 | 无人驾驶中感知的挑战与尝试
本文总结于深圳元戎启行公司点云感知方向技术负责人邹晓艺,在深蓝学院的关于无人驾驶中感知的挑战与尝试的公开课演讲内容。
主讲人邹晓艺来自深圳元戎启行公司,曾在百度IDL和ADU部门工作过,是百度 apollo::lidar::cnnseg算法的作者,也是CSDN相关领域的博主。
1. 无人驾驶中感知的简介
2. 无人驾驶中感知的挑战
3. 基于Deep learning的感知算法
4. 基于Physical的感知算法
5. 一些思考和一些open problems
1. 无人驾驶中感知的简介
下图是一个无人驾驶系统的流程框图。
Picture from: Chen S, Liu B, Feng C, et al. 3d point cloud processing and learning for autonomous driving[J]. arXiv preprint arXiv:2003.00601, 2020.MLA
前端sensor获取环境中的信息,送给感知模块和定位模块,感知模块将输出信息输入到预测模块,进行轨迹速度等预测,然后进行决策和汽车控制。无人驾驶的传感器有多个sensor,如下图是元戎启行的汽车传感器(车顶部分),中间有一个主雷达,两边有两个盲区雷达,然后四周也有RGB普通的摄像头。
在汽车行驶过程中,从传感器中获得的数据如下图,下面的是激光雷达传感器的数据,上面是RGB摄像头的数据。
无人驾驶中的感知部分功能有3D目标检测、目标跟踪、红绿灯检测、目标轨迹预测、车道线和车道线检测等等模块。
2. 无人驾驶中感知的挑战
Picture from: Cui Y , Chen R , Chu W , et al. Deep Learning for Image and Point Cloud Fusion in Autonomous Driving: A Review[J]. 2020.
接下来,主讲人举了一些例子,展示无人驾驶中感知的困难所在。
第一点,感知场景是复杂的。如下图,感知不仅要识别出常见的车辆、拥挤的行人、自行车等,也要识别出一些标志物、警示物、施工点和动物等等。
第二点,类内差异大。如下图,虽然都是货车和摩托车,但是外观差异很大。
第三点是,类间差异小。如下图是三种激光雷达得到的不同车尾的数据,由于缺少了纹理信息,货车、公交车等车在激光雷达中看到的区别很小。
第四点,未定义的类别。如下图,感知过程中会有一些诸如倒下的单车、轮胎、玩具等未定义的物体出现。
http://www.robosense.cn/news/1574090713599
第五点,恶劣天气影响,如下图所示,这些天气对激光雷达和RGB摄像头的成像都会有较大影响。
Picture from: Kenk M A, Hassaballah M. DAWN: Vehicle Detection in Adverse Weather Nature Dataset[J]. arXiv preprint arXiv:2008.05402,2020.
第六点,噪声。如下图,在汽车行驶的过程中,不仅有传感器的噪声,也会有环境的噪声,如路面溅起的水花,扬起的灰尘。
第七点,移动端实时性和功耗。无人驾驶的算法复杂,传感器获得的数据量多,但由于功耗限制,自动驾驶车载计算单元的算力是非常有限,同时无人驾驶需要满足低延时的要求。所以要求感知模块需要在这有限算力的基础上对这些数据进行实时的处理。
3. 基于Deep learning的感知算法
接下来介绍基于Deep Learning的相关无人驾驶感知算法。分为两个部分,一个部分是基于点云的3D目标检测,另一个是基于图像和点云的Fusion算法。
首先是基于点云的3D目标检测。下图是一帧点云,任务目标就是用长方体框检测出点云中的目标(位置、大小、朝向和类别等等)。
激光雷达生成的点云是稀疏的,不规则的,无序的且缺少颜色信息。如下图所示,左边是汽车点云,右侧是行人点云,可以发现距离越远,点云越稀疏,这种随着距离变化的稀疏性,也会带来很大的挑战。
Picture from:
http://www.robosense.cn/news/1574090713599
同时,在点云,同一个目标有可能是不完整的,如下图所示。左图中间靠前位置有一个货车,点云只显示了车头和车尾,中间是断裂的,右图虽然把中间的货物扫描到了,但是整体依旧是断裂成了3部分,这种断裂会影响到障碍物的检测,从而影响下游的跟踪等任务。
现在的主流3D点云检测的方法分为两种,一种是基于Deep Learning的方法,其对噪声较为鲁棒,分割效果较好,但是解释性较差。另一种是基于Physical的方法,即非机器学习的方法,可解释性较好,但是对噪声敏感,容易出现过分割和欠分割的问题。这两种的方法在工程实践中可以互相补足。
Picture from: Yang G, Mentasti S, Bersani M, et al. LiDAR point-cloud processing based on projection methods: a comparison[J]. arXiv preprint arXiv:2008.00706, 2020.
主讲者认为对于Deep Learning的方法,由于深度学习特点在于如何建立分层结构,从而获得越来越大的感受野和更高阶的语义特征。而应用到点云上,其实就在于如何去找到点云中点与点中间的关系,从而从邻域中建立起不同层级的感受野。
主讲者以PointNet++的结构为例,采用这种层级的结构,以k近邻或者球型领域的方法,提取邻域感受野特征。
点云还可以转换成不同输入形式的数据,除了直接以点集(采样后)的形式表示,还可以以图(graph)的形式表示,或者体素化,或者投影到鸟瞰图(Bird’s Eye View)、环视图(Range View)、极坐标图。
其中点云的体素化可以使用传统卷积算子(3D或者2D卷积)来处理,但是缺点是有一定的量化误差,丢失了原始点云准确的几何结构。不过体素化有另一个优点是可以比较容易做多尺度,即每个体素格子的大小,决定了尺度的大小,而且点云特征和体素特征也可以通过操作进行相互转化,如下图所示》
接下来主讲人介绍了几个3D点云检测的工作。
OpenPCDet:这是一个商汤科技开源的3D点云检测库,整合了多种3D点云检测方法,基于PyTorch实现。
Apollo::lidar::cnnseg:这是主讲人在百度的工作,网络采用类U-NET网络结构,将点云投影到俯视图,进行特征提取来做检测和实例分割。
PointPillar:提出了一种新颖的点云编码器,将点云提取特征得到Pillar(柱子)形式的稀疏伪2D图像,然后使用2D的卷积算子进行处理,使用2D的检测方法(如SSD)做目标检测。
HVNet:提出了一种新的基于点云的三维物体检测的统一网络:混合体素网络(HVNet),通过在点级别上混合尺度体素特征编码器(VFE)得到更好的体素特征编码方法,从而在速度和精度上得到提升。
PV-RCNN:提出了结合体素化和点云两种特征的新型网络结构,采用multi-scale的方法获得由voxel_based方法得到的高质量的proposals,然后再利用Point_based的方法获得精细的局部信息,该方法在很多的benchmark上的表现都很不错。
AFDet:提出了首个Anchor free、NMS free的3D点云目标检测算法,在嵌入式系统上有着较好的应用价值。
Range Conditioned Dilated Convolutions:提出一个新的卷积层,这个卷积层有一个可以根据距离来调整dilation rate,适应不同的尺度,可以较好地解决距离远近带来的点云稀疏性不一致的问题。
对以上的方法做总结:点云特征、投影视图特征、体素特征是可以互相补足的;特征的增强可以通过multi structure、multi scale、multi frames等方法来实现。
上述的算法都是基于点云的,接下来介绍一些基于图像和点云的Fusion算法。
由于点云仅能得到物体的shape信息,但是物体的颜色和纹理特征也很重要,此时就需要去融合图像的算法。一个有趣的地方是点云可以通过标定,投射到关联的图像上,如下图所示。当然,这种投射不是一对一的,因此是需要做插值的,如双线性插值。
图像和点云的Fusion有两种方式,一种是Result-level fusion,一种是Feature-level fusion。
前者是每个sensor自己处理自己的数据,在结果上做fusion,好处是其中一个sensor出故障了,不会导致整个系统挂掉,比较好做传感器冗余,缺点是不能很好融合不同sensor的特征,性能受限于单个传感器的性能上限。
后者是直接在特征上做融合,能提供互补的信息,值得注意的是,这种方法需要做的一点是如何融合各个sensor的优势特征,去除每个sensor的劣势特征(如图像容易受光照影响,点云容易受雨雾天气影响)。
接下来主讲人介绍了几个图像和点云的Fusion的工作。
MV3D:提出了一个多视角(Multi-View)的3D物体识别网络(MV3D),采用多模态的数据作为输入和预测3D空间的目标。从点云里面提特征出proposal,再在每个view上的特征提取关于proposal的特征,做检测。
sensor fusion for join 3d object detection and semantic segmentation:将点云特征和图像特征,在特征级别拼接到一起,然后使用LaserNet做检测和分割。
PointPainting:将图像的语义分割信息通过lidar信息和image信息的变换矩阵融合到点云上,再做检测。
SemanticVoxels:同样是将图像的语义信息融合到点云里,在通过融合pillar和voxel的特征做检测。
EPNet:网络分为点云特征分支和图像特征分支,在两个分支的不同的level上,做了二者的特征融合,融合的过程中添加了attention模块。
MVAF-Net:在不同的view的特征上,做attention,并且在attention模块也添加监督信息。
总结以上方法:fusion方法虽然很重要,但是在benchmark上提升并不明显;还有一个问题是,目前似乎比较少研发去探索,某个sensor丢失信息了,是否会导致融合的模型出现意想不到的结果。
4. 基于Physical的感知算法
比如在实际路测中,总会遇到深度学习算法中没有定义的物体,或者数据量很少(长尾分布)的物体;或者有的物体并不适合用bbox来描述从而不适用于检测任务,在这些情况,传统方法更合适。
传统方法怎么做呢?简单来说就是“你看到啥就是啥,别撞上就行”,就是认为点云有的东西,实际物理世界中是存在的,不能碰撞的。方法就是去除地面,进行聚类。关键在于如何让算法更稳定和更高效。
然而基于Physical的感知算法,也有一些问题。同一个物体在不同帧间的聚类是不稳定的,也因此不容易预测物体的运动速度;有的物体,例如扬起的灰尘,并不会影响驾驶,但是容易被识别成障碍物,因此需要增加一些去噪(灰尘等)的方法。
主讲人还提到使用全景分割的方法,将整个感知系统,置于一个网络中,采用multi-task的方法去做检测。同时也需要融合更多的时序上的信息来做检测。
5. 一些思考和一些open problems
1. 学术界和工业界是有一定的鸿沟的。在benchmark上的效果有时候并不一定能反应路测的效果。
例如有绿化带隔离的对向车道的物体在路测中并不需要特别高的精度,但是在benchmark上是一视同仁的,在benchmark上提升了好几个点的算法,在路测中对接管率而言也许并没有带来多大的效果提升。
还有就是有些非常影响驾驶的障碍物,不一定能在benchmark的几个点的提升中反应出来。这些鸿沟激励着我们去思考如何制定一个更符合现实无人驾驶场景的评价准则,包括检测、跟踪、速度预测、推理速度等评价准则。
2. 算法模型的泛化性很重要,因为现实数据是无法穷举,遇到一些检测失败的例子,也不容易分析和去做修正,毕竟模型是不易解释的,只能不断增加数据。
但越到后面,几个点的性能提升需要的数据可能是指数级的,这是需要大量成本的,但似乎人的学习是没这么低效的,人往往从少量的样本就可以学习非常高层的语义,从而具有非常大的泛化性。
这也是整个机器学习邻域需要研究的点。另外,不可解释性也会使得模型更容易受到攻击。而且增加数据训练是否修复了当下cases,但也影响了之前的cases。
3. 轨迹预测的groud truth有一些是不确定的,如在离转弯口还有一定距离的时候,真实场景中,人类也不知道前车是否转弯等等这种情况,拿这些groud truth去训练网络,网络也会很困惑。
无人驾驶是一项很有挑战性很有趣的工作,希望有更多的朋友加入这个行业,共同推动这个行业的发展。
感谢雍洋同学对本次公开课内容的整理,同时感谢元戎启行的审核。