提交 a63588b7 编写于 作者: W wizardforcel

2020-12-06 12:27:12

上级 5748c481
......@@ -25,13 +25,13 @@
TensorFlow Lite( [https://www.tensorflow.org/mobile/tflite](https://www.tensorflow.org/mobile/tflite) )是一种轻量级解决方案,可在移动和嵌入式设备上运行深度学习模型。 如果可以将 TensorFlow 或 Keras 内置的模型成功转换为 TensorFlow Lite 格式,请基于 FlatBuffers( [https://google.github.io/flatbuffers](https://google.github.io/flatbuffers) ),与 ProtoBuffers ProtoBuffers 类似,但 相似,但速度更快,并且大小要小得多。 *检测对象及其位置* 和,然后可以期望模型以低延迟和较小的二进制大小运行。 在您的移动应用程序中使用 TensorFlow Lite 的基本工作流程如下:
[TensorFlow Lite](https://www.tensorflow.org/mobile/tflite) 是一种轻量级解决方案,可在移动和嵌入式设备上运行深度学习模型。 如果可以将 TensorFlow 或 Keras 内置的模型成功转换为 TensorFlow Lite 格式,请基于 [FlatBuffers](https://google.github.io/flatbuffers),与 ProtoBuffers ProtoBuffers 类似,但速度更快,并且大小要小得多。 *检测对象及其位置* 和,然后可以期望模型以低延迟和较小的二进制大小运行。 在您的移动应用程序中使用 TensorFlow Lite 的基本工作流程如下:
1. 使用 TensorFlow 或 Keras 以 TensorFlow 作为后端来构建和训练(或重新训练)TensorFlow 模型,例如我们在前几章中训练的模型。
You can also pick a prebuilt TensorFlow Lite model, such as the MobileNet models available at [https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md](https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md), which we used for retraining in [Chapter 2](../Text/02.html), *Classifying Images with Transfer Learning*. Each of the MobileNet model `tgz` files that you can download there contains a converted TensorFlow Lite model. For example, the `MobileNet_v1_1.0_224.tgz` file contains a `mobilenet_v1_1.0_224.tflite` file that you can use directly on mobile. If you use such a prebuilt TensorFlow Lite model, you can skip steps 2 and 3.
2. 构建 TensorFlow Lite 转换器工具。 如果您从 [https://github.com/tensorflow/tensorflow/releases](https://github.com/tensorflow/tensorflow/releases) 下载 TensorFlow 1.5 或 1.6 版本,则可以从 TensorFlow 源根目录在终端上运行`bazel build tensorflow/contrib/lite/toco:toco`。 如果您使用更高版本或获取最新的 TensorFlow 仓库,您应该可以使用此`build`命令来执行此操作,但如果没有,请查看该新版本的文档。
2. 构建 TensorFlow Lite 转换器工具。 如果您从[这里](https://github.com/tensorflow/tensorflow/releases)下载 TensorFlow 1.5 或 1.6 版本,则可以从 TensorFlow 源根目录在终端上运行`bazel build tensorflow/contrib/lite/toco:toco`。 如果您使用更高版本或获取最新的 TensorFlow 仓库,您应该可以使用此`build`命令来执行此操作,但如果没有,请查看该新版本的文档。
3. 使用 TensorFlow Lite 转换器工具将 TensorFlow 模型转换为 TensorFlow Lite 模型。 在下一节中,您将看到一个详细的示例。
4. 在 iOS 或 Android 上部署 TensorFlow Lite 模型-对于 iOS,使用 C ++ API 加载和运行模型; 对于 Android,请使用 Java API(围绕 C ++ API 的包装器)加载和运行模型。 与我们之前在 TensorFlow Mobile 项目中使用的`Session`类不同,C ++和 Java API 均使用 TensorFlow-lite 特定的`Interpreter`类来推断模型。 在接下来的两个部分中,我们将向您展示 iOS C ++代码和 Android Java 代码以使用`Interpreter`
......@@ -58,7 +58,7 @@ If you run a TensorFlow Lite model on Android, and if the Android device is Andr
有两个用于 iOS 的 TensorFlow Lite 示例应用程序,名为[simple and camera]的,类似于 TensorFlow Mobile iOS 应用程序 simple 和 camera,但在 TensorFlow 1.5-1.8 的官方版本中的 TensorFlow Lite API 中实现 [https://github.com/tensorflow/tensorflow/releases](https://github.com/tensorflow/tensorflow/releases) ,并且可能也在最新的 TensorFlow 仓库中。 您可以运行以下命令来准备和运行这两个应用,类似地在[的“ iOS 演示应用”下进行了记录:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite)
有两个用于 iOS 的 TensorFlow Lite 示例应用程序,名为[simple and camera]的,类似于 TensorFlow Mobile iOS 应用程序 simple 和 camera,[但在 TensorFlow 1.5-1.8 的官方版本中的 TensorFlow Lite API 中实现](https://github.com/tensorflow/tensorflow/releases),并且可能也在最新的 TensorFlow 仓库中。 您可以运行以下命令来准备和运行这两个应用,类似地在[“iOS 演示应用”](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite)下进行了记录
```py
cd tensorflow/contrib/lite/examples/ios
......@@ -213,7 +213,7 @@ bazel-bin/tensorflow/contrib/lite/toco/toco \
--output_array=final_result --input_shape=1,224,224,3
```
我们必须使用`--input_array``--output_array`指定输入节点名称和输出节点名称。 有关转换器工具的详细命令行参数,请参阅[https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/toco/g3doc/cmdline_examples。 md](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/toco/g3doc/cmdline_examples.md)
我们必须使用`--input_array``--output_array`指定输入节点名称和输出节点名称。 有关转换器工具的详细命令行参数,请参阅[这里](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/toco/g3doc/cmdline_examples.md)
添加转换后的`dog_retrained_mobilenet10_224_not_quantized.tflite` TensorFlow Lite 模型文件,以及相同的`dog_retrained_labels.txt` 标签文件 `HelloTensorFlow`到 Xcode 项目,只需将步骤 4 中的行从 `NSString* graph = @"mobilenet_v1_1.0_224";` 更改为 `NSString* graph = @"dog_retrained_mobilenet10_224_not_quantized";``const int output_size = 1000;` 更改为 `const int output_size = 121;` (回想一下 MobileNet 模型对 1,000 个对象进行分类,而我们的训练后的狗模型则对 121 个犬种进行了分类),然后使用 TensorFlow Lite 格式的训练后的模型再次运行该应用。 结果将大致相同。
......@@ -290,7 +290,7 @@ bazel-bin/tensorflow/contrib/lite/toco/toco \
为简单起见,我们将仅演示如何在新的 Android 应用程序中将 TensorFlow Lite 与预构建的 TensorFlow Lite MobileNet 模型一起添加,并在此过程中发现一些有用的技巧。 有一个使用 TensorFlow Lite 的示例 Android 应用程序,您可能希望首先在具有 API 级别的 Android 设备上与 Android Studio 一起运行( [https://www.tensorflow.org/mobile/tflite/demo_android](https://www.tensorflow.org/mobile/tflite/demo_android)在执行以下步骤在新的 Android 应用中使用 TensorFlow Lite 之前,至少需要 15 个(版本至少为 4.0.3)。 如果您成功构建并运行了演示应用程序,则在 Android 设备上移动时,应该能够通过设备摄像头和 TensorFlow Lite MobileNet 模型看到识别出的对象。
为简单起见,我们将仅演示如何在新的 Android 应用程序中将 TensorFlow Lite 与预构建的 TensorFlow Lite MobileNet 模型一起添加,并在此过程中发现一些有用的技巧。 有一个使用 TensorFlow Lite 的示例 Android 应用程序,[您可能希望首先在具有 API 级别的 Android 设备上与 Android Studio 一起运行](https://www.tensorflow.org/mobile/tflite/demo_android)在执行以下步骤在新的 Android 应用中使用 TensorFlow Lite 之前,至少需要 15 个(版本至少为 4.0.3)。 如果您成功构建并运行了演示应用程序,则在 Android 设备上移动时,应该能够通过设备摄像头和 TensorFlow Lite MobileNet 模型看到识别出的对象。
现在执行以下步骤来创建一个新的 Android 应用程序,并添加 TensorFlow Lite 支持以对图像进行分类,就像我们在[第 2 章](../Text/02.html)*通过转印学习*对图像进行分类中的 HelloTensorFlow Android 应用程序一样。 ]:
......@@ -409,13 +409,13 @@ private MappedByteBuffer loadModelFile(Activity activity) throws IOException {
苹果的 Core ML 框架( [https://developer.apple.com/documentation/coreml](https://developer.apple.com/documentation/coreml) )使 iOS 开发人员可以轻松地在运行 iOS 11 或更高版本的 iOS 应用中使用经过训练的机器学习模型,并构建 Xcode 9 或更高版本。 您可以下载并使用 Apple 已在 [https://developer.apple.com/machine-learning](https://developer.apple.com/machine-learning) 提供的 Core ML 格式的经过预先训练的模型,也可以使用称为 coremltools 的 Python 工具 [https://apple.github.io/coremltools](https://apple.github.io/coremltools) 上的 Core ML 社区工具可将其他机器学习和深度学习模型转换为 Core ML 格式。
苹果的 [Core ML 框架](https://developer.apple.com/documentation/coreml)使 iOS 开发人员可以轻松地在运行 iOS 11 或更高版本的 iOS 应用中使用经过训练的机器学习模型,并构建 Xcode 9 或更高版本。 您可以下载并使用 Apple 已在[这里](https://developer.apple.com/machine-learning)提供的 Core ML 格式的经过预先训练的模型,也可以使用称为 coremltools 的 Python 工具,[Core ML 社区工具](https://apple.github.io/coremltools)将其他机器学习和深度学习模型转换为 Core ML 格式。
Core ML 格式的预训练模型包括流行的 MobileNet 和 Inception V3 模型,以及更新的 ResNet50 模型(我们在[第 10 章](../Text/10.html)*中简要讨论了残留网络) 就像手机游戏应用*一样)。 可以转换为 Core ML 格式的模型包括使用 Caffe 或 Keras 构建的深度学习模型,以及传统的机器学习模型,例如线性回归,支持向量机和通过 Scikit Learn 构建的决策树( [http:// /scikit-learn.org](http://scikit-learn.org),这是一个非常流行的 Python 机器学习库。
Core ML 格式的预训练模型包括流行的 MobileNet 和 Inception V3 模型,以及更新的 ResNet50 模型(我们在[第 10 章](../Text/10.html)*中简要讨论了残留网络) 就像手机游戏应用*一样)。 可以转换为 Core ML 格式的模型包括使用 Caffe 或 Keras 构建的深度学习模型,以及传统的机器学习模型,例如线性回归,支持向量机和通过 [Scikit Learn](http://scikit-learn.org) 构建的决策树,这是一个非常流行的 Python 机器学习库。
因此,如果您想在 iOS 中使用传统的机器学习模型,那么 Scikit Learn 和 Core ML 绝对是必经之路。 尽管这是一本有关移动 TensorFlow 的书,但构建智能应用程序有时不需要深度学习。 在某些用例中,经典机器学习完全有意义。 此外,Core ML 对 Scikit Learn 模型的支持是如此流畅,以至于我们不能拒绝快速浏览,因此您将在必要时知道何时短暂使用移动 TensorFlow 技能。
如果要使用 Apple 预先训练的 MobileNet Core ML 模型,请在 [https:// developer 上查看 Apple 不错的示例代码项目*使用 Vision 和 Core ML* 对图像进行分类。 apple.com/documentation/vision/classifying_images_with_vision_and_core_ml](https://developer.apple.com/documentation/vision/classifying_images_with_vision_and_core_ml) ,还观看 [https://developer.apple.com/machine-learning](https://developer.apple.com/machine-learning) 上列出的有关核心 ML 的 WWDC 2017 视频。
如果要使用 Apple 预先训练的 MobileNet Core ML 模型,请在[这个页面](https://developer.apple.com/documentation/vision/classifying_images_with_vision_and_core_ml)上查看 Apple 不错的示例代码项目,它使用 Vision 和 Core ML 对图像进行分类,还观看[这个页面](https://developer.apple.com/machine-learning)上列出的有关核心 ML 的 WWDC 2017 视频。
在接下来的两个部分中,我们将向您展示两个教程,该教程以 TensorFlow 为后端,在 Keras 中如何转换和使用 Scikit Learn 模型和股票预测 RNN 模型,它们是在[第 8 章](../Text/08.html)*使用 RNN* 预测股票价格。 您将在 Objective-C 和 Swift 中看到使用源代码从头开始构建的完整 iOS 应用程序,以使用转换后的 Core ML 模型。 如果短语“从头开始”使您兴奋并使您想起 AlphaZero,则您可能喜欢上一章[第 10 章](../Text/10.html)*构建类似 AlphaZero 的移动游戏应用程序*
......@@ -437,7 +437,7 @@ Core ML 格式的预训练模型包括流行的 MobileNet 和 Inception V3 模
首先,让我们获取房价数据集,该数据集可从 [https://wiki.csc.calpoly.edu/datasets/wiki/Houses](http://wiki.csc.calpoly.edu/datasets/attachment/wiki/Houses/RealEstate.csv?format=raw) 下载。 下载的 `RealEstate.csv`文件如下所示:
首先,让我们获取房价数据集,该数据集可从[这里](http://wiki.csc.calpoly.edu/datasets/attachment/wiki/Houses/RealEstate.csv?format=raw)下载。 下载的 `RealEstate.csv`文件如下所示:
```py
MLS,Location,Price,Bedrooms,Bathrooms,Size,Price/SQ.Ft,Status
......@@ -447,7 +447,7 @@ MLS,Location,Price,Bedrooms,Bathrooms,Size,Price/SQ.Ft,Status
...
```
我们将使用流行的开源 Python 数据分析库 Pandas( [https://pandas.pydata.org](https://pandas.pydata.org)来解析 csv 文件。 要安装 Scikit Learn 和 Pandas,只需运行以下命令,最好从您之前创建的 TensorFlow 和 Keras 虚拟环境中运行以下命令:
我们将使用流行的开源 Python 数据分析库 [Pandas](https://pandas.pydata.org) 来解析 csv 文件。 要安装 Scikit Learn 和 Pandas,只需运行以下命令,最好从您之前创建的 TensorFlow 和 Keras 虚拟环境中运行以下命令:
```py
pip install scikit-learn
......@@ -498,7 +498,7 @@ print(svm.predict(X_new))
这将使用支持向量机模型作为`[298014.41462535 320991.94354092 404822.78465954]`输出预测的房价。 我们不会讨论哪种模型更好,如何使线性回归或支持向量机模型更好地工作,或者如何在 Scikit Learn 支持的所有算法中选择更好的模型-有很多不错的书籍和在线资源介绍了这些内容。 话题。
要将两个 Scikit Learn 模型`lr``svm`转换为可在您的 iOS 应用中使用的 Core ML 格式,您需要首先安装 Core ML 工具( [https://github.com / apple / coremltools](https://github.com/apple/coremltools)。 我们建议您在我们在[第 8 章](../Text/08.html)*用 RNN* 预测股价和[第 10 章](../Text/10.html)预测并创建的 TensorFlow 和 Keras 虚拟环境中使用`pip install -U coremltools`安装这些软件 ],*构建支持 AlphaZero 的手机游戏应用程序*,因为我们还将在下一部分中使用它来转换 Keras 模型。
要将两个 Scikit Learn 模型`lr``svm`转换为可在您的 iOS 应用中使用的 Core ML 格式,您需要首先安装 [Core ML 工具](https://github.com/apple/coremltools)。 我们建议您在我们在[第 8 章](../Text/08.html)*用 RNN* 预测股价和[第 10 章](../Text/10.html)预测并创建的 TensorFlow 和 Keras 虚拟环境中使用`pip install -U coremltools`安装这些软件 ],*构建支持 AlphaZero 的手机游戏应用程序*,因为我们还将在下一部分中使用它来转换 Keras 模型。
现在,只需运行以下代码即可将两个 Scikit Learn 模型转换为 Core ML 格式:
......@@ -511,7 +511,7 @@ coreml_model = coremltools.converters.sklearn.convert(svm, ["Bedrooms", "Bathroo
coreml_model.save("HouseSVM.mlmodel")
```
有关转换器工具的更多详细信息,请参见其在线文档,网址为 [https://apple.github.io/coremltools/coremltools.converters.html](https://apple.github.io/coremltools/coremltools.converters.html) 。 现在,我们可以将这两个模型添加到 Objective-C 或 Swift iOS 应用程序中,但是我们仅在此处显示 Swift 示例。 您将在下一节中看到使用从 Keras 和 TensorFlow 模型转换而来的股票预测 Core ML 模型得到的 Objective-C 和 Swift 示例。
有关转换器工具的更多详细信息,请参见其[在线文档](https://apple.github.io/coremltools/coremltools.converters.html)。 现在,我们可以将这两个模型添加到 Objective-C 或 Swift iOS 应用程序中,但是我们仅在此处显示 Swift 示例。 您将在下一节中看到使用从 Keras 和 TensorFlow 模型转换而来的股票预测 Core ML 模型得到的 Objective-C 和 Swift 示例。
......@@ -567,7 +567,7 @@ override func viewDidLoad() {
coremltools 工具还正式支持转换使用 Keras 构建的模型(请参见 [https://apple.github.io/coremltools/coremltools.converters.html](https://apple.github.io/coremltools/coremltools.converters.html) 上的 keras.convert 链接)。 截至 2018 年 3 月,最新版本的 coremltools 0.8 的版本可与 TensorFlow 1.4 和 Keras 2.1.5 配合使用,我们在[第 8 章](../Text/08.html)*预测中使用了 Keras 股票预测模型 RNN* 的股票价格。 您可以使用两种方法使用 coremltools 生成模型的 Core ML 格式。 首先是在训练模型后,直接在 Python Keras 代码中调用 coremltools 的`convert``save`方法。 例如,将下面的最后三行代码添加到`model.fit`之后的`ch8/python/keras/train.py`文件中:
coremltools 工具还正式支持转换使用 Keras 构建的模型(请参见[`keras.convert`链接](https://apple.github.io/coremltools/coremltools.converters.html))。 截至 2018 年 3 月,最新版本的 coremltools 0.8 的版本可与 TensorFlow 1.4 和 Keras 2.1.5 配合使用,我们在[第 8 章](../Text/08.html)*预测中使用了 Keras 股票预测模型 RNN* 的股票价格。 您可以使用两种方法使用 coremltools 生成模型的 Core ML 格式。 首先是在训练模型后,直接在 Python Keras 代码中调用 coremltools 的`convert``save`方法。 例如,将下面的最后三行代码添加到`model.fit`之后的`ch8/python/keras/train.py`文件中:
```py
model.fit(
......@@ -694,7 +694,7 @@ class ViewController: UIViewController {
请注意,就像使用 TensorFlow Mobile iOS 应用程序一样,我们使用`bidirectional_1_input``activation_1_Identity`来设置输入并获取输出。
如果尝试转换在[第 10 章](../Text/10.html)*构建类似 AlphaZero 的移动游戏应用程序*中在 Keras 中构建和训练的 AlphaZero 模型,则会收到错误消息`ValueError: Unknown loss function:softmax_cross_entropy_with_logits`。 如果您尝试转换我们在本书中构建的其他 TensorFlow 模型,则可以使用的最佳非官方工具是`https://github.com/tf-coreml/tf-coreml`上的 TensorFlow 到核心 ML 转换器。 不幸的是,类似于 TensorFlow Lite,它仅支持有限的 TensorFlow 操作集,其中一些原因是 Core ML 的限制,另一些原因是 tf-coreml 转换器的限制。 我们不会详细介绍将 TensorFlow 模型转换为 Core ML 模型的细节。 但是至少您已经了解了如何转换和使用 Scikit Learn 构建的传统机器学习模型以及基于 Keras 的 RNN 模型,该模型有望为您提供构建和使用 Core ML 模型的良好基础。 当然,如果您喜欢 Core ML,则应留意其将来的改进版本,以及 coremltools 和 tf-coreml 转换器的将来版本。 关于 Core ML,我们还没有涉及很多内容-要了解其确切功能,请参阅 [https://developer.apple.com/documentation/coreml/core_ml_api](https://developer.apple.com/documentation/coreml/core_ml_api) 上完整的 API 文档
如果尝试转换在[第 10 章](../Text/10.html)*构建类似 AlphaZero 的移动游戏应用程序*中在 Keras 中构建和训练的 AlphaZero 模型,则会收到错误消息`ValueError: Unknown loss function:softmax_cross_entropy_with_logits`。 如果您尝试转换我们在本书中构建的其他 TensorFlow 模型,则可以使用的最佳非官方工具是`https://github.com/tf-coreml/tf-coreml`上的 TensorFlow 到核心 ML 转换器。 不幸的是,类似于 TensorFlow Lite,它仅支持有限的 TensorFlow 操作集,其中一些原因是 Core ML 的限制,另一些原因是 tf-coreml 转换器的限制。 我们不会详细介绍将 TensorFlow 模型转换为 Core ML 模型的细节。 但是至少您已经了解了如何转换和使用 Scikit Learn 构建的传统机器学习模型以及基于 Keras 的 RNN 模型,该模型有望为您提供构建和使用 Core ML 模型的良好基础。 当然,如果您喜欢 Core ML,则应留意其将来的改进版本,以及 coremltools 和 tf-coreml 转换器的将来版本。 关于 Core ML,我们还没有涉及很多内容-要了解其确切功能,请参阅[完整的 API 文档](https://developer.apple.com/documentation/coreml/core_ml_api)
......
......@@ -4,9 +4,9 @@
根据 Wikipedia 的说法,“ Raspberry Pi 是 Raspberry Pi 基金会在英国开发的一系列小型单板计算机,旨在促进学校和发展中国家的基础计算机科学教学。” Raspberry Pi 的官方网站( [https://www.raspberrypi.org](https://www.raspberrypi.org)将其描述为“一种小型且价格合理的计算机,可以用来学习编程。” 如果您以前从未听说过或使用过 Raspberry Pi,请访问其网站,然后您很快就会爱上这个很棒的小东西。 几乎没有什么功能-实际上,TensorFlow 的开发人员从 2016 年中期开始在早期版本的 Raspberry Pi 上提供了 TensorFlow,因此我们可以在微型计算机上运行复杂的 TensorFlow 模型,您只需花费 35 美元即可购买到。 这可能超出了“基础计算机科学的教学”或“学习编程”的范围,但另一方面,如果我们考虑过去几年中移动设备的所有飞速发展,那么看到这一点我们就不会感到惊讶 如何在越来越小的设备中实现越来越多的功能。
根据 Wikipedia 的说法,“ Raspberry Pi 是 Raspberry Pi 基金会在英国开发的一系列小型单板计算机,旨在促进学校和发展中国家的基础计算机科学教学。” [Raspberry Pi 的官方网站](https://www.raspberrypi.org)将其描述为“一种小型且价格合理的计算机,可以用来学习编程。” 如果您以前从未听说过或使用过 Raspberry Pi,请访问其网站,然后您很快就会爱上这个很棒的小东西。 几乎没有什么功能-实际上,TensorFlow 的开发人员从 2016 年中期开始在早期版本的 Raspberry Pi 上提供了 TensorFlow,因此我们可以在微型计算机上运行复杂的 TensorFlow 模型,您只需花费 35 美元即可购买到。 这可能超出了“基础计算机科学的教学”或“学习编程”的范围,但另一方面,如果我们考虑过去几年中移动设备的所有飞速发展,那么看到这一点我们就不会感到惊讶 如何在越来越小的设备中实现越来越多的功能。
在本章中,我们将进入 Raspberry Pi 的有趣世界,Raspberry Pi 是 TensorFlow 正式支持的最小设备。 我们将首先介绍如何获取和设置新的 Raspberry Pi 3 B 板,包括本章中使用的所有必要配件,以使其能够看,听和说。 然后,我们将介绍如何使用 GoPiGo 机器人基础套件( [https://www.dexterindustries.com/shop/gopigo3-robot-base-kit](https://www.dexterindustries.com/shop/gopigo3-robot-base-kit) )将 Raspberry Pi 板变成一个机器人 可以移动。 之后,我们将提供最简单的工作步骤,以便在 Raspberry Pi 上设置 TensorFlow 1.6 并构建其示例 Raspberry Pi 应用程序。 我们还将讨论如何集成图像分类,这是我们在[第 2 章](../Text/02.html)*通过转移学习*对图像进行分类时使用的模型,并通过文字转语音功能使机器人告诉我们它可以识别的内容 以及如何集成音频识别,这是我们在[第 5 章](../Text/05.html)*了解简单语音命令*中使用的模型以及 GoPiGo API,可让您使用语音命令来控制机器人的运动 。
在本章中,我们将进入 Raspberry Pi 的有趣世界,Raspberry Pi 是 TensorFlow 正式支持的最小设备。 我们将首先介绍如何获取和设置新的 Raspberry Pi 3 B 板,包括本章中使用的所有必要配件,以使其能够看,听和说。 然后,我们将介绍如何使用 [GoPiGo 机器人基础套件](https://www.dexterindustries.com/shop/gopigo3-robot-base-kit),将 Raspberry Pi 板变成一个可以移动的机器人。 之后,我们将提供最简单的工作步骤,以便在 Raspberry Pi 上设置 TensorFlow 1.6 并构建其示例 Raspberry Pi 应用程序。 我们还将讨论如何集成图像分类,这是我们在[第 2 章](../Text/02.html)*通过转移学习*对图像进行分类时使用的模型,并通过文字转语音功能使机器人告诉我们它可以识别的内容 以及如何集成音频识别,这是我们在[第 5 章](../Text/05.html)*了解简单语音命令*中使用的模型以及 GoPiGo API,可让您使用语音命令来控制机器人的运动 。
最后,我们将向您展示如何使用 TensorFlow 和 OpenAI Gym,这是一个用于开发和比较强化学习算法的 Python 工具包,如何在模拟环境中实现强大的强化学习算法,以使我们的机器人能够在真实的身体中移动和平衡 环境。
......@@ -28,16 +28,16 @@
小型单板 Raspberry Pi 计算机系列包括 Raspberry Pi 3 B +,3 B,2B,1 B +,1 A +,零和零 W(有关详细信息,请参见 [https:// /www.raspberrypi.org/products/#buy-now-modal](https://www.raspberrypi.org/products/#buy-now-modal) )。 我们将在此处使用 Pi 3 B 主板,您可以从前面的链接或在 Amazon( [https://www.amazon.com/gp/product/B01CD5VC92](https://www.amazon.com/gp/product/B01CD5VC92) )上以$ 35 的价格购买。 我们在主板上使用并测试过的配件及其价格如下:
小型单板 Raspberry Pi 计算机系列包括 Raspberry Pi 3B+,3B,2B,1B+,1A+,0 和 0W(有关详细信息,请参见[这里](https://www.raspberrypi.org/products/#buy-now-modal))。 我们将在此处使用 Pi 3B 主板,您可以从前面的链接或在 [Amazon](https://www.amazon.com/gp/product/B01CD5VC92) 上以 35 美元的价格购买。 我们在主板上使用并测试过的配件及其价格如下:
* CanaKit 5V 2.5A Raspberry Pi 电源约 10 美元( [https://www.amazon.com/gp/product/B00MARDJZ4](https://www.amazon.com/gp/product/B00MARDJZ4),可在开发期间使用。
* Kinobo-大约 4 美元的( [https://www.amazon.com/gp/product/B00IR8R7WQ](https://www.amazon.com/gp/product/B00IR8R7WQ)可以记录您的语音命令的 USB 2.0 微型麦克风。
* USHONK USB 微型扬声器约合 12 美元( [https://www.amazon.com/gp/product/B075M7FHM1](https://www.amazon.com/gp/product/B075M7FHM1),可以播放合成声音。
* Arducam 5 Megapixels 1080p 传感器 OV5647 微型相机约合$ 14 ( [https://www.amazon.com/gp/product/B012V1HEP4](https://www.amazon.com/gp/product/B012V1HEP4),以支持图像分类。
* [CanaKit 5V 2.5A Raspberry Pi 电源](https://www.amazon.com/gp/product/B00MARDJZ4)约 10 美元,可在开发期间使用。
* [Kinobo](https://www.amazon.com/gp/product/B00IR8R7WQ) - 大约 4 美元的可以记录您的语音命令的 USB 2.0 微型麦克风。
* [USHONK USB 微型扬声器](https://www.amazon.com/gp/product/B075M7FHM1)约合 12 美元,可以播放合成声音。
* [Arducam 5 Megapixels 1080p 传感器 OV5647 微型相机](https://www.amazon.com/gp/product/B012V1HEP4)约合 14 美元,以支持图像分类。
* 16 GB MicroSD 和适配器,价格约为 10 美元( [https://www.amazon.com/gp/product/B00TDBLTWK](https://www.amazon.com/gp/product/B00TDBLTWK),用于存储 Raspbian(Raspberry Pi 的官方操作系统)的安装文件,并用作 安装后的硬盘驱动器。
* 一个 USB 磁盘,例如 SanDisk 32GB USB Drive,售价 9 美元( [https://www.amazon.com/gp/product/B008AF380Q](https://www.amazon.com/gp/product/B008AF380Q),将用作交换分区(有关详细信息,请参阅下一节) 因此我们可以手动构建 TensorFlow 库,这是构建和运行 TensorFlow C ++代码所必需的。
* 售价 110 美元的 GoPiGo 机器人基础套件( [https://www.amazon.com/gp/product/B00NYB3J0A](https://www.amazon.com/gp/product/B00NYB3J0A) 或官方网站 [https://www.dexterindustries.com/shop](https://www.dexterindustries.com/shop),将 Raspberry Pi 板变成可以移动的机器人。
* [16 GB MicroSD 和适配器](https://www.amazon.com/gp/product/B00TDBLTWK),价格约为 10 美元,用于存储 Raspbian(Raspberry Pi 的官方操作系统)的安装文件,并用作 安装后的硬盘驱动器。
* 一个 USB 磁盘,例如 [SanDisk 32GB USB Drive](https://www.amazon.com/gp/product/B008AF380Q),售价 9 美元,将用作交换分区(有关详细信息,请参阅下一节) 因此我们可以手动构建 TensorFlow 库,这是构建和运行 TensorFlow C ++代码所必需的。
* 售价 110 美元的 [GoPiGo 机器人基础套件](https://www.amazon.com/gp/product/B00NYB3J0A)[官方网站](https://www.dexterindustries.com/shop),将 Raspberry Pi 板变成可以移动的机器人。
您还需要 HDMI 电缆将 Raspberry Pi 板连接到计算机显示器,USB 键盘和 USB 鼠标。 总共要花 200 美元,包括 110 美元的 GoPiGo,来构建一个可以移动,看,听,说的 Raspberry Pi 机器人。 尽管与功能强大的 Raspberry Pi 计算机相比,GoPiGo 套件似乎有点昂贵,但是如果没有它,那么一动不动的 Raspberry Pi 可能会失去很多吸引力。
......@@ -53,12 +53,12 @@ There's an older blog, *How to build a robot that “sees” with $100 and Tenso
最简单的方法是遵循 Raspbian 软件安装指南,网址为 [https://www.raspberrypi.org/learning/software-guide/quickstart](https://www.raspberrypi.org/learning/software-guide/quickstart) ,总而言之,这是一个简单的三步过程:
最简单的方法是遵循 [Raspbian 软件安装指南](https://www.raspberrypi.org/learning/software-guide/quickstart),总而言之,这是一个简单的三步过程:
1. 为 Windows 或 Mac 下载并安装 SD 格式化程序( [https://www.sdcard.org/downloads/formatter_4/index.html](https://www.sdcard.org/downloads/formatter_4/index.html)
1. 为 Windows 或 Mac 下载并安装 [SD 格式化程序](https://www.sdcard.org/downloads/formatter_4/index.html)
2. 使用 SD 格式化程序格式化 MicroSD 卡。
3. [https://www.raspberrypi.org/downloads/noobs](https://www.raspberrypi.org/downloads/noobs) 上下载 Raspbian 的官方简易安装程序 New Out Of Box Software(NOOBS)的离线 ZIP 版本,将其解压缩,然后拖动并 将提取的`NOOBS`文件夹中的所有文件拖放到格式化的 MicroSD 卡中。
3.[这个页面](https://www.raspberrypi.org/downloads/noobs)上下载 Raspbian 的官方简易安装程序 New Out Of Box Software(NOOBS)的离线 ZIP 版本,将其解压缩,然后拖动并 将提取的`NOOBS`文件夹中的所有文件拖放到格式化的 MicroSD 卡中。
现在弹出 MicroSD 卡并将其插入 Raspberry Pi 板上。 将显示器的 HDMI 电缆以及 USB 键盘和鼠标连接到开发板上。 用电源为开发板供电,然后按照屏幕上的步骤完成 Raspbian 的安装,包括设置 Wifi 网络。 整个安装过程不到一个小时即可完成。 完成后,您可以打开一个终端并输入`ifconfig`来查找电路板的 IP 地址,然后从您的计算中使用`ssh pi@<board_ip_address>`来访问它,正如我们稍后将要看到的,这确实很方便并且需要 在移动中测试控制 Raspberry Pi 机器人-当移动时,您不想或不能将键盘,鼠标和显示器与板子一起使用。
......@@ -148,13 +148,13 @@ Occasionally, after the Pi board reboots, the card number for the USB speaker ge
GoPiGo 是一个流行的工具包,可将您的 Raspberry Pi 板变成移动的机器人。 购买并收到我们之前提到的 GoPiGo 机器人基础套件后,请按照 [https://www.dexterindustries.com/GoPiGo/get-started-with-the-gopigo3-raspberry- pi-robot / 1-assemble-gopigo3](https://www.dexterindustries.com/GoPiGo/get-started-with-the-gopigo3-raspberry-pi-robot/1-assemble-gopigo3) 将其与您的 Pi 板组装在一起。 根据您是同时观看 March March Madness 还是 NBA 季后赛比赛,这大约需要一两个小时。
GoPiGo 是一个流行的工具包,可将您的 Raspberry Pi 板变成移动的机器人。 购买并收到我们之前提到的 GoPiGo 机器人基础套件后,请按照[这里](https://www.dexterindustries.com/GoPiGo/get-started-with-the-gopigo3-raspberry-pi-robot/1-assemble-gopigo3)将其与您的 Pi 板组装在一起。 根据您是同时观看 March March Madness 还是 NBA 季后赛比赛,这大约需要一两个小时。
完成后,您的 Raspberry Pi 机器人以及我们之前列出的所有附件应如下所示:
![](img/a745c220-8c27-4b70-bef4-bc8dcbc518d8.png)Figure 12\. 1 Raspberry Pi robot with GoPiGo Kit and camera, USB speaker, and USB microphone
现在,使用 Raspberry Pi 电源打开 Pi 机器人,并在启动后使用`ssh pi@<your_pi_board_ip>`连接到它。 要安装 GoPiGo Python 库,以便我们可以使用 GoPiGo 的 Python API( [http://gopigo3.readthedocs.io/en/master/api-basic.html](http://gopigo3.readthedocs.io/en/master/api-basic.html)控制机器人,请运行以下命令 ,它将执行一个 shell 脚本,该脚本创建一个新的`/home/pi/Dexter`目录并在其中安装所有库和固件文件:
现在,使用 Raspberry Pi 电源打开 Pi 机器人,并在启动后使用`ssh pi@<your_pi_board_ip>`连接到它。 要安装 GoPiGo Python 库,以便我们可以使用 [GoPiGo 的 Python API](http://gopigo3.readthedocs.io/en/master/api-basic.html) 控制机器人,请运行以下命令 ,它将执行一个 shell 脚本,该脚本创建一个新的`/home/pi/Dexter`目录并在其中安装所有库和固件文件:
```py
sudo sh -c "curl -kL dexterindustries.com/update_gopigo3 | bash"
......@@ -190,7 +190,7 @@ gpg3_obj.drive_cm(5, False)
gpg3_obj.turn_degrees(30, False)
```
您还可以使用`forward``backward`许多其他 API 调用(如 [http://gopigo3.readthedocs.io/en/master/api-basic.html](http://gopigo3.readthedocs.io/en/master/api-basic.html) 中所述)来控制 机器人的运动,但是在本章中,我们仅使用`drive_cm``turn_degrees`
您还可以使用`forward``backward`[许多其他 API 调用](http://gopigo3.readthedocs.io/en/master/api-basic.html)来控制机器人的运动,但是在本章中,我们仅使用`drive_cm``turn_degrees`
我们现在准备使用 TensorFlow 向机器人添加更多智能。
......@@ -202,15 +202,15 @@ gpg3_obj.turn_degrees(30, False)
要在 Python 中使用 TensorFlow,就像我们稍后在*音频识别**强化学习*部分中所做的那样,我们可以在 TensorFlow Jenkins 持续集成站点上为 Pi 安装每晚 TensorFlow 1.6 版本 ( [http://ci.tensorflow.org/view/Nightly/job/nightly-pi/223/artifact/output-artifacts](http://ci.tensorflow.org/view/Nightly/job/nightly-pi/223/artifact/output-artifacts)
要在 Python 中使用 TensorFlow,就像我们稍后在*音频识别**强化学习*部分中所做的那样,我们可以在 TensorFlow Jenkins 持续集成站点上为 Pi 安装[每晚 TensorFlow 1.6 版本](http://ci.tensorflow.org/view/Nightly/job/nightly-pi/223/artifact/output-artifacts)
```py
sudo pip install http://ci.tensorflow.org/view/Nightly/job/nightly-pi/lastSuccessfulBuild/artifact/output-artifacts/tensorflow-1.6.0-cp27-none-any.whl
```
此方法更为常见,并在一个不错的博客条目*中为 Raspberry Pi 交叉编译 TensorFlow*[https://petewarden.com/2017/08/20/cross-compiling](https://petewarden.com/2017/08/20/cross-compiling-tensorflow-for-the-raspberry-pi) ,,作者是 *Pete Warden*
此方法更为常见,并在一个不错的博客条目中描述,[《为 Raspberry Pi 交叉编译 TensorFlow》](https://petewarden.com/2017/08/20/cross-compiling-tensorflow-for-the-raspberry-pi),作者是 *Pete Warden*
一种更复杂的方法是使用`makefile`,这在您需要构建和使用 TensorFlow 库时是必需的。 TensorFlow 官方 makefile 文档( [https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/makefile](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/makefile)的 Raspberry Pi 部分包含构建 TensorFlow 库的详细步骤,但是它 可能不适用于每个版本的 TensorFlow。 此处的步骤与 TensorFlow 的早期版本(0.10)完美配合,但是在 TensorFlow 1.6 中会导致许多“未定义对`google::protobuf`的引用”错误。
一种更复杂的方法是使用`makefile`,这在您需要构建和使用 TensorFlow 库时是必需的。 [TensorFlow 官方 makefile 文档](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/makefile)的 Raspberry Pi 部分包含构建 TensorFlow 库的详细步骤,但是它 可能不适用于每个版本的 TensorFlow。 此处的步骤与 TensorFlow 的早期版本(0.10)完美配合,但是在 TensorFlow 1.6 中会导致许多“未定义对`google::protobuf`的引用”错误。
TensorFlow 1.6 版本已经测试了以下步骤,可从[下载 https://github.com/tensorflow/tensorflow/releases/tag/v1.6.0](https://github.com/tensorflow/tensorflow/releases/tag/v1.6.0) ; 您当然可以在 TensorFlow 发行页面中尝试使用较新的版本,或者通过`git clone https://github.com/tensorflow/tensorflow`克隆最新的 TensorFlow 源,并修复所有可能的问题。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册