AoE 搭档 TensorFlow Lite ,让终端侧 AI 开发变得更加简单。
AoE( AI on Edge , https://github.com/didi/AoE ) 是滴滴近期开源的终端侧 AI 集成运行时环境 ( IRE )。
随着人工智能技术快速发展,近几年涌现出了许多运行在终端的高性能推理框架,例如 TensorFlow Lite,在实时性、安全性上给开发者带来更多支持和选择,极大的优化了用户的使用体验,但当我们想要在终端侧落地一些具体的 AI 业务时,会发现有些不得不面对的问题:
除了要做推理框架选型,还需要关注数据预 / 后处理逻辑的稳定性,模型分发使用时的包大小、数据安全等问题。这也正是 AoE 的设计初衷,希望完善模型生产到落地应用链路上的各个环节,提供整套的工具支撑体系,帮助开发者在终端轻松部署 AI 模型。以下我们通过滴滴内部一个具体实例应用,介绍 AoE 如何搭档 TensorFlow Lite ,让终端侧 AI 开发变得更加简单。
滴滴普惠安全产品技术团队通过手机传感器数据的实时分析,建立了精准、可量化的驾驶行为识别能力,以此为基础刻画精细的安全画像,建立全方位的集驾驶安全、骑行安全、异常检测、流程化策略为一体的识别解决方案,为用户提供精准、便捷的安全应用体系。借助 Google 的深度学习框架 TensorFLow ,我们对算法进行改造优化,极大地提升模型的识别效率和准确率。
通过 TensorFlow 来搭建卷积神经网络( Convolutional Neural Network,CNN )流式处理手机传感器数据,实时识别司机危险驾驶行为。

基于手机传感器识别行车状态,有很多问题需要处理:
- 不同机型间数值差异
- 手机姿态变化导致的模型环境变化校准
- 晃动导致的模型误触发
- 实时数据量大,计算复杂度高
- ...
以数据差异校准为例,由于不同设备间传感器数据差异较大,会影响模型最终效果,需要对其进行校准,保证模型输入数据的一致性。
通过自研机型校准滤波算法的处理,不同的机型可以得到一致的数据表现。


稳定性考虑
如前面介绍,我们在数据交给 TensorFlow Lite 执行推理前后,有很多的数据处理逻辑,出于性能和算法保密性考虑,我们把滤波算法等处理逻辑放在 Native 层实现。
众所周知,Android 平台开发一个重要的问题是机型适配,一旦应用在某款机型上面崩溃,造成的体验损害是巨大的。有数据表明,因为性能问题,移动 App 每天流失的活跃用户占比 5 %,这些流失的用户,6 成的用户选择了沉默,不再使用应用,3 成用户改投竞品,剩下的用户会直接卸载应用。因此,对于一个用户群庞大的移动应用来说,保证任何时候App主流程的可用性是一件最基本、最重要的事情。让 Native 操作运行在独立进程中,同时保证了推理的稳定性和主进程的稳定性,即偶然性的崩溃不会影响后续的推理操作,且主进程任何时候不会崩溃。
安全性考虑
TensorFlow 训练出的 pb 模型文件和转换在 TensorFlow Lite 使用的 tflite 文件,可以比较方便的看到网络层信息,在终端侧分发应用时,无法有效保障数据资产安全。 AoE 提供了文件加密机制,方便对模型文件进行快速解密,同时支持自定义加解密算法,示意图如下:
数据加密方案
- 文件加密 首先自选数据加密方案对模型文件进行加密(AoE 内置 AES 加密),生成一个加密文件
- 生成头文件 AoE 对加密文件添加 21 byte 的文件头,分别表示文件加密方案的版本,加密文件的文件长度以及加密文件的 MD5
- 字节混淆 指定一个步长(如 1024 byte),从加密文件头进行遍历,将读取数据切片的特定位(通常是第一位)与文件头片段里的字节依次互换。以此混淆了文件原信息。
数据解密方案
与加密对应的解密模块,通过已知的步长、置换位索引、加密私钥等信息配套的对文件进行信息重建和解析,得到源文件,AoE 以内存态运行,直接将模型源文件装载进推理框架进行执行。
通过这样简单的文件加密规则,既能保障加密实现的高效运行,又能在不同场景下拓展支持多套算法方案。
基于 TensorFlow 的优化改造,大大降低了我们算法开发和维护的成本。模型集成 AoE 在滴滴乘客端、司机端上线应用后,没有出现一例因推理执行导致应用主进程崩溃的 Case,稳定支持了多个版本加密模型在 APP 中的集成使用。
我们团队会持续完善终端侧 AI 落地的工具支撑体系,特别是对被广泛使用的 TensorFlow 的支持,帮助开发者轻松部署模型,更好的赋能业务。
欢迎关注:https://github.com/didi/AoE
欢迎添加小助手微信进入AOE开源交流群!
AoE 搭档 TensorFlow Lite ,让终端侧 AI 开发变得更加简单。的更多相关文章
- [AI开发]centOS7.5上基于keras/tensorflow深度学习环境搭建
这篇文章详细介绍在centOS7.5上搭建基于keras/tensorflow的深度学习环境,该环境可用于实际生产.本人现在非常熟练linux(Ubuntu/centOS/openSUSE).wind ...
- [AI开发]Python+Tensorflow打造自己的计算机视觉API服务
"与其停留在概念理论层面,不如动手去实现一个简单demo ." ——鲁迅 没有源码都是耍流氓github 前言 目前提供AI开发相关API接口的公司有很多,国外如微软. ...
- 谷歌发布 TensorFlow Lite [官方网站,文档]
机器学习社区:http://tensorflow123.com/ 简介 TensorFlow Lite TensorFlow Lite 是 TensorFlow 针对移动和嵌入式设备的轻量级解决方案. ...
- 移动端目标识别(3)——使用TensorFlow Lite将tensorflow模型部署到移动端(ssd)之Running on mobile with TensorFlow Lite (写的很乱,回头更新一个简洁的版本)
承接移动端目标识别(2) 使用TensorFlow Lite在移动设备上运行 在本节中,我们将向您展示如何使用TensorFlow Lite获得更小的模型,并允许您利用针对移动设备优化 ...
- 移动端目标识别(1)——使用TensorFlow Lite将tensorflow模型部署到移动端(ssd)之TensorFlow Lite简介
平时工作就是做深度学习,但是深度学习没有落地就是比较虚,目前在移动端或嵌入式端应用的比较实际,也了解到目前主要有 caffe2,腾讯ncnn,tensorflow,因为工作用tensorflow比较多 ...
- 移动端目标识别(2)——使用TENSORFLOW LITE将TENSORFLOW模型部署到移动端(SSD)之TF Lite Developer Guide
TF Lite开发人员指南 目录: 1 选择一个模型 使用一个预训练模型 使用自己的数据集重新训练inception-V3,MovileNet 训练自己的模型 2 转换模型格式 转换tf.GraphD ...
- TensorFlow Lite demo——就是为嵌入式设备而存在的,底层调用NDK神经网络API,注意其使用的tf model需要转换下,同时提供java和C++ API,无法使用tflite的见后
Introduction to TensorFlow Lite TensorFlow Lite is TensorFlow’s lightweight solution for mobile and ...
- android NDK 神经网络API——是给tensorflow lite调用的底层API,应用开发者使用tensorflow lite即可
eural Networks API In this document show more Understanding the Neural Networks API Runtime Neural N ...
- 大前端技术系列:TWA技术+TensorFlow.js => 集成原生和AI功能的app
大前端技术系列:TWA技术+TensorFlow.js => 集成原生和AI功能的app ( 本文内容为melodyWxy原作,git地址:https://github.com/melodyWx ...
随机推荐
- C#程序编写高质量代码改善的157个建议【13-15】[为类型输出格式化字符串、实现浅拷贝和深拷贝、用dynamic来优化反射]
前言 本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html .本文主要学习记录以下内容: 建议13.为类型输出格式化字符串 建议14.正确实现浅拷贝和深 ...
- Flask开发VIP版HttpServer #华为云·寻找黑马程序员#
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...
- Maven学习整理
1. window系统中安装Maven 2. 解决使用代理联网时无法下载jar包 3. 配置本地仓库 4. 处理本地仓库和中央仓库都没有依赖的jar包的情况
- 转:Java实现敏感词过滤
敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来 ...
- VLAN应用实例
VLAN 此次内容主要介绍VLAN的Access接口.Trunk接口.Hybird接口的配置实例,以及实际应用. 一.介绍三种接口 1.Access接口 (1)Access接口是交换机上用来连接用户主 ...
- springboot执行延时任务-DelayQueue的使用
DelayQueue简介 在很多场景我们需要用到延时任务,比如给客户异步转账操作超时后发通知告知用户,还有客户下单后多长时间内没支付则取消订单等等,这些都可以使用延时任务来实现. jdk中DelayQ ...
- SpringBoot-了解微服务(二)
什么是微服务? 微服务是一种架构风格,它要求我们在开发一个应用的时候,这个应用必须构建成一系列小服务的组合: 可以通过http的方式进行互通. 要说微服务架构,先了解一下以前的单体应用架构 单体应用架 ...
- luogu P1082 同余方程 |扩展欧几里得
题目描述 求关于 x的同余方程 ax≡1(modb) 的最小正整数解. 输入格式 一行,包含两个正整数 a,ba,b,用一个空格隔开. 输出格式 一个正整数 x,即最小正整数解.输入数据保证一定有解. ...
- [TimLinux] 理解selinux
1. 概念 SELinux有三种工作模式:Enforcing, Permissive, disabled.Enforcing对应又有几种修饰(targeted, minimum, mls). 2. 解 ...
- 洛谷 Atcoder 题解 AT2585 【Colorful Leaderboard】
目测 普及/提高- 难度. 思路 将 9 种可能的等级存储在数组里,则 min 值为分数为 0 ~ 3199 的颜色种类个数,max 值为 min 值加上分数 >3200 的人数. 特判 若分数 ...