微信号:ai-front

介绍:面向17W+AI爱好者、开发者和科学家,提供最新最全AI领域技术资讯、一线业界实践案例、搜罗整理业界技术分享干货、最新AI论文解读.每周一节技术分享公开课,助力你全面拥抱人工智能技术.

揭秘无人车视力谜题,单目摄像头如何实现精准感知

2018-10-11 14:00 AI前线

演讲嘉宾|陈光
整理|贾凯强
编辑|Debra
AI 前线导读:本期 AI 前线社群分享邀请到了百度美研 Apollo 感知团队资深软件架构师陈光,为我们带来 《基于单目摄像头的物体检测》 的内容分享。本场直播的讲师和内容提供来自百度。

更多干货内容请关注微信公众号“AI 前线”(ID:ai-front)

大家好,我是来自百度智能驾驶事业群的感知组成员陈光,今天非常荣幸能和大家分享 Apollo 2.5 和 3.0 里广泛使用的单目摄像头物体检测模块。

摄像头是无人车系统中最重要的传感器之一,具有明显的优点和缺点:廉价、高帧率、信息丰富、观测距离远,但是易受环境影响、缺乏深度信息。因此,如何建立高准确率、高召回率的物体识别系统,是无人车感知模块的核心问题。在本期演讲中,我们从单目检测的框架和原理讲起,分别介绍 Apollo 单目摄像头的物体识别,2D 到 3D 的回归,单目测距等算法。本次演讲将会从以下四个方面展开:

一、物体检测模型中的算法选择

二、单目摄像头下的物体检测神经网络

三、训练预测参数的设计

四、模型训练与距离测算

一、物体检测模型中的算法选择

物体检测 Object Detection 是无人车感知的核心问题,要求我们对不同的传感器(如图中覆盖不同观测范围 FOV 的无人车传感器)设计不同的算法,去准确检测出障碍物。例如 Apollo 中,为 3D 点云而设计的的 CNN-SEG 深度学习算法,为 2D 图像而设计的 YOLO-3D 深度学习算法等。

物体检测要求实时准确的完成单帧的障碍物检测,并借助传感器内外参标定转换矩阵,将检测结果映射到统一的车身坐标系或世界坐标系中。准确率、召回率、算法时耗是物体检测的重要指标。本次分享只覆盖 Apollo 中基于单目摄像头的物体检测模块。

相关文献如下:

1.Object Detection with Discriminatively Trained Part Based Models. IEEE Trans. PAMI, 32(9):1627–1645, 2010.

2.Faster RCNN, ICCV 2015

3.SSD: Single Shot MultiBox Detector, ECCV 2016

4.yolo9000: Better, Faster, Stronger, CVPR 2017

5.Focal Loss for Dense Object Detection, ICCV 2017

在众多物体检测模型中,我们如何选择最合适的算法?尤其在以 2-stage 为代表的 Faster-RCNN, RFCN 和以 single stage 为代表的 SSD、YOLO 之中应该如何选择?CVPR 2017 一篇来自谷歌的论文《Speed/Accuracy Trade-offs for Modern Convolutional Object Detectors》做了比较细致的比较和评测。它将物体检测神经网络拆解为主框架 Meta-architecture 和特征描述模块 Feature Extractor。并选择了不同的组合方式,去验证模型的实效性和准确率。

如图所示,在 MS COCO 数据集上,YOLO V2 取得了实时速度下良好的检测准确率。Faster RCNN+ 重载的 Inception ResNet V2 虽然取得了最好准确率,但是时耗过长。完全不能满足无人车对实时性的要求。基于这种理论分析和在百度自有数据集上的评测,我们最终选择了 YOLO 作为主框架,以改进的 DarkNet 作为特征描述模块(Feature Extractor)。

二、单目摄像头下的物体检测神经网络

Apollo 2.5 和 3.0 中,我们基于 YOLO V2 设计了单目摄像头下的物体检测神经网络, 我们简称它 Multi task YOLO-3D,  因为它最终输出单目摄像头 3D 障碍物检测和 2D 图像分割所需的全部信息。

它和原始的 YOLO V2 有以下几种不同:

1. 实现多任务输出:

(1) 物体检测,包括 2D 框 (以像素为单位),3D 真实物体尺寸(以米为单位),障碍物类别和障碍物相对偏转角(Alpha Angle,和 KITTI 数据集定义一致)。下文会详细讲解各个输出的意义。

(2) 物体分割:车道线信息,并提供给定位模块,这里不做叙述。

