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,蓝框为没有进行时序融合结果。从图中可以明显看出,绿色结果在目标框稳定性上、左侧波形抖动上、右侧中点离散程度上,均要远优于蓝色。时序信息的引入大大提高了轻量级模型检测结果的稳定性,在效果上逼近云端大模型。
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 算法的整体架构。未来我们将在以下方面持续探索:
模型策略的持续优化,覆盖更多长尾复杂场景;
行人碰撞预警 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)。
原文链接:
评论