端侧机器学习框架 Tensorlfow Lite

系列文章目录

=======================================================
专题-端侧机器学习

第一节 `端侧机器学习框架Tensorlfow Lite
第二节 轻量级网络模型之MobileNet系列
第三节 轻量级网络模型之ShuffleNet
第三节 轻量级网络模型之EfficientNe

=======================================================

端侧机器学习ODML

端侧机器学习:在边缘设备上运行的机器学习, 英文全称: On-device machine learning, 简称为ODML。

传统的机器学习应用场景:用户的数据在终端采集以后通过网络发送到服务端,然后使用模型进行推理,再将推理结果通过网络发送到终端。
端侧机器学习的应用场景是这样的:用户的数据在终端采集以后直接在终端进行推理。

在这里插入图片描述
可以看到,端侧机器学习部署有以下几大优点
(1)低延时: 不涉及数据的传输等待;
(2)不依赖网络: 整个过程直接在终端完成;
(3)隐私保护:用户数据不需要传输到服务端,个人隐私得到了充分的保护;

端侧机器学习的挑战

相比于服务端, 端侧的计算资源(算力)内存电池非常有限,因此对模型的大小以及运行效率等提出了更高的要要求, 因此,模型的尺寸应该足够小,运行足够快。相应的,出现了各种机器学习模型端侧部署优化方法,主要有4大类

(1) 硬件加速:现有的移动设备/嵌入式设备大都有GPU, 如果模型可以在GPU上进行运算推理,则速度会大大提升;
(2)量化:模型参数一般默认都是32位浮点数,通过量化为整型可以成倍地减少模型尺寸;
(3)剪枝:简单来说就是将模型参数张量中较小的参数置零,从而模型变得非常稀疏,再通过压缩,可以大大减小模型尺寸,提高运行效率。
(4)使用针对移动端优化的网络架构:对模型架构进行优化,例如各种移动端网络框架,MobileNet系列,ShuffleNet, EfficientNet等等。

端侧机器学习框架

TensorFlow Lite (TFLite)于2017年底由Google-Tensorflow团队开源,是一个轻量快速跨平台的专门针对移动和IoT场景的开源机器学习框架,作为TensorFlow的一部分,其支持Android、iOS、嵌入式Linux以及MCU 等多个平台部署.它大大降低开发者使用门槛,加速端侧机器学习的发展。

Tensorflow lite系统架构

TF Lite 主要由模型转换器Convertor、解释执行器Interpretor, 算子库Op kernels和硬件加速器 共4大部分组成。 如下图所示。
在这里插入图片描述
一句话: 用户首先用model interpretor将训练好的tensorflow模型转换为TFlite文件格式 (具体转换以来算子库Op kernels的支持),然后在设备端, TF interpretor接受优化后的的TF lite模型,并调用不同的硬件加速器进行推理
下面对各个组成部分进行介绍。

TF lite模型转换器

Tf lite converter会将训练好的模型(例如: .pb格式)转换为TF lite专用的存储格式(.tflite),示意图如下:
在这里插入图片描述

转换过程中主要做了两件事
(1)算子优化和编译优化:
TF lite实现了一套优化的算子内核, 将模型操作转换成这些算子后能够大幅提升性能
(2)量化的原生支持:
转换模型过程中如果想要使用 训练后量化(post training quantization),只需要对convertor进行假肚腩配置即可:

converteror.optimizations = [tfl.lite.Optimize.DEFAULT]

注: tf lite 专用的存储格式为 Flat buffer, 其支持将文件直接映射到内存,然后直接读取和解释,具有实时性号,内存搞笑的特点。

TF lite解释执行器

即进行模型推理的解释执行器, 提供了多种语言的API, 并且可以在各种硬件平台运行 转换后的模型。

使用解释器的一般步骤为: 加载模型 -> 转换数据 -> 模型推理 -> 解释模型输出.

算子库

之前提到,TF lite实现了一套优化的算子内核, 目前TFLite约有130个算子,大多同时支持浮点和量化类型。TF lite支持的所有算子见: https://www.tensorflow.org/lite/guide/ops_compatibility

尽管如此, 很多tensorflow算子并没有与之相对应的TF lite 算子, 不过TF lite仍会支持。
当遇到不饿能支持的算子时,常见的解决办法是:
(1)复用Tensorflow算子,
称之为:SelectTF Ops, 只需要多加一行转换器参数就可以开启:

converter.target_spec.supported_ops=[tf.lite.OpsSet.TFLITE _BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS]

(2) 自定义算子
可以自定义新的算子,或者提供定制的更优化的算子
(3) 使用其他等价算子
可以替换为其他TFLite能支持的算子

硬件加速器

TF lite硬件加速接口统称为delegate, 它可以将模型的全部或部分 委托给另一个硬件后台(如CPU,GPU)执行。
常见的硬件加速器包括:
(1) GPU delegate: 可在Andriod和IOS设备上使用;
(2) AndroidNNAPIdelegate: 适用于较新的ANdroid设备;
(3) Hexagondelegate: 适用于较久的Android设备;
(4) oreMLdelegate: 适用于较新的Iphone和Ipad设备;

如果硬件后端不支持TF lite怎么办?
TF lite具有很强的可扩展性, 完全可以为特定的硬件定制delegate, 大致步骤如下:
(1)定义一个新的delegate算子,它负责计算被代理的子图;
(2)创建一个TfLite Delegate 实例,它负责注册新定义的delegate算子,并可以把计算图中的一些子图替换为新的delegate算子;

总结

未完待续。

References

1.TensorFlowLite:端侧机器学习框架

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MasterQKK 被注册

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值