TensorFlow Lite + AoE :基于深度学习的驾驶安全之路
文 / 滴滴普惠终端智能团队
AoE ( AI on Edge ) 是滴滴近期开源的终端侧 AI 集成运行时环境 ( IRE )。
注:AoE 链接
https://github.com/didi/AoE
案例背景
模型介绍
我们需要分类的传感器数据样本是不定长的时间序列,开始使用 GBDT 等传统机器学习方法,做了大量的数据分析和特征工程的尝试,通过 TensorFlow 来搭建卷积神经网络( Convolutional Neural Network,CNN )流式处理手机传感器数据,将整个算法的瓶颈从特征提取转移到模型训练及调优上;实时识别司机危险驾驶行为,我们需要做端侧推理框架的选型,TensorFlow 提供对应的终端推理框架 TensorFlow Lite,提供完整链路的支持。
基于手机传感器识别行车状态,有很多问题需要处理:
不同机型间数值差异
手机姿态变化导致的模型环境变化校准
晃动导致的模型误触发
实时数据量大,计算复杂度高
...
以数据差异校准为例,由于不同设备间传感器数据差异较大,会影响模型最终效果,需要对其进行校准,保证模型输入数据的一致性。
通过自研机型校准滤波算法的处理,不同的机型可以得到一致的数据表现。
AoE的接入使用
稳定性考虑
如前面介绍,我们在数据交给 TensorFlow Lite 执行推理前后,有很多的数据处理逻辑,出于性能和算法保密性考虑,我们把滤波算法等处理逻辑放在 Native 层实现。众所周知,Android 平台开发一个重要的问题是机型适配,一旦应用在某款机型上面崩溃,造成的体验损害是巨大的。有数据表明,因为性能问题,移动 App 每天流失的活跃用户占比 5 %,这些流失的用户,6 成的用户选择了沉默,不再使用应用,3 成用户改投竞品,剩下的用户会直接卸载应用。因此,对于一个用户群庞大的移动应用来说,保证任何时候App主流程的可用性是一件最基本、最重要的事情。让 Native 操作运行在独立进程中,同时保证了推理的稳定性和主进程的稳定性,即偶然性的崩溃不会影响后续的推理操作,且主进程任何时候不会崩溃。
易用性考虑
通过 TensorFlow 训练生产的模型体积仅 105k ,可以直接集成 APP 部署,但考虑到模型线上升级的业务需求,我们通过 AoE 提供了模型云端加载更新的动态部署能力,这项能力后续也会开放出来供开发者使用。安全性考虑
TensorFlow 训练出的 pb 模型文件和转换在 TensorFlow Lite 使用的 tflite 文件,可以比较方便的看到网络层信息,在终端侧分发应用时,无法有效保障数据资产安全。AoE 提供了文件加密机制,方便对模型文件进行快速解密,同时支持自定义加解密算法,示意图如下:数据加密方案
文件加密 首先自选数据加密方案对模型文件进行加密(AoE 内置 AES 加密),生成一个加密文件 生成头文件 AoE 对加密文件添加 21 byte 的文件头,分别表示文件加密方案的版本,加密文件的文件长度以及加密文件的 MD5
字节混淆 指定一个步长(如 1024 byte),从加密文件头进行遍历,将读取数据切片的特定位(通常是第一位)与文件头片段里的字节依次互换。以此混淆了文件原信息。
数据解密方案
与加密对应的解密模块,通过已知的步长、置换位索引、加密私钥等信息配套的对文件进行信息重建和解析,得到源文件,AoE 以内存态运行,直接将模型源文件装载进推理框架进行执行。通过这样简单的文件加密规则,既能保障加密实现的高效运行,又能在不同场景下拓展支持多套算法方案。
上线效果
基于 TensorFlow 的优化改造,大大降低了我们算法开发和维护的成本。模型集成 AoE 在滴滴乘客端、司机端上线应用后,没有出现因推理执行或数据处理异常而导致应用主进程崩溃的情况,稳定支持了多个版本加密模型在 APP 中的集成使用。
总结展望
我们团队会持续完善终端侧 AI 落地的工具支撑体系,特别是对被广泛使用的 TensorFlow 的支持,帮助开发者轻松部署模型,更好的赋能业务。
如果您想详细了解 AoE 的相关内容,请参阅以下文档:
AoE
https://github.com/didi/AoE