写点什么

基于双目视觉的自动驾驶技术

  • 2019-08-29
  • 本文字数:3372 字

    阅读完需:约 11 分钟

基于双目视觉的自动驾驶技术

单目视觉是 Mobileye(ME)的看家法宝,其实当年它也考虑过双目,最终选择放弃。


单目的测距和 3-D 估计靠什么?是检测目标的 Bounding Box(BB),如果无法检测的障碍物,该系统就无法估计其距离和 3-D 姿态/朝向。没有深度学习的时候,ME 主要是基于 BB,摄像头标定得到的姿态和高度以及路面平直的假设估算距离。


有了深度学习,可以根据 3-D 的 ground truth 来训练 NN 模型,得到 3D 大小和姿态估计,距离是基于平行线原理(single view metrology)得到的。不久前百度 Apollo 公布的单目 L3 解决方案讲的比较清楚了,参考论文是“3D Bounding Box Estimation by Deep Learning and Geometry"。


双目当然可以算视差和深度了,即使没有检测出障碍物(因为有附加的深度信息,检测器会比单目好),也会报警。问题是,双目视觉系统估计视差没那么容易,立体匹配是计算机视觉典型的难题,基线宽得到远目标测距准,而基线短得到近目标测距结果好,这里是存在折衷的。


目前市场上 ADAS 存在的双目视觉系统就是 Subaru EyeSight,据说性能还行。



百度推出的阿波龙 L4 摆渡车量产 100 台,就安装了双目系统。还有欧盟自主泊车项目 V-Charge 也采用了前向双目视觉系统,另外自动驾驶研发系统 Berta Benz 也是,而且和雷达系统后融合,其中双目匹配的障碍物检测算法 Stixel 很出名。以前 Bosch 和 Conti 这些 Tier-1 公司也研制过双目视觉解决方案,但没有在市场上产生影响力,据说被砍掉了。


谈到双目系统的难点,除了立体匹配,还有标定。标定后的系统会出现“漂移”的,所以在线标定是必须具有的。单目也是一样,因为轮胎变形和车体颠簸都会影响摄像头外参数变化,必须在线做标定修正一些参数,比如仰角(pitch angle)和偏角(yaw angle)。


双目在线标定就更复杂些,因为双目匹配尽量简化成 1-D 搜索,所以需要通过 stereo rectification 将两个镜头光轴方向平行并和基线垂直。所以针对获得的 gain 相比,增加的复杂度和成本,如果不划算商家就会放弃。


最近重提双目视觉,是因为硅谷芯片公司安霸(Ambarella)在 2014 年收购意大利帕尔马大学的 Vis Lab,研制了双目的 ADAS 和自动驾驶芯片,去年 CES 之后就开始进军车企和 Tier-1。而且,安霸目前正在继续研究提升该系统的性能。


下图就是它在车顶安装 6 对立体视觉系统的示意图,其中它们的基线宽度可以不一样的,相应地有效检测距离也就不同。笔者曾坐过它的自动驾驶车,远处可以看到 200 米,近处 20-30 米。它确实可以做在线标定,随时调整一些双目视觉的参数。



先说立体匹配,即视差/深度估计。如图假设左右摄像头焦距 f,基线(两个光心连线)宽 B,3-D 点 X 的深度 z,而其视差(投影到左右图像的 2-D 点,其坐标差)即



可见视差能够反算深度值。但是这里最难的就是左右镜头看到的图像如何确定是同一个目标,即匹配问题。


匹配方法分两种,全局法和局部法,双目匹配的四个步骤:


匹配成本(matching cost)计算;成本聚集(aggregation);视差(disparity)计算/优化;视差修正(refinement)。


最著名的局部法就是 SGM(semi-global matching),很多产品在用的方法都是基于此的改进,不少视觉芯片都采用这种算法。


SGM 就是把一个全局优化近似成多个局部优化的问题组合,如下公式是 2-D 匹配的优化目标函数,SGM 实现成为多个 1-D 优化路径之和。



下图是沿着水平方向的路径优化函数:



Census Transform 是将 8/24 比特的像素变成一个 2 进制序列,另外一个 2 值特征叫 LBP(local binary pattern)和它相似。立体匹配算法就是基于这个变换将匹配变成一个 Hamming 距离的最小化搜索。Intel 的 RealSense 当年就是收购了一个成立于 1994 年基于该技术的双目视觉创业公司,还收购另外几个小公司把他们合在一起做出来的。


下图是 CS 变换的示意图:



PatchMatch 是一个加速图像模版匹配的算法,被用在光流计算和视差估计上。之前微软研究院曾经做过一个基于单目手机相机 3-D 重建的项目,仿造以前成功的基于 RGB-D 算法 KinectFusion,名字也类似 MonoFusion,其中深度图估计就是采用一个修正的 PatchMatch 方法。


其基本思想就是对视差和平面参数随机初始化,然后通过邻域像素之间信息传播更新估计。PM 算法分五个步骤:


1) 空间传播(Spatial propagation): 每个像素检查左边和上边邻居视差和平面参数,如果匹配成本变小就取代当前估计;


2) 视角传播(View propagation): 其他视角的像素做变换,检查其对应图像的估计,如果变小就取代;


3) 时域传播(Temporal propagation): 前后帧考虑对应像素的估计;


4) 平面细化(Plane refinement): 随机产生样本,如果估计使匹配成本下降,更新。


5) 后处理(Post-processing): 左右一致性和加权中值滤波器去除出格点(outliers)。


下图是 PM 的示意图:



再说在线标定。


这是一个利用路上标志线(斑马线)的标定方法:已知斑马线的平行线模式,检测斑马线并提取角点,计算斑马线模式和路面实现匹配的单映性变换(Homography)参数,得到标定参数。



另外一个方法基于 VO 和 SLAM,比较复杂,不过可以同时做基于地图的定位。采用 SLAM 做在线标定,不适合高频率操作,下图是其算法的流程图: 1-4 步, 通过立体视觉 SLAM 获取全局连续地图;第 5 步给出双目相机变换初始估计,第 6 步把所有立体相机的地图聚合成一个地图;7-8 步获取多个相机之间的姿态。



和单目方法类似,采用车道线平行和路平面这个假设可以快速完成在线标定,即消失点(vanishing point)理论:假设一个平坦的道路模型,清晰的纵向车道线,没有其他目标的边缘和它们平行;要求驾驶车辆速度慢,车道线连续,左右相机的双目配置要左摄像头相对路面的仰角/斜角(yaw/roll angles)比较小;这样跟初始化的消失点(与线下标定相关)比较可以算出双目外参数的漂移量(图 5-269),其算法就是从消失点估计摄像头仰角/斜角。



下面介绍几个典型的双目自动驾驶系统:


Berta Benz 采用的障碍物检测算法 Stixel 基于以下假设:场景中的目标描述为列,重心的原因目标是站立在地面上,每个目标上的上部比下部的深度大。下图(a-d) 介绍了 SGM 视差结果如何生成 Stixel 分割结果:



下图是 Stixels 计算的示意图:(a)基于动态规划的自由驾驶空间计算 (b) 高度分割中的属性值 © 成本图像 (灰度值反过来) (d) 高度分割。



这是他们加上深度学习做视差融合之后再做 Stixel 的框图和新结果:




介绍一个 VisLab 早期双目障碍物的算法,Generic Obstacle and Lane Detection system (GOLD)。基于 IPM(Inverse Perspective Mapping),检测车道线,根据左右图像的差计算路上障碍物:



(a) Left. (b) Right © Remapped left. (d) Remapped right. (e) Thresholded and filtered difference between remapped views. (f) In light gray, the road area visible from both cameras.



GOLD system architecture


这是 VisLab 参加自动驾驶比赛 VIAC (VisLab Intercontinental Autonomous Challenge)的车辆,除了双目摄像头以外,车上还有激光雷达作为道路分类的辅助。



这是其双目障碍物检测流程图:视差估计利用了 SGM 算法和基于 SAD 的相关算法。



后处理中加了两个 DSI(Disparity Space Image)空间的滤波器,见图 5-274,一个是平滑处理,另一个是基于惯导(IMU)的运动轨迹处理。



障碍物检测算法采用了 JPL 的方法,基于空间布置特性以及车辆的物理特性聚类得到障碍物。物理特性包括最大的高度(车辆),最小高度(障碍物)和最大道路可通过范围,这些约束定义了一个空间截断锥(truncated cone), 如图所示,那么在聚类过程中凡是落在截断锥内的点划为障碍物。



为加速视差估计算法,采用了划分 DSI 的方法:



另外一种经典的方法是根据路面方程(立体视觉)得到路面视差,基于此计算出路面的障碍物:




总的看,双目检测障碍物的方法基本基于视差图,基于路面视差的方法较多。也许随着深度学习发展的突飞猛进,加上计算平台的增强,双目自动驾驶系统也会普及起来。

作者介绍