2. 特征描述模块引入了类似 FPN 的 Encoder 和 Decoder 设计:在原始 Darknet 基础上中,加入了更深的卷积层(Feature Map Size 更小)同时添加反卷积层,捕捉更丰富图像上下文信息(Context Information)。高分辨率多通道特征图,捕捉图像细节(例如 Edge,Corner),深层低分辨率多通道特征图,编码更多图像上下文信息。和 FPN 类似的飞线连接,更好的融合了图像的细节和整体信息。

3. 降低每层卷积核数目,加快运算速度。例如我们发现卷积核数目减半,实验中准确率基本不变。

如前文所述,物体检测最终输出包括 2D 框 (以像素为单位),3D 真实物体尺寸(以米为单位),障碍物类别和障碍物相对偏转角(Alpha Angle,和 KITTI 数据集定义一致)等信息。

和 YOLO V2 算法一样, 我们在标注样本集中通过聚类,产生一定数目的“锚”模板,去描述不同类别、不同朝向、不同大小的障碍物。例如对小轿车和大货车,我们会定义不同的锚模板,去描述它们的实际物理尺寸。

为什么我们要去训练、预测这些参数呢?我们以相机成像的原理来解释:针孔相机 (Pinhole Camera) 通过投影变换,可以将三维 Camera 坐标转换为二维的图像坐标。这个变换矩阵解释相机的内在属性,称为相机内参(Camera Intrinsic) K。(本图及下文中部分图像引自三方论文等)

对任意一个相机坐标系下的障碍物的 3D 框,我们可以用它的中心点 T = {X, Y, Z},长宽高 D = {L, W, H},以及各个坐标轴方向上的旋转角 R = {ϕ, φ , θ}来描述。这种 9 维的参数描述和 3D 框 8 点的描述是等价的,而且不需要冗余的 8*3 个坐标参数来表示。

因此,对一个相机坐标系下 3D 障碍物,我们通过相机内参,可以投射到 2D 图像上,得到 2D 框 [c_x,  c_y,  h,  w]。从图中可以看到,一个障碍物在相机下总共有 9 维 3D 描述和 4 维 2D 描述,他们之间通过相机内参矩阵联系起来。

然而,只通过 2D 框 [c_x,  c_y,  h,  w],是没有办法还原成完整的 3D 障碍物信息。

三、训练预测参数的设计

而通过神经网络直接预测 3D 障碍物的 9 维参数,也会比较困难,尤其是预测障碍物 3D 中心点坐标。所以我们要根据几何学来设计我们到底要训练预测哪些参数。


首先利用地面平行假设,我们可以降低所需要预测的 3D 参数。

例如:(1)我们假设 3D 障碍物只沿着垂直地面的坐标轴有旋转,而另外两个方向并未出现旋转,也就是只有 yaw 偏移角,剩下的 Pitch Roll 均为 0。(2)障碍物中心高度和相机高度相当,所以可以简化认为障碍物的 Z=0。

从右图可以看到,我们现在只有 6 维 3D 信息需要预测,但还是没有办法避免预测中心点坐标 X 和 Y 分量。

第二,我们可以利用成熟的 2D 障碍物检测算法,准确预测出图像上 2D 障碍物框 (以像素为单位)。

第三,对 3D 障碍物里的 6 维描述,我们可以选择训练神经网络来预测方差较小的参数,例如障碍物的真实物理大小,因为一般同一类别的障碍物的物理大小不会出现量级上的偏差(车辆的高度一般在 2-5 米之间,很少会出现大幅变化)。而 yaw 转角也比较容易预测,跟障碍物在图像中的位置关系不大,适合通用物体检测框架来训练和预测。实验中也多次证明此项。

所以现在我们唯一没有训练和预测的参数就是障碍物中心点相对相机坐标系的偏移量 X 分量和 Y 分量。需要注意的是障碍物离相机的物理距离 Distance=sqrt(X^2+Y^2)。所以得到 X 和 Y,我们自然就可以得到障碍物离相机的真实距离,这是单目测距的最终要求之一。

综上,我们可以合理的推断出, 实现单目摄像头的 3D 障碍物检测需要两部分:

1. 训练网络,并预测出大部分参数:

(1)图像上 2D 障碍物框预测,因为有对应的大量成熟算法文献;

(2)障碍物物理尺寸,因为同类别内方差较小;

(3)不被障碍物在图像上位置所影响,并且通过图像特征(appearance feature)可以很好解释的障碍物 yaw 偏转角。

2. 通过图像几何学,来计算出障碍物中心点相对相机坐标系的偏移量 X 分量和 Y 分量。

四、模型训练与距离测算

模型训练上,我们需要注意一些潜在的细节:

