基于 TensorFlow.js 的迁移学习图像分类器

引 言

在本文中,你将学习如何建立一个简单的“可学习机器”。这是一个自定义的图像分类器,你将使用 TensorFlow.js 这个强大而灵活的 Javascript 机器学习库,在浏览器中即时训练。首先,你将加载并运行一个名为 MobileNet 的流行的预训练模型来在浏览器中进行图像分类。然后,你将使用“迁移学习”技术,这项技术将使用预训练好的 MobileNet 模型为你的应用定制以及引导训练。

你将学到什么?

√ 如何加载预训练的 MobileNet 模型并对新数据进行预测

√ 如何通过网络摄像头进行预测

√ 如何使用 MobileNet 模型的内部激活值,在一套由网络摄像头动态定义的新类上做迁移学习

让我们开始吧!

准备

你将需要如下准备:

1.Chrome 或其他现代浏览器的最新版本。

2.一个文本编辑器,可以在你的机器上本地运行,也可以通过 Codepen 或 Glitch 等在 Web 上运行。

3.了解 HTML、CSS、JavaScripe 和 Chrome 开发者工具(或你首选浏览器的开发者工具)。

加载 TensorFlow.js 和 MobileNet 模型

在编辑器中打开 index.html 并添加以下内容:

在浏览器中设置 MobileNet 用于预测

接下来,在代码编辑器中打开/创建 index.js 文件,添加以下代码:

在浏览器中测试 MobileNet 的预测

如果要运行该网页,你只需要在 Web 浏览器中打开 index.html 即可。如果你正在使用云控制台,只需刷新预览页面。

你应该会在开发者工具的 JavaScipt 控制台中看到一张狗的照片,这是 MobileNet 的预测结果!注意,这可能需要一点时间来下载模型,请耐心等待!

这个图像是否被正确分类?

值得注意的是,这也适用于手机!

通过网络摄像头图像在浏览器中执行 MobileNet 预测

现在,让我们让它更具交互性和实时性。让我们设置网络摄像头来预测由网络摄像头传输的图像。

首先要设置网络摄像头的视频元素。打开 index.html 文件,在

部分中添加如下行,并删除我们用于加载狗图像的 标签。

打开 index.js 文件并将 webcamElement 添加到文件的最顶部。

在同一个 index.js 文件中,在调用 “app()” 函数之前添加网络摄像头的设置函数:

现在,在之前添加的 app() 函数中,你可以删除通过图像预测的部分,用一个无限循环,通过网络摄像头预测代替。

如果你在网页中打开控制台,现在你应该会看到 MobileNet 的预测和网络摄像头收集到的每一帧图像。这可能有些荒谬,因为 ImageNet 数据集看起来不太像出现在网络摄像头中的图像。你可以把狗的照片放在你的手机上,再放在笔记本电脑的摄像头前来测试这一点。

在 MobileNet 预测的基础上添加一个自定义的分类器

现在,让我们把它变得更加实用。我们使用网络摄像头动态创建一个自定义的 3 对象的分类器。我们将通过 MobileNet 进行分类,但这次我们将使用特定网络摄像头图像在模型的内部表示(激活值)来进行分类。

我们将使用一个叫做 "K-Nearest Neighbors Classifier" 的模块,他将有效的让我们把摄像头采集的图像(实际上是 MobileNet 中的激活值)分成不同的类别,当用户要求做出预测时,我们只需选择拥有与待预测图像最相似的激活值的类即可。

在 index.html 的

标签的末尾添加 KNN 分类器的导入(你仍然需要 MobileNet,所以不要删除它的导入):

index.html 视频部分下面添加三个按钮。这些按钮将用于向模型添加训练图像。

index.js 的顶部,创建一个分类器

更新 app 函数

现在,当你加载 index.html

页面时,你可以使用常用对象或面部表情/手势为这三个类中的每一个类捕获图像。每次单击其中一个 "Add" 按钮,就会向该类添加一个图像作为训练实例。当你这样做的时候,模型会继续预测网络摄像头的图像,并实时显示结果。

可选项:扩展示例

现在尝试添加另一个代表没有动作的类!

你学到了什么

你使用 Tensorflow.js 实现了一个简单的机器学习 Web 应用程序。你加载并使用了一个预训练过的 MobileNet 模型来对来自网络摄像头中的图像进行分类然后自定义了模型,将图像分类为三个自定义的类别。

原文链接:https://codelabs.developers.google.com/codelabs/tensorflowjs-teachablemachine-codelab/#0

为了让大家储备技术,由黑胡桃实验室和 TensorFlow 团队工程师共同开发的 TensorFlow 速成课程已开放给大家学习!大家务必使用电脑访问 https://blackwalnut.tech/tfboost/introduce ,页面底端的通关指南会帮助你学习,当然你也可以参考个人中心的任务列表一步一步前进。如果你最终完成了任务列表的全部任务,就可获得 TensorFlow Boost 学习认证证书!