图像分类

识别图像所代表内容的任务称为图像分类。图像分类模型经过训练可以识别各种图像类别。例如,您可以训练一个模型来识别代表三种不同动物类型的照片:兔子、仓鼠和狗。TensorFlow Lite 提供了经过优化的预训练模型,您可以将其部署到您的移动应用程序中。了解更多关于使用 TensorFlow 进行图像分类的信息 此处

下图显示了图像分类模型在 Android 上的输出。

Screenshot of Android example

入门

如果您是 TensorFlow Lite 的新手,并且正在使用 Android 或 iOS,建议您探索以下示例应用程序,它们可以帮助您入门。

您可以利用 TensorFlow Lite 任务库 中的开箱即用的 API,只需几行代码即可集成图像分类模型。您还可以使用 TensorFlow Lite 支持库 构建自己的自定义推理管道。

以下 Android 示例演示了两种方法的实现,分别为 lib_task_apilib_support

查看 Android 示例

查看 iOS 示例

如果您使用的是 Android/iOS 以外的平台,或者您已经熟悉 TensorFlow Lite API,请下载入门模型和支持文件(如果适用)。

下载入门模型

模型描述

工作原理

在训练期间,图像分类模型会接收图像及其关联的标签。每个标签都是模型将学习识别的不同概念或类别的名称。

如果提供足够的训练数据(通常每个标签数百或数千张图像),图像分类模型可以学习预测新图像是否属于其训练过的任何类别。这个预测过程称为推理。请注意,您还可以使用 迁移学习 来识别新图像类别,方法是使用预先存在的模型。迁移学习不需要非常大的训练数据集。

当您随后将新图像作为输入提供给模型时,它将输出图像代表其训练过的每种动物类型的概率。例如,输出可能如下所示

动物类型 概率
兔子 0.07
仓鼠 0.02
0.91

输出中的每个数字对应于训练数据中的一个标签。将输出与模型训练过的三个标签相关联,您可以看到模型预测了图像代表狗的概率很高。

您可能会注意到所有概率(兔子、仓鼠和狗)的总和等于 1。对于具有多个类别的模型,这是一种常见的输出类型(有关更多信息,请参阅 Softmax)。

模棱两可的结果

由于输出概率总和始终为 1,如果图像没有被自信地识别为属于模型训练过的任何类别,你可能会看到概率分布在所有标签中,而没有一个值明显更大。

例如,以下可能表示模棱两可的结果

标签 概率
兔子 0.31
仓鼠 0.35
0.34
如果你的模型经常返回模棱两可的结果,你可能需要一个不同的、更准确的模型。

选择模型架构

TensorFlow Lite 为你提供各种图像分类模型,这些模型都使用原始数据集进行训练。MobileNet、Inception 和 NASNet 等模型架构在 TensorFlow Hub 上可用。为了选择最适合你的用例的模型,你需要考虑各个架构以及各种模型之间的一些权衡。一些模型权衡基于性能、准确性和模型大小等指标。例如,你可能需要一个更快的模型来构建条形码扫描器,而你可能更喜欢一个更慢、更准确的模型用于医疗影像应用程序。请注意,提供的 图像分类模型 接受不同大小的输入。对于某些模型,这在文件名中有所体现。例如,Mobilenet_V1_1.0_224 模型接受 224x224 像素的输入。所有模型都需要每个像素三个颜色通道(红色、绿色和蓝色)。量化模型每个通道需要 1 个字节,浮点模型每个通道需要 4 个字节。 AndroidiOS 代码示例演示了如何将全尺寸相机图像处理成每个模型所需的格式。

用途和限制

TensorFlow Lite 图像分类模型适用于单标签分类;也就是说,预测图像最有可能代表的单个标签。它们经过训练可以识别 1000 个图像类别。有关类别的完整列表,请参阅 模型压缩包 中的标签文件。如果你想训练一个模型来识别新的类别,请参阅 自定义模型。对于以下用例,你应该使用不同类型的模型
  • 预测图像中一个或多个物体的类型和位置(请参阅 物体检测
  • 预测图像的组成,例如主体与背景(请参阅 分割
在你的目标设备上运行启动模型后,你可以尝试使用不同的模型来找到性能、准确性和模型大小之间的最佳平衡。

自定义模型

提供的预训练模型经过训练可以识别 1000 类图像。有关类别的完整列表,请参阅 模型压缩包 中的标签文件。你还可以使用迁移学习来重新训练模型以识别原始集中不存在的类别。例如,你可以重新训练模型以区分不同种类的树木,尽管原始训练数据中没有树木。为此,你需要为每个要训练的新标签准备一组训练图像。了解如何使用 TFLite 模型制作器 或在 使用 TensorFlow 识别花卉 代码实验室中执行迁移学习。

性能基准

模型性能以模型在给定硬件上运行推理所需的时间来衡量。时间越短,模型越快。你需要的性能取决于你的应用程序。性能对于实时视频等应用程序可能很重要,在这些应用程序中,可能需要在下一帧绘制之前分析每一帧(例如,推理必须快于 33 毫秒才能在 30fps 视频流上执行实时推理)。TensorFlow Lite 量化 MobileNet 模型的性能范围从 3.7 毫秒到 80.3 毫秒。性能基准数字是使用 基准测试工具 生成的。
模型名称 模型大小 设备 NNAPI CPU
Mobilenet_V1_1.0_224_quant 4.3 Mb Pixel 3(Android 10) 6ms 13ms*
Pixel 4(Android 10) 3.3ms 5ms*
iPhone XS(iOS 12.4.1) 11ms**

* 使用 4 个线程。

** 在 iPhone 上使用 2 个线程以获得最佳性能结果。

模型准确性

准确性以模型正确分类图像的频率来衡量。例如,一个声明准确率为 60% 的模型,预计平均可以正确分类 60% 的图像。

最相关的准确性指标是 Top-1 和 Top-5。Top-1 指的是正确标签在模型输出中作为概率最高的标签出现的频率。Top-5 指的是正确标签出现在模型输出中 5 个最高概率中的频率。

TensorFlow Lite 量化 MobileNet 模型的 Top-5 准确率范围从 64.4% 到 89.9%。

模型大小

模型在磁盘上的大小与其性能和准确性有关。大小对于移动开发(它可能会影响应用程序下载大小)或在使用硬件(可用存储空间可能有限)时可能很重要。

TensorFlow Lite 量化 MobileNet 模型的大小范围从 0.5 到 3.4 MB。

进一步阅读和资源

使用以下资源来了解有关图像分类相关概念的更多信息