刘宇达:解析深度学习的计算机视觉技术在无人驾驶中的应用

向作者提问
美团技术团队官方账号
查看本场Chat

2018年10月23日,周二晚上8点30分。曾就职于微软,曾获 ACM 亚洲区域赛金牌,美团无人配送部资深算法工程师刘宇达带来了主题为《基于深度学习的计算机视觉技术在无人驾驶中的应用》的交流。以下是主持人飘静整理的问答实录,记录了作者和读者问答的精彩时刻。


内容提要:

  • 文章里提到检测分为一步检测和两步检测,这二者有什么区别?
  • 文中提到了 Roi-Pooling,它具体的过程是怎样的?
  • 分割模型 FCN 中先下采样再上采样,为什么要这样折腾?
  • 分割在无人驾驶中的应用有什么实际的落地场景吗?
  • 距离估计有这么多种方式,目前业界主要是用哪种?
  • 美团的无人车在计算机视觉方面都做过什么功能?
  • 有人说没有特别制定的道路作配合(特定场景下),无人驾驶实现起来很困难,怎么看待这种说法?
  • 能否介绍下利用相机做 3D 检测的技术 ?RGB-D 深度图像在 3D 检测中的运用?
  • 无人车上做机器视觉都需要什么样的嵌入式硬件?
  • 现在主流的车载机器视觉方案都有哪些?
  • 视觉检测的结果怎么应用到车辆控制的决策?这是其他团队的工作还是视觉团队工作的一部分?自动驾驶通常怎么分工合作的?
  • SSD 可以通过修改哪些训练参数,达到检测较小目标的目的?有没有更好的网络模型可以应用在嵌入式平台做目标检测的?
  • 视觉检测主要是双目还是多目?应用深度学习之后,实时性怎么样?
  • Fast-RCNN 为了避免重复计算,在第一层特征层上直接提取输入模型,该算法候选框是咋得到的,是和 R-CNN 一样在原始图像上得到还是在第一层特征上得到的?
  • 视觉检测和激光 SLAM 的侧重点是什么?
  • Autoware 的解决思路能介绍一下吗?
  • 无人驾驶算法的开发环境是 VS 吗,就是如果想研究代码的话,有开源的代码吗?有的话直接下载到 VS 里就可以吗?
  • 分割模型时间和准确率的对比,来自于道路实测还是一些网上的公开图片集?
  • 无人驾驶领域岗位需求还多吗?就业前景如何?
  • 基于视觉检测轨迹线进而实现车辆的循迹控制在美团无人小车上是否有考虑?
  • 整个网络输出 NxNx(5xB+C) 的 Tensor 这个是怎么计算出来的?
  • Apollo 中有提到 2Dto3D 的技术,请问在实际运用的时候 如果只有图像输入能否完成这个 2Dto3D 的过程?
  • 高精地图具体指什么,原文中后半部分分隔章节中有“现在的无人驾驶都是基于高精地图,而这种基于可行驶区域的方案是一种脱离高精地图的方案。”疑惑现在的无人驾驶(基于高精地图的)难道不需要在三维空间中建立可行驶区域吗,那车岂不是跑出道路了?
  • 无人驾驶现在距离真正商用还有多远?在技术层面上主要是哪些问题影响了真正商用?
  • 感知领域应用到无人车的算法有哪些?是基于常见算法的魔改吗?
  • Yolo V3 的速度是比较快的,请问有没有 Yolo 来解决图像语义分割的方法?可以给几个例子参考下吗?最近也在看试图将目标检测网络和图像语义分割网络融合一个网络里,你认为难点在哪里?
  • 想研究目标检测的迁移学习,对于新的目标种类,一般需要多少新的标签数据?有没有办法降低需要的样本数吗?有没有相关的开源实现可以参考?
  • 现在的无人驾驶是把道路从背景中分割出来然后实现的吗(可能辅助高精地图信息)?如果是分割的话,是不是需要跑一段相似路况进行分割网络的参数训练?之前说到的把区域投影到鸟瞰图上是不是指无人车前端采集的图像吗?
  • 像 Apollo 这种效果的实现检测时候仅仅输入图像就行了吗?

问:文章里提到检测分为一步检测和两步检测,这二者有什么区别?

