追尾事故降发生:超低功耗滴滴桔视ADAS落地实践

2020 年 11 月 16 日

追尾事故降发生:超低功耗滴滴桔视ADAS落地实践

1. 前言


道路交通事故是一种世界性的公害,每年都给人类带来巨大的生命和财产的损失。滴滴作为交通领域的深度参与者,不断地探索降低交通事故的方法。


近些年 ADAS(高级辅助驾驶系统)逐渐进入大众的视野,在前装汽车中的渗透率也在不断提高。但对于滴滴司机驾驶的私家车来说,ADAS 覆盖率仍然非常低,只能依赖后装的 ADAS 系统。



相信很多人在乘坐滴滴的时候,见过前挡玻璃上的桔视行车记录仪,偶尔也能听到“注意前车”,“请保持车距”,”前车刹车“等语音提醒。在此款设备上,我们研发了后装 ADAS 系统。该系统支持前向碰撞预警(FCW),跟车过近提醒(HMW),前车刹车提醒(BLW),前车起步提醒等功能。


本文将阐述,我们是如何在滴滴场景下,在桔视设备上,使用超低功耗的桔视 ADAS(高级辅助驾驶系统)技术,降低交通事故发生率,守护司乘安全。



2. 应用背景


对历史交通事故的分析表明,同责及以上事故中,追尾事故占比 60%,远高于其他事故类型,而追尾事故中又有 80%是由于跟车过近所引起的,可见司机的驾驶习惯和交通事故有较强的关联性。驾驶过程中无意识的跟车过近,常常会导致驾驶员在前方突发紧急情况时无法及时作出反应,从而引发追尾事故。


国内外分析数据表明,ADAS 是避免交通事故的一种有效手段。安盛的分析报告表明,只要 1.5s 的事前提醒,就能够避免 90%的事故[1]。美国 IIHS 机构数据表明,FCW 功能能够减少 69%未刹车追尾[2];


桔视 ADAS 融合前置摄像头、后置摄像头、IMU、GPS 等多种传感器,联动设备端上 DMS、碰撞检测、驾驶行为检测等多种算法,识别隐患场景,以实时提醒的方式,干预司机驾驶行为,培养司机良好的驾驶习惯,从而降低追尾事故率。



3. 桔视 ADAS 落地后的效果


依靠桔视强大的 AIoT 平台、近百万量级的设备在线量,我们能够通过设备端的边缘计算,云端大数据分析,司机乘客主动反馈等渠道,主动或被动地获取交通事故数据。通过 GPS,IMU,前后摄(订单内)的数据,我们能够完整地还原交通事故的整个过程,也能够客观,公正,精确地评估 ADAS 运行效果。


桔视 ADAS 上线后,进行了为期一个月的 AB 实验。数十万台设备,数亿公里的行驶里程,最终证明:


a. 亿公里追尾事故率能够显著降低 11.4%,整体事故率降低 9.1%


b. 尤其是在高峰期,亿公里追尾事故率显著降低 16.7%



4. 桔视 ADAS 解决方案


现存的 ADAS 解决方案,往往需要超大的算力支持,使用 GPU/NPU 等专用加速芯片,支撑 T 级别算力要求。但出于成本、单次长时间运行的功耗与稳定性等方面的考虑,桔视还无法满足此类算力的需求。


桔视行车记录仪,使用 MTK8665 芯片处理器,四核 ARM Cortex-A53,最高可达 1.5GHz。虽然桔视体积小,但内部运行着众多业务逻辑,只能预留给 ADAS 5%的算力。为了能在如此苛刻条件下运行 ADAS 系统,我们提出了超低功耗 ADAS 解决方案。


整体方案如下所示



ADAS 算法在桔视设备的落地应用过程中面临许多挑战


  • 桔视算力有限而算法众多,如何实现超低功耗的实时目标检测?

  • 轻量级模型误差大,抖动剧烈,如何提升目标检测框稳定性?

  • 桔视设备安装角度各异,如何进行灭点标定?

  • 报警时间与事故率紧密相关,如何提升报警及时性?

  • 实际驾驶中复杂场景众多,如何挖掘长尾难样本?


4.1 超低功耗前车检测


随着深度学习领域的火热发展,在图像目标检测领域,已经出现多款可落地的检测框架。以下视频是使用云端大模型 TridentNet[3] (ResNet-101),在桔视录制的前摄视频中可视化的前车检测结果。在 Nvidia K80 GPU 上,单帧耗时数百毫秒。


