查看原文
其他

使用 Coral Dev Board、Edge TPU 和 TensorFlow Lite 构建离线工作 AI

Google TensorFlow 2021-07-27

文 /  Daniel Situnayake,TensorFlow Lite 开发技术推广工程师


在思考支持机器学习的硬件时,您可能会想到无数高能耗处理器在远程服务器场中处理万亿字节的数据,或者是塞满 GPU 的大型台式计算机。


您不太可能想象到一个 40 毫米 x 48 毫米的集成电路被整齐地放置于一个信用卡大小的开发板上,也绝对想不到一个玩具车大小的光滑铝盒会通过一根 USB-C 转接线与您的电脑相连。



这些新设备由 Google 的新平台 Coral 制造,有助于嵌入式开发者打造卓越的本地 AI 体验。Coral 的首批产品采用 Google Edge TPU 芯片,专为运行 TensorFlow Lite(TensorFlow 面向移动和嵌入式设备的轻量级解决方案)而打造。作为开发者,您可以使用 Coral 设备探索和设计用于设备端机器学习推理的新应用。


Coral Dev Board 是一款单板 Linux 计算机,配有托管 Edge TPU 的可拆卸式模块化系统 (SOM)。您可以利用该产品设计应用原型,然后通过在自己的设备中添加 SOM 将其扩展到量产。Coral USB Accelerator 是一款 USB 配件,可以将 Edge TPU 用于任何兼容的 Linux 计算机。其设计旨在完美接合 Raspberry Pi Zero。


在本文中,我们将探索 “在边缘设备上” 开展机器学习的精彩应用,并学习 TensorFlow Lite 和 Coral 如何帮助您将 AI 构建到硬件产品中。您将看到即使没有 ML 经验,也可借助我们的预训练模型开始构建 AI 体验。此外,我们还会向您介绍转换工具,助您优化自己的模型以供本地使用。



边缘设备上的推理

直到最近,在生产环境中部署机器学习模型都意味着要在某种服务器上运行模型。如果想检测视频中的已知对象,您必须将其流式传输到后端,某个功能强大的硬件会在这里执行推理(即检测存在的任何对象),并将结果告知设备。



许多应用都采用这种方式,但如果我们可以脱离服务器而在设备端执行该操作呢?



现在,我们可以使用 TensorFlow Lite 在边缘设备上执行高性能推理,进而创造非凡的新体验。


离线推理

借助边缘推理,您无需再依赖互联网连接。如果互联网速度缓慢或成本昂贵,您可以构建理解其所见景象且只传送感兴趣内容的智能传感器。


这意味着您可以在全新的情境和位置中部署 ML。想象一下,智能相机在偏远地区识别野生动植物,或者成像设备在没有无线基础设施的地区帮助做出医学诊断。


使用智能相机监控野生动植物


最短延迟

向服务器发送数据会出现往返延迟,这会阻碍实时数据的传输。但如果将模型部署在边缘设备上,这就不再是问题!


当推理速度超级快时,我们可以解决依赖性能的问题,例如向人类空间导航机器人添加实时对象追踪功能,或在现场音乐表演期间合成音频。


在现场表演期间合成音频


隐私和安全

当数据保留在边缘设备上时,用户的个人数据也将永远保存在自己的设备上,如此一来,数据的隐私性和安全性将得到提升,用户也可因此获益。


这催生出众多注重隐私的新应用,例如只在检测到可能的威胁时才录制视频的摄像机,或者无需向云端发送数据即可分析个人指标的健康设备。


在不向云端发送数据的情况下分析健康指标



性能

所有这些新应用都依赖于高性能推理,而高性能推理只有通过 Edge TPU 进行硬件加速才可能实现。但 Edge TPU 究竟可以提升多少速度?


在我们使用不同版本的 MobileNet(常用于在边缘设备上进行图像分类的稳健模型架构)进行的内部基准测试中,使用 Edge TPU 执行推理的速度比使用 CPU 快 70 至 100 倍。