答:两步检测是先生成一些可能存在目标的框,再去微调这些框,而一步检测则是直接去计算最终目标的框。通常来讲两步检测比一步检测准确率高一些,速度慢一些。但是近年来一步检测算法也有很多改进,准确率已经基本提上来了,相差并没有那么明显。具体的应用还是需要结合具体的业务场景。


问:文中提到了 Roi-Pooling,它具体的过程是怎样的?

答:比如我们要让 Feature-Map 经过 Roi-Pooling 输出一个固定尺寸7x7的特征,那么我们将原本的 Feature-Map 划分成7x7块,然后在每一块中做 Pooling,最终得到的就是7x7的一个向量。假如原本的 Feature-Map 尺寸是21x21,那么刚好每一块是3x3的大小。但是如果不能整除,是需要取整的,并且取整会引入较大误差。后来的 Mask-RCNN 模型提出了 Roi-Align 方法来减小这一步引入的误差。


问:分割模型 FCN 中先下采样再上采样,为什么要这样折腾?

答:因为卷积过程是比较耗显存的,下采样的过程中减小图像尺寸增大图像 Channel,提取更丰富的特征。如果没有下采样显存会承受不住。而之后再把结果上采样到原本尺寸是为了符合原始的输出维度。


问:分割在无人驾驶中的应用有什么实际的落地场景吗?

答:美团这边利用分割去实时的计算可行驶区域,然后根据轮廓构建出了实时地图,这个地图可以指导车辆行驶,让其不会超出道路边界。更进一步的应用是将车道线信息加入进来,使得实时地图的信息更加丰富。车道线可以通过类似分割的模型来识别。


问:距离估计有这么多种方式,目前业界主要是用哪种?

答:目前最主要的还是激光测距,这个算出的距离是最可信的。单目深度测距在学术界目前比较火,有很多种方法,但是在工业中实际落地的偏少。第五种根据相机内参计算距离的方法在 Apollo 中也有所使用。


问:美团的无人车在计算机视觉方面都做过什么功能?

答:我们致力于实现特定场景下低成本的解决方案,目前有基于视觉的障碍物识别、交通信号检测、车道线检测、可行驶区域识别、实时地图的构建等多种功能。


问:有人说没有特别制定的道路作配合(特定场景下),无人驾驶实现起来很困难,怎么看待这种说法?

答:这个问题可以理解为是目前无人驾驶对高精地图比较依赖,需要对道路进行预先采集建图,才能让车正常行驶。百度的 Apollo 中也有一些纯基于视觉的不依赖高精地图的方案,但是只能在限定场景下工作。比如 Apollo2.5 版本中的视觉方案是只能在高速上单车道保持场景下使用。现在的主流技术就是这样,其它的方案还需要一段时间的发展。


问:能否介绍下利用相机做 3D 检测的技术 ?RGB-D 深度图像在 3D 检测中的运用?

答:基于 RGBD 的 3D 检测在学术方面是比较火的,但是由于这种 RGBD 相机在室外场景下普遍效果不是很好,受光照影响很大,所以业界无人车采用这种技术的比较少。我的工作对这方面的算法没有太多的研究。


问:无人车上做机器视觉都需要什么样的嵌入式硬件?

答:目前主流是车上放服务器用 GPU 跑模型,如果公司模型比较确定的话也有一些公司做成 FPGA 的解决方案。美团这边也有做小车(小机器人),也使用过 TX2 平台做研发,但是这种平台就无法承受太沉重的计算。


问:现在主流的车载机器视觉方案都有哪些?

答:不同公司会有不同的解决方案,比如 Apollo 开源出来的就是视觉检测障碍物、车道线等相关技术。我们公司也和业界其它公司有一些交流,有很多种方案。目前还处于一个百花齐放的状态。


问:视觉检测的结果怎么应用到车辆控制的决策?这是其他团队的工作还是视觉团队工作的一部分?自动驾驶通常怎么分工合作的?

答:通常自动驾驶团队可以分为感知、定位、控制、地图,我在等就是感知团队,我们负责感知障碍物、交通信号、交通标志等类似人眼看的工作。感知团队的结果会提供给控制团队,控制团队根据周围的障碍物信息、根据现在所在位置(定位团队)、周围的环境信息(高精地图)来确定车到底应该怎么行驶,进而发出具体的指令控制车辆。


