使用 Coral 开发板、Edge TPU 和 TensorFlow Lite 构建离线 AI
2019 年 3 月 14 日
作者:Daniel Situnayake (@dansitu),TensorFlow Lite 开发者倡导者。

当你想到为机器学习提供动力的硬件时,你可能会想到在遥远的服务器机房里,无数行耗电的处理器在处理着数 TB 的数据,或者塞满了 GPU 银行的笨重的台式机。

你不太可能想到一个 40mm x 48mm 的集成电路,它整齐地放置在一个信用卡大小的开发板上。你肯定不会想到一个像玩具车大小的时尚铝盒,通过一根 USB-C 连接到你的电脑。
coral dev board
这些新设备是由 Coral 制造的,Coral 是 Google 新推出的一个平台,旨在帮助嵌入式开发人员使用本地 AI 构建令人惊叹的体验。Coral 的首批产品由 Google 的 Edge TPU 芯片驱动,专为运行 TensorFlow Lite 而设计,TensorFlow Lite 是 TensorFlow 为移动设备和嵌入式设备提供的轻量级解决方案。作为开发人员,你可以使用 Coral 设备来探索和原型化用于设备上机器学习推理的新应用程序。

Coral 的 开发板 是一款单板 Linux 计算机,配备可拆卸的系统模块 (SOM),该模块承载 Edge TPU。它允许你原型化应用程序,然后通过在自己的设备中包含 SOM 来扩展到生产。Coral USB 加速器 是一款 USB 附件,可以将 Edge TPU 带到任何兼容的 Linux 计算机。它设计成直接放在 Raspberry Pi Zero 的顶部。

在这篇博文中,我们将探索机器学习“边缘”的令人兴奋的应用,并将学习 TensorFlow Lite 和 Coral 如何帮助你在硬件产品中构建 AI。你将看到我们预先训练的模型如何帮助你无需 ML 经验即可快速上手,并了解帮助你优化自己的模型以供本地使用的转换工具。

边缘推理

直到最近,在生产中部署机器学习模型还意味着在某种服务器上运行它。如果你想在视频中检测已知物体,你必须将其流式传输到你的后端,在那里一些强大的硬件将运行推理(即检测任何存在的物体)并通知设备结果。
 deploying a machine learning model in production
这对许多应用程序来说都很好用,但是如果我们可以不用服务器,直接在设备上运行呢?
server less model
TensorFlow Lite 使在边缘运行高性能推理成为可能,这带来了许多令人惊叹的新体验。

离线推理

使用边缘推理,你不再依赖互联网连接。如果互联网速度慢或价格昂贵,你可以构建智能传感器,这些传感器可以理解它们所看到的内容,并且只传输有趣的部分。

这意味着你可以在全新的情况和地点部署 ML。想象一下,一个智能摄像头可以识别偏远地区的野生动物,或者一个成像设备可以帮助在远离无线基础设施的地区进行医疗诊断。
使用智能摄像头监控野生动物

最低延迟

将数据发送到服务器需要往返延迟,这在处理实时数据时会造成障碍。当我们的模型在边缘时,这个问题就不复存在了!

当推理速度极快时,我们可以解决依赖于性能的问题,例如,将实时物体跟踪添加到在人类空间中导航的机器人,或在现场音乐表演中合成音频。
在现场表演中合成音频

隐私和安全

当数据保留在边缘时,用户可以从更高的隐私和安全性中受益,因为个人信息永远不会离开他们的设备。

这使得新的、注重隐私的应用程序成为可能,例如,只有在检测到可能威胁时才会录制视频的安全摄像头,或无需将数据发送到云端的分析个人指标的健康设备。
在不将数据发送到云的情况下分析健康指标

性能

所有这些新应用程序都依赖于高性能推理,而这只有通过 Edge TPU 的硬件加速才能实现。但这到底能提高多少速度呢?

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

使用 MobileNet 进行人脸检测,我们已经实现了高达每秒 70 到 100 帧的推理速度,对于食物识别,我们已经实现了每秒 200 帧的推理速度。即使同时运行多个模型,这也足以实现比实时视频推理更好的效果。

下表概述了 Coral USB 加速器在各种模型上的性能。

* 桌面 CPU:64 位 Intel(R) Xeon(R) E5–1650 v4 @ 3.60GHz
** 嵌入式 CPU:四核 Cortex-A53 @ 1.5GHz**
† 开发板:四核 Cortex-A53 @ 1.5GHz + Edge TPU


所有测试模型均使用 ImageNet 数据集进行训练,该数据集包含 1,000 个类别,输入大小为 224x224,除了 Inception v4,其输入大小为 299x299。

使用 Coral 和 TensorFlow Lite 入门

Coral 是一个新平台,但它旨在与 TensorFlow 无缝协作。若要将 TensorFlow 模型带到 Coral,你可以使用 TensorFlow Lite,它是一个用于在边缘设备(包括 Edge TPU、移动电话和微控制器)上运行机器学习推理的工具包。

预先训练的模型

Coral 网站提供 预先训练的 TensorFlow Lite 模型,这些模型经过优化,可用于 Coral 硬件。如果你刚入门,你可以直接下载模型,将其部署到你的设备,并立即开始使用 Coral 的 API 演示脚本 为各种对象类别运行图像分类或对象检测。

重新训练模型

你可以使用迁移学习,将 Coral 预先训练的机器学习模型定制为识别你自己的图像和物体。要做到这一点,请按照 重新训练现有模型 中的说明进行操作。

构建自己的 TensorFlow 模型

如果你有一个现有的 TensorFlow 模型,或者你想从头开始训练一个模型,你可以按照 为 Edge TPU 构建新模型 中的步骤进行操作。请注意,你的模型必须满足 模型要求

若要为 Edge TPU 准备模型,首先需要使用 TensorFlow Lite 转换器 将模型转换为边缘设备,并为边缘设备进行优化。然后,使用 Edge TPU 模型编译器 为 Edge TPU 编译模型。

量化和优化

为 Coral 硬件提供动力的 Edge TPU 芯片专门设计用于与经过量化的模型一起使用,这意味着它们的底层数据以一种压缩的方式进行了压缩,从而产生一个更小、更快的模型,对精度的影响很小。

TensorFlow Lite 转换器可以对任何经过训练的 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 和 TensorFlow Lite 构建了什么!在 Twitter 上使用标签 #withcoral 和 #poweredbyTF 分享你的想法。
下一篇文章
Build AI that works offline with Coral Dev Board, Edge TPU, and TensorFlow Lite

作者:Daniel Situnayake (@dansitu),TensorFlow Lite 开发者倡导者。

当你想到为机器学习提供动力的硬件时,你可能会想到在遥远的服务器机房里,无数行耗电的处理器在处理着数 TB 的数据,或者塞满了 GPU 银行的笨重的台式机。

你不太可能想到一个 40mm x 48mm 的集成电路,它整齐地放置在一个开发板上……