From f967db61ec53c1801ce76054b9b5aa98592d8227 Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Sun, 6 Dec 2020 11:44:42 +0800 Subject: [PATCH] 2020-12-06 11:44:42 --- new/handson-unsup-learn-py/06.md | 6 +++--- new/intel-mobi-proj-tf/01.md | 32 ++++++++++++++++---------------- new/intel-mobi-proj-tf/02.md | 10 +++++----- new/intel-mobi-proj-tf/03.md | 18 +++++++++--------- new/intel-mobi-proj-tf/04.md | 10 +++++----- new/intel-mobi-proj-tf/05.md | 18 +++++++++--------- 6 files changed, 47 insertions(+), 47 deletions(-) diff --git a/new/handson-unsup-learn-py/06.md b/new/handson-unsup-learn-py/06.md index 6fa2ba20..4a453816 100644 --- a/new/handson-unsup-learn-py/06.md +++ b/new/handson-unsup-learn-py/06.md @@ -27,7 +27,7 @@ 本章中提供的代码要求: -* Python 3.5+(强烈建议使用 Anaconda 发行版( [https://www.anaconda.com/distribution/](https://www.anaconda.com/distribution/) )) +* Python 3.5+(强烈建议使用 [Anaconda 发行版](https://www.anaconda.com/distribution/)) * 库: * 科学 0.19+ * NumPy 1.10+ @@ -36,7 +36,7 @@ * Matplotlib 2.0+ * 海上 0.9+ -可以在 GitHub 存储库上的 [https://github.com/PacktPublishing/HandsOn-Unsupervised-Learning-with-Python/tree/master/Chapter06](https://github.com/PacktPublishing/HandsOn-Unsupervised-Learning-with-Python/tree/master/Chapter06) 上找到示例。 +[可以在 GitHub 存储库上找到示例](https://github.com/PacktPublishing/HandsOn-Unsupervised-Learning-with-Python/tree/master/Chapter06)。 @@ -861,7 +861,7 @@ X_tsne = tsne.fit_transform(Xf) t-SNE plot for the novelty detection with the wine dataset -可以看到,许多接近训练离群点的样本本身就是离群点,并且通常,几乎所有远测样本都是离群点。 但是,由于维数的减少,很难得出更多的结论。 但是,我们知道,当噪声足够小时,找到内点的可能性就很大(这是合理的结果)。 作为练习,我请读者检查一下单个化学性质(可从 [https://scikit-learn.org/stable/datasets/index.html#wine-dataset](https://scikit-learn.org/stable/datasets/index.html#wine-dataset) 获得),以及每个 他们或小组,找出哪个阈值可以将一个离群值转换为离群值(例如,回答此问题:与训练集兼容的最大酒精含量是多少?)。 +可以看到,许多接近训练离群点的样本本身就是离群点,并且通常,几乎所有远测样本都是离群点。 但是,由于维数的减少,很难得出更多的结论。 但是,我们知道,当噪声足够小时,找到内点的可能性就很大(这是合理的结果)。 作为练习,我请读者检查一下[单个化学性质](https://scikit-learn.org/stable/datasets/index.html#wine-dataset),以及每个 他们或小组,找出哪个阈值可以将一个离群值转换为离群值(例如,回答此问题:与训练集兼容的最大酒精含量是多少?)。 diff --git a/new/intel-mobi-proj-tf/01.md b/new/intel-mobi-proj-tf/01.md index 2729d286..788140b3 100644 --- a/new/intel-mobi-proj-tf/01.md +++ b/new/intel-mobi-proj-tf/01.md @@ -29,9 +29,9 @@ TensorFlow 是领先的机器智能开源框架。 当 Google 在 2015 年 11 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/get_started) )和教程( [TensorFlow 网站的 https://www.tensorflow.org/tutorials](https://www.tensorflow.org/tutorials) )部分或 Awesome TensorFlow 教程( [https://github.com/jtoy/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* , *2nd Edition Sebastian Raschka 和 Vahid Mirjalili* 和*使用 Scikit-Learn* 和 *TensorFlow 进行动手机器学习:AurélienGéron*建立智能系统的概念,工具和技术。 -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](https://www.tensorflow.org/install) )文档以获取更多信息。 当您阅读本书时,可能会出现更新的 TensorFlow 版本。 尽管您仍然应该能够使用较新版本运行本书中的代码,但这并不能保证,因此我们在 Mac 和 Ubuntu 上使用 TensorFlow 1.4 发行源代码来设置 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; 这样,您可以轻松地测试运行并与书中的应用程序一起玩。 Since we wrote the paragraph above in December 2017, there have been four new official releases of TensorFlow (1.5, 1.6, 1.7, and 1.8), which you can download at [https://github.com/tensorflow/tensorflow/releases](https://github.com/tensorflow/tensorflow/releases) or from the TensorFlow source code repo ([https://github.com/tensorflow/tensorflow](https://github.com/tensorflow/tensorflow)), and a new version of Xcode (9.3) as of May 2018\. Newer versions of TensorFlow, such as 1.8, by default support newer versions of NVIDIA CUDA and cuDNN (see the section *Setting up TensorFlow on GPU-powered Ubuntu* for detail), and you'd better follow the official TensorFlow documentation to install the latest TensorFlow version with GPU support. In this and the following chapters, we may refer to a specific TensorFlow version as an example, but will keep all iOS, Android, and Python code tested and, if needed, updated for the latest TensorFlow, Xcode, and Android Studio versions in the book's source code repo at [https://github.com/jeffxtang/mobiletfbook](https://github.com/jeffxtang/mobiletfbook). @@ -49,7 +49,7 @@ Since we wrote the paragraph above in December 2017, there have been four new of 请按照以下步骤在 MacOS 上下载并安装 TensorFlow 1.4: -1. 从 GitHub 上的 TensorFlow 发布页面下载 TensorFlow 1.4.0 源代码(`zip`或`tar.gz`): [https://github.com/tensorflow/tensorflow/releases](https://github.com/tensorflow/tensorflow/releases) +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* 部分) 4. 打开一个新的终端窗口,然后单击`cd tensorflow-1.4.0` @@ -93,13 +93,13 @@ 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/](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- Deep Neural Network library)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. 请按照以下步骤在 Ubuntu 16.04 上安装 CUDA 8.0 和 cuDNN 6.0(您应该能够以类似的方式下载并安装 CUDA 9.0 和 cuDNN 7.0): -1. 在 [https://developer.nvidia.com/cuda-80-ga2-download-archive](https://developer.nvidia.com/cuda-80-ga2-download-archive) 中找到 NVIDIA CUDA 8.0 GA2 版本,并进行以下屏幕截图中所示的选择: +1. 在[这个页面](https://developer.nvidia.com/cuda-80-ga2-download-archive)中找到 NVIDIA CUDA 8.0 GA2 版本,并进行以下屏幕截图中所示的选择: ![](img/0e74beec-5ac6-4755-8268-dcf83c27a700.png)Fig 1.1 Getting ready to download CUDA 8.0 on Ubuntu 16.04 @@ -117,7 +117,7 @@ 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](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)下载 NVIDIA cuDNN 6.0 for CUDA 8.0-您将被要求先免费注册一个 NVIDIA Developer 帐户(免费)。 您可以下载它,如下一个屏幕截图所示(选择突出显示的 cuDNN v6.0 Linux 版): ![](img/f8e7636c-a193-4915-8c4f-8a234ffaf788.png)Fig 1.3 Selecting cuDNN 6.0 for CUDA 8.0 on Linux @@ -131,9 +131,9 @@ sudo cp ~/Downloads/cuda/include/cudnn.h /usr/local/cuda/include 现在我们准备在 Ubuntu 上安装启用 GPU 的 TensorFlow 1.4(此处给出的前两个步骤与*在 MacOS* 上设置 TensorFlow 一节中描述的步骤相同): -1. 从 GitHub 上的 TensorFlow 发布页面下载 TensorFlow 1.4.0 源代码(`zip`或`tar.gz`): [https://github.com/tensorflow/tensorflow/releases](https://github.com/tensorflow/tensorflow/releases) +1. 从 [GitHub 上的 TensorFlow 发布页面](https://github.com/tensorflow/tensorflow/releases)下载 TensorFlow 1.4.0 源代码(`zip`或`tar.gz`) 2. 解压缩下载的文件并将文件夹拖到主目录 -3. 从[下载 bazel 安装程序`bazel-0.5.4-installer-linux-x86_64.sh` https://github.com/bazelbuild/bazel/releases](https://github.com/bazelbuild/bazel/releases) +3. 从[这里](https://github.com/bazelbuild/bazel/releases)下载 bazel 安装程序 4. 打开一个新的终端窗口,然后运行以下命令以安装构建 TensorFlow 所需的工具和软件包: ```py @@ -185,13 +185,13 @@ totalMemory: 7.92GiB freeMemory: 7.60GiB -Xcode 用于开发 iOS 应用,您需要 Mac 电脑和免费的 Apple ID 才能下载和安装它。 如果您的 Mac 相对较旧并且使用 OS X El Capitan(版本 10.11.6),则可以从 [https://developer.apple.com/download/more](https://developer.apple.com/download/more) 下载 Xcode 8.2.1。 或者,如果您安装了 macOS Sierra(10.12.6 版)或更高版本,则可以从前面的链接下载 Xcode 9.2 或 9.3(截至 2018 年 5 月的最新版本)。 本书中的所有 iOS 应用均已在 Xcode 8.2.1、9.2 和 9.3 中进行了测试。 +Xcode 用于开发 iOS 应用,您需要 Mac 电脑和免费的 Apple ID 才能下载和安装它。 如果您的 Mac 相对较旧并且使用 OS X El Capitan(版本 10.11.6),则可以从[这里](https://developer.apple.com/download/more)下载 Xcode 8.2.1。 或者,如果您安装了 macOS Sierra(10.12.6 版)或更高版本,则可以从前面的链接下载 Xcode 9.2 或 9.3(截至 2018 年 5 月的最新版本)。 本书中的所有 iOS 应用均已在 Xcode 8.2.1、9.2 和 9.3 中进行了测试。 -要安装 Xcode,只需双击下载的文件,然后按照屏幕上的步骤进行操作。 这很简单。 现在,您可以在 Xcode 随附的 iOS 模拟器或您自己的 iOS 设备上运行应用程序。 从 Xcode 7 开始,您可以在 iOS 设备上免费运行和调试 iOS 应用,但如果要分发或发布您的应用,则需要以每年 99 美元的价格参加 Apple 开发人员计划: [https://developer.apple.com/programs/enroll](https://developer.apple.com/programs/enroll) 。 +要安装 Xcode,只需双击下载的文件,然后按照屏幕上的步骤进行操作。 这很简单。 现在,您可以在 Xcode 随附的 iOS 模拟器或您自己的 iOS 设备上运行应用程序。 从 Xcode 7 开始,您可以在 iOS 设备上免费运行和调试 iOS 应用,但如果要分发或发布您的应用,[则需要以每年 99 美元的价格参加 Apple 开发人员计划](https://developer.apple.com/programs/enroll)。 尽管您可以使用 Xcode 模拟器测试运行书中的许多应用程序,但是书中的某些应用程序需要使用实际的 iOS 设备上的相机拍摄照片,然后才能使用经过 TensorFlow 训练的深度学习模型对其进行处理。 此外,通常最好在实际设备上测试模型的准确性能和内存使用情况:在模拟器中运行良好的模型可能会崩溃或在实际设备中运行太慢。 因此,强烈建议或要求您(如果并非总是)至少在您的实际 iOS 设备上测试并运行本书中的 iOS 应用程序一次。 -本书假定您熟悉 iOS 编程,但是如果您不熟悉 iOS 开发,则可以从许多出色的在线教程中学习,例如 Ray Wenderlich 的 iOS 教程( [https://www.raywenderlich.com](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 ++代码进行交互。 @@ -201,9 +201,9 @@ Xcode 用于开发 iOS 应用,您需要 Mac 电脑和免费的 Apple ID 才能 -Android Studio 是开发 Android 应用程序的最佳工具,并且 TensorFlow 对其使用提供了强大的支持。 与 Xcode 不同,您可以在 Mac,Windows 或 Linux 上安装并运行 Android Studio。 有关详细的系统要求,请参阅 Android Studio 网站( [https://developer.android.com/studio/index.html](https://developer.android.com/studio/index.html) )。 在这里,我们将介绍如何在 Mac 上设置 Android Studio 3.0 或 3.0.1-本书中的所有应用均已在两个版本上进行了测试。 +Android Studio 是开发 Android 应用程序的最佳工具,并且 TensorFlow 对其使用提供了强大的支持。 与 Xcode 不同,您可以在 Mac,Windows 或 Linux 上安装并运行 Android Studio。 有关详细的系统要求,请参阅 [Android Studio 网站](https://developer.android.com/studio/index.html)。 在这里,我们将介绍如何在 Mac 上设置 Android Studio 3.0 或 3.0.1-本书中的所有应用均已在两个版本上进行了测试。 -首先,从前面的链接下载 Android Studio 3.0.1,如果最新版本是 3.0.1 以上,并且您不介意解决可能的小问题,请下载最新版本。 您也可以从 [https://developer.android.com/studio/archive.html](https://developer.android.com/studio/archive.html) 的存档中下载 3.0.1 或 3.0。 +首先,从前面的链接下载 Android Studio 3.0.1,如果最新版本是 3.0.1 以上,并且您不介意解决可能的小问题,请下载最新版本。 您也可以从[这里](https://developer.android.com/studio/archive.html)的存档中下载 3.0.1 或 3.0。 然后,双击下载的文件并将`Android Studio.app`图标拖放到`Applications`。 如果您以前安装了 Android Studio,则系统会提示您是否要用较新的 Android Studio 替换它。 您只需选择替换即可。 @@ -211,7 +211,7 @@ Android Studio 是开发 Android 应用程序的最佳工具,并且 TensorFlow ![](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](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 | 文件后,您可能还需要设置 Android NDK 位置。 项目结构,如以下屏幕截图所示: ![](img/1f6a2d74-0be0-4f36-9796-2cf66eb1694f.png)Fig 1.5 Setting project-level Android NDK location @@ -241,7 +241,7 @@ Android Studio 是开发 Android 应用程序的最佳工具,并且 TensorFlow 在本章的最后两部分中,我们将测试运行 TensorFlow 1.4 随附的三个示例 iOS 应用程序和四个示例 Android 应用程序,以确保您正确设置了移动 TensorFlow 开发环境并快速预览了其中的一些内容 TensorFlow 移动应用程序可以做到。 -三个示例 TensorFlow iOS 应用程序的源代码位于`tensorflow/examples/ios: simple`,`camera`和`benchmark`。 为了成功运行这些样本,您需要首先下载一个由 Google 训练的深度学习模型,称为 Inception( [https://github.com/tensorflow/models/tree/master/research/inception](https://github.com/tensorflow/models/tree/master/research/inception) ),用于 图像识别。 Inception 有多个版本:v1 到 v4,在每个较新的版本中准确性更高。 在这里,我们将使用 Inception v1 作为为其开发的示例。 下载模型文件后,将与模型相关的文件复制到每个样本的`data`文件夹中: +三个示例 TensorFlow iOS 应用程序的源代码位于`tensorflow/examples/ios: simple`,`camera`和`benchmark`。 为了成功运行这些样本,您需要首先下载一个由 Google 训练的深度学习模型,称为 [Inception](https://github.com/tensorflow/models/tree/master/research/inception),用于 图像识别。 Inception 有多个版本:v1 到 v4,在每个较新的版本中准确性更高。 在这里,我们将使用 Inception v1 作为为其开发的示例。 下载模型文件后,将与模型相关的文件复制到每个样本的`data`文件夹中: ```py curl -o ~/graphs/inception5h.zip https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip @@ -283,7 +283,7 @@ 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'`。 -现在,将 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](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android) 中查看 TensorFlow Android 示例文档。 +现在,将 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 示例文档。 diff --git a/new/intel-mobi-proj-tf/02.md b/new/intel-mobi-proj-tf/02.md index d09ec7c5..fdbed70e 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](http://image-net.org) )进行了训练,ImageNet 是最大和最知名的图像数据库之一,其中有超过一千万个图像被标注为对象类别。 Inception 模型可用于将图像分类为 [http://image-net.org/challenges/LSVRC/2014/browse-synsets](http://image-net.org/challenges/LSVRC/2014/browse-synsets) 中列出的 1,000 个类别之一。 这 1000 个对象类别包括很多对象中的很多犬种。 但是,识别狗品种的准确性不是很高,约为 70%,因为模型经过训练可以识别大量对象,而不是像狗品种之类的特定对象。 +上一章中描述的示例 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%,因为模型经过训练可以识别大量对象,而不是像狗品种之类的特定对象。 如果我们想提高准确性并在使用改进模型的智能手机上构建移动应用程序怎么办,那么当我们四处走走并看到一只有趣的狗时,我们可以使用该应用程序告诉我们它是哪种狗。 @@ -36,7 +36,7 @@ If you're unfamiliar with CNN, check out the videos and notes of one of the best resources on it, the Stanford CS231n course *CNN for Visual Recognition* ([http://cs231n.stanford.edu](http://cs231n.stanford.edu)). Another good resource on CNN is Chapter 6 of *Michael Nielsen's* online book, *Neural Networks and Deep Learning*: [http://neuralnetworksanddeeplearning.com/chap6.html#introducing_convolutional_networks](http://neuralnetworksanddeeplearning.com/chap6.html#introducing_convolutional_networks). -在接下来的两个部分中,我们将使用针对 TensorFlow 的两个最佳的经过预训练的 CNN 模型和一个犬种数据集来重新训练模型并生成更好的犬种识别模型。 第一个模型是 Inception v3,它是比 Inception v1 更准确的模型,已针对准确性进行了优化,但尺寸较大。 另一个模型是 MobileNet,它针对移动设备的大小和效率进行了优化。 TensorFlow 支持的预训练模型的详细列表位于 [https://github.com/tensorflow/models/tree/master/research/slim#pre-trained-models](https://github.com/tensorflow/models/tree/master/research/slim#pre-trained-models) 。 +在接下来的两个部分中,我们将使用针对 TensorFlow 的两个最佳的经过预训练的 CNN 模型和一个犬种数据集来重新训练模型并生成更好的犬种识别模型。 第一个模型是 Inception v3,它是比 Inception v1 更准确的模型,已针对准确性进行了优化,但尺寸较大。 另一个模型是 MobileNet,它针对移动设备的大小和效率进行了优化。 TensorFlow 支持的预训练模型的详细列表位于[这里](https://github.com/tensorflow/models/tree/master/research/slim#pre-trained-models)。 @@ -46,7 +46,7 @@ If you're unfamiliar with CNN, check out the videos and notes of one of the best -在上一章中设置的 TensorFlow 源代码中,有一个 Python 脚本`tensorflow/examples/image_retraining/retrain.py`,可用于重新训练 Inception v3 或 MobileNet 模型。 在运行脚本以重新训练 Inception v3 模型以进行狗品种识别之前,我们需要首先下载 Stanford Dogs 数据集( [http://vision.stanford.edu/aditya86/ImageNetDogs](http://vision.stanford.edu/aditya86/ImageNetDogs) ), 120 个犬种的图片(您只需要在链接中下载图片,而不是注释即可)。 +在上一章中设置的 TensorFlow 源代码中,有一个 Python 脚本`tensorflow/examples/image_retraining/retrain.py`,可用于重新训练 Inception v3 或 MobileNet 模型。 在运行脚本以重新训练 Inception v3 模型以进行狗品种识别之前,我们需要首先下载[斯坦福狗数据集](http://vision.stanford.edu/aditya86/ImageNetDogs), 120 个犬种的图片(您只需要在链接中下载图片,而不是注释即可)。 在`~/Downloads`中解压缩下载的狗`images.tar`文件,您应该在`~/Downloads/Images`中看到文件夹列表,如以下屏幕截图所示。 每个文件夹对应一个犬种,并且包含约 150 张图像(您无需为图像提供显式标签,因为文件夹名称用于标记文件夹中包含的图像): @@ -244,7 +244,7 @@ bazel-bin/tensorflow/tools/graph_transforms/transform_graph 在测试中使用`label_image`脚本可以正确运行`quantized_stripped_dogs_retrained.pb`和`transform_dog_retrained.pb`。 但是只有第一个可以在 iOS 和 Android 应用程序中正常工作。 -有关图形转换工具的详细文档,请参见其 GitHub README,网址为 [https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/graph_transforms/README.md。](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/graph_transforms/README.md) +有关图形转换工具的详细文档,请参见其 [GitHub README](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/graph_transforms/README.md)。 @@ -256,7 +256,7 @@ bazel-bin/tensorflow/tools/graph_transforms/transform_graph 上一节中生成的剥离和量化模型的大小仍超过 20 MB。 这是因为用于再训练的预先构建的 Inception v3 模型是大规模的深度学习模型,具有超过 2500 万个参数,并且 Inception v3 并非以移动优先为目标。 -2017 年 6 月,谷歌发布了 MobileNets v1,共 16 种针对 TensorFlow 的移动优先深度学习模型。 这些模型的大小只有几 MB,具有 47 万至 424 万个参数,仍然达到了不错的精度(仅比 Inception v3 低一点)。 有关更多信息,请参见其自述文件: [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) 。 +2017 年 6 月,谷歌发布了 MobileNets v1,共 16 种针对 TensorFlow 的移动优先深度学习模型。 这些模型的大小只有几 MB,具有 47 万至 424 万个参数,仍然达到了不错的精度(仅比 Inception v3 低一点)。 有关更多信息,请参见[其自述文件](https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md)。 上一节中讨论的`retrain.py`脚本还支持基于 MobileNet 模型的重新训练。 只需运行如下命令: diff --git a/new/intel-mobi-proj-tf/03.md b/new/intel-mobi-proj-tf/03.md index ad1b0a82..9af9890b 100644 --- a/new/intel-mobi-proj-tf/03.md +++ b/new/intel-mobi-proj-tf/03.md @@ -39,7 +39,7 @@ Andrej Karpathy wrote a good introduction to RCNN, "Playing around with RCNN, St If you’re really interested in deep learning research and want to know all the details of how each detector works to decide which one to use, you should definitely read the papers of each method and try to reproduce the training process on your own. It’ll be a long but rewarding road. But if you want to take Andrej Karpathy’s advice, “don’t be a hero” (search on YouTube for “deep learning for computer vision Andrej”), then you can “take whatever works best, download a pre-trained model, potentially add/delete some parts of it, and fine-tune it on your app,” which is also the approach we’ll use here. -在开始研究哪种方法最适合 TensorFlow 之前,让我们快速了解一下数据集。 有 3 个主要的数据集用于训练对象检测:PASCAL VOC( [http://host.robots.ox.ac.uk/pascal/VOC](http://host.robots.ox.ac.uk/pascal/VOC) ),ImageNet( [http:// image -net.org](http://image-net.org) )和 Microsoft COCO( [http://cocodataset.org](http://cocodataset.org) ),它们具有的类数分别为 20、200 和 80。 TensorFlow 对象检测 API 当前支持的大多数预训练模型都在 80 级 MS COCO 数据集上进行了训练(有关预训练模型及其训练的数据集的完整列表,请参见 [https: //github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md](https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md) )。 +在开始研究哪种方法最适合 TensorFlow 之前,让我们快速了解一下数据集。 有 3 个主要的数据集用于训练对象检测:[PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC),[ImageNet](http://image-net.org) 和 [Microsoft COCO](http://cocodataset.org),它们具有的类数分别为 20、200 和 80。 TensorFlow 对象检测 API 当前支持的大多数预训练模型都在 80 级 MS COCO 数据集上进行了训练(有关预训练模型及其训练的数据集的完整列表,请参见[这里](https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md)。 尽管我们不会从头开始进行培训,但是您会经常提到 PASCAL VOC 或 MS COCO 数据格式,以及它们涵盖的 20 或 80 个通用类,它们都是在重新训练或使用经过训练的模型时使用的。 在本章的最后部分,我们将尝试使用 VOC 训练的 YOLO 模型和 COCO 训练的模型。 @@ -51,7 +51,7 @@ If you’re really interested in deep learning research and want to know all the -TensorFlow 对象检测 API 在其官方网站 [https://github.com/tensorflow/models/tree/master/research/object_detection](https://github.com/tensorflow/models/tree/master/research/object_detection) 上有详细记录,您一定要查看其“快速入门: Jupyter notebook for the 现成的推断”指南,快速介绍了如何在 Python 中使用良好的预训练模型进行检测。 但是那里的文档分布在许多不同的页面上,有时难以理解。 在本节和下一节中,我们将通过重组在许多地方记录的重要细节并添加更多示例和代码说明来简化官方文档,并提供有关以下内容的两个分步教程: +TensorFlow 对象检测 API 在其[官方网站](https://github.com/tensorflow/models/tree/master/research/object_detection)上有详细记录,您一定要查看其“快速入门: Jupyter notebook for the 现成的推断”指南,快速介绍了如何在 Python 中使用良好的预训练模型进行检测。 但是那里的文档分布在许多不同的页面上,有时难以理解。 在本节和下一节中,我们将通过重组在许多地方记录的重要细节并添加更多示例和代码说明来简化官方文档,并提供有关以下内容的两个分步教程: 1. 如何设置 API 并使用其预训练的模型进行现成的推断 2. 如何使用 API​​重新训练预训练模型以执行更具体的检测任务 @@ -87,7 +87,7 @@ sudo pip install matplotlib protoc object_detection/protos/*.proto --python_out=. ``` -这将编译`object_detection/protos`目录中的所有 Protobuf,以使 TensorFlow 对象检测 API 满意。 Protobuf 或 Protocol Buffer 是一种自动序列化和检索结构化数据的方法,它比 XML 轻巧且效率更高。 您所需要做的就是编写一个描述数据结构的.proto 文件,然后使用 protoc(proto 编译器)生成自动解析和编码 protobuf 数据的代码。 注意`--python_out`参数指定了所生成代码的语言。 在本章的下一部分中,当我们讨论如何在 iOS 中使用模型时,我们将使用带有`--cpp_out`的协议编译器,因此生成的代码是 C ++。 有关协议缓冲区的完整文档,请参见 [https://developers.google.com/protocol-buffers](https://developers.google.com/protocol-buffers) 。 +这将编译`object_detection/protos`目录中的所有 Protobuf,以使 TensorFlow 对象检测 API 满意。 Protobuf 或 Protocol Buffer 是一种自动序列化和检索结构化数据的方法,它比 XML 轻巧且效率更高。 您所需要做的就是编写一个描述数据结构的.proto 文件,然后使用 protoc(proto 编译器)生成自动解析和编码 protobuf 数据的代码。 注意`--python_out`参数指定了所生成代码的语言。 在本章的下一部分中,当我们讨论如何在 iOS 中使用模型时,我们将使用带有`--cpp_out`的协议编译器,因此生成的代码是 C ++。 有关协议缓冲区的完整文档,请参见[这里](https://developers.google.com/protocol-buffers)。 4. 仍在模型/研究中,运行`export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim`,然后运行`python object_detection/builders/model_builder_test.py`以验证一切正常。 5. 启动`jupyter notebook`命令并在浏览器中打开`http://localhost:8888`。 首先单击`object_detection`,然后选择`object_detection_tutorial.ipynb`笔记本并逐个单元运行演示。 @@ -111,7 +111,7 @@ PATH_TO_LABELS = os.path.join('data', 'mscoco_label_map.pbtxt') NUM_CLASSES = 90 ``` -笔记本代码下载并使用了预训练的对象检测模型`ssd_mobilenet_v1_coco_2017_11_17`(使用 SSD 方法构建,我们在上一章中介绍的 MobileNet CNN 模型之上,在上一节中进行了简要介绍)。 TensorFlow 检测模型动物园中提供了 TensorFlow 对象检测 API 支持的预训练模型的完整列表: [https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo。 md](https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md) ,并且大多数都是使用 MS COCO 数据集进行训练的。 用于推理的确切模型是`frozen_inference_graph.pb`文件(在下载的`ssd_mobilenet_v1_coco_2017_11_17.tar.gz`文件中),该模型用于现成的推理以及重新训练。 +笔记本代码下载并使用了预训练的对象检测模型`ssd_mobilenet_v1_coco_2017_11_17`(使用 SSD 方法构建,我们在上一章中介绍的 MobileNet CNN 模型之上,在上一节中进行了简要介绍)。 TensorFlow 检测模型动物园中提供了 [TensorFlow 对象检测 API 支持的预训练模型的完整列表](https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md),并且大多数都是使用 MS COCO 数据集进行训练的。 用于推理的确切模型是`frozen_inference_graph.pb`文件(在下载的`ssd_mobilenet_v1_coco_2017_11_17.tar.gz`文件中),该模型用于现成的推理以及重新训练。 位于`models/research/object_detection/data/mscoco_label_map.pbtxt`中的`mscoco_label_map.pbtxt`标签文件具有 90(NUM_CLASSES)个项目,用于`ssd_mobilenet_v1_coco_2017_11_17`模型可以检测到的对象类型。 它的前两个项目是: @@ -479,7 +479,7 @@ If you run the app, after completing the following steps, and encounter an error 需要第一个–force_load,因为它确保 TensorFlow 所需的 C ++构造函数将被链接,否则,您仍可以构建和运行该应用程序,但会遇到有关未注册会话的错误。 -最后一个库用于 nsync,这是一个 C 库,可导出互斥量和其他同步方法( [https://github.com/google/nsync](https://github.com/google/nsync) )。 在新的 TensorFlow 版本中引入。 +最后一个库用于 nsync,这是一个 C 库,[可导出互斥量和其他同步方法](https://github.com/google/nsync)。 在新的 TensorFlow 版本中引入。 4. 搜索“标题搜索路径”,并添加以下值: @@ -523,7 +523,7 @@ Loading the TensorFlow object detection models in your app with the manual Tenso 1. 拖放上一节中的三个物体检测模型图`ssd_mobilenet_v1_frozen_inference_graph.pb`,`faster_rcnn_inceptionv2_frozen_inference_graph.pb`和`faster_rcnn_resnet101_frozen_inference_graph.pb`,以及`mscoco_label_map.pbtxt`标签映射文件和几个 测试图像发送到`TFObjectDetectionAPI`项目。 2. 将 TensorFlow iOS 示例简单应用程序或上一章中创建的 iOS 应用程序中的`ios_image_load.mm`及其`.h`文件添加到项目中。 -3. 在 [https://github.com/google/protobuf/releases](https://github.com/google/protobuf/releases) (在 Mac 上为`protoc-3.4.0-osx-x86_64.zip`文件)下载协议缓冲区版本 3.4.0。 要使用 TensorFlow 1.4 库需要确切的 3.4.0 版本,而更高版本的 TensorFlow 可能需要更高版本的协议缓冲区。 +3. 在[这里](https://github.com/google/protobuf/releases)(在 Mac 上为`protoc-3.4.0-osx-x86_64.zip`文件)下载协议缓冲区版本 3.4.0。 要使用 TensorFlow 1.4 库需要确切的 3.4.0 版本,而更高版本的 TensorFlow 可能需要更高版本的协议缓冲区。 4. 假设下载的文件解压缩到`~/Downloads`目录中,请打开“终端”窗口并运行以下命令: ```py @@ -637,13 +637,13 @@ num_detections: 100, detection_scores size: 100, detection_classes size: 100, de -正如我们在第一部分中提到的,YOLO2( [https://pjreddie.com/darknet/yolo](https://pjreddie.com/darknet/yolo) )是另一个很酷的对象检测模型,它使用了与 RCNN 系列不同的方法。 它使用单个神经网络将输入图像划分为固定大小的区域(但不像 RCNN 系列方法那样提供区域建议),并预测每个区域的边界框,类别和概率。 +正如我们在第一部分中提到的,[YOLO2](https://pjreddie.com/darknet/yolo) 是另一个很酷的对象检测模型,它使用了与 RCNN 系列不同的方法。 它使用单个神经网络将输入图像划分为固定大小的区域(但不像 RCNN 系列方法那样提供区域建议),并预测每个区域的边界框,类别和概率。 TensorFlow Android 示例应用程序具有使用预训练的 YOLO 模型的示例代码,但没有 iOS 示例。 由于 YOLO2 是最快的对象检测模型之一,而且非常准确(请在其网站上查看其与 SSD 模型的 mAP 比较),因此有必要了解一下如何在 iOS 应用中使用它。 -YOLO 使用称为 Darknet( [https://pjreddie.com/darknet](https://pjreddie.com/darknet) )的独特开源神经网络框架来训练其模型。 还有另一个名为 darkflow 的库( [https://github.com/thtrieu/darkflow](https://github.com/thtrieu/darkflow) ),该库可以将使用 Darknet 训练的 YOLO 模型的神经网络权重转换为 TensorFlow 图格式,并重新训练预训练的 楷模。 +YOLO 使用称为 [Darknet](https://pjreddie.com/darknet) 的独特开源神经网络框架来训练其模型。 [还有另一个名为 darkflow 的库](https://github.com/thtrieu/darkflow),该库可以将使用 Darknet 训练的 YOLO 模型的神经网络权重转换为 TensorFlow 图格式,并重新训练预训练的 楷模。 -要以 TensorFlow 格式构建 YOLO2 模型,请首先从 [https://github.com/thtrieu/darkflow 获取 darkflow 回购。](https://github.com/thtrieu/darkflow) 因为它需要 Python 3 和 TensorFlow 1.0(Python 2.7 和 TensorFlow 1.4 或更高版本也可能工作),所以我们将使用 Anaconda 来设置一个新的具有 Python 3 支持的 TensorFlow 1.0 环境: +要以 TensorFlow 格式构建 YOLO2 模型,请首先从[这里](https://github.com/thtrieu/darkflow)获取 darkflow。因为它需要 Python 3 和 TensorFlow 1.0(Python 2.7 和 TensorFlow 1.4 或更高版本也可能工作),所以我们将使用 Anaconda 来设置一个新的具有 Python 3 支持的 TensorFlow 1.0 环境: ```py conda create --name tf1.0_p35 python=3.5 diff --git a/new/intel-mobi-proj-tf/04.md b/new/intel-mobi-proj-tf/04.md index 284b92b1..e0d7b03e 100644 --- a/new/intel-mobi-proj-tf/04.md +++ b/new/intel-mobi-proj-tf/04.md @@ -24,15 +24,15 @@ -使用深度神经网络将图像内容与另一种图像的样式合并的原始思想和算法发表在题为*艺术风格的神经算法*( [https:// arxiv 的论文)中。 。于 2015 年夏季发布。 ]),是 2014 年 ImageNet 图像识别挑战赛的获胜者,该挑战赛具有 16 个卷积层或特征图,分别代表不同级别的图像内容。 在这种原始方法中,首先将最终传输的图像初始化为与内容图像合并的白噪声图像。 内容损失函数定义为内容图像和结果图像的卷积层 conv4_2 上都被馈入 VGG-19 网络后,特定的一组特征表示形式的平方误差损失。 样式损失函数计算样式图像和所得图像在五个不同卷积层上的总误差差。 然后,将总损失定义为内容损失和样式损失的总和。 在训练期间,损失会降到最低,并生成将一个图像的内容与另一个图像的样式混合在一起的结果图像。](https://arxiv.org/abs/1508.06576) +使用深度神经网络将图像内容与另一种图像的样式合并的原始思想和算法于 2015 年夏季发表在题为[《艺术风格的神经算法》](https://arxiv.org/abs/1508.06576)的论文中。它是 2014 年 ImageNet 图像识别挑战赛的获胜者,该挑战赛具有 16 个卷积层或特征图,分别代表不同级别的图像内容。 在这种原始方法中,首先将最终传输的图像初始化为与内容图像合并的白噪声图像。 内容损失函数定义为内容图像和结果图像的卷积层 conv4_2 上都被馈入 VGG-19 网络后,特定的一组特征表示形式的平方误差损失。 样式损失函数计算样式图像和所得图像在五个不同卷积层上的总误差差。 然后,将总损失定义为内容损失和样式损失的总和。 在训练期间,损失会降到最低,并生成将一个图像的内容与另一个图像的样式混合在一起的结果图像。 尽管原始神经样式转换算法的结果令人惊叹,但其性能却很差-训练是样式转换图像生成过程的一部分,通常在 GPU 上花费几分钟,在 CPU 上花费约一个小时才能生成良好的图像。 结果。 If you're interested in the details of the original algorithm, you can read the paper along with a well-documented Python implementation, at [https://github.com/log0/neural-style-painting/blob/master/art.py](https://github.com/log0/neural-style-painting/blob/master/art.py). We won't discuss this original algorithm as it's not feasible to run on mobile phone, but it's fun and instrumental to try it to get a better understanding of how to use a pre-trained deep CNN model for different computer vision tasks. -自然地,在 2016 年,论文中发布了一种“快三个数量级”的新算法,即*实时样式传递和超分辨率*的感知损失( [https:// cs .stanford.edu / people / jcjohns / eccv16 /](https://cs.stanford.edu/people/jcjohns/eccv16/) ),作者是 Justin Johnson 等。 它使用单独的训练过程,并定义了更好的损失函数,这些函数本身就是深度神经网络。 训练后(在下一节中我们将看到,在 GPU 上可能要花费几个小时),使用训练后的模型来生成样式转换的图像在计算机上几乎是实时的,而在智能手机上只需几秒钟。 +自然地,在 2016 年,论文中发布了一种“快三个数量级”的新算法,即[《实时样式传递和超分辨率的感知损失》](https://cs.stanford.edu/people/jcjohns/eccv16/),作者是 Justin Johnson 等。 它使用单独的训练过程,并定义了更好的损失函数,这些函数本身就是深度神经网络。 训练后(在下一节中我们将看到,在 GPU 上可能要花费几个小时),使用训练后的模型来生成样式转换的图像在计算机上几乎是实时的,而在智能手机上只需几秒钟。 -使用这种快速神经传递算法仍然有一个缺点:只能针对特定样式训练模型,因此,要在您的应用中使用不同的样式,必须逐一训练这些样式以为每种样式生成一个模型 。 2017 年发表了一篇名为*学习风格的艺术表现形式*( [https://arxiv.org/abs/1610.07629](https://arxiv.org/abs/1610.07629) )的新论文,它发现一个单一的深度神经网络模型可以 概括许多不同的样式。 TensorFlow Magenta 项目( [https://github.com/tensorflow/magenta/tree/master/magenta/models/image_stylization](https://github.com/tensorflow/magenta/tree/master/magenta/models/image_stylization) )包括具有多种样式的预训练模型,我们将在最后一部分中看到 本章的两个部分在 iOS 和 Android 应用程序中使用这种模型来产生强大而神奇的艺术效果是多么容易。 +使用这种快速神经传递算法仍然有一个缺点:只能针对特定样式训练模型,因此,要在您的应用中使用不同的样式,必须逐一训练这些样式以为每种样式生成一个模型 。 2017 年发表了一篇名为[《学习风格的艺术表现形式》](https://arxiv.org/abs/1610.07629)的新论文,它发现一个单一的深度神经网络模型可以 概括许多不同的样式。 [TensorFlow Magenta 项目](https://github.com/tensorflow/magenta/tree/master/magenta/models/image_stylization)包括具有多种样式的预训练模型,我们将在最后一部分中看到 本章的两个部分在 iOS 和 Android 应用程序中使用这种模型来产生强大而神奇的艺术效果是多么容易。 @@ -424,7 +424,7 @@ mHandler.sendMessage(msg); -TensorFlow Magenta 项目( [https://github.com/tensorflow/magenta](https://github.com/tensorflow/magenta) )允许您使用 10 多种经过预训练的模型来生成新的音乐和图像。 在本节和下一节中,我们将重点介绍使用 Magenta 的图像样式化模型。 您可以单击链接在计算机上安装 Magenta,尽管要在移动应用程序中使用其炫酷的图像样式传输模型,也不必安装 Magenta。 在 *2017* 中基于论文*习得的艺术风格*实现的洋红色预训练风格转换模型,消除了一个模型只能具有一种风格并允许多种风格的限制 包含在单个模型文件中,您可以选择使用这些样式的任意组合。 您可以在[上快速浏览该演示,网址为 https://github.com/tensorflow/magenta/tree/master/magenta/models/image_stylization](https://github.com/tensorflow/magenta/tree/master/magenta/models/image_stylization) ,但可以在此处下载两个预先训练的检查点模型。 由于检查点文件中保存了某些 NaN(不是数字)错误,因此无法直接在您的移动应用中使用。 我们不会详细说明如何删除这些数字并生成可在您的应用中使用的`.pb`模型文件(如果感兴趣,您可以查看 [https://github.com/tensorflow/ tensorflow / issues / 9678](https://github.com/tensorflow/tensorflow/issues/9678) ),我们仅使用 TensorFlow Android 示例`tensorflow/examples/android/assets`中包含的经过预训练的`stylize_quantized.pb`模型文件来查看其工作原理。 +[TensorFlow Magenta 项目](https://github.com/tensorflow/magenta)允许您使用 10 多种经过预训练的模型来生成新的音乐和图像。 在本节和下一节中,我们将重点介绍使用 Magenta 的图像样式化模型。 您可以单击链接在计算机上安装 Magenta,尽管要在移动应用程序中使用其炫酷的图像样式传输模型,也不必安装 Magenta。 在 *2017* 中基于论文*习得的艺术风格*实现的洋红色预训练风格转换模型,消除了一个模型只能具有一种风格并允许多种风格的限制 包含在单个模型文件中,您可以选择使用这些样式的任意组合。 您可以在[这个页面](https://github.com/tensorflow/magenta/tree/master/magenta/models/image_stylization)上快速浏览该演示,但可以在此处下载两个预先训练的检查点模型。 由于检查点文件中保存了某些 NaN(不是数字)错误,因此无法直接在您的移动应用中使用。 我们不会详细说明如何删除这些数字并生成可在您的应用中使用的`.pb`模型文件(如果感兴趣,您可以查看 这里](https://github.com/tensorflow/tensorflow/issues/9678)),我们仅使用 TensorFlow Android 示例`tensorflow/examples/android/assets`中包含的经过预训练的`stylize_quantized.pb`模型文件来查看其工作原理。 如果您确实想训练自己的模型,则可以按照前面的 image_stylization 链接中的训练模型下的步骤进行。 但是请注意,您至少需要 500 GB 的可用磁盘空间才能下载 ImageNet 数据集,并需要强大的 GPU 来完成培训。 在本节或下一节中看到代码和结果之后,您更有可能对预训练的`stylize_quantized.pb`模型启用的炫酷样式转换效果感到满意。 @@ -527,7 +527,7 @@ tensorflow::Status run_status = session->Run({{input_layer, image_tensor}, {styl -尽管 TensorFlow Android 示例应用程序已经具有使用多种样式模型的代码(实际上我们在上一节的 iOS 应用中使用了 Android 示例应用程序中的模型),但示例应用程序中与 TensorFlow 相关的代码却与 超过 600 行的`StylizeActivity.java`文件中包含很多 UI 代码。 您还可以通过 TensorFlow Android 样式转换的 Codelab( [https://codelabs.developers.google.com/codelabs/tensorflow-style-transfer-android/index.html](https://codelabs.developers.google.com/codelabs/tensorflow-style-transfer-android/index.html) )进行操作,但是代码 与 TensorFlow Android 示例应用程序大致相同。 由于我们已经使用 TensorFlow 快速样式传输模型实现了 Android 应用程序的简约实现,因此很有趣的是,我们如何仅需更改几行代码就可以拥有一个强大的多样式样式传输应用程序。 这也应该是一种更直观的方法,以了解如何将出色的 TensorFlow 模型添加到现有的 Android 应用中。 +尽管 TensorFlow Android 示例应用程序已经具有使用多种样式模型的代码(实际上我们在上一节的 iOS 应用中使用了 Android 示例应用程序中的模型),但示例应用程序中与 TensorFlow 相关的代码却与 超过 600 行的`StylizeActivity.java`文件中包含很多 UI 代码。 您还可以通过 TensorFlow Android 样式转换的 [Codelab](https://codelabs.developers.google.com/codelabs/tensorflow-style-transfer-android/index.html) 进行操作,但是代码 与 TensorFlow Android 示例应用程序大致相同。 由于我们已经使用 TensorFlow 快速样式传输模型实现了 Android 应用程序的简约实现,因此很有趣的是,我们如何仅需更改几行代码就可以拥有一个强大的多样式样式传输应用程序。 这也应该是一种更直观的方法,以了解如何将出色的 TensorFlow 模型添加到现有的 Android 应用中。 因此,这就是在我们之前构建的 Android 应用中使用多样式传输模型所需要的: diff --git a/new/intel-mobi-proj-tf/05.md b/new/intel-mobi-proj-tf/05.md index 678b11d0..37f68925 100644 --- a/new/intel-mobi-proj-tf/05.md +++ b/new/intel-mobi-proj-tf/05.md @@ -32,14 +32,14 @@ RNN allows us to handle sequences of input and/or output, because the network, by design, has memory of previous items in an input sequence or can generate a sequence of output. This makes RNN more appropriate for speech recognition, (where the input is a sequence of words uttered by users), image captioning, (where the output is a natural language sentence consisting of a series of words), text generation, and time series prediction. If you're unfamiliar with RNN, you should definitely check out *Andrey Karpathy's* blog, *The Unreasonable Effectiveness of Recurrent Neural Networks* ([http://karpathy.github.io/2015/05/21/rnn-effectiveness](http://karpathy.github.io/2015/05/21/rnn-effectiveness)). We'll also cover some detailed RNN models later in the book. -关于 RNN 端到端语音识别的第一篇研究论文发表于 2014 年( [http://proceedings.mlr.press/v32/graves14.pdf](http://proceedings.mlr.press/v32/graves14.pdf) ),使用的是**连接主义的时间分类**( **CTC** )层。 2014 年下半年,百度发布了 Deep Speech( [https://arxiv.org/abs/1412.5567](https://arxiv.org/abs/1412.5567) ),这是第一个使用基于 CTC 的端到端 RNN 构建但拥有庞大数据集的商业系统之一 ,并在嘈杂的环境中实现了比传统 ASR 系统更低的错误率。 如果您有兴趣,可以查看深度语音的 TensorFlow 实现( [https://github.com/mozilla/DeepSpeech](https://github.com/mozilla/DeepSpeech) ),但是生成的模型会 由于此类基于 CTC 的系统存在问题,因此需要太多的资源才能在手机上运行。 在部署期间,它需要一个大型语言模型来纠正部分由 RNN 的性质引起的生成的文本错误(如果您想知道为什么,请阅读前面链接的 RNN 博客以获取一些见识)。 +[关于 RNN 端到端语音识别的第一篇研究论文发表于 2014 年](http://proceedings.mlr.press/v32/graves14.pdf),使用的是**连接主义的时间分类**( **CTC** )层。 2014 年下半年,百度发布了 [Deep Speech](https://arxiv.org/abs/1412.5567),这是第一个使用基于 CTC 的端到端 RNN 构建但拥有庞大数据集的商业系统之一 ,并在嘈杂的环境中实现了比传统 ASR 系统更低的错误率。 如果您有兴趣,可以查看[深度语音的 TensorFlow 实现](https://github.com/mozilla/DeepSpeech),但是生成的模型会 由于此类基于 CTC 的系统存在问题,因此需要太多的资源才能在手机上运行。 在部署期间,它需要一个大型语言模型来纠正部分由 RNN 的性质引起的生成的文本错误(如果您想知道为什么,请阅读前面链接的 RNN 博客以获取一些见识)。 -在 2015 年和 2016 年,较新的语音识别系统使用了类似的端到端 RNN 方法,但将 CTC 层替换为基于注意力的模型( [https://arxiv.org/pdf/1508.01211.pdf](https://arxiv.org/pdf/1508.01211.pdf) ),因此 运行模型时不需要大型语言模型,因此可以在内存有限的移动设备上进行部署。 在本书的此版本中,我们将不会探讨这种可能性,而将介绍如何在移动应用中使用最新的高级 ASR 模型。 相反,我们将从一个更简单的语音识别模型开始,我们知道该模型肯定会在移动设备上很好地工作。 +在 2015 年和 2016 年,较新的语音识别系统使用了类似的端到端 RNN 方法,但将 CTC 层替换为[基于注意力的模型](https://arxiv.org/pdf/1508.01211.pdf),因此 运行模型时不需要大型语言模型,因此可以在内存有限的移动设备上进行部署。 在本书的此版本中,我们将不会探讨这种可能性,而将介绍如何在移动应用中使用最新的高级 ASR 模型。 相反,我们将从一个更简单的语音识别模型开始,我们知道该模型肯定会在移动设备上很好地工作。 要将离线语音识别功能添加到移动应用程序,您还可以使用以下两个领先的开源语音识别项目之一: -* CMU Sphinx( [https://cmusphinx.github.io](https://cmusphinx.github.io) )大约 20 年前开始,但仍在积极开发中。 要构建具有语音识别功能的 Android 应用,您可以使用其为 Android 构建的 PocketSphinx( [https://github.com/cmusphinx/pocketsphinx-android](https://github.com/cmusphinx/pocketsphinx-android) )。 要构建具有语音识别功能的 iOS 应用,您可以使用 OpenEars 框架( [https://www.politepix.com/openears](https://www.politepix.com/openears) ),这是一个免费的 SDK,使用 CMU PocketSphinx 构建离线语音识别和文本转换 在 iOS 应用中进行语音转换。 -* Kaldi( [https://github.com/kaldi-asr/kaldi](https://github.com/kaldi-asr/kaldi) ),成立于 2009 年,最近非常活跃,截至 2018 年 1 月,已有 165 个参与者。要在 Android 上进行尝试,您可以 查看此博客文章: [http://jcsilva.github.io/2017/03/18/compile-kaldi-android](http://jcsilva.github.io/2017/03/18/compile-kaldi-android) 。 对于 iOS,请查看在 iOS 上使用 Kaldi 的原型: [https://github.com/keenresearch/keenasr-ios-poc](https://github.com/keenresearch/keenasr-ios-poc) 。 +* [CMU Sphinx](https://cmusphinx.github.io) 大约 20 年前开始,但仍在积极开发中。 要构建具有语音识别功能的 Android 应用,您可以使用其为 Android 构建的 [PocketSphinx](https://github.com/cmusphinx/pocketsphinx-android)。 要构建具有语音识别功能的 iOS 应用,您可以使用 [OpenEars 框架](https://www.politepix.com/openears),这是一个免费的 SDK,使用 CMU PocketSphinx 构建离线语音识别和文本转换 在 iOS 应用中进行语音转换。 +* [Kaldi](https://github.com/kaldi-asr/kaldi),成立于 2009 年,最近非常活跃,截至 2018 年 1 月,已有 165 个参与者。要在 Android 上进行尝试,您可以查看[此博客文章](http://jcsilva.github.io/2017/03/18/compile-kaldi-android)。 对于 iOS,请查看[在 iOS 上使用 Kaldi 的原型](https://github.com/keenresearch/keenasr-ios-poc)。 由于这是一本关于在移动设备上使用 TensorFlow 的书,因此 TensorFlow 可用于为图像处理,语音处理和文本处理以及其他智能任务(本章其余部分的)构建强大的模型。 我们将重点介绍如何使用 TensorFlow 训练简单的语音识别模型并将其在移动应用中使用。 @@ -51,13 +51,13 @@ RNN allows us to handle sequences of input and/or output, because the network, b -在本节中,我们将总结编写良好的 TensorFlow 简单音频识别教程( [https://www.tensorflow.org/versions/master/tutorials/audio_recognition](https://www.tensorflow.org/versions/master/tutorials/audio_recognition) )中使用的步骤。 一些在训练模型时可能对您有帮助的提示。 +在本节中,我们将总结[编写良好的 TensorFlow 简单音频识别教程](https://www.tensorflow.org/versions/master/tutorials/audio_recognition)中使用的步骤。 一些在训练模型时可能对您有帮助的提示。 我们将建立的简单语音命令识别模型将能够识别 10 个单词:“是”,“否”,“上”,“下”,“左”,“右”,“开”,“关” “停止”和“开始”; 它也可以检测沉默。 如果没有发现沉默,并且没有发现 10 个单词,它将生成“未知”。 稍后运行`tensorflow/example/speech_commands/train.py`脚本时,我们将下载语音命令数据集并用于训练模型,实际上除了这 10 个单词外,还包含 20 个单词:“零”,“两个”,“三个”。 ..,“十”(到目前为止,您已经看到的 20 个词称为核心词)和 10 个辅助词:“床”,“鸟”,“猫”,“狗”,“快乐”,“房子” ,“马文”,“希拉”,“树”和“哇”。 核心词比辅助词(约 1750)具有更多的`.wav`文件记录(约 2350)。 The speech commands dataset is collected from an Open Speech Recording site ([https://aiyprojects.withgoogle.com/open_speech_recording](https://aiyprojects.withgoogle.com/open_speech_recording)). You should give it a try and maybe contribute a few minutes of your own recordings to help it improve and also get a sense of how you can collect your own speech commands dataset if needed. There's also a Kaggle competition ([https://www.kaggle.com/c/tensorflow-speech-recognition-challenge](https://www.kaggle.com/c/tensorflow-speech-recognition-challenge)) on using the dataset to build a model and you can learn more about speech models and tips there. -在移动应用中要训练和使用的模型基于纸质卷积神经网络,用于小尺寸关键词发现( [http://www.isca-speech.org/archive/interspeech_2015/papers/i15_1478.pdf](http://www.isca-speech.org/archive/interspeech_2015/papers/i15_1478.pdf) ),这与大多数其他基于 RNN 的大规模语音识别模型不同。 基于 CNN 的语音识别模型是可能的,但很有趣,因为对于简单的语音命令识别,我们可以在短时间内将音频信号转换为图像,或更准确地说,将频谱图转换为频率 窗口期间音频信号的分布(有关使用`wav_to_spectrogram`脚本生成的示例频谱图图像,请参见本节开头的 TensorFlow 教程链接)。 换句话说,我们可以将音频信号从其原始时域表示转换为频域表示。 进行此转换的最佳算法是**离散傅立叶变换**( **DFT** ),**快速傅立叶变换**( **FFT** )只是一种有效的选择 DFT 实现的算法。 +在移动应用中要训练和使用的模型基于纸质卷积神经网络,[用于小尺寸关键词发现](http://www.isca-speech.org/archive/interspeech_2015/papers/i15_1478.pdf),这与大多数其他基于 RNN 的大规模语音识别模型不同。 基于 CNN 的语音识别模型是可能的,但很有趣,因为对于简单的语音命令识别,我们可以在短时间内将音频信号转换为图像,或更准确地说,将频谱图转换为频率 窗口期间音频信号的分布(有关使用`wav_to_spectrogram`脚本生成的示例频谱图图像,请参见本节开头的 TensorFlow 教程链接)。 换句话说,我们可以将音频信号从其原始时域表示转换为频域表示。 进行此转换的最佳算法是**离散傅立叶变换**( **DFT** ),**快速傅立叶变换**( **FFT** )只是一种有效的选择 DFT 实现的算法。 As mobile developers, you probably don't need to understand DFT and FFT. But you'd better appreciate how all this model training works when used in mobile apps by knowing that behind the scenes of the TensorFlow simple speech commands model training that we're about to cover, it's the use of FFT, one of the top 10 algorithms in the 20th century, among other things of course, that makes the CNN-based speech command recognition model training possible. For a fun and intuitive tutorial on DFT, you can read this article: [http://practicalcryptography.com/miscellaneous/machine-learning/intuitive-guide-discrete-fourier-transform](http://practicalcryptography.com/miscellaneous/machine-learning/intuitive-guide-discrete-fourier-transform) . @@ -506,7 +506,7 @@ if(!_recorder){ [_recorder recordForDuration:1]; ``` -5. 在`AVAudioRecorderDelegate`,`audioRecorderDidFinishRecording`的委托方法中,我们使用 Apple 的扩展音频文件服务,该服务用于读写压缩和线性 PCM 音频文件,以加载记录的音频,并将其转换为模型所需的格式, 并将音频数据读入存储器。 我们在这里不会显示这部分代码,它主要基于此博客: [https://batmobile.blogs.ilrt.org/loading-audio-file-on-an-iphone/](https://batmobile.blogs.ilrt.org/loading-audio-file-on-an-iphone/) 。 在此处理之后,`floatInputBuffer`指向原始音频样本。 现在,我们可以将数据传递到工作线程中的`audioRecognition`方法中,并在 UI 线程中显示结果: +5. 在`AVAudioRecorderDelegate`,`audioRecorderDidFinishRecording`的委托方法中,我们使用 Apple 的扩展音频文件服务,该服务用于读写压缩和线性 PCM 音频文件,以加载记录的音频,并将其转换为模型所需的格式, 并将音频数据读入存储器。 我们在这里不会显示这部分代码,[它主要基于此博客](https://batmobile.blogs.ilrt.org/loading-audio-file-on-an-iphone/)。 在此处理之后,`floatInputBuffer`指向原始音频样本。 现在,我们可以将数据传递到工作线程中的`audioRecognition`方法中,并在 UI 线程中显示结果: ```py dispatch_async(dispatch_get_global_queue(0, 0), ^{ @@ -617,7 +617,7 @@ Could not create TensorFlow Graph: Not found: Op type not registered 'DecodeWav' -我们已经在前面的章节中看到了这种臭名昭著的错误,除非您知道它的真正含义,否则弄清楚该修复程序可能要花很多时间。 TensorFlow 操作由两部分组成:位于 `tensorflow/core/ops`文件夹中的称为 ops 的定义(这有点令人困惑,因为 op 既可以表示其定义,其实现,也可以表示其定义)。 和位于 `tensorflow/core/kernels`文件夹中的实现(称为内核)。 `tensorflow/contrib/makefile`文件夹中有一个名为`tf_op_files.txt`的文件,其中列出了在手动构建库时需要内置到 TensorFlow iOS 库中的操作的定义和实现。 `tf_op_files.txt`文件应该包含所有操作定义文件,如 *TensorFlow 为移动部署准备模型*( [https://www.tensorflow.org/mobile/ prepare_models](https://www.tensorflow.org/mobile/prepare_models) ),因为它们占用的空间很小。 但从 TensorFlow 1.4 或 1.5 开始,`tf_op_files.txt`文件中并未包含所有操作的 op 定义。 因此,当我们看到“未注册操作类型”错误时,我们需要找出哪个操作定义和实现文件负责该操作。 在我们的情况下,op 类型名为`DecodeWav`。 我们可以运行以下两个 Shell 命令来获取信息: +我们已经在前面的章节中看到了这种臭名昭著的错误,除非您知道它的真正含义,否则弄清楚该修复程序可能要花很多时间。 TensorFlow 操作由两部分组成:位于 `tensorflow/core/ops`文件夹中的称为 ops 的定义(这有点令人困惑,因为 op 既可以表示其定义,其实现,也可以表示其定义)。 和位于 `tensorflow/core/kernels`文件夹中的实现(称为内核)。 `tensorflow/contrib/makefile`文件夹中有一个名为`tf_op_files.txt`的文件,其中列出了在手动构建库时需要内置到 TensorFlow iOS 库中的操作的定义和实现。 `tf_op_files.txt`文件应该包含所有操作定义文件,如[为 TensorFlow 移动部署准备模型](https://www.tensorflow.org/mobile/prepare_models),因为它们占用的空间很小。 但从 TensorFlow 1.4 或 1.5 开始,`tf_op_files.txt`文件中并未包含所有操作的 op 定义。 因此,当我们看到“未注册操作类型”错误时,我们需要找出哪个操作定义和实现文件负责该操作。 在我们的情况下,op 类型名为`DecodeWav`。 我们可以运行以下两个 Shell 命令来获取信息: ```py $ grep 'REGISTER.*"DecodeWav"' tensorflow/core/ops/*.cc @@ -772,7 +772,7 @@ func audioRecorderDidFinishRecording(_ recorder: AVAudioRecorder, successfully f } ``` -如果您确实想将尽可能多的代码移植到 Swift,则可以用 Swift 替换 C 中的音频文件转换代码(请参见 [https://developer.apple.com/documentation/audiotoolbox/extended_audio_file_services](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 版本完全相同的结果。 -- GitLab