1. 准备工作
在上一个 Codelab 中,您为 Android 和 iOS 创建了一个应用,该应用使用一个基本图像标签模型,可识别数百个图像类别。它以非常通用的方式识别花卉图片,例如花瓣、花朵、植物和天空。
如需更新应用以识别特定花卉(例如雏菊或玫瑰),您需要一个自定义模型,该模型经过大量您要识别的每种花卉类型的示例训练。
前提条件
- 此学习路线中的上一个 Codelab。
您将构建和学习的内容
- 如何使用 TensorFlow Lite Model Maker 训练图像分类器自定义模型。
所需条件
- 无需任何特定硬件,一切都可以在浏览器中使用 Google Colab 完成。
2. 开始使用
所有后续代码都已为您准备好,您可以在此处使用 Google Colab 执行这些代码 here。如果您无法访问 Google Colab,可以克隆代码库并使用名为 CustomImageClassifierModel.ipynb 的笔记本,该笔记本位于 ImageClassificationMobile->colab 目录中。
如果您有大量特定花卉的示例,则可以使用 TensorFlow Lite Model Maker 轻松训练模型来识别这些花卉。
最简单的方法是创建一个包含图片的 .zip 或 .tgz 文件,并按目录进行排序。例如,如果您使用雏菊、蒲公英、玫瑰、向日葵和郁金香的图片,可以按如下方式将它们整理到目录中:

将这些图片压缩并托管在服务器上,您就可以使用它们来训练模型了。在本实验的其余部分中,您将使用一个已为您准备好的模型。
本实验将假定您使用 Google Colab 训练模型。您可以在 colab.research.google.com 中找到 Colab。如果您使用其他环境,可能需要安装许多依赖项,尤其是 TensorFlow。
3. 安装和导入依赖项
- 安装 TensorFlow Lite Model Maker。您可以使用 pip install 执行此操作。末尾的 &> /dev/null 只是抑制输出。Model Maker 会输出大量与当前任务无关的内容。这些内容已被抑制,以便您可以专注于手头的任务。
# Install Model maker
!pip install -q tflite-model-maker &> /dev/null
- 接下来,您需要导入需要使用的库,并确保您使用的是 TensorFlow 2.x:
# Imports and check that we are using TF2.x
import numpy as np
import os
from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import image_classifier
from tflite_model_maker.image_classifier import DataLoader
import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')
现在环境已准备就绪,可以开始创建模型了!
4. 下载并准备数据
如果您的图片整理到文件夹中,并且这些文件夹已压缩,那么如果您下载该压缩文件并将其解压缩,系统会自动根据图片所在的文件夹为图片添加标签。此目录将引用为 data_path。
data_path = tf.keras.utils.get_file(
'flower_photos',
'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
untar=True)
然后,可以将此数据路径加载到神经网络模型中,以便使用 TensorFlow Lite Model Maker 的 ImageClassifierDataLoader 类进行训练。只需将其指向文件夹即可。
使用机器学习训练模型时,一个重要因素是不要使用所有数据进行训练。 保留一些数据,以便使用模型之前未见过的数据测试模型。使用从 ImageClassifierDataLoader 返回的数据集的拆分方法可以轻松实现此目的。通过向其传递 0.9,您将获得 90% 的训练数据和 10% 的测试数据:
data = DataLoader.from_folder(data_path)
train_data, test_data = data.split(0.9)
现在,您的数据已准备就绪,您可以使用它来创建模型。
5. 创建图像分类器模型
Model Maker 抽象隐藏了神经网络设计方面的许多细节,因此您无需处理网络设计,以及卷积、密集、ReLU、展平、损失函数和优化器等问题。对于默认模型,您只需使用一行代码,通过使用提供的数据训练神经网络来创建模型:
model = image_classifier.create(train_data)
运行此代码后,您将看到类似于以下内容的输出:
Model: "sequential_2"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
hub_keras_layer_v1v2_2 (HubK (None, 1280) 3413024
_________________________________________________________________
dropout_2 (Dropout) (None, 1280) 0
_________________________________________________________________
dense_2 (Dense) (None, 5) 6405
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________
None
Epoch 1/5
103/103 [===] - 15s 129ms/step - loss: 1.1169 - accuracy: 0.6181
Epoch 2/5
103/103 [===] - 13s 126ms/step - loss: 0.6595 - accuracy: 0.8911
Epoch 3/5
103/103 [===] - 13s 127ms/step - loss: 0.6239 - accuracy: 0.9133
Epoch 4/5
103/103 [===] - 13s 128ms/step - loss: 0.5994 - accuracy: 0.9287
Epoch 5/5
103/103 [===] - 13s 126ms/step - loss: 0.5836 - accuracy: 0.9385
第一部分显示的是您的模型架构。Model Maker 在后台执行的操作称为迁移学习,它使用现有的预训练模型作为起点,并仅使用该模型学习到的有关图片构造方式的内容,并将其应用于理解这 5 种花卉。 您可以在第一行中看到这一点,该行内容如下:
hub_keras_layer_v1v2_2 (HubK (None, 1280) 3413024
关键是“Hub”一词,它告诉我们此模型来自 TensorFlow Hub。默认情况下,TensorFlow Lite Model Maker 使用名为“MobileNet”的模型,该模型旨在识别 1000 种图片。这里的逻辑是,它使用的方法(通过学习“特征”来区分 1000 个类别)可以重复使用。相同的“特征”可以映射到我们的 5 种花卉类别,因此无需从头开始学习。
该模型经历了 5 个周期,其中一个周期是完整的训练周期,神经网络会尝试将图片与其标签进行匹配。在经过大约 1 分钟的 5 个周期后,该模型在训练数据上的准确率达到了 93.85%。鉴于有 5 个类别,随机猜测的准确率为 20%,因此这是一个进步!(它还会报告一个“损失”数字,但您现在可以放心地忽略它。)
之前,您已将数据拆分为训练数据和测试数据,因此您可以使用 model.evaluate 在测试数据上评估网络在之前未见过的数据上的表现,从而了解网络在真实世界中的表现:
loss, accuracy = model.evaluate(test_data)
这将输出类似以下内容:
12/12 [===] - 5s 115ms/step - loss: 0.6622 - accuracy: 0.8801
请注意此处的准确率。准确率为 88.01%,因此在真实世界中使用默认模型时,应预期达到此准确率。对于您在大约一分钟内训练的默认模型来说,这个准确率还不错。当然,您可能可以进行大量调整来改进模型,而这本身就是一门科学!
6. 导出模型
现在模型已训练完成,下一步是以移动应用可以使用的 .tflite 格式导出模型。Model Maker 提供了一种简单的导出方法,您可以使用该方法,只需指定要输出到的目录即可。
代码如下:
model.export(export_dir='/mm_flowers')
如果您在 Google Colab 中运行此代码,则可以点击屏幕左侧的文件夹图标来查看模型:

在此处,您将获得当前目录的列表。使用指示的按钮“向上”移动一个目录:

在代码中,您指定导出到 mm_flowers 目录。打开该目录,您将看到一个名为“model.tflite”的文件。这是您训练的模型。

选择该文件,您将在右侧看到 3 个点弹出。点击这些点以获取上下文菜单,然后您可以从中下载模型。

片刻之后,您的模型将下载到您的下载文件夹中。
7. 恭喜
您现在可以将其集成到移动应用中了!您将在下一个实验中执行此操作。