图片分类任务指南

一只被正确标记为火烈鸟的动物,置信度为 95%

借助 MediaPipe 图片分类器任务,您可以对图片进行分类。您可以使用此任务来确定图片在训练时定义的一组类别中代表的是什么。此任务会使用机器学习 (ML) 模型作为静态数据或连续数据流对图片数据进行操作,并输出按概率得分从高到低排序的可能类别列表。

试试吧!

开始使用

如需开始使用此任务,请按照适用于目标平台的以下任一实现指南操作。以下平台专用指南将引导您使用推荐的模型完成此任务的基本实现,并提供包含推荐配置选项的代码示例:

任务详情

本部分介绍了此任务的功能、输入、输出和配置选项。

功能

  • 输入图片处理 - 处理包括图片旋转、调整大小、归一化和颜色空间转换。
  • 感兴趣的区域 - 对图片的某个区域(而非整个图片)执行分类。
  • 标签映射语言区域 - 设置显示名称所使用的语言。
  • 得分阈值 - 根据预测得分过滤结果。
  • 前 k 个分类 - 限制分类结果的数量。
  • 标签许可名单和禁止名单 - 指定要分类的类别。
任务输入 任务输出
输入可以是以下数据类型之一:
  • 静态图片
  • 解码后的视频帧
  • 实时视频画面
图片分类器会输出包含以下内容的类别列表:
  • 类别索引:模型输出中类别的索引
  • 得分:此类别的置信度得分,通常为介于 [0,1] 之间的概率
  • 类别名称(可选):TFLite 模型元数据中指定的类别名称(如果有)
  • 类别显示名称(可选):TFLite 模型元数据中指定的类别显示名称,采用通过显示名称语言区域选项指定的语言(如果有)

配置选项

此任务具有以下配置选项:

选项名称 说明 值范围 默认值
running_mode 设置任务的运行模式。共有三种模式:

IMAGE:适用于单张图片输入的模式。

视频:视频的解码帧的模式。

LIVE_STREAM:输入数据(例如来自摄像头)的直播模式。在此模式下,必须调用 resultListener 以设置监听器以异步接收结果。
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
display_names_locale 设置要为任务模型的元数据(如果有)中提供的显示名称使用的标签语言。默认值为 en(英语)。您可以使用 TensorFlow Lite Metadata Writer API 向自定义模型的元数据添加本地化标签 语言区域代码 en
max_results 设置可选的要返回的得分最高的分类结果的数量上限。如果小于 0,则会返回所有可用的结果。 任何正数 -1
score_threshold 设置预测得分阈值,该阈值会替换模型元数据中提供的阈值(如果有)。低于此值的结果将被拒绝。 任何浮点数 未设置
category_allowlist 设置允许的类别名称的可选列表。如果不为空,则系统会滤除类别名称不在该集合中的分类结果。系统会忽略重复或未知的类别名称。此选项与 category_denylist 互斥,同时使用这两个选项会导致错误。 任何字符串 未设置
category_denylist 设置不允许的类别名称的可选列表。如果不为空,系统会滤除类别名称在此集合中的分类结果。系统会忽略重复或未知的类别名称。此选项与 category_allowlist 互斥,同时使用这两个选项会导致错误。 任何字符串 未设置
result_callback 设置结果监听器,以便在图像分类器处于实时流模式时异步接收分类结果。仅当运行模式设置为 LIVE_STREAM 时才能使用 不适用 未设置

模型

图片分类器需要下载图片分类模型并将其存储在项目目录中。开始使用此任务进行开发时,请先使用针对目标平台的默认推荐模型。其他可用模型通常需要在性能、准确性、分辨率和资源要求之间进行权衡,在某些情况下,还包含额外的功能。

EfficientNet-Lite0 模型采用 EfficientNet 架构,使用 ImageNet 进行训练,可识别 1,000 个类别,例如树木、动物、食物、车辆、人等。请参阅受支持标签的完整列表。EfficientNet-Lite0 提供 int8 和 float 32 模型。我们建议使用此模型,因为它能在延迟时间和准确性之间取得平衡。它既准确又轻量,适用于许多用例。

模型名称 输入形状 量化类型 版本
EfficientNet-Lite0 (int8) 224 x 224 int8 最新
EfficientNet-Lite0 (float 32) 224 x 224 无(float32) 最新

EfficientNet-Lite2 模型

EfficientNet-Lite2 模型采用 EfficientNet 架构,使用 ImageNet 进行训练,可识别 1,000 个类别,例如树木、动物、食物、车辆、人等。请参阅受支持标签的完整列表。EfficientNet-Lite2 提供 int8 和 float 32 模型。此模型通常比 EfficientNet-Lite0 更准确,但速度也更慢,占用的内存也更多。此模型适用于准确性高于速度或大小的用例。

模型名称 输入形状 量化类型 版本
EfficientNet-Lite2 (int8) 224 x 224 int8 最新
EfficientNet-Lite2(浮点 32) 224 x 224 无(float32) 最新

任务基准

下面是基于上述预训练模型的整个流水线的任务基准。延迟时间结果是使用 CPU / GPU 在 Pixel 6 上的平均延迟时间。

模型名称 CPU 延迟时间 GPU 延迟时间
EfficientNet-Lite0(浮点数 32) 23.52 毫秒 18.90 毫秒
EfficientNet-Lite0 (int8) 10.08 毫秒 -
EfficientNet-Lite2(浮点 32) 44.17 毫秒 22.20 毫秒
EfficientNet-Lite2 (int8) 19.43 毫秒 -

自定义模型

如果您想改进或更改提供的模型的功能,可以在此任务中使用自定义机器学习模型。您可以使用 Model Maker 修改现有模型,也可以使用 TensorFlow 等工具构建模型。与 MediaPipe 搭配使用的自定义模型必须采用 TensorFlow Lite 格式,并且必须包含描述模型操作参数的特定metadata。您应先考虑使用 Model Maker 修改此任务提供的模型,然后再构建自己的模型。

如果您有兴趣使用自己的数据集创建自定义图片分类器,请先参阅图片分类器自定义教程。