如此庞大的模型,无论是在云端还是边端,都无法满足 ADAS 实时性要求。


为了提高实时性,出现了一些轻量级的检测框架,比如目前比较流行的轻量级 Backbone 结合单阶段检测框架 YOLO [4]、SSD [5] 等。


下图是云端模型的渲染效果。其中红色框为云端大模型 TridentNet 的检测结果,蓝色框为云端轻量级 ShullfenetV2 + SSD[6]的检测结果,绿色是我们的方案。从图中,我们可以明显看出,红色 TridentNet 检测结果不论是从目标框的稳定性上,或者是从左侧波形的抖动程度上,还是从右侧目标中点的离散程度上,都要远优于绿色小模型的检测结果。



从检测效果看,与云端大模型相比,小模型的检测稳定性差了很多,这对整体报警策略带来巨大的挑战。


业界通用的多目标检测+多目标跟踪+车道线检测的方案,并不适用于桔视的低功耗边缘计算场景。于是我们将问题简化为单一前车检测问题,结合现有条件及 ADAS 特性,提出了自己的单目标检测框架:ZoomNet。ZoomNet 包括前车检测模型和基于时序融合的模型调度策略 ZoomTracker。



在将问题简化为单一前车检测后,我们提出了基于 anchor 回归的模型。前车回归模型包含分类和回归两个分支,分类分支输出前车有无,回归分支估计前车位置。在回归分支之中,我们将回归坐标转化为回归基于 anchor 的偏移量。


以下图中,960x960 的 crop 区域为例,我们每隔 120 像素设置了一个 anchor,一共 8 个 anchor,也就是下图中的 0 到 840。我们并不直接回归 y2,而是回归 y2 相对于这 8 个 anchor 的偏移量 delta,即



在模型推理阶段,回归分支会预测出相对于每一个 anchor 的偏移量 delta,以模型融合的思想,将所有 anchor 和 delta 回归分支求和取平均,即可得到 y2。



anchor 设置如下图



为了进一步提升计算速度,我们又使用滴滴自研的 IFX 模型加速框架,对我们的超轻量检测模型进行计算优化,最终在 4A53 上占用小于 5%的前提下,实现实时前车检测。


4.2 稳定性


由于轻量级模型的复杂度和性能有限,在单帧图像上的检测结果会存在以下问题: 小目标难以检出、包围盒误差大、目标丢失、目标误检、鲁棒性差(无法适应遮挡、夜间黑暗、反光、逆光、大雾、雨天等复杂场景)。



a) 小目标难以检出



b) 包围盒误差大



c) 目标误检


在单帧图片上模型准确率不高,在时序视频流上的表现会更不尽人意,会出现诸多不稳定情况,如目标丢失闪烁、包围盒抖动剧烈。


上述问题使得目标信息极为不稳定,为后续算法的使用带来极大挑战,且误差不断向后传播,严重影响整体功能的效果。


针对检测模型性能有限,我们提出一种时序信息融合结合模型调度的方式,实现物体检测框的高稳定性,能有效克服目标丢失误检、包围盒抖动等问题,在时序视频流上表现优越。


方案中包含 2 个深度网络模型和卡尔曼滤波器;



首先通过端到端的前车检测模型得出前车大致位置,再通过超轻量级的回归网络得出准确的前车包围盒。在下一时刻,利用历史检测结果对前车目标可能出现位置进行预测,在预测位置上直接进行回归。


通过时序融合的模型调度,在最终效果上克服了小目标、目标丢失误检、包围盒抖动、鲁棒性差的问题,并在时序目标检测稳定性误差上降低了 23.3%。


具体示例可见下图,其中绿框为本方案结果,红框为人工标注的 Ground Truth,蓝框为没有进行时序融合结果。从图中可以明显看出,绿色结果在目标框稳定性上、左侧波形抖动上、右侧中点离散程度上,均要远优于蓝色。时序信息的引入大大提高了轻量级模型检测结果的稳定性,在效果上逼近云端大模型。


http://mpvideo.qpic.cn/0bf2rqbhgaac5aagemvl5fpvfdgdoogae4ya.f10002.mp4?disk=e25e4a589d68f57070613fce852d142b&dist=1605442844&vid=wxv1599259342829092864&formatid=10002


