借助 MediaPipe Object Detector 任务,您可以检测图片或视频中多类对象的存在和位置。例如,对象检测器可以定位图片中的狗。此任务使用机器学习 (ML) 模型对图片数据执行操作,接受静态数据或连续视频串流作为输入并输出检测结果列表。每个检测结果代表图片或视频中出现的一个对象。
开始使用
要开始使用此任务,请遵循您所使用的平台的以下实现指南之一:
这些平台专用指南将引导您完成此任务的基本实现,包括推荐的模型以及包含推荐配置选项的代码示例。
任务详情
本部分介绍此任务的功能、输入和输出。
特性
- 输入图片处理 - 处理包括图片旋转、调整大小、归一化和颜色空间转换。
- 标签地图语言区域 - 设置显示名称使用的语言
- 分数阈值 - 根据预测分数过滤结果。
- Top-k 检测 - 过滤数字检测结果。
- 标签许可名单和拒绝名单 - 指定检测到的类别。
任务输入 | 任务输出 |
---|---|
Object Detector API 接受以下任一数据类型的输入:
|
Object Detector API 会针对检测到的对象输出以下结果:
|
配置选项
此任务具有以下配置选项:
选项名称 | 说明 | 值范围 | 默认值 |
---|---|---|---|
running_mode |
设置任务的运行模式。有三种模式: IMAGE:单张图片输入的模式。 VIDEO:视频的已解码帧的模式。 LIVE_STREAM:输入数据(例如来自摄像头)的直播的模式。在此模式下,必须调用 resultListener,以设置用于异步接收结果的监听器。 |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
display_names |
设置任务模型元数据中提供的显示名(如果有)要使用的标签语言。英语的默认值为 en 。您可以使用 TensorFlow Lite Metadata Writer API 向自定义模型的元数据添加本地化标签。 |
语言区域代码 | en |
max_results |
设置要返回的得分最高的检测结果的数量上限(可选)。 | 任何正数 | -1(返回所有结果) |
score_threshold |
设置预测分数阈值,以替换模型元数据中提供的阈值(如果有)。低于此值的结果会被拒绝。 | 任意浮点数 | 未设置 |
category_allowlist |
设置允许的类别名称的可选列表。如果为非空,则会过滤掉类别名称未在此集中的检测结果。系统会忽略重复或未知的类别名称。
此选项与 category_denylist 互斥,如果同时使用这两者,就会引发错误。 |
任何字符串 | 未设置 |
category_denylist |
设置不允许使用的类别名称的可选列表。如果非空,类别名称在此集合中的检测结果将被滤除。系统会忽略重复或未知的类别名称。此选项与 category_allowlist 互斥,同时使用这两者会导致错误。 |
任何字符串 | 未设置 |
模型
Object Detector API 需要下载对象检测模型并将其存储在项目目录中。如果您还没有模型,请先使用推荐的默认模型。本部分介绍的其他模型会在延迟时间和准确率之间进行权衡。
EfficientDet-Lite0 模型(推荐)
EfficientDet-Lite0 模型使用具有 320x320 输入大小和 BiFPN 特征网络的 EfficientNet-Lite0 骨干网络。该模型是使用 COCO 数据集训练的,COCO 数据集是一种大型对象检测数据集,其中包含 150 万个对象实例和 80 个对象标签。请参阅支持的标签的完整列表。EfficientDet-Lite0 提供 int8、float16 或 float32。推荐使用此模型,因为它能够在延迟时间和准确率之间取得平衡。它既准确又轻量,对于许多使用场景来说都足够。
模型名称 | 输入形状 | 量化类型 | Versions |
---|---|---|---|
EfficientDet-Lite0 (int8) | 320 x 320 | int8 | 最新动态 |
EfficientDet-Lite0(浮点数 16) | 320 x 320 | 浮点数 16 | 最新动态 |
EfficientDet-Lite0(浮点数 32) | 320 x 320 | 无 (float32) | 最新动态 |
EfficientDet-Lite2 模型
EfficientDet-Lite2 模型使用具有 448x448 输入大小和 BiFPN 特征网络的 EfficientNet-Lite2 骨干网络。该模型是使用 COCO 数据集训练的,COCO 数据集是一种大型对象检测数据集,其中包含 150 万个对象实例和 80 个对象标签。请参阅支持的标签的完整列表。EfficientDet-Lite2 作为 int8、float16 或 float32 模型提供。此模型通常比 EfficientDet-Lite0 更准确,但速度也更慢且内存占用量更大。此模型适用于准确性比速度和规模更重要的用例。
模型名称 | 输入形状 | 量化类型 | Versions |
---|---|---|---|
EfficientDet-Lite2 (int8) | 448 x 448 | int8 | 最新动态 |
EfficientDet-Lite2(浮点数 16) | 448 x 448 | 浮点数 16 | 最新动态 |
EfficientDet-Lite2(浮点数 32) | 448 x 448 | 无 (float32) | 最新动态 |
SSD MobileNetV2 型号
SSD MobileNetV2 模型使用具有 256x256 输入大小和 SSD 功能网络的 MobileNetV2 骨干网络。该模型是使用 COCO 数据集训练的,COCO 数据集是一种大型对象检测数据集,其中包含 150 万个对象实例和 80 个对象标签。请参阅支持的标签的完整列表。SSD MobileNetV2 提供 int8 和 float 32 模式。 此模型比 EfficientDet-Lite0 更快、更轻量,但通常也不太准确。此模型适用于需要快速、轻量级模型(牺牲一定程度的准确度)的用例。
模型名称 | 输入形状 | 量化类型 | Versions |
---|---|---|---|
SSDMobileNet-V2 (int8) | 256 x 256 | int8 | 最新动态 |
SSDMobileNet-V2(浮点数 32) | 256 x 256 | 无 (float32) | 最新动态 |
模型要求和元数据
如果您决定构建用于此任务的模型,本部分介绍了自定义模型的要求。自定义模型必须采用 TensorFlow Lite 格式,并且必须包含描述模型操作参数的元数据。
设计要求
输入 | 形状 | 说明 |
---|---|---|
输入图片 | 形状为 [1, height, width, 3] 的 Float32 张量 | 归一化输入图像。 |
输出 | 形状 | 说明 |
---|---|---|
detection_boxes |
形状为 [1, num_boxes, 4] 的 Float32 张量 | 检测到的每个对象的框位置。 |
detection_classes |
形状为 [1, num_boxes] 的 Float32 张量 | 每个检测到的对象的类名称索引。 |
detection_scores |
形状为 [1, num_boxes] 的 float32 张量 | 每个检测到的对象的预测分数。 |
num_boxes |
大小为 1 的 Float32 张量 | 检测到的框的数量。 |
元数据要求
参数 | 说明 | 说明 |
---|---|---|
input_norm_mean |
输入张量归一化中使用的平均值。 | 归一化输入图像。 |
input_norm_std |
输入张量归一化中使用的字段归一化。 | 检测到的每个对象的框位置。 |
label_file_paths |
类别张量标签文件的路径。如果模型没有任何标签文件,则传递一个空列表。 | 每个检测到的对象的类名称索引。 |
score_calibration_md |
分类张量中得分校准操作的相关信息。如果模型未使用得分 校准,则此参数不是必填项。 |
每个检测到的对象的预测分数。 |
num_boxes |
大小为 1 的 Float32 张量 | 检测到的框的数量。 |
任务基准
以下是上述预训练模型的任务基准。延迟时间结果是 Pixel 6 使用 CPU / GPU 时的平均延迟时间。
模型名称 | CPU 延迟时间 | GPU 延迟时间 |
---|---|---|
EfficientDet-Lite0 float32 模型 | 61.30 毫秒 | 27.83 毫秒 |
EfficientDet-Lite0 float16 模型 | 53.97 毫秒 | 27.97 毫秒 |
EfficientDet-Lite0 int8 模型 | 29.31 毫秒 | - |
EfficientDet-Lite2 float32 模型 | 197.98 毫秒 | 41.15 毫秒 |
EfficientDet-Lite2 float16 模型 | 198.77 毫秒 | 47.31 毫秒 |
EfficientDet-Lite2 int8 模型 | 70.91 毫秒 | - |
SSD MobileNetV2 float32 型号 | 36.30 毫秒 | 24.01 毫秒 |
SSD MobileNetV2 float16 型号 | 37.35 毫秒 | 28.16 毫秒 |