图像分类

识别图像所表示内容的任务称为图像分类。我们可以对图像分类模型进行训练以识别各类图像。例如,您可以训练模型来识别表示三种不同类型动物的照片:兔子、仓鼠和狗。TensorFlow Lite 提供经过优化的预训练模型,您可以将其部署在您的移动应用中。请点击这里了解有关使用 TensorFlow 进行图像分类的更多信息。

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

Screenshot of Android example

注:(1) 要集成现有模型,请尝试 TensorFlow Lite Task Library。(2) 要自定义模型,请尝试 TensorFlow Lite Model Maker

开始

如果您是 TensorFlow Lite 新用户,并且使用的是 Android 或 iOS,我们建议您研究以下可以帮助您入门的示例应用。

利用 TensorFlow Lite Task Library 中开箱即用的 API,只需几行代码即可集成图像分类模型。您也可以使用 TensorFlow Lite Support Library 构建自己的自定义推断流水线

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

使用和局限性

TensorFlow Lite 图像分类模型对于单标签分类很有用;即,预测图像最可能表示哪个标签。这些模型在训练后可以识别 1000 类图像。有关完整的类列表,请参阅模型 zip 文件中的标签文件。 如果您想要训练模型来识别新类,请参阅自定义模型。 针对以下用例,您应该使用不同的模型:
  • 预测图像中的一个或多个目标的类型和位置(请参阅目标检测
  • 预测图像的组成,例如主体与背景(请参阅分割
在您的目标设备上运行入门模型后,您可以尝试其他模型,在性能、准确率和模型大小之间找到最佳平衡。

自定义模型

我们提供的预训练模型在训练后可以识别 1000 类图像。有关完整的类列表,请参阅模型 zip 文件中的标签文件。 您也可以使用迁移学习重新训练一个模型来识别原始集中不存在的类。例如,您可以重新训练一个模型来区分不同品种的树,尽管原始训练数据中并没有树。为此,您的每个要训练的新标签都需要一组训练图像。 了解如何使用 TFLite Model Maker 执行迁移学习,或使用 TensorFlow Codelab 识别花卉中执行迁移学习。

性能基准

模型性能是根据模型在给定硬件上运行推断所需的时间量来衡量的。时间越短,模型的速度就越快。 您需要的性能取决于您的应用。对实时视频等应用,性能可能非常重要,因为需要在下一帧绘制完之前及时分析每一帧(例如,推断用时必须少于 33 ms 才能实时推断 30fps 视频流)。 经过量化的 TensorFlow Lite MobileNet 模型的性能范围为 3.7ms 至 80.3 ms。 性能基准数值使用基准测试工具生成。
模型名称 模型大小 设备 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 是指模型输出中正确标签出现在概率最高前五名的频率。

经过量化的 TensorFlow Lite MobileNet 模型的 Top-5 准确率范围为 64.4 至 89.9%。

模型规模

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

经过量化的 TensorFlow Lite MobileNet 模型的大小范围为 0.5 至 3.4 MB。

补充阅读和资源

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