http://mpvideo.qpic.cn/0bf26ibdkaacwaacos5lujpvf4wdgxzaenia.f10002.mp4?disk=6082a3f8c61d8f561ebda99676f9ebd5&dist=1605442844&vid=wxv1599263068260237315&formatid=10002


4.3 相机安装位置标定


前车与本车的距离关系是识别隐患场景的重要条件,而线上设备安装角度各异给距离测算带来了很大挑战,那如何对大量已安装的桔视设备进行标定呢?桔视 ADAS 团队在落地实践中提出了两种方法。


4.3.1 基于深度学习模型回归消失点


业界通用的方法一般是通过车道线/直线检测计算消失点,但我们发现在不使用车道线检测的情况下,也可以用与前车检测相同的 anchor 回归的方式,使模型学习到消失点。


消失点回归可以实现设备俯仰角的标定,结合前车坐标,可以得到本车与前车的纵向车距。


4.3.2 基于数据统计估计水平灭点


通过深度学习模型可以回归车道线消失点,但难以回归水平灭点,实现偏航角的标定。偏航角误差会导致横向距离计算失准,将同车道前车误判为旁车道车辆。


基于模型检测到的前车与本车大概率处于同一车道的先验条件,我们使用了一种简单有效的方法估计水平灭点,即通过长时间统计模型输出,分桶估计水平灭点,得到参考性的本车直行的朝向。



4.4 报警及时性


4.4.1 TTC


TTC(time to collision)碰撞发生时间,是衡量碰撞预警效果的重要指标,计算方式如下:



即为两车车距/两车相对速度,一般取 2.7s,意为在判断出按照当前车距与相对速度,还有 2.7 秒会与前车发生碰撞时,发出预警。行车记录仪前摄视场角大,远距离目标在画面中小,前车检测模型小且帧率有限,远距离前车检测结果易抖动,导致高速情况下难以对远距离前车进行及时预警。


4.4.2 前车刹车提醒


对高速场景下的事故数据进行分析后,我们发现高速场景下的事故与前车突然刹车,司机反应不及时有很高相关性。一般来说,高速行驶过程中,前车刹车,本车应相应刹车规避危险。


因此,在检测前车的基础之上,我们又提出了刹车灯分类模型以识别前车刹车状态。高速情况下,一旦前车刹车且车距满足一定条件,系统即发出预警信号,提醒司机注意,这也是桔视 ADAS 特有的预警功能 BLW(前车刹车提醒)。BLW 可以显著提高高速情况下的报警 TTC,提升报警及时性。


4.5 长尾数据挖掘


在桔视 AIoT 平台上,运行着碰撞检测、驾驶行为检测和 DMS 等算法,它们可以准确识别碰撞事故、驾驶行为和司机驾驶状态。通过多算法联动,我们在端上直接捕捉高危场景,并主动将数据回流云端。依托桔视近百万量级的安装量,通过驾驶行为检测算法,分析报警后司机驾驶行为,得出报警的转化效果。利用这些自动化的 ADAS 算法反馈,配合 OTA 升级方式,我们实现了高频率的迭代优化。


为了覆盖复杂场景的长尾数据,我们还搭建了一条在线难样本挖掘链路。我们利用碰撞事故前的 ADAS 报警情况挖掘未召回的事故数据,利用 ADAS 报警后司机反应挖掘虚警数据。更近一步,我们积累了一批 ADAS 播报干预但没有帮助驾驶员避免交通事故的极难样本,针对性优化报警 TTC,提升报警及时性。



挖掘回流的数据在云端会自动导入标注平台和实验评估系统。在标注平台中,通过深度模型算法预标注+人工,不断扩充数据集。在实验评估系统中,算法捕捉播报后驾驶员的转化行为,结合驾驶员历史行驶数据,自动化评估 ADAS 在降发生上的影响面、线上准召等多维度指标。


通过这一整套完整的数据链路,我们实现了对长尾复杂场景的覆盖,用数据驱动整套 ADAS 算法的迭代。


5. 总结


本文总结了车载视觉团队在桔视 ADAS 方面工作,分享了桔视 ADAS 算法的整体架构。未来我们将在以下方面持续探索:


  1. 模型策略的持续优化,覆盖更多长尾复杂场景;

  2. 行人碰撞预警 PCW (Pedestrian Collision Warning);