问:SSD 可以通过修改哪些训练参数,达到检测较小目标的目的?有没有更好的网络模型可以应用在嵌入式平台做目标检测的?

答:应用在嵌入式平台的话我们有尝试过 Mini Yolo,速度比较快比较轻量,但是准确率会降很多。至于 SSD 的调参可以尝试针对性的设计 Anchor,其它的就可能要针对具体情况具体分析了。也可以去搜一搜一些专门针对小物体检测的论文,看看思路能否借鉴。


问:视觉检测主要是双目还是多目?应用深度学习之后,实时性怎么样?

答:无人车中的视觉检测主要还是单目,由于实际场景要求,所以使用的模型必须要确保实时性,特别慢的模型就不会被考虑了。双目的视觉检测在一些较小的车辆,比如无人配送车(物流、外卖等)倒是有些应用。至于多目的话就要根据实际需求了。有些无人车会有环视的需求,那就需要周围放一圈摄像头。但是每增加一个摄像头,对系统资源的负载都会增加很多,对资源的消耗会暴增。也有些公司会把摄像头和芯片做成一个完整的解决方案,不增加主系统的负载。

双目确实能获取深度信息,但是他的原理导致了只能保证近处的深度信息比较准。而无人驾驶中我们可能需要感知上百米的距离,所以双目可能较难应用。


问:Fast-RCNN 为了避免重复计算,在第一层特征层上直接提取输入模型,该算法候选框是咋得到的,是和 R-CNN 一样在原始图像上得到还是在第一层特征上得到的?

答: FastRCNN 的候选框与 RCNN 相同,仍然是使用 SS 算法等得到的,但是提取每个候选框对应的特征是在第一层特征上提取的。他的主要改进就是减少了原本 RCNN 中每次提框的特征时大量的重复计算。


问:视觉检测和激光 SLAM 的侧重点是什么?

答: SLAM 更偏向于机器人领域,我们的工作不涉及 SLAM 相关的技术,所以回答不了 SLAM 的侧重的。至于视觉检测的侧重点和传统学术领域差不多,但是在某些场景下会对召回要求很高。比如如果我把汽车识别成了卡车,可能问题没那么严重,但是如果漏检了一辆车,那么就可能引发危险。


问:Autoware 的解决思路能介绍一下吗?

答:大概就是先用一个二维的检测给出图片中的框,然后将每个激光点根据相机和激光的位置转化到图像当中,然后我们就可以知道哪些点打到了这个物体上。由于激光的点都是三维的,是含有距离信息的,我们就可以经过一些过滤得到这个物体的位置。感知的输出就是哪些障碍物、位置在哪里。


问:无人驾驶算法的开发环境是 VS 吗,就是如果想研究代码的话,有开源的代码吗?有的话直接下载到 VS 里就可以吗?

答: VS 只是一个 IDE,算法的开发并不会被 IDE 局限,所以这点并没有太严格的限制。目前最好的开源代码还是百度的 Apollo,lo,https://github.com/ApolloAuto/apollo,Apo,Apollo 的开源很大程度上推动了业界的发展,代码质量也非常高,很值得学习。另外 Apollo 倒是给出了如何使用 VS 来开发的文档。


问:分割模型时间和准确率的对比,来自于道路实测还是一些网上的公开图片集?

答:文章中的那个时间和准确率的对比来自 ICNet 论文中的图片,是各个模型在 Cityscapes 数据集上的评测。这个数据集是无人驾驶公开的、比较权威的数据集。很多公司会在这个数据集上刷榜来表明技术实力。


问:无人驾驶领域岗位需求还多吗?就业前景如何?

答:无人驾驶的公司很多,总的岗位需求还是很多的。但是由于这几年 AI 热潮,转到 AI 方向的候选人也非常多。从今年校招来看各个公司都出现了竞争极其激烈的现象。目前是比较需要有相关的经验的资深候选人,至于应届生的就业前景就不好说了,还是要看大趋势。


问:基于视觉检测轨迹线进而实现车辆的循迹控制在美团无人小车上是否有考虑?

答:小车和大车很主要的一个区别就是计算资源。甚至可能都无法使用 GPU。所以小车上具体能应用什么技术还是要看模型资源消耗的。小车上针对视觉进行复杂的处理可能比较困难。


问:整个网络输出 NxNx(5xB+C) 的 Tensor 这个是怎么计算出来的?

