追尾事故降发生:超低功耗滴滴桔视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:001019

评论

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

架构师训练营-第一周-食堂就餐卡系统设计

Anrika

架构师 极客大学架构师训练营

架构训练营第一周学习总结

陈靓-哲露

食堂就餐卡系统架构设计

任小龙

week1-食堂就餐卡系统设计

不在调上

IT自由职业者是怎么样的感受和体验

古月木易

IT职场

ZooKeeper核心原理及应用场景

奈学教育

zookeeper

架构师训练营-第一周学习总结

hellohuan

极客大学架构师训练营

谈谈阿里云发布新一代容器、Serverless 等云原生产品

关贺宇

阿里云 容器 云原生 中间件

区块链技术如何应用于版权保护?

CECBC区块链专委会

区块链技术 维权 著作权 版权保护 侵权

IT自由职业者是怎么样的感受和体验

奈学教育

IT

ZooKeeper核心原理及应用场景

古月木易

极客时间 - 架构师训练营 - week1 - 食堂就餐卡系统设计

毛聪

极客时间 极客大学架构师训练营 食堂就餐卡系统设计

架构师训练营第一周命题作业

兔狲

从软件架构说起

傻傻的帅

架构 架构要素 架构设计原则

设计模式之单件模式

Geek_896619

Java 设计模式

产品路线图–您的产品战略路径指南

涛哥

敏捷 产品经理

我们需要干货吗?

Neco.W

能力提升 经验分享 干货

架构师训练营第1周作业一:食堂就餐卡系统设计

sunpengjian

架构师训练营第1周作业二:学习总结

sunpengjian

【话题讨论】「世界上最好的语言」?25周岁的 PHP “配” “不配”

InfoQ写作平台

php 写作平台 PHP25周年 活动专区

基于UML的食堂就餐卡系统设计

王海

极客大学架构师训练营

干货|微服务线上生命周期管理

博文视点Broadview

容器 微服务 微服务架构 微服务冶理 架构师

架构师训练营第一周-食堂就餐卡系统设计

王铭铭

食堂就餐卡系统架构设计文档

hifly

极客大学架构师训练营 UML 架构文档 部署图 时序图

第一周课后作业——食堂就餐卡系统概要设计

jiangnanage

ChaosBlade:从零开始的混沌工程(二)

郭旭东

云原生 混沌工程

架构师训练营第1周_学习总结

方舟勇士

课程总结

《Web全栈实用编程》一书征集意见

老魚

程序员 前端 Web 后端 全栈

极客大学架构师训练营第一周学习总结

竹森先生

学习 架构设计 极客大学架构师训练营

食堂就餐卡系统设计

hellohuan

架构 极客大学架构师训练营

Week01 学习笔记

任小龙

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