桔视 ADAS 将不断提升,全力帮助司机师傅避免交通事故,为司机和乘客的安全保驾护航。


引用


[1] Board N T S. Special investigation report-highway vehicle and infrastructure-based technology for the prevention of rear-end collisions[J]. NTSB Number SIR-OI/ll, 2001.


[2] Farmer C M. Crash avoidance potential of five vehicle technologies[J]. Insurance Institute for highway safety, 2008.


[3] Li Y, Chen Y, Wang N, et al. Scale-aware trident networks for object detection[C]//Proceedings of the IEEE international conference on computer vision. 2019: 6054-6063.


[4] Redmon J, Farhadi A. Yolov3: An incremental improvement[J]. arXiv preprint arXiv:1804.02767, 2018.


[5] Liu W, Anguelov D, Erhan D, et al. SSD: Single shot multibox detector[C]//European conference on computer vision. Springer, Cham, 2016: 21-37.


[6] Ma N, Zhang X, Zheng H T, et al. Shufflenet v2: Practical guidelines for efficient cnn architecture design[C]//Proceedings of the European conference on computer vision (ECCV). 2018: 116-131.


作者介绍


Maggie,滴滴算法工程


Gavin,滴滴高级算法工程师


本文转载自公众号滴滴技术(ID:didi_tech)。


原文链接


追尾事故降发生:超低功耗滴滴桔视ADAS落地实践


2020 年 11 月 16 日 10:00 606

评论

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

「超级右键」

非著名程序员

macos 程序员 效率工具 软件 Mac

很不幸,自动化测试永远只能是必要非充分条件

刘华Kenneth

DevOps 敏捷 自动化 测试 金字塔

在谈判中,你有哪些属于自己的独特的方法和技巧?

Yolanda

回"疫"录(2):不知者无畏

小天同学

疫情 回忆录 现实纪录

软件世界中的个人英雄与团队协作

王泰

团队管理 软件工程 团队协作

漫谈哲学与编程

keelii

编程 哲学

如何阅读源码?

武培轩

Java 源码 面试 进阶 后端

揭秘|为何程序员们能一直保持高收入?

丁长老

学习方法 程序员 写作 高薪

克制文章长度

changyou

随手记备忘录的好习惯

changyou

程序员陪娃漫画系列——修龙头

孙苏勇

生活 程序员人生 陪伴 漫画

Facebook在用户增长到5亿时的扩容策略

Rayjun

团队管理 扩容

敏捷(组织)转型的6个准备条件

Bob Jiang

团队管理 敏捷 组织转型

Java并发编程系列——线程

孙苏勇

Java 并发编程 线程

基于Kubernetes的多云和混合云

倪朋飞

云计算 架构 Kubernetes 微服务架构 Service Mesh

理性主义和实证主义

王泰

理性主义 实证主义 哲学 软件工程

写作平台使用感受

小天同学

产品 体验 反馈

小论互联网项目管理

南方

项目管理 互联网 个人成长 碧海潮生曲

Zoom的加密算法,到底有什么问题?

范学雷

算法 编码习惯 产品设计 安全 编程语言

知乎开发了一个搜索引擎

红泥小壶

搜索引擎 百度 知乎

我敢说 80% 的程序员都掉进了「老鼠赛跑」的陷阱

非著名程序员

读书笔记 程序员 程序人生 提升认知

有关Kotlin Companion 我们需要了解到的几个知识点

王泰

Java 编程 kotlin 编程语言

软件工程的史前时代 -- Therac-25 事件

王泰

质量管理 软件工程 软件危机 软件测试

浅谈负载均衡

Damon

Java 负载均衡 Kubernetes 微服务架构 Spring Cloud

聊聊苹果公司技术部门的宫斗和冷战

赵钰莹

程序员 外包 apple

终极 Shell

池建强

Linux Shell

死磕Java并发编程(6):从源码分析清楚AQS

七哥爱编程

Java Java并发 并发编程 AQS

加班能解决交付的期望么?

拖地先生

项目管理 领导力 管理 时间管理

Disruptor为何这么快

Rayjun

Java Disruptor

最近的一些人生感悟

小智

人生 哲学

敏捷开发 | 张三与需求管理

Worktile

敏捷开发 需求管理

微服务治理平台化探索

微服务治理平台化探索

追尾事故降发生:超低功耗滴滴桔视ADAS落地实践-InfoQ