答:图片被分为了 N*N 个网格,每个网格都有同样格式的预测输出,所以是 NxN。每个网格会预测 B 组位置信息,每个位置信息包含候选框的四个坐标和1个可信度,同时每个网格以 One-Hot 的形式预测一个物体类别,总共有 C 个类别,就是(5*B+C)。


问:Apollo 中有提到 2Dto3D 的技术,请问在实际运用的时候 如果只有图像输入能否完成这个 2Dto3D 的过程?

答:图像中的一个点转换到三维空间中是一条线(就像大家拿着笔从一侧看过去就是一个点),如果我们给出一个平面,那么这条线就可以和平面有一个交点,进而确定位置。比如我们是知道摄像头的高度的,然后选择地面作为这个平面,那么我们就可以根据图像计算出在地面上的物体的距离。


问:高精地图具体指什么,原文中后半部分分隔章节中有“现在的无人驾驶都是基于高精地图,而这种基于可行驶区域的方案是一种脱离高精地图的方案。”疑惑现在的无人驾驶(基于高精地图的)难道不需要在三维空间中建立可行驶区域吗,那车岂不是跑出道路了?

答:业界对于高精地图倒是没有非常明确的定义,但是高精地图中会包含很多非常详细的信息,比如这条路有几条车道,车道线都在哪里,道路有多宽,周围的环境和交通标志是怎样的。在实际行驶时车辆结合高精定位,就可以知道自己处于高精地图中哪个位置,知道位置的环境,也就可以知道应该如何行驶。

至于文中提高的可行驶区域,我们会把区域投影到鸟瞰图上,只要在鸟瞰图车辆正常行驶不跑出道路,基本实际就不会跑出道路。


问:无人驾驶现在距离真正商用还有多远?在技术层面上主要是哪些问题影响了真正商用?

答:目前业界一些公司也有推出限制场景下的量产解决方案,但是距离大规模的 L5 级的自动驾驶还有些距离。一方面的限制是成本,比如一个激光雷达就要好几十万,成本过高是无法量产的。另外就是安全性的一些考虑。比如做到了99%可用已经很高了,但是没法用。想再做到99.9%可用、99.99%甚至更高,难度会翻无数倍。需要面对各种复杂的路况和天气。


问:感知领域应用到无人车的算法有哪些?是基于常见算法的魔改吗?

答:主要是学术界的一些算法,比如检测、分割、跟踪、深度预估,也有一些传统的算法比如卡尔曼滤波。


问:Yolo V3 的速度是比较快的,请问有没有 Yolo 来解决图像语义分割的方法?可以给几个例子参考下吗?最近也在看试图将目标检测网络和图像语义分割网络融合一个网络里,你认为难点在哪里?

答: Apollo 中的视觉方案就是一个 Yolo 模型同时解决检测和分割问题,分割出的结果用于车道线的检测,你可以参考下。自己设计的话可能要尝试的地方比较多,比如 Loss 的设计,模型的结构。这段时间我们与创新工场合作办了个无人驾驶感知的比赛,就是希望选手将检测和分割结合到一起。


问:想研究目标检测的迁移学习,对于新的目标种类,一般需要多少新的标签数据?有没有办法降低需要的样本数吗?有没有相关的开源实现可以参考?

答:针对这个问题,可以看下 CVPR2018 的 Best Paper,就是讲的各种迁移学习之间有何联系,有些任务可以相互促进减少数据集的需求。


问:现在的无人驾驶是把道路从背景中分割出来然后实现的吗(可能辅助高精地图信息)?如果是分割的话,是不是需要跑一段相似路况进行分割网络的参数训练?之前说到的把区域投影到鸟瞰图上是不是指无人车前端采集的图像吗?

答:把道路从背景中分割出来只是一种解决方案,这种方式是需要采集路面数据进行标注训练的。在图像中得到了地面的轮廓,就可以根据上面提到的计算地面上的点的距离,得到这些区域在鸟瞰图上的结果。


问:像 Apollo 这种效果的实现检测时候仅仅输入图像就行了吗? enter image description here

答: Apollo 的检测过程只需要图像输入。但是作为感知一个整体考虑的话还需要定位信息等其他模块辅助。


本文首发于 GitChat,未经授权不得转载,转载需与 GitChat 联系。

微信扫描登录