借助 MediaPipe Image Embedder 任务,您可以创建图片的数字表示法,这对于完成各种基于机器学习的图片任务非常有用。此功能通常用于使用余弦相似度等数学比较技术比较两张图片的相似度。此任务将机器学习 (ML) 模型作为静态数据或连续数据流来处理图片数据,并以浮点或量化形式输出图片数据的数值表示法,即一系列高维特征向量(也称为嵌入向量)。
开始使用
如需开始使用此任务,请按照适用于目标平台的以下任一实现指南操作。以下平台专用指南将引导您使用推荐的模型完成此任务的基本实现,并提供包含推荐配置选项的代码示例:
任务详情
本部分介绍了此任务的功能、输入、输出和配置选项。
功能
- 输入图片处理 - 处理包括图片旋转、调整大小、归一化和颜色空间转换。
- 感兴趣的区域 - 对图片的某个区域(而非整个图片)执行嵌入。
- 嵌入相似度计算 - 内置实用函数,用于计算两个特征向量之间的余弦相似度
- 量化 - 支持对特征向量进行标量量化。
任务输入 | 任务输出 |
---|---|
输入可以是以下数据类型之一:
|
图片嵌入器会输出一个嵌入列表,其中包含:
|
配置选项
此任务具有以下配置选项:
选项名称 | 说明 | 值范围 | 默认值 |
---|---|---|---|
running_mode |
设置任务的运行模式。共有三种模式: IMAGE:适用于单张图片输入的模式。 视频:视频的解码帧的模式。 LIVE_STREAM:输入数据(例如来自摄像头)的直播模式。在此模式下,必须调用 resultListener 以设置监听器以异步接收结果。 |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
l2_normalize |
是否使用 L2 范数对返回的特征向量进行归一化。 仅当模型尚不包含原生 L2_NORMALIZATION TFLite 运算时,才应使用此选项。在大多数情况下,已经是这种情况,因此 L2 归一化是通过 TFLite 推理实现的,而无需此选项。 | Boolean |
False |
quantize |
是否应通过标量量化将返回的嵌入量化为字节。系统会隐式假定嵌入的范数为 1,因此任何维度的值都保证在 [-1.0, 1.0] 之间。如果不是这种情况,请使用 l2_normalize 选项。 | Boolean |
False |
result_callback |
设置结果监听器,以便在图片嵌入器处于直播模式时异步接收嵌入结果。仅当运行模式设置为 LIVE_STREAM 时才能使用 |
不适用 | 未设置 |
模型
图片嵌入器需要下载图片嵌入模型并将其存储在项目目录中。开始使用此任务进行开发时,请先使用针对目标平台的默认推荐模型。其他可用模型通常需要在性能、准确性、分辨率和资源要求之间进行权衡,在某些情况下,还包含其他功能。
MobileNetV3 模型
此模型系列使用 MobileNet V3 架构,并使用 ImageNet 数据进行训练。此模型为卷积层中的深度(特征数量)使用了 0.75 的乘数,以调整准确性与延迟时间之间的权衡。此外,MobileNet V3 有两种不同的大小(小型和大型),可让网络适应低资源使用情形或高资源使用情形。
模型名称 | 输入形状 | 量化类型 | 版本 |
---|---|---|---|
MobileNet-V3(小) | 224 x 224 | 无(float32) | 最新 |
MobileNet-V3(大型) | 224 x 224 | 无(float32) | 最新 |
任务基准
下面是基于上述预训练模型的整个流水线的任务基准。延迟时间结果是使用 CPU / GPU 在 Pixel 6 上的平均延迟时间。
模型名称 | CPU 延迟时间 | GPU 延迟时间 |
---|---|---|
MobileNet-V3(小) | 3.94 毫秒 | 7.83 毫秒 |
MobileNet-V3(大型) | 9.75 毫秒 | 9.08 毫秒 |