1) 确保标注质量,尤其是 3D 障碍物框。可以借助激光雷达等来辅助标注障碍物尺寸,偏转角等等;

2) 定义合适的损失函数,可以参考 Zoox 的 paper 《3D Bounding Box Estimation Using Deep Learning and Geometry》;

3) 做好数据增强,避免过拟合, 图中简单描绘了一些 Data Augmentation 的方式。对于无人车,我们可以尝试更多的方法。

当我们训练好相应的神经网络,输出我们需要的各个参数之后,我们需要考虑的是如何计算出障碍物离摄像头的距离。根据之前介绍,通过内参和几何学关系,我们可以链接起图像中 3D 障碍物大小(单位为像素)和真实 3D 坐标系下障碍物大小(单位为米)。

我们采用单视图度量衡( Oxford 教授 A. Zisserman 的论文《Single View Metrology》)来解释这个几何关系:任一物体,已知它的长宽高、朝向和距离,则它在图像上的具体形状大小等可唯一确定;反之亦然。

如图中房屋的支撑柱,大小高度完全相同,但是处于图像的不同位置,所占用的像素、长宽都有差别。


基于单视图度量衡,我们可以建立一个哈希查询表,去根据物体图像尺寸,物理尺寸,朝向角来查询物体的距离。

对于每种障碍物,我们根据它的平均(或单位)尺寸,去建立查询表,覆盖 360 度 yaw 角的变化,来映射不同的距离。(例如 2D 框的 25 像素高,yaw 角为 30 度,则它的距离为 100 米,等等)。图中示例了一个小轿车在不同距离下、不同偏转角 yaw angle 情况下,在图像上的显示。

对于这样一个简单的算法,速度上可以达到 0.07 毫秒 / 每帧图像。而在准确率上,我们分别在 KITTI 数据集和 Apollo 内部数据集上做了评测。在 KITTI 上取得了很好的效果,0-30 米内障碍物误差大概在 1 米左右。随着距离增大,误差会增大,但是最终误差不超过 8%。

在 Apollo 数据集上,这个简单算法也取得了不错的效果。最大误差不超过 6%。

综上,我们可以整理出 Apollo 里单目摄像头下的障碍物检测流程图:输入单幅图像,预测大部分参数;基于单视图度量衡,我们可以预测出剩余的参数 距离和中心点坐标。

Apollo 里单目摄像头下的障碍物检测稳定快速,对繁忙路段和高速场景都可以适配。检测速度在 30HZ 以上。

Apollo 里单目摄像头下的障碍物算法已经成功入库到 Apollo 2.5 和 Apollo 3.0,并在 CIDI 等项目中使用。

以上就是本次社群分享的介绍和分享。非常感谢大家的参加!也欢迎大家提出问题,进行交流。更多 Apollo 相关的技术干货也可以继续关注后续的社群分享。

相关学习资料和自动驾驶相关技术内容,大家可以关注【Apollo 开发者社区】的微信公众号来获取,也可以在 Apollo GitHub https://github.com/ApolloAuto/apollo 上提出技术问题与我们互动,欢迎大家沟通交流!

Q & A

Q1:摄像头是否有考虑 HDR? 检测是在合成的 HDR 上检测,还是分别在不同曝光和增益图像下检测?

A1:在车辆颠簸的情况下,相机内参基本不会发生变化, 而外参可以借助在线标定(online calibration)得到的实时外参来帮助单目测距的准确性。

Q2:单目测距的原理是什么?对于静止目标与运动目标可以达到多少?据了解 Mobieye 的测距精度很高,而且对于运动物体的测量精度高于静止物体,能否分析一下原理。如何看待最近 IOS12 更新的 AR 测距功能,是否有借鉴的地方。

A2:单目测距的原理在 ppt 中有较为详细的分析:

(1)单孔成像原理(借助内外参矩阵的帮助)。

(2)单视图度量衡 single view Metrology。 Mobileye 的测距是比较精准的,基本原理类似。运动物体测距准确,这是考虑了上下帧的关联性(tracking)。tracking 本身会修正物体的朝向,真实速度等等。这些都会进一步提高单目测距准确率。 IOS12AR 测距原理可能是利用 depth from focus/defocus 的方法,拍摄多张不同聚焦深度的图片,然后利用多张图片进行深度估计,有可能对我们有一定的借鉴意义

Q3:除了摄像头还需要什么硬件,速度怎么样?能达到多少 fps?

A3:我们有不同的车载硬件,例如 NVIDIA drivePX2, 可以达到 30FPS。

