From cdcf9fb56fbd177570d1ad9ba78b3b0a565280ad Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Wed, 9 Dec 2020 10:40:08 +0800 Subject: [PATCH] 2020-12-09 10:40:08 --- new/intel-mobi-proj-tf/00.md | 10 ++++---- new/intel-mobi-proj-tf/01.md | 28 +++++++++++------------ new/intel-mobi-proj-tf/02.md | 44 ++++++++++++++++++------------------ new/intel-mobi-proj-tf/03.md | 2 +- new/intel-mobi-proj-tf/05.md | 6 ++--- new/intel-mobi-proj-tf/06.md | 2 +- new/intel-mobi-proj-tf/11.md | 2 +- new/intel-mobi-proj-tf/12.md | 2 +- 8 files changed, 48 insertions(+), 48 deletions(-) diff --git a/new/intel-mobi-proj-tf/00.md b/new/intel-mobi-proj-tf/00.md index 6ebd5a4c..f0fc758c 100644 --- a/new/intel-mobi-proj-tf/00.md +++ b/new/intel-mobi-proj-tf/00.md @@ -34,13 +34,13 @@ TensorFlow 是 Google 的开放源代码框架,用于构建机器学习 AI 应 -第 1 章, “移动 TensorFlow 入门”,讨论如何在 Mac 和 Ubuntu 上设置 TensorFlow 以及在 Ubuntu 上设置 NVIDIA GPU,以及如何设置 Xcode 和 Android 工作室。 我们还将讨论 TensorFlow Mobile 和 TensorFlow Lite 之间的区别以及何时使用它们。 最后,我们将向您展示如何运行示例 TensorFlow iOS 和 Android 应用程序。 +第 1 章,“移动 TensorFlow 入门”,讨论如何在 Mac 和 Ubuntu 上设置 TensorFlow 以及在 Ubuntu 上设置 NVIDIA GPU,以及如何设置 Xcode 和 Android 工作室。 我们还将讨论 TensorFlow Mobile 和 TensorFlow Lite 之间的区别以及何时使用它们。 最后,我们将向您展示如何运行示例 TensorFlow iOS 和 Android 应用程序。 -第 2 章, “通过迁移学习对图像进行分类” ,介绍了什么是迁移学习以及为什么要使用迁移学习,如何使用它 重新训练 Inception v3 和 MobileNet 模型,以更准确,更快地识别犬种,以及如何在示例 iOS 和 Android 应用程序中使用经过重新训练的模型。 然后,我们将向您展示如何在 Tensor-C 和 Swift 中将 TensorFlow 添加到自己的 iOS 应用中,以及如何将自己的 Android 应用添加到狗品种识别中。 +第 2 章,“通过迁移学习对图像进行分类” ,介绍了什么是迁移学习以及为什么要使用迁移学习,如何使用它 重新训练 Inception v3 和 MobileNet 模型,以更准确,更快地识别犬种,以及如何在示例 iOS 和 Android 应用程序中使用经过重新训练的模型。 然后,我们将向您展示如何在 Tensor-C 和 Swift 中将 TensorFlow 添加到自己的 iOS 应用中,以及如何将自己的 Android 应用添加到狗品种识别中。 -第 3 章,, “检测对象及其位置”,快速概述了对象检测,然后向您展示如何设置 TensorFlow 对象检测 API 并使用 它可以重新训练 SSD-MobileNet 和 Faster RCNN 模型。 我们还将通过手动构建 TensorFlow iOS 库以支持非默认 TensorFlow 操作的方式,向您展示如何在 iOS 应用中使用示例 TensorFlow Android 应用 中使用的模型。 最后,我们将向您展示如何训练 YOLO2(另一个流行的对象检测模型),该模型也在示例 TensorFlow Android 应用程序中使用,以及如何在 iOS 应用程序中使用它。 +第 3 章,“检测对象及其位置”,快速概述了对象检测,然后向您展示如何设置 TensorFlow 对象检测 API 并使用 它可以重新训练 SSD-MobileNet 和 Faster RCNN 模型。 我们还将通过手动构建 TensorFlow iOS 库以支持非默认 TensorFlow 操作的方式,向您展示如何在 iOS 应用中使用示例 TensorFlow Android 应用 中使用的模型。 最后,我们将向您展示如何训练 YOLO2(另一个流行的对象检测模型),该模型也在示例 TensorFlow Android 应用程序中使用,以及如何在 iOS 应用程序中使用它。 -第 4 章, “变换具有惊人艺术风格的图片” 首先概述了神经样式转换在过去几年中的快速发展。 然后,它向您展示了如何训练快速的神经样式转换模型,以及如何在 iOS 和 Android 应用中使用它们。 之后,我们将介绍如何在您自己的 iOS 和 Android 应用程序中使用 TensorFlow Magenta 多样式模型轻松创建令人惊叹的艺术风格。 +第 4 章,“变换具有惊人艺术风格的图片” 首先概述了神经样式转换在过去几年中的快速发展。 然后,它向您展示了如何训练快速的神经样式转换模型,以及如何在 iOS 和 Android 应用中使用它们。 之后,我们将介绍如何在您自己的 iOS 和 Android 应用程序中使用 TensorFlow Magenta 多样式模型轻松创建令人惊叹的艺术风格。 第 5 章,“了解简单语音命令”概述了语音识别,并向您展示了如何训练简单语音命令识别模型。 然后,我们将向您展示如何使用 Objective-C 和 Swift 在 Android 和 iOS 中使用该模型。 我们还将介绍有关如何解决移动设备上可能出现的模型加载和运行错误的更多提示。 @@ -68,7 +68,7 @@ TensorFlow 是 Google 的开放源代码框架,用于构建机器学习 AI 应 我们建议您先按顺序阅读前四章,然后运行[这里](http://github.com/jeffxtang/mobiletfbook)。 这将帮助您确保已为 TensorFlow 移动应用程序开发设置了全部开发环境,并且知道如何将 TensorFlow 集成到自己的 iOS 和/或 Android 应用程序中。 如果您是 iOS 开发人员,还将学习如何在 TensorFlow 中使用 Objective-C 或 Swift,以及何时以及如何使用 TensorFlow pod 或手动 TensorFlow iOS 库。 -然后,如果您需要构建自定义的 TensorFlow Android 库,请转到第 7 章,“使用 CNN 和 LSTM 识别图形”,以及如果您想学习如何在 您的移动应用程序,请查看第 8 章, *使用 RNN 预测股价* , 和第 10 章, “构建类似 AlphaZero 的手机游戏应用程序” 。 +然后,如果您需要构建自定义的 TensorFlow Android 库,请转到第 7 章,“使用 CNN 和 LSTM 识别图形”,以及如果您想学习如何在 您的移动应用程序,请查看第 8 章,“使用 RNN 预测股价”,和第 10 章, “构建类似 AlphaZero 的手机游戏应用程序” 。 如果您对 TensorFlow Lite 或 Core ML 更感兴趣,请阅读第 11 章,“在移动设备上使用 TensorFlow Lite 和 Core ML”,以及您对 Raspberry Pi 上的 TensorFlow 或 TensorFlow 中的强化学习最感兴趣,请跳至第 12 章,“在 Raspberry Pi 上开发 TensorFlow 应用程序”。 diff --git a/new/intel-mobi-proj-tf/01.md b/new/intel-mobi-proj-tf/01.md index fff91446..e35771dc 100644 --- a/new/intel-mobi-proj-tf/01.md +++ b/new/intel-mobi-proj-tf/01.md @@ -25,11 +25,11 @@ -TensorFlow 是领先的机器智能开源框架。 当 Google 在 2015 年 11 月将 TensorFlow 作为一个开源项目发布时,已经有其他一些类似的深度学习开源框架:Caffe,Torch 和 Theano。 在 5 月 10 日的 Google I/O 2018 上,GitHub 上的 TensorFlow 已达到 99000 星,在 4 个月内增加了 14k 星,而 Caffe 仅增加了 2k 至 24k 星。 两年后,它已经成为*和*最流行的开源框架,用于训练和部署深度学习模型(它对传统机器学习也有很好的支持)。 截至 2018 年 1 月,TensorFlow 在 GitHub 上拥有[近 8.5 万颗星](https://github.com/tensorflow/tensorflow),而其他三个领先的开源深度学习框架 [Caffe](https://github.com/BVLC/caffe),[CNTK](https://github.com/Microsoft/CNTK) 和 [Mxnet](https://github.com/apache/incubator-mxnet) 分别拥有 22k,13k 和 12k 颗星。 +TensorFlow 是领先的机器智能开源框架。 当 Google 在 2015 年 11 月将 TensorFlow 作为一个开源项目发布时,已经有其他一些类似的深度学习开源框架:Caffe,Torch 和 Theano。 在 5 月 10 日的 Google I/O 2018 上,GitHub 上的 TensorFlow 已达到 99000 星,在 4 个月内增加了 14k 星,而 Caffe 仅增加了 2k 至 24k 星。 两年后,它已经成为最流行的开源框架,用于训练和部署深度学习模型(它对传统机器学习也有很好的支持)。 截至 2018 年 1 月,TensorFlow 在 GitHub 上拥有[近 8.5 万颗星](https://github.com/tensorflow/tensorflow),而其他三个领先的开源深度学习框架 [Caffe](https://github.com/BVLC/caffe),[CNTK](https://github.com/Microsoft/CNTK) 和 [Mxnet](https://github.com/apache/incubator-mxnet) 分别拥有 22k,13k 和 12k 颗星。 If you're a little confused about the buzz words machine learning, deep learning, machine intelligence, and artificial intelligence (AI), here's a quick summary: machine intelligence and AI are really just the same thing; machine learning is a field, also the most popular one, of AI; deep learning is one special type of machine learning, and is also the modern and most effective approach to solving complicated problems such as computer vision, speech recognition and synthesis, and natural language processing. So in this book, when we say AI, we primarily mean deep learning, the savior that took AI from the long winter to the summer. For more information about the AI winter and deep learning, you can check out [https://en.wikipedia.org/wiki/AI_winter](https://en.wikipedia.org/wiki/AI_winter) and [http://www.deeplearningbook.org](http://www.deeplearningbook.org). -我们假设您已经对 TensorFlow 有了基本的了解,但是如果您还没有,请查看[入门](https://www.tensorflow.org/get_started)和[教程](https://www.tensorflow.org/tutorials)部分或 [Awesome TensorFlow 教程](https://github.com/jtoy/awesome-tensorflow)。 关于该主题的两本好书是 *Python 机器学习:Python 的机器学习和深度学习*, *scikit-learn* 和 *TensorFlow* , *2nd Edition Sebastian Raschka 和 Vahid Mirjalili* 和*使用 Scikit-Learn* 和 *TensorFlow 进行动手机器学习:AurélienGéron*建立智能系统的概念,工具和技术。 +我们假设您已经对 TensorFlow 有了基本的了解,但是如果您还没有,请查看[入门](https://www.tensorflow.org/get_started)和[教程](https://www.tensorflow.org/tutorials)部分或 [Awesome TensorFlow 教程](https://github.com/jtoy/awesome-tensorflow)。 关于该主题的两本好书是《Python 机器学习:Python , scikit-learn 和 TensorFlow 机器学习和深度学习》和《使用 Scikit-Learn 和 TensorFlow 动手进行机器学习》。 TensorFlow 可以安装在 MacOS,Ubuntu 或 Windows 上。 我们将介绍在 MacOS X El Capitan(10.11.6),macOS Sierra(10.12.6)和 Ubuntu 16.04 上从源代码安装 TensorFlow 1.4 的步骤。 如果您使用其他操作系统或版本,则可以参考 [TensorFlow 安装文档](https://www.tensorflow.org/install)以获取更多信息。 当您阅读本书时,可能会出现更新的 TensorFlow 版本。 尽管您仍然应该能够使用较新版本运行本书中的代码,但这并不能保证,因此我们在 Mac 和 Ubuntu 上使用 TensorFlow 1.4 发行源代码来设置 TensorFlow; 这样,您可以轻松地测试运行并与书中的应用程序一起玩。 @@ -45,13 +45,13 @@ Since we wrote the paragraph above in December 2017, there have been four new of -通常,您应该使用 virtualenv,Docker 或 Anaconda 安装在单独的环境中安装 TensorFlow。 但是由于我们必须使用 TensorFlow 源代码构建 iOS 和 Android TensorFlow 应用程序,因此我们不妨从源代码构建 TensorFlow 本身,在这种情况下,使用本机 pip 安装选择可能比其他选择更容易。 如果您想尝试不同的 TensorFlow 版本,我们建议您使用 virtualenv,Docker 和 Anaconda 选项之一安装其他 TensorFlow 版本。 在这里,我们将使用本地 pip 和 Python 2.7.10 直接在 MacOS 系统上安装 TensorFlow 1.4。 +通常,您应该使用 VirtualEnv,Docker 或 Anaconda 安装在单独的环境中安装 TensorFlow。 但是由于我们必须使用 TensorFlow 源代码构建 iOS 和 Android TensorFlow 应用程序,因此我们不妨从源代码构建 TensorFlow 本身,在这种情况下,使用本机 PIP 安装选择可能比其他选择更容易。 如果您想尝试不同的 TensorFlow 版本,我们建议您使用 VirtualEnv,Docker 和 Anaconda 选项之一安装其他 TensorFlow 版本。 在这里,我们将使用本地 PIP 和 Python 2.7.10 直接在 MacOS 系统上安装 TensorFlow 1.4。 请按照以下步骤在 MacOS 上下载并安装 TensorFlow 1.4: 1. 从 GitHub 上的 TensorFlow 发布页面下载 [TensorFlow 1.4.0 源代码](https://github.com/tensorflow/tensorflow/releases)(`zip`或`tar.gz`) 2. 解压缩下载的文件并将`tensorflow-1.4.0`文件夹拖到您的主目录 -3. 确保已安装 Xcode 8.2.1 或更高版本(否则,请先阅读*设置 Xcode* 部分) +3. 确保已安装 Xcode 8.2.1 或更高版本(否则,请先阅读“设置 Xcode”部分) 4. 打开一个新的终端窗口,然后单击`cd tensorflow-1.4.0` 5. 运行`xcode-select --install`以安装命令行工具 6. 运行以下命令以安装构建 TensorFlow 所需的其他工具和软件包: @@ -64,7 +64,7 @@ brew install libtool brew upgrade bazel ``` -7. 从 TensorFlow 源代码构建,仅提供 CPU 支持(我们将在下一部分介绍 GPU 支持),并生成带有`.whl`文件扩展名的 pip 包文件: +7. 从 TensorFlow 源代码构建,仅提供 CPU 支持(我们将在下一部分介绍 GPU 支持),并生成带有`.whl`文件扩展名的 PIP 包文件: ```py bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package @@ -79,7 +79,7 @@ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg sudo pip install --upgrade /tmp/tensorflow_pkg/tensorflow-1.4.0-cp27-cp27m-macosx_10_12_intel.whl ``` -老实说,如果您在此过程中遇到任何错误,则搜索错误消息应该是修复该错误的最佳方法,因为我们打算在本书中重点介绍从我们长期积累的技巧和知识,而这些技巧和知识在其他地方不易获得 数小时的构建和调试实用的移动 TensorFlow 应用程序。 运行`sudo pip install`命令时,您可能会看到的一个特定错误是`Operation not permitted`错误。 要解决此问题,您可以通过重新启动 Mac 并点击 *Cmd* +`R`键来禁用 Mac 的**系统完整性保护**(**SIP**) 要进入恢复模式,请在实用程序终端下,在重新启动 Mac 之前运行 csrutil disable。 如果您对禁用 SIP 不满意,可以按照 TensorFlow 文档尝试使用更复杂的安装方法之一,例如 virtualenv。 +老实说,如果您在此过程中遇到任何错误,则搜索错误消息应该是修复该错误的最佳方法,因为我们打算在本书中重点介绍从我们长期积累的技巧和知识,而这些技巧和知识在其他地方不易获得 数小时的构建和调试实用的移动 TensorFlow 应用程序。 运行`sudo pip install`命令时,您可能会看到的一个特定错误是`Operation not permitted`错误。 要解决此问题,您可以通过重新启动 Mac 并点击`Cmd + R`键来禁用 Mac 的**系统完整性保护**(**SIP**) 要进入恢复模式,请在实用程序终端下,在重新启动 Mac 之前运行`csrutil disable`。 如果您对禁用 SIP 不满意,可以按照 TensorFlow 文档尝试使用更复杂的安装方法之一,例如 VirtualEnv。 如果一切顺利,则应该能够在终端窗口,Python 或最好在 IPython 上运行,然后运行`import tensorflow as tf`和`tf.__version__`将 1.4.0 作为输出。 @@ -93,7 +93,7 @@ sudo pip install --upgrade /tmp/tensorflow_pkg/tensorflow-1.4.0-cp27-cp27m-macos 使用良好的深度学习框架(例如 TensorFlow)的好处之一是在模型训练中无缝支持使用**图形处理单元**(**GPU**) 。 在 GPU 上训练非平凡的基于 TensorFlow 的模型要比在 CPU 上训练要快得多,并且当前 NVIDIA 提供 TensorFlow 支持的最佳和最具成本效益的 GPU。 Ubuntu 是使用 TensorFlow 运行 NVIDIA GPU 的最佳操作系统。 您可以花几百美元轻松购买一个 GPU,然后将其安装在带有 Ubuntu 系统的廉价台式机上。 您也可以在 Windows 上安装 NVIDIA GPU,但 TensorFlow 对 Windows 的支持不如对 Ubuntu 的支持。 -为了训练本书中应用程序中部署的模型,我们使用 NVIDIA GTX 1070,您可以在 Amazon 或 eBay 上以大约 400 美元的价格购买。 蒂姆·戴特默斯(Tim Dettmers)有一个不错的博客,其中介绍了[用于深度学习的 GPU](http://timdettmers.com/2017/04/09/which-gpu-for-deep-learning/)。 在获得这样的 GPU 并将其安装在 Ubuntu 系统上之后,以及在安装启用 GPU 的 TensorFlow 之前,您需要安装 NVIDIA CUDA 8.0(或 9.0)和 cuDNN(CUDA- Deep Neural Network library)6.0 (或 7.0),两者均受 TensorFlow 1.4 支持。 +为了训练本书中应用程序中部署的模型,我们使用 NVIDIA GTX 1070,您可以在 Amazon 或 eBay 上以大约 400 美元的价格购买。 蒂姆·戴特默斯(Tim Dettmers)有一个不错的博客,其中介绍了[用于深度学习的 GPU](http://timdettmers.com/2017/04/09/which-gpu-for-deep-learning/)。 在获得这样的 GPU 并将其安装在 Ubuntu 系统上之后,以及在安装启用 GPU 的 TensorFlow 之前,您需要安装 NVIDIA CUDA 8.0(或 9.0)和 cuDNN(CUDA-DeepNeuralNetwork)6.0 (或 7.0),两者均受 TensorFlow 1.4 支持。 An alternative to setting up your own GPU-powered Ubuntu with TensorFlow is to use TensorFlow in a GPU-enabled cloud service such as Google Cloud Platform's Cloud ML Engine ([https://cloud.google.com/ml-engine/docs/using-gpus](https://cloud.google.com/ml-engine/docs/using-gpus)). There are pros and cons of each option. Cloud services are generally time-based billing. If your goal is to train or retrain models to be deployed on mobile devices, meaning the models are not super complicated, and if you plan to do machine learning training for a long time, it'd be more cost effective and satisfying to have your own GPU. @@ -117,12 +117,12 @@ export CUDA_HOME=/usr/local/cuda export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH ``` -4. 通过[这里](https://developer.nvidia.com/rdp/cudnn-download)下载 NVIDIA cuDNN 6.0 for CUDA 8.0-您将被要求先免费注册一个 NVIDIA Developer 帐户(免费)。 您可以下载它,如下一个屏幕截图所示(选择突出显示的 cuDNN v6.0 Linux 版): +4. 通过[这里](https://developer.nvidia.com/rdp/cudnn-download)下载用于 CUDA 8.0 的 NVIDIA cuDNN 6.0,您将被要求先免费注册一个 NVIDIA 开发者帐户(免费)。 您可以下载它,如下一个屏幕截图所示(选择突出显示的 cuDNN v6.0 Linux 版): ![](img/f8e7636c-a193-4915-8c4f-8a234ffaf788.png)Fig 1.3 Selecting cuDNN 6.0 for CUDA 8.0 on Linux 5. 假设下载的文件位于默认的`~/Downloads`目录下,请解压缩该文件,然后您会看到一个名为`cuda`的文件夹,其中包含两个名为`include`和`lib64`的子文件夹 -6. 将 cuDNN `include`和`lib64`文件复制到 CUDA_HOME 的`lib64`和`include`文件夹中: +6. 将 cuDNN `include`和`lib64`文件复制到`CUDA_HOME`的`lib64`和`include`文件夹中: ```py sudo cp ~/Downloads/cuda/lib64/* /usr/local/cuda/lib64 @@ -191,7 +191,7 @@ Xcode 用于开发 iOS 应用,您需要 Mac 电脑和免费的 Apple ID 才能 尽管您可以使用 Xcode 模拟器测试运行书中的许多应用程序,但是书中的某些应用程序需要使用实际的 iOS 设备上的相机拍摄照片,然后才能使用经过 TensorFlow 训练的深度学习模型对其进行处理。 此外,通常最好在实际设备上测试模型的准确性能和内存使用情况:在模拟器中运行良好的模型可能会崩溃或在实际设备中运行太慢。 因此,强烈建议或要求您(如果并非总是)至少在您的实际 iOS 设备上测试并运行本书中的 iOS 应用程序一次。 -本书假定您熟悉 iOS 编程,但是如果您不熟悉 iOS 开发,则可以从许多出色的在线教程中学习,例如 [Ray Wenderlich 的 iOS 教程](https://www.raywenderlich.com)。 我们不会介绍复杂的 iOS 编程; 我们将主要向您展示如何在我们的 iOS 应用中使用 TensorFlow C++ API 来运行 TensorFlow 训练有素的模型来执行各种智能任务。 Apple 的两种官方 iOS 编程语言 Objective-C 和 Swift 代码都将用于与我们的移动 AI 应用程序中的 C++ 代码进行交互。 +本书假定您熟悉 iOS 编程,但是如果您不熟悉 iOS 开发,则可以从许多出色的在线教程中学习,例如 [Ray Wenderlich 的 iOS 教程](https://www.raywenderlich.com)。 我们不会介绍复杂的 iOS 编程; 我们将主要向您展示如何在我们的 iOS 应用中使用 TensorFlow C++ API 来运行 TensorFlow 训练有素的模型来执行各种智能任务。 Apple 的两种官方 iOS 编程语言 Objective-C 和 Swift 代码都将用于与我们的移动 AI 应用程序中的 C++ 代码进行交互。 @@ -207,11 +207,11 @@ Android Studio 是开发 Android 应用程序的最佳工具,并且 TensorFlow 然后,双击下载的文件并将`Android Studio.app`图标拖放到`Applications`。 如果您以前安装了 Android Studio,则系统会提示您是否要用较新的 Android Studio 替换它。 您只需选择替换即可。 -接下来,打开 Android Studio,您需要提供 Android SDK 的路径,如果您安装了以前版本的 Android Studio,则默认情况下它位于`~/Library/Android/sdk`中,或者您可以选择打开现有的 Android Studio 项目,然后转到在*在 MacOS* 上设置 TensorFlow 一节中创建的 TensorFlow 1.4 源目录,然后打开`tensorflow/examples/android`文件夹。 之后,您可以通过单击安装工具消息的链接或转到 Android Studio 的工具| Windows Server 2003,以下载 Android SDK。 Android | SDK Manager ,如以下屏幕截图所示。 从 SDK 工具标签中,您可以选中特定版本的 Android SDK 工具旁边的框,然后单击确定按钮以安装该版本: +接下来,打开 Android Studio,您需要提供 Android SDK 的路径,如果您安装了以前版本的 Android Studio,则默认情况下它位于`~/Library/Android/sdk`中,或者您可以选择打开现有的 Android Studio 项目,然后转到“在 MacOS 上设置 TensorFlow”一节中创建的 TensorFlow 1.4 源目录,然后打开`tensorflow/examples/android`文件夹。 之后,您可以通过单击安装工具消息的链接或转到 Android Studio 的`Tools | Android | SDK Manager`来下载 Android SDK,如以下屏幕截图所示。 从 SDK 工具标签中,您可以选中特定版本的 Android SDK 工具旁边的框,然后单击确定按钮以安装该版本: ![](img/3b90efdb-6655-4e35-b74a-a44e69e17487.png)Fig 1.4 Android SDK Manager to install SDK tools and NDK -最后,由于 TensorFlow Android 应用程序使用 C++ 中的本机 TensorFlow 库来加载和运行 TensorFlow 模型,因此您需要安装 Android **本机开发套件**(**NDK**),您可以执行以下任一操作 从上一个屏幕快照中显示的 Android SDK Manager 中获取,或者直接从[这里](https://developer.android.com/ndk/downloads/index.html)下载 NDK。 NDK 版本 r16b 和 r15c 均已通过测试可运行本书中的 Android 应用。 如果直接下载 NDK,则在打开项目并选择 Android Studio 的 File | 文件后,您可能还需要设置 Android NDK 位置。 项目结构,如以下屏幕截图所示: +最后,由于 TensorFlow Android 应用程序使用 C++ 中的本机 TensorFlow 库来加载和运行 TensorFlow 模型,因此您需要安装 Android **本机开发套件**(**NDK**),您可以执行以下任一操作 从上一个屏幕快照中显示的 Android SDK Manager 中获取,或者直接从[这里](https://developer.android.com/ndk/downloads/index.html)下载 NDK。 NDK 版本 r16b 和 r15c 均已通过测试可运行本书中的 Android 应用。 如果直接下载 NDK,则在打开项目并选择 Android Studio 的`File | Project Structure`后,您可能还需要设置 Android NDK 位置,如以下屏幕截图所示: ![](img/1f6a2d74-0be0-4f36-9796-2cf66eb1694f.png)Fig 1.5 Setting project-level Android NDK location @@ -281,9 +281,9 @@ open tf_benchmark_example.xcworkspace -`tensorflow/examples/android`中有四个样本 TensorFlow Android 应用,分别为 TF 分类,TF 检测,TF 语音和 TF 风格化。 运行这些示例的最简单方法是使用 Android Studio 在前面的文件夹中打开项目,如*设置 Android Studio* 部分中所示,然后通过编辑项目的`build.gradle`文件进行单个更改 并将`def nativeBuildSystem = 'bazel'`更改为`def nativeBuildSystem = 'none'`。 +`tensorflow/examples/android`中有四个样本 TensorFlow Android 应用,分别为 TF 分类,TF 检测,TF 语音和 TF 风格化。 运行这些示例的最简单方法是使用 Android Studio 在前面的文件夹中打开项目,如“设置 Android Studio”部分中所示,然后通过编辑项目的`build.gradle`文件进行单个更改 并将`def nativeBuildSystem = 'bazel'`更改为`def nativeBuildSystem = 'none'`。 -现在,将 Android 设备连接到您的计算机,然后通过选择 Android Studio 的运行|生成,安装和运行该应用。 运行'android'。 这会在您的设备上安装四个名称为 *TF 分类*, *TF 检测*, *TF 语音*和 *TF 风格化*的 Android 应用。 TF Classify 就像 iOS 相机应用程序一样,使用 TensorFlow Inception v1 模型对设备相机进行实时对象分类。 TF Detect 使用另一种模型,称为**单发多盒检测器**(**SSD**)和 MobileNet,这是 Google 发布的一组新的深度学习模型,专门针对移动和嵌入式设备, 要执行对象检测,请在检测到的对象上绘制矩形。 TF 语音使用另一种不同的深度学习(语音识别)模型来收听和识别一小部分单词,例如“是”,“否”,“左”,“右”,“停止”和“开始”。 TF Stylize 使用另一种模型来更改相机看到的图像样式。 有关这些应用程序的更多详细信息,您可以在[这个页面](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android)中查看 TensorFlow Android 示例文档。 +现在,将 Android 设备连接到您的计算机,然后通过选择 Android Studio 的`Run | Run 'android'`构建,安装和运行该应用。这会在您的设备上安装四个名称为“TF 分类”,“TF 检测”,“TF 语音”和“TF 风格化”的 Android 应用。 “TF 分类”就像 iOS 相机应用程序一样,使用 TensorFlow Inception v1 模型对设备相机进行实时对象分类。 “TF 检测”使用另一种模型,称为**单发多盒检测器**(**SSD**)和 MobileNet,这是 Google 发布的一组新的深度学习模型,专门针对移动和嵌入式设备, 要执行对象检测,请在检测到的对象上绘制矩形。 “TF 语音”使用另一种不同的深度学习(语音识别)模型来收听和识别一小部分单词,例如`Yes`,`No`,`Left`,`Right`,`Stop`和`Start`。 “TF 风格化”使用另一种模型来更改相机看到的图像样式。 有关这些应用程序的更多详细信息,您可以在[这个页面](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android)中查看 TensorFlow Android 示例文档。 diff --git a/new/intel-mobi-proj-tf/02.md b/new/intel-mobi-proj-tf/02.md index 6b1baa92..67b7ac24 100644 --- a/new/intel-mobi-proj-tf/02.md +++ b/new/intel-mobi-proj-tf/02.md @@ -4,7 +4,7 @@ -上一章中描述的示例 TensorFlow iOS 应用程序,Simple 和 Camera 以及 Android 应用程序 TF Classify 都使用了 Inception v1 模型,该模型是 Google 公开提供的预先训练的图像分类深度神经网络模型。 该模型针对 [ImageNet](http://image-net.org) 进行了训练,ImageNet 是最大和最知名的图像数据库之一,其中有超过一千万个图像被标注为对象类别。 Inception 模型可用于将图像分类为[列出的 1,000 个类别之一](http://image-net.org/challenges/LSVRC/2014/browse-synsets)。 这 1000 个对象类别包括很多对象中的很多犬种。 但是,识别狗品种的准确性不是很高,约为 70%,因为模型经过训练可以识别大量对象,而不是像狗品种之类的特定对象。 +上一章中描述的示例 TensorFlow iOS 应用程序,Simple 和 Camera 以及 Android 应用程序“TF 分类”都使用了 Inception v1 模型,该模型是 Google 公开提供的预先训练的图像分类深度神经网络模型。 该模型针对 [ImageNet](http://image-net.org) 进行了训练,ImageNet 是最大和最知名的图像数据库之一,其中有超过一千万个图像被标注为对象类别。 Inception 模型可用于将图像分类为[列出的 1,000 个类别之一](http://image-net.org/challenges/LSVRC/2014/browse-synsets)。 这 1000 个对象类别包括很多对象中的很多犬种。 但是,识别狗品种的准确性不是很高,约为 70%,因为模型经过训练可以识别大量对象,而不是像狗品种之类的特定对象。 如果我们想提高准确性并在使用改进模型的智能手机上构建移动应用程序怎么办,那么当我们四处走走并看到一只有趣的狗时,我们可以使用该应用程序告诉我们它是哪种狗。 @@ -159,11 +159,11 @@ bazel-bin/tensorboard/tensorboard --logdir /tmp/retrain_logs ![](img/3ae39776-c298-4b42-9125-f25ca84c9ed2.png)Figure 2.2 Train and validation accuracy of the Inception v3 retrained model -在下面的屏幕截图中,的 cross_entropy 图为 ,正如我们之前关于运行`retrain.py`的输出所描述的: +在下面的屏幕截图中的交叉熵图,和我们之前对于运行`retrain.py`的输出所描述的一样: ![](img/cd4cea6a-8847-40bd-9ec4-3d9696972a5f.png)Figure 2.3 Train and validation cross entropy of the Inception v3 retrained model -现在单击 GRAPHS 选项卡,您将看到一个名为 Mul 的操作,另一个名为 final_result 的操作 ,如下所示: +现在单击`GRAPHS`选项卡,您将看到一个名为`Mul`的操作,另一个名为`final_result`的操作 ,如下所示: ![](img/18aa75d8-28e3-497c-ba8f-145baa6cee37.png)Figure 2.4 The Mul and final_result nodes in the retrained model @@ -269,7 +269,7 @@ python tensorflow/examples/image_retraining/retrain.py --architecture mobilenet_1.0_224 ``` -生成的标签文件`dog_retrained_labels_mobilenet.txt`实际上与使用 Inception v3 模型进行再训练期间生成的标签文件相同。 `--architecture`参数指定 16 个 MobileNet 模型之一,而值`mobilenet_1.0_224`表示使用模型大小为 1.0 的模型(对于其他参数,其他三个可能的值分别为 0.75、0.50 和 0.25 – 1.0,准确但 最大尺寸,反之为 0.25)和 224 作为图像输入尺寸(其他三个值分别为 192、160 和 128)。 如果将 _quantized 添加到架构值的末尾,即 --architecture mobilenet_1.0_224_quantized ,则模型也将被量化,从而导致重新训练的模型大小约为 5.1 MB。 非量化模型的大小约为 17 MB。 +生成的标签文件`dog_retrained_labels_mobilenet.txt`实际上与使用 Inception v3 模型进行再训练期间生成的标签文件相同。 `--architecture`参数指定 16 个 MobileNet 模型之一,而值`mobilenet_1.0_224`表示使用模型大小为 1.0 的模型(对于其他参数,其他三个可能的值分别为 0.75、0.50 和 0.25 – 1.0,准确但 最大尺寸,反之为 0.25)和 224 作为图像输入尺寸(其他三个值分别为 192、160 和 128)。 如果将`_quantized`添加到架构值的末尾,即`--architecture mobilenet_1.0_224_quantized`,则模型也将被量化,从而导致重新训练的模型大小约为 5.1 MB。 非量化模型的大小约为 17 MB。 您可以按以下步骤测试先前使用`label_image`生成的模型: @@ -292,7 +292,7 @@ n02087394 rhodesian ridgeback (105): 0.00528782 n02090379 redbone (32): 0.0035457 ``` -请注意,在运行`label_image`时,input_layer 名为`input`。 我们可以使用交互式 iPython 代码或之前看到的摘要图形工具找到该名称: +请注意,在运行`label_image`时,`input_layer`名为`input`。 我们可以使用交互式 iPython 代码或之前看到的摘要图形工具找到该名称: ```py bazel-bin/tensorflow/tools/graph_transforms/summarize_graph @@ -327,9 +327,9 @@ bazel-bin/tensorflow/tools/benchmark/benchmark_model --show_summary=true ``` -您将获得相当长的输出,最后会有一行像 FLOPs 的估计值:11.42 B,这意味着它将使用基于 Inception v3 的重新训练模型约 11 B FLOPS(浮点运算)进行推断。 iPhone 6 运行大约 2 B FLOPS,因此在 iPhone 6 上运行模型大约需要 5–6 秒。 其他现代智能手机可以运行 10 B FLOPS。 +您将获得相当长的输出,最后会有一行像 FLOPS 的估计值:11.42B,这意味着它将使用基于 Inception v3 的重新训练模型约 11B FLOPS(浮点运算)进行推断。 iPhone 6 运行大约 2 B FLOPS,因此在 iPhone 6 上运行模型大约需要 5–6 秒。 其他现代智能手机可以运行 10B FLOPS。 -通过将图形文件替换为基于 MobileNet 模型的重新训练模型`dog_retrained_mobilenet10_224.pb`并重新运行基准测试工具,您将看到 FLOPS 估计值变为约 1.14 B,大约快了 10 倍。 +通过将图形文件替换为基于 MobileNet 模型的重新训练模型`dog_retrained_mobilenet10_224.pb`并重新运行基准测试工具,您将看到 FLOPS 估计值变为约 1.14B,大约快了 10 倍。 @@ -346,7 +346,7 @@ bazel-bin/tensorflow/tools/benchmark/benchmark_model ![](img/d2e25f9d-c88d-4fe5-918d-ba7e64420682.png)Figure 2.5 Adding the retrained model file and the label file to app -3. 单击 Xco​​de 中的`RunModelViewController.mm`文件,该文件使用 TensorFlow C++ API 处理输入图像,通过 Inception v1 模型运行它,并获得图像分类结果,并更改行: +3. 单击 Xco​​de 中的`RunModelViewController.mm`文件,该文件使用 TensorFlow C++ API 处理输入图像,通过 Inception v1 模型运行它,并获得图像分类结果,并更改行: ```py NSString* network_path = FilePathForResourceName(@"tensorflow_inception_graph", @"pb"); @@ -377,7 +377,7 @@ std::string input_layer = "Mul"; std::string output_layer = "final_result"; ``` -6. 最后,您可以编辑`dog_retrained_labels.txt`文件以删除每行中的前导 nxxxx 字符串(例如,删除`n02099712 labrador retriever`中的`n02099712`)–在 Mac 上,您可以通过按住 Option 键然后进行 选择和删除–从而使识别结果更具可读性 +6. 最后,您可以编辑`dog_retrained_labels.txt`文件以删除每行中的前导`nxxxx`字符串(例如,删除`n02099712 labrador retriever`中的`n02099712`)– 在 Mac 上,您可以通过按住 Option 键然后进行 选择和删除–从而使识别结果更具可读性 立即运行应用程序,然后单击运行模型按钮,在 Xcode 的控制台窗口或应用程序的编辑框中,您将看到以下识别结果,与运行`label_image`脚本的结果非常一致: @@ -389,7 +389,7 @@ Predictions: 41 0.645 labrador retriever 20 0.0127 beagle ``` -要使用 MobileNet(mobilenet_1.0_224_quantized)训练模型`dog_retrained_mobilenet10_224.pb`,请按照与之前类似的步骤进行操作,而在步骤 2 和 3 中,我们使用`dog_retrained_mobilenet10_224.pb`,但是在步骤 4 中,我们需要保留`const int wanted_width = 224;`和 `const int wanted_height = 224;`,仅将`const float input_mean`和`const float input_std`更改为`128`。 最后,在步骤 5 中,我们必须使用`std::string input_layer = "input";`和`std::string output_layer = "final_result";`。 这些参数与`dog_retrained_mobilenet10_224.pb`的`label_image`脚本使用的参数相同。 +要使用 MobileNet(`mobilenet_1.0_224_quantized`)训练模型`dog_retrained_mobilenet10_224.pb`,请按照与之前类似的步骤进行操作,而在步骤 2 和 3 中,我们使用`dog_retrained_mobilenet10_224.pb`,但是在步骤 4 中,我们需要保留`const int wanted_width = 224;`和 `const int wanted_height = 224;`,仅将`const float input_mean`和`const float input_std`更改为`128`。 最后,在步骤 5 中,我们必须使用`std::string input_layer = "input";`和`std::string output_layer = "final_result";`。 这些参数与`dog_retrained_mobilenet10_224.pb`的`label_image`脚本使用的参数相同。 再次运行该应用程序,您将看到类似的最佳识别结果。 @@ -401,7 +401,7 @@ Predictions: 41 0.645 labrador retriever -在 Android 的 TF Classify 应用程序中使用经过重新训练的 Inception v3 模型和 MobileNet 模型也非常简单。 请按照此处的步骤测试两个重新训练的模型: +在 Android 的“TF 分类”应用程序中使用经过重新训练的 Inception v3 模型和 MobileNet 模型也非常简单。 请按照此处的步骤测试两个重新训练的模型: 1. 使用 Android Studio 打开位于`tensorflow/examples/android`中的示例 TensorFlow Android 应用。 2. 将两个重新训练的模型`quantized_stripped_dogs_retrained .pb`和`dog_retrained_mobilenet10_224.pb`以及标签文件`dog_retrained_labels.txt`拖放到 android 应用程序的`assets`文件夹中。 @@ -452,7 +452,7 @@ private static final String LABEL_FILE = "file:///android_asset/dog_retrained_la -在 TensorFlow 的早期版本中,将 TensorFlow 添加到您自己的应用程序非常繁琐,需要使用 TensorFlow 的手动构建过程和其他手动设置。 在 TensorFlow 1.4 中,该过程非常简单,但在 TensorFlow 网站上并未详细记录详细步骤。 缺少的另一件事是缺少有关如何在基于 Swift 的 iOS 应用中使用 TensorFlow 的文档; 示例 TensorFlow iOS 应用程序都在 Objective-C 中,它们调用了 TensorFlow 的 C++ API。 让我们看看我们如何做得更好。 +在 TensorFlow 的早期版本中,将 TensorFlow 添加到您自己的应用程序非常繁琐,需要使用 TensorFlow 的手动构建过程和其他手动设置。 在 TensorFlow 1.4 中,该过程非常简单,但在 TensorFlow 网站上并未详细记录详细步骤。 缺少的另一件事是缺少有关如何在基于 Swift 的 iOS 应用中使用 TensorFlow 的文档; 示例 TensorFlow iOS 应用程序都在 Objective-C 中,它们调用了 TensorFlow 的 C++ API。 让我们看看我们如何做得更好。 @@ -464,7 +464,7 @@ private static final String LABEL_FILE = "file:///android_asset/dog_retrained_la 首先,按照以下步骤将具有图像分类功能的 TensorFlow 添加到您的 Objective-C iOS 应用程序(我们将从一个新应用程序开始,但是如果需要将 TensorFlow 添加到现有应用程序,则可以跳过第一步): -1. 在您的 Xcode 中,单击文件 | 新增 | 项目 ...,选择 Single View App ,然后选择接下来的,输入`HelloTensorFlow`作为产品名称,选择目标 -C 作为语言,然后单击接下来并选择项目的位置,然后单击创建。 关闭 Xcode 中的项目窗口(因为我们稍后将使用 pod 来打开项目的工作区文件)。 +1. 在您的 Xcode 中,单击“文件 | 新增 | 项目 ...”,选择“Single View App”,然后选择接下来的,输入`HelloTensorFlow`作为产品名称,选择 Obj-C 作为语言,然后单击接下来并选择项目的位置,然后单击创建。 关闭 Xcode 中的项目窗口(因为我们稍后将使用 Pod 来打开项目的工作区文件)。 2. 打开一个终端窗口,即`cd`到项目所在的位置,然后创建一个名为`Podfile`的新文件,其内容如下: ```py @@ -472,13 +472,13 @@ target 'HelloTensorFlow' pod 'TensorFlow-experimental' ``` -3. 运行命令`pod install`下载并安装 TensorFlow pod。 +3. 运行命令`pod install`下载并安装 TensorFlow Pod。 4. 在 Xcode 中打开`HelloTensorFlow.xcworkspace`文件,然后将两个文件(`ios_image_load.mm`和`ios_image_load.h`)拖放到 TensorFlow iOS 示例目录`tensorflow/examples/ios/simple`到`HelloTensorFlow`项目文件夹中。 -5. D 将两个模型`quantized_stripped_dogs_retrained.pb`和`dog_retrained_mobilenet10_224.pb`,`label file dog_retrained_labels.txt`以及几个测试图像文件拖放到项目文件夹中–之后,您应该看到类似以下的内容: +5. 将两个模型`quantized_stripped_dogs_retrained.pb`和`dog_retrained_mobilenet10_224.pb`,`label file dog_retrained_labels.txt`以及几个测试图像文件拖放到项目文件夹中,之后,您应该看到类似以下的内容: ![](img/b89b3444-a6a9-45b4-bb02-ddf8388a6992.png)Figure 2.6 Adding utility files, model files, label file and image files -6. 将`ViewController.m`重命名为`ViewController.mm`,因为我们将在该文件中混合使用 C++ 代码和 Objective-C 代码来调用 TensorFlow C++ API 并处理图像输入和推断结果。 然后,在`@interface ViewController`之前,添加以下`#include`和函数原型: +6. 将`ViewController.m`重命名为`ViewController.mm`,因为我们将在该文件中混合使用 C++ 代码和 Objective-C 代码来调用 TensorFlow C++ API 并处理图像输入和推断结果。 然后,在`@interface ViewController`之前,添加以下`#include`和函数原型: ```py #include @@ -604,7 +604,7 @@ for (int y = 0; y < wanted_height; ++y) { } ``` -最后,使用图像张量数据和输入层名称调用 TensorFlow 会话的 run 方法,获取返回的输出结果,并对其进行处理以获取置信度值大于阈值的前五个结果: +最后,使用图像张量数据和输入层名称调用 TensorFlow 会话的`run`方法,获取返回的输出结果,并对其进行处理以获取置信度值大于阈值的前五个结果: ```py std::vector outputs; @@ -641,7 +641,7 @@ GetTopN(output->flat(), kNumResults, kThreshold, &top_results); 自 2014 年 6 月诞生以来,Swift 已成为最优雅的现代编程语言之一。因此,对于某些开发人员而言,将现代 TensorFlow 集成到其基于 Swift 的现代 iOS 应用程序中既有趣又有用。 这样做的步骤与基于 Objective-C 的应用程序的步骤相似,但具有一些与 Swift 相关的技巧。 如果您已经按照 Objective-C 部分的步骤进行操作,则可能会发现这里的某些步骤是重复的,但是对于那些可能会跳过 Objective-C 部分并直接进入 Swift 的用户而言,仍然提供了完整的步骤: -1. 在您的 Xcode 中,单击文件 | 新增 | 项目... ,选择 Single View App ,然后接下来的,输入`HelloTensorFlow_Swift`作为产品名称,选择 Swift 将设置为语言,然后单击接下来并选择项目的位置,然后单击创建。 关闭 Xcode 中的项目窗口(因为稍后将使用 pod 来打开项目的工作区文件)。 +1. 在您的 Xcode 中,单击“文件 | 新增 | 项目...”,选择“Single View App”,然后接下来的,输入`HelloTensorFlow_Swift`作为产品名称,选择 Swift 将设置为语言,然后单击接下来并选择项目的位置,然后单击创建。 关闭 Xcode 中的项目窗口(因为稍后将使用 Pod 来打开项目的工作区文件)。 2. 打开一个终端窗口,即`cd`到项目所在的位置,然后创建一个名为`Podfile`的新文件,其内容如下: ```py @@ -649,7 +649,7 @@ target 'HelloTensorFlow_Swift' pod 'TensorFlow-experimental' ``` -3. 运行命令`pod install`下载并安装 TensorFlow pod; +3. 运行命令`pod install`下载并安装 TensorFlow Pod; 4. 在 Xcode 中打开`HelloTensorFlow_Swift.xcworkspace`文件,然后将两个文件(`ios_image_load.mm`和`ios_image_load.h`)拖放到 TensorFlow iOS 示例目录`tensorflow/examples/ios/simple`到`HelloTensorFlow_Swift`项目文件夹中。 当将两个文件添加到项目中时,您将看到一个消息框,如以下屏幕截图所示,询问您是否要配置 Objective-C 桥接头,Swift 代码调用 C++ 头需要此头。 Objective-C 代码。 因此,单击创建桥接标题按钮: @@ -793,10 +793,10 @@ Figure 2.12 Inference results for different retrained models 事实证明,将 TensorFlow 添加到自己的 Android 应用程序比 iOS 容易。 让我们跳到步骤: -1. 如果您有现有的 Android 应用,请跳过此步骤。 否则,在 Android Studio 中,选择文件 | 新增 | New Project ... 并接受所有默认设置,然后单击完成。 +1. 如果您有现有的 Android 应用,请跳过此步骤。 否则,在 Android Studio 中,选择“文件 | 新增 | 新项目...”并接受所有默认设置,然后单击完成。 2. 打开`build.gradle`(`Module: app`)文件,并在依赖项`{...};`内部和末尾添加编译`'org.tensorflow:tensorflow-android:+'`。 3. 生成`gradle`文件,您将在`app`目录的位置`app/build/intermediates/transforms/mergeJniLibs/debug/0/lib`的子文件夹内看到`libtensorflow_inference.so`,这是 Java 代码与之对话的 TensorFlow 本机库。 -4. 如果这是一个新项目,则可以通过首先切换到软件包,然后右键单击该应用程序并选择 New |来创建`assets`文件夹。 文件夹 | Assets 文件夹,如以下屏幕截图所示,然后从软件包切换回 Android: +4. 如果这是一个新项目,则可以通过首先切换到软件包,然后右键单击该应用程序并选择“新建 | 文件夹 | `assets`文件夹”来创建`assets`文件夹。 ,如以下屏幕截图所示,然后从软件包切换回 Android: ![](img/6cf6b889-8ecb-4837-9087-19b34d6e68ed.png)Figure 2.13 Adding Assets Folder to a new project @@ -836,7 +836,7 @@ Classifier classifier = TensorFlowImageClassifier.create( OUTPUT_NAME); ``` -然后从 assets 文件夹中读取我们的测试图像,根据模型指定的尺寸进行调整,然后调用推理方法`recognizeImage`: +然后从`assets`文件夹中读取我们的测试图像,根据模型指定的尺寸进行调整,然后调用推理方法`recognizeImage`: ```py Bitmap bitmap = BitmapFactory.decodeStream(getAssets().open(IMG_FILE)); diff --git a/new/intel-mobi-proj-tf/03.md b/new/intel-mobi-proj-tf/03.md index a1ffaf4f..beb854a9 100644 --- a/new/intel-mobi-proj-tf/03.md +++ b/new/intel-mobi-proj-tf/03.md @@ -566,7 +566,7 @@ LoadGraph 尝试加载三个用户选择的模型文件之一,并返回加载 Found 1 possible inputs: (name=image_tensor, type=uint8(4), shape=[?,?,?,3]) ``` -这就是为什么我们需要使用`uint8`创建一个图像张量,而不是`float`类型来加载到我们的模型,否则在运行模型时会出现错误。 另请注意,当我们使用 TensorFlow C++ API 的`Session`的`Run`方法将`image_data`转换为`Tensor`类型的`image_data`时,我们不使用`input_mean`和 `input_std`就像我们在使用图像分类模型时所做的(有关详细比较,请参见第 2 章,“通过迁移学习对图像进行分类”的 HelloTensorFlow 应用程序的`RunInferenceOnImage`实现)。 我们知道有四个名为`detection_boxes`,`detection_scores`,`detection_classes`和`num_detections`的输出,因此`RunInferenceOnImage`具有以下代码来为模型输入图像输入并获得四个输出: +这就是为什么我们需要使用`uint8`创建一个图像张量,而不是`float`类型来加载到我们的模型,否则在运行模型时会出现错误。 另请注意,当我们使用 TensorFlow C++ API 的`Session`的`Run`方法将`image_data`转换为`Tensor`类型的`image_data`时,我们不使用`input_mean`和 `input_std`就像我们在使用图像分类模型时所做的(有关详细比较,请参见第 2 章,“通过迁移学习对图像进行分类”的 HelloTensorFlow 应用程序的`RunInferenceOnImage`实现)。 我们知道有四个名为`detection_boxes`,`detection_scores`,`detection_classes`和`num_detections`的输出,因此`RunInferenceOnImage`具有以下代码来为模型输入图像输入并获得四个输出: ```py tensorflow::Tensor image_tensor(tensorflow::DT_UINT8, tensorflow::TensorShape({1, image_height, image_width, wanted_channels})); diff --git a/new/intel-mobi-proj-tf/05.md b/new/intel-mobi-proj-tf/05.md index 0fc5a6d7..b279ef16 100644 --- a/new/intel-mobi-proj-tf/05.md +++ b/new/intel-mobi-proj-tf/05.md @@ -520,7 +520,7 @@ dispatch_async(dispatch_get_global_queue(0, 0), ^{ }); ``` -6. 在`audioRecognition`方法内部,我们首先定义一个 C++ `string`数组,其中包含要识别的 10 个命令以及两个特殊值`"_silence_"`和`"_unknown_"`: +6. 在`audioRecognition`方法内部,我们首先定义一个 C++ `string`数组,其中包含要识别的 10 个命令以及两个特殊值`"_silence_"`和`"_unknown_"`: ```py std::string commands[] = {"_silence_", "_unknown_", "yes", "no", "up", "down", "left", "right", "on", "off", "stop", "go"}; @@ -548,7 +548,7 @@ std::string input_name2 = "decoded_sample_data:1"; std::string output_name = "labels_softmax"; ``` -7. 对于`"decoded_sample_data:0"`,我们需要将采样率值作为标量发送(否则在调用 TensorFlow Session 的`run`方法时会出错),并且在 TensorFlow C++ API 中定义了张量,如下所示: +7. 对于`"decoded_sample_data:0"`,我们需要将采样率值作为标量发送(否则在调用 TensorFlow Session 的`run`方法时会出错),并且在 TensorFlow C++ API 中定义了张量,如下所示: ```py tensorflow::Tensor samplerate_tensor(tensorflow::DT_INT32, tensorflow::TensorShape()); @@ -772,7 +772,7 @@ func audioRecorderDidFinishRecording(_ recorder: AVAudioRecorder, successfully f } ``` -如果您确实想将尽可能多的代码移植到 Swift,[则可以用 Swift 替换 C 中的音频文件转换代码](https://developer.apple.com/documentation/audiotoolbox/extended_audio_file_services)。 还有一些非官方的开源项目提供了官方 TensorFlow C++ API 的 Swift 包装器。 但是为了简单起见和达到适当的平衡,我们将保持 TensorFlow 模型的推论,在本示例中,还将保持音频文件的读取和转换,以及在 C++ 和 Objective-C 中与控制 UI 和 录音,并启动呼叫以进行音频处理和识别。 +如果您确实想将尽可能多的代码移植到 Swift,[则可以用 Swift 替换 C 中的音频文件转换代码](https://developer.apple.com/documentation/audiotoolbox/extended_audio_file_services)。 还有一些非官方的开源项目提供了官方 TensorFlow C++ API 的 Swift 包装器。 但是为了简单起见和达到适当的平衡,我们将保持 TensorFlow 模型的推论,在本示例中,还将保持音频文件的读取和转换,以及在 C++ 和 Objective-C 中与控制 UI 和 录音,并启动呼叫以进行音频处理和识别。 这就是构建使用语音命令识别模型的 Swift iOS 应用所需的全部内容。 现在,您可以在 iOS 模拟器或实际设备上运行它,并看到与 Objective-C 版本完全相同的结果。 diff --git a/new/intel-mobi-proj-tf/06.md b/new/intel-mobi-proj-tf/06.md index 7f4a0037..537f9b32 100644 --- a/new/intel-mobi-proj-tf/06.md +++ b/new/intel-mobi-proj-tf/06.md @@ -459,7 +459,7 @@ target 'Image2Text' ![](img/62be062e-39dc-4f0c-8a59-7e0e675bafaa.png)Figure 6.5: Setting up the Image2Text iOS app, also showing how LoadMemoryMappedModel is implemented -3. 打开`ViewController.mm`并添加一堆 Objective-C 和 C++ 常量,如下所示: +3. 打开`ViewController.mm`并添加一堆 Objective-C 和 C++ 常量,如下所示: ```py static NSString* MODEL_FILE = @"image2text_frozen_transformed"; diff --git a/new/intel-mobi-proj-tf/11.md b/new/intel-mobi-proj-tf/11.md index 6f82eec3..2353ecc1 100644 --- a/new/intel-mobi-proj-tf/11.md +++ b/new/intel-mobi-proj-tf/11.md @@ -34,7 +34,7 @@ You can also pick a prebuilt TensorFlow Lite model, such as the MobileNet models 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`。 +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`。 If you run a TensorFlow Lite model on Android, and if the Android device is Android 8.1 (API level 27) or above and supports hardware acceleration with a dedicated neural network hardware, a GPU, or some other digital signal processors, then the `Interpreter` will use the Android Neural Networks API ([https://developer.android.com/ndk/guides/neuralnetworks/index.html](https://developer.android.com/ndk/guides/neuralnetworks/index.html)) to speed up the model running. For example, Google's Pixel 2 phone has a custom chip optimized for image processing, which can be turned on with Android 8.1, and support hardware acceleration. diff --git a/new/intel-mobi-proj-tf/12.md b/new/intel-mobi-proj-tf/12.md index 62f82a25..0688cd5c 100644 --- a/new/intel-mobi-proj-tf/12.md +++ b/new/intel-mobi-proj-tf/12.md @@ -415,7 +415,7 @@ run(softmax_tensor, { 在这里,将`softmax_tensor`定义为 TensorFlow 图的`get_tensor_by_name(self.output_name_)`,将`output_name_`,`input_samples_name_`和`input_rate_name_`分别定义为`labels_softmax`,`decoded_sample_data:0`和`decoded_sample_data:1`,与 我们在第 5 章,“了解简单语音命令”中的 iOS 和 Android 应用程序中使用过。 -在之前的章节中,我们主要使用 Python 训练和测试 TensorFlow 模型,然后再使用本机 TensorFlow C++ 库的 Java 接口代码在使用 C++ 或 Android 的 iOS 中运行模型。 在 Raspberry Pi 上,您可以选择直接使用 TensorFlow Python API 或 C++ API 在 Pi 上运行 TensorFlow 模型,尽管通常仍会在功能更强大的模型上进行训练 电脑。 有关完整的 TensorFlow Python API 文档,请参见[这里](https://www.tensorflow.org/api_docs/python)。 +在之前的章节中,我们主要使用 Python 训练和测试 TensorFlow 模型,然后再使用本机 TensorFlow C++ 库的 Java 接口代码在使用 C++ 或 Android 的 iOS 中运行模型。 在 Raspberry Pi 上,您可以选择直接使用 TensorFlow Python API 或 C++ API 在 Pi 上运行 TensorFlow 模型,尽管通常仍会在功能更强大的模型上进行训练 电脑。 有关完整的 TensorFlow Python API 文档,请参见[这里](https://www.tensorflow.org/api_docs/python)。 要使用 GoPiGo Python API 使机器人根据您的语音命令移动,请首先在`listen.py`中添加以下两行: -- GitLab