前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TensorFlow Lite发布重大更新!支持移动GPU、推断速度提升4-6倍

TensorFlow Lite发布重大更新!支持移动GPU、推断速度提升4-6倍

作者头像
刘盼
发布2019-03-15 17:26:37
1.2K0
发布2019-03-15 17:26:37
举报
文章被收录于专栏:人人都是极客

为什么要支持GPU?

虽然移动设备的处理能力和功率都有限。虽然TensorFlow Lite提供了不少的加速途径,比如将机器学习模型转换成定点模型,但总是会在模型的性能或精度上做出让步。

而将GPU作为加速原始浮点模型的一种选择,不会增加量化的额外复杂性和潜在的精度损失。

随着 TensorFlow Lite GPU 后端开发者预览版的发布,将能够利用移动 GPU 来选择模型训练 (如下所示),对于不支持的部分,将自动使用 CPU 进行推理。

新的后端利用了:

  • OpenGL ES 3.1 在 Android 设备上计算着色器
  • iOS 设备上的金属计算着色器

目前 TensorFlow Lite 仍使用 CPU 浮点推断进行人脸轮廓检测 (非人脸识别)。未来会利用新的 GPU 后端,可以将 Pixel 3 和三星 S9 的推理速度提升 4~6 倍。

GPU 与 CPU 性能

在Pixel 3的人像模式(Portrait mode)中,与使用CPU相比,使用GPU的Tensorflow Lite,用于抠图/背景虚化的前景-背景分隔模型加速了4倍以上。新深度估计(depth estimation)模型加速了10倍以上。

在能够为视频增加文字、滤镜等特效的YouTube Stories和谷歌的相机AR功能Playground Stickers中,实时视频分割模型在各种手机上的速度提高了5-10倍。

对于不同的深度神经网络模型,使用新GPU后端,通常比浮点CPU快2-7倍。对4个公开模型和2个谷歌内部模型进行基准测试的效果如下:

公共模型:

  1. MobileNet v1(224 x 224)图像分类 ( 专为移动和嵌入式视觉应用而设计的图像分类模型 ) 下载地址:https://ai.googleblog.com/2017/06/mobilenets-open-source-models-for.html
  2. 用于姿势估计的 PoseNet ( 估计图像或视频中人物姿势的视觉模型 ) 下载地址:https://github.com/tensorflow/tfjs-models/tree/master/posenet
  3. DeepLab 分割(257 x 257) ( 图像分割模型,为输入图像中的每个像素分配语义标签,例如,狗,猫,汽车 ) 下载地址:https://ai.googleblog.com/2018/03/semantic-image-segmentation-with.html
  4. MobileNet SSD 对象检测 ( 检测带有边框的多个对象的图像分类模型 ) 下载地址:https://ai.googleblog.com/2018/07/accelerated-training-and-inference-with.html

Google 专有用例:

  1. MLKit
  2. Playground Stickers 和 YouTube Stories 使用的实时视频分段

在更加复杂的神经网络模型上 GPU 加速效果最显著,这些模型本身更有利于 GPU 的利用,例如密集的预测 / 分割或分类任务。在小型模型中,加速效果效果可能略差,但 CPU 的使用可以降低内存传输固有的延迟成本。

如何使用?

以 Android 为例,谷歌已经准备了一个完整的 Android 存档 ( AAR ),包括带有 GPU 后端的 TensorFlow Lite。编辑 gradle 文件替换当前版本,以包含这个 AAR,并将此代码片段添加到 Java 初始化代码中。

代码语言:javascript
复制
import org.tensorflow.lite.Interpreter;
import org.tensorflow.lite.experimental.GpuDelegate;

// Initialize interpreter with GPU delegate
GpuDelegate delegate = new GpuDelegate();
Interpreter.Options options = (new Interpreter.Options()).addDelegate(delegate);
Interpreter interpreter = new Interpreter(model, options);

// Run inference
while (true) {
  writeToInput(input);
  interpreter.run(input, output);
  readFromOutput(output);
}

// Clean up
delegate.close();

如何加速?

在推断每个输入时:

  • 如有必要,输入将移至 GPU:输入张量(如果尚未存储为 GPU 内存)可由框架通过创建 GL 缓冲区或 MTLBuffers 进行 GPU 访问,同时还可能复制数据。由于 GPU 在 4 通道数据结构中效率最高,因此通道大小不等于 4 的张量将重新调整为更加适合 GPU 的布局
  • 执行着色器程序:将上述着色器程序插入命令缓冲区队列中,GPU 将这些程序输出。在此步骤中,我们还为中间张量管理 GPU 内存,以尽可能减少后端的内存占用
  • 必要时将输出移动到 CPU:一旦深度神经网络完成处理,框架将结果从 GPU 内存复制到 CPU 内存,除非网络的输出可以直接在屏幕上呈现,不需要这样的传输

为了获得最佳体验,我们建议优化输入 / 输出张量复制和 / 或网络架构。有关此类优化的详细信息,可以在 TensorFlow Lite GPU 文档中找到。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人人都是极客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
人脸识别
腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档