Q4:一般说来,模型的提升需要图像数据指数级的增加,但大量的数据仍然存在高昂的标注成本,在目标检测这个任务中,从摄像头可以获得的数据随着无人车的规模扩大将飞速增长,有没有什么好的办法从海量数据中挖掘模型真正需要的训练数据来标注呢?

A4: 数据挖掘本身是一个非常重要的问题,好的数据挖掘一定是机器学习和人工标注的一个很好的平衡:利用一定量的标注数据,去训练一个基础模型;通过基础模型去海量数据中挖掘置信度高的样本,并添加到原始数据中做再次训练,拿到新模型;不停的迭代模型,并随机挑选一些图像,进行人工验证,把错检或误检的数据(hard example) 标注,来进一步更新模型。

这个方式要注意的就是平衡人工标注和自动挖掘的数量。在合理成本下得到最多最优质的标注数据(来自机器或人工标注)。

Q5: 如果用单目的话如何解决无法识别的障碍物测距问题呢?

A5: 无人车感知是一个多传感器融合的复杂系统,单目只是一个很好的方式,但它有自己明显的问题,例如依赖训练样本。对无法识别的障碍物,我们需要依赖激光雷达和多普勒雷达来进行检测,这些传感器本身测距非常准确。另外,这些传感器与相机的融合,会极大提高单目测距的准确性。

Q6:单目生成 3d 数据,怎么自己训练模型,准备数据?

A6: 在分享中有提到,模型的训练依赖于数据的高质量、损失函数的设计、数据增强的实现,等等。最初的算法验证可以借助 KITTI 或者 Apollo 开放的一些训练集来实现(如 ApolloScape)。

Q7: 单目摄像头的趋势是将算法处理集成到摄像头模块里还是摄像头只负责采集数据由工控机计算处理?

A7: 这是一个博弈的过程。算法复杂度和摄像头内置芯片的计算能力、功耗之间的博弈。从原始算法验证的角度,工控机来负责运算更灵活一些,因为摄像头选配等等需要实验。当相机硬件定型,算法定型之后,我们可以考虑更高效的模型加速,算法固化到硬件等等方式,降低功耗,并集成到摄像机模块里,成为 Smart Camera。

Q8: 单目摄像头测距的话,如何保证远距离目标的精度?

A8:随距离增加,测距精度会降低。需要其它传感器帮助,或者借助 tracking 来提高预测精度。传感器融合是感知最重要的核心思想。不同传感器要求挖掘自身优势,并认知自身劣势,达到相互弥补。摄像头测距的精度是远不如激光雷达,多普勒雷达的,这是传感器物理属性所致。

Q9: 如何能够有效避免阳光直射造成摄像头的眩光?

A9: 这涉及到图像预处理,例如 gain control 和 tone mapping。可以参考相关论文或技术。这是一个难点和大的研发方向。

Q10:请问 3Dbbox 会一直稳定的显示图像上,还是像 yolo 那样子会因为物体运动之后 BBox 会出现移动?

A10:会稳定显示在图像中。但我们目的主要是问题的测距、测角度、测障碍物大小和速度。

今日荐文

点击下方图片即可阅读

挑战谷歌英伟达?华为披露芯片+AI解决方案!




人工智能能给业务带来怎样的帮助?

有些公司还在用人工冒充 AI,有些公司已经在用人工智能提升用户增长了。在视觉搜索功能的帮助下,Pinterest 的公司业务和用户体验都有所提高。 线上实验表明, 用户在 related Pins 的参与度在视觉搜索技术的帮助下有了 5 -10% 的提高。LinkedIn 的推荐系统也极大帮助了用户的留存及增长。

QCon 上海 2018 邀请到硅谷有代表性互联网公司的技术专家,分享人工智能领域的前沿研发经验。大会报名最后一周。有任何问题欢迎咨询票务经理 Ring,电话:17310043226,微信:qcon-0410


如果你喜欢这篇文章,或希望看到更多类似优质报道,记得给我留言和点赞哦!

 
AI前线 更多文章 退出了!谷歌放弃美国防部百亿美元合同竞标 挑战谷歌英伟达?华为披露芯片+AI解决方案! 大数据凉了?No,流式计算浪潮才刚刚开始! 开源Kubeflow:在Kubernetes上运行机器学习 开源数据搜索软件公司Elasticsearch上市,市值近50亿美元!
猜您喜欢 内推 · 爱奇艺 · 测试开发 HTML5梦工场携手Cocos,引领行业新机遇 第 2 期技术微周刊,很全面的算法和数据结构知识 【2016-3-9】案例分享:鉴定“伪基站”发送广告信息案 快应用之开发体验纪要