就使用 MobileNets 进行人脸检测而言,我们执行推理的速度高达每秒 70 至 100 帧,而在食物识别方面,我们的速度达到每秒 200 帧。这足以实现优于实时效果的视频推理,即使同时运行多个模型也是如此。


下表概述 Coral USB Accelerator 在不同模型上的性能。



* 桌面 CPU:64 位 Intel(R) Xeon(R) E5–1650 v4 @ 3.60GHz

** 嵌入式 CPU:四核 Cortex-A53 @ 1.5GHz

† 开发板:四核 Cortex-A53 @ 1.5GHz + Edge TPU


所有测试模型均使用拥有 1,000 个类的 ImageNet 数据集训练,输入大小为 224x224,但 Inception v4 除外,其输入大小为 299x299。


Coral 和 TensorFlow Lite 使用入门

Coral 是一个新平台,但专为与 TensorFlow 无缝配合而设计。如需将 TensorFlow 模型部署到 Coral 中,您可以使用 TensorFlow Lite。TensorFlow Lite 是一个工具包,用于在 Edge TPU、手机及微控制器等边缘设备上执行机器学习推理。


预训练模型

Coral 网站提供经过优化,并且可与 Coral 硬件搭配使用的预训练 TensorFlow Lite 模型。如果您是新手,可以只下载模型,将其部署到您的设备中,然后立刻使用 Coral 的 API 演示脚本 开始执行图像分类或对各类对象进行对象检测。

注:模型 链接

https://coral.withgoogle.com/models/

API 演示脚本 链接

https://coral.withgoogle.com/tutorials/edgetpu-api/


重新训练模型

您可以使用名为迁移学习的过程自定义 Coral 的预训练机器学习模型,以识别您自己的图像和对象。如需进行此项操作,请遵循 重新训练现有模型 中的说明(https://coral.withgoogle.com/tutorials/edgetpu-retrain-classification/)


构建您自己的 TensorFlow 模型

如果您拥有现成的 TensorFlow 模型,或者想要从头训练模型,则可按照 为 Edge TPU 构建新模型 中的步骤进行操作。请注意,您的模型必须满足 模型要求(https://coral.withgoogle.com/tutorials/edgetpu-models-intro/#model-requirements)

注:为 Edge TPU 构建新模型 链接

https://coral.withgoogle.com/tutorials/edgetpu-models-intro/#build-a-new-model-for-the-edge-tpu


如要为 Edge TPU 准备模型,首先您要使用 TensorFlow Lite Converter 转换和优化模型,使其适用于边缘设备。然后您再使用 Edge TPU Model Compiler 编译该模型,使其适合 Edge TPU。


量化和优化

支持 Coral 硬件的 Edge TPU 芯片专为与经过量化的模型一同运行设计,这意味着原始模型的基础数据已经在一定程度上得到压缩,从而在对准确度影响最小的情况下生成体积更小、运行速度更快的模型。


TensorFlow Lite Converter 可以对任何经过训练的 TensorFlow 模型执行量化。您可以在训练后量化中阅读有关此技术的更多内容。


以下代码片段展示如何使用 TensorFlow Lite Nightly 版和 TensorFlow 2.0 Alpha 版,轻松转换和量化模型:

# Load TensorFlow
import tensorflow as tf

# Set up the converter
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.OPTIMIZE_FOR_SIZE]

# Perform conversion and output file
tflite_quant_model = converter.convert()
output_dir.write_bytes(tflite_quant_model)



后续步骤

我们已经了解如何使用 Coral 和 TensorFlow Lite 打造将 AI 部署到边缘设备的全新体验。如果您想入门,请遵循以下方法:

  • 在 coral.withgoogle.com 获取 Coral 设备

  • 阅读并了解如何在 Edge TPU 上运行 TensorFlow 模型

    (https://coral.withgoogle.com/tutorials/edgetpu-models-intro/)

  • 了解 TensorFlow Lite (www.tensorflow.org/lite)


有所启发?我们非常期待看到社区用户使用 Coral 和 TensorFlow Lite 构建的作品!请在 Twitter 上通过 #withcoral 和 #poweredbyTF # 标签分享您的想法。



更多 AI 相关阅读:




    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存