黄浴,奇点汽车美研中心总裁和自动驾驶首席科学家,上海大学兼职教授。曾在百度美研自动驾驶组、英特尔公司总部、三星美研数字媒体研究中心、华为美研媒体网络实验室,和法国汤姆逊多媒体公司普林斯顿研究所等工作。发表国际期刊和会议论文 30 余篇,申请 30 余个专利,其中 13 个获批准。

原文链接

注:本文源自黄浴的知乎:https://zhuanlan.zhihu.com/p/56236308


2019-08-29 23:107185

评论

发布
暂无评论
发现更多内容

数字知识库-知识图谱管理系统

金陵老街

Java 数字化 知识图谱 企事业系统

[极致用户体验] 我做的《联机五子棋》是如何追求极致用户体验的?(下)

HullQin

CSS JavaScript html 前端 8月月更

一套优秀的直播系统源码是什么样的?起码要有这五个模块

开源直播系统源码

软件开发 直播系统 直播系统源码 钠斯直播系统

​DTSE Tech Talk丨第3期:解密数据隔离方案,让SaaS应用开发更轻松

华为云开发者联盟

SaaS 企业 华为云

如何快速开发一个健康助手,实时守护用户健康

HarmonyOS SDK

一文搞懂EMAS Serverless小程序开发|电子书免费下载

hum建应用专家

Serverless emas

计算机网络(三、数据链路层)

计算机网络 8月月更

手摸手告诉 UI 妹子数据可视化 20 条优化细则【切图仔直接收藏】

掘金安东尼

前端 UI 8月月更

什么是企业知识库?有什么作用?如何搭建?@附源码

金陵老街

Java、 企业数字化转型 spring-boot

四个层次管好设备,为生产保驾护航

PreMaint

预测性维护 设备管理 设备预测性维护

开源一夏 | 在 STM32L051 上使用 RT-Thread (三、无线温湿度传感器 之 I2C通讯)

矜辰所致

开源 RT-Thread 8月月更 STM32L051

你以为的推荐系统,其实只是推荐模型

OneFlow

机器学习 推荐系统 推荐模型

深度解读 | 关于SBOM最基础元素,你需要知道的(Part II)

安势信息

#开源 #SBOM 软件供应链安全 SBOM最基础元素 开源安全与治理

阿里云携手卫宁健康发布WinCloud智慧医疗云联合解决方案,打造新一代智慧医疗系统

阿里云弹性计算

云服务器 分布式云 云盒 本地化部署

博睿数据入选《2022爱分析· 银行数字化厂商全景报告》

博睿数据

银行 智能运维 博睿数据

基于RPC接口的业务侧流量回放

转转技术团队

测试工具 流量回放 测试方案

flstudio21版本有什么新功能?

茶色酒

FL Studio

基于keil5新建STM32F10x寄存器版本工程

DS小龙哥

8月月更

为什么程序员都不喜欢使用 switch ,而是大量的 if……else if ?

TimeFriends

8月月更

那些你不知道的 CSS 自定义形状网格布局

南城FE

CSS 前端 布局

《键值型数据库系统技术及节能要求》团体标准发布,腾讯、京东、北邮等联合发起

科技热闻

从 Angular Component 和 Directive 的实例化,谈谈 Angular forRoot 方法的命令由来

汪子熙

typescript 前端开发 angular web开发 8月月更

数据中台逼近炒作顶峰之际,Gartner给想建数据中台的一些建议

雨果

数据中台 Gartner

flstudio21水果软件更新内容V21版本

茶色酒

FL Studio

压力测试-JMeter常用插件、服务器硬件监控

程序知音

Java 程序员 后端 后端技术

快速搞懂Mysql中BufferPool底层原理

知识浅谈

Buffer Pool 8月月更

【LeetCode】爱吃香蕉的珂珂Java题解

Albert

LeetCode 8月月更

Spring进阶(五):Spring事务管理(详解+实例)

No Silver Bullet

spring 事务管理 8月月更

云原生(二十一) | Kubernetes篇之深入了解Ingress

Lansonli

云原生 8月月更

使用 Presto 和 Alluxio 在 AWS 上搭建高性能平台来支持实时游戏服务

Alluxio

游戏 AWS presto Alluxio 8月月更

龙蜥开发者说:我眼里的龙蜥社区:一个包容的大家庭 | 第 10 期

OpenAnolis小助手

Linux 开源 操作系统 龙蜥开发者说 参与贡献

基于双目视觉的自动驾驶技术_AI&大模型_黄浴_InfoQ精选文章