0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于嵌入向量的全新设备端搜索库

Tensorflowers 来源:TensorFlow 作者:TensorFlow 2022-06-02 11:30 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

今年的 I/O 大会上,我们很高兴宣布推出一个基于嵌入向量的全新设备端搜索库,让您在几毫秒的时间内即可从数百万个数据样本中快速找到相似的图像、文本或音频

693921c2-e1ae-11ec-ba43-dac502259ad0.gif

此搜索库通过使用模型,将搜索查询嵌入到表示查询语义的高维向量中来执行搜索。随后搜索库使用 ScaNN(可扩容最近邻算法)从预定义的数据库中搜索相似项目。为将搜索库应用到您的数据集,您需要使用 Model Maker Searcher API教程)构建自定义 TFLite Searcher 模型,然后使用 Task Library Searcher API(视觉/文本)将其部署到设备上。

  • ScaNN

    https://github.com/google-research/google-research/tree/master/scann

  • 教程

    https://tensorflow.google.cn/lite/tutorials/model_maker_text_searcher

  • 视觉

    https://tensorflow.google.cn/lite/inference_with_metadata/task_library/image_searcher

  • 文本

    https://tensorflow.google.cn/lite/inference_with_metadata/task_library/text_searcher

例如,使用在 COCO 上训练的 Searcher 模型,搜索查询:“A passenger plane on the runway”,系统将返回以下图像:

  • COCO

    https://cocodataset.org/#home

699b9668-e1ae-11ec-ba43-dac502259ad0.png

图 1:所有图像均来自 COCO 2014 训练和验证数据集。图像 1 由 Mark Jones Jr. 依据《版权归属许可证》提供。图像 2 由 305 Seahill 依据《版权归属-禁止演绎许可证》提供。图像 3 由 tataquax 依据《版权归属-相同方式共享许可证》提供。

在本文中,我们将向您介绍使用新 TensorFlow Lite Searcher Library 构建文本到图像搜索功能的端到端示例(根据给定文本查询检索图像)。以下是主要步骤:

1. 使用 COCO 数据集训练用于图像和文本查询编码的双编码器模型。

2. 使用 Model Maker Searcher API 创建文本到图像 Searcher 模型。

3. 使用 Task Library Searcher API 检索带有文本查询的图像。

训练双编码器模型

6a25f6c8-e1ae-11ec-ba43-dac502259ad0.png

图 2:用点积相似距离训练双编码器模型。损失函数可为相关图像和文本赋予更大的点积(阴影绿色方块)

双编码器模型由图像编码器和文本编码器组成。两个编码器分别将图像和文本映射到高维空间中的嵌入向量。双编码器模型计算图像和文本嵌入向量之间的点积,同时损失函数可为相关图像和文本赋予更大的点积(更接近),而为不相关的图像和文本赋予更小的点积(更远)。

整个训练过程受到了 CLIP 论文和本 Keras 示例的启发。图像编码器是在预训练 EfficientNet 模型的基础上构建而成,而文本编码器则是基于预训练通用语句编码器模型。

  • CLIP

    https://arxiv.org/abs/2103.00020

  • Keras 示例

    https://keras.io/examples/nlp/nl_image_search/

  • EfficientNet

    https://hub.tensorflow.google.cn/google/imagenet/efficientnet_v2_imagenet21k_ft1k_s/feature_vector/2

  • 通用语句编码器

    https://hub.tensorflow.google.cn/google/universal-sentence-encoder-lite/2

系统随后会将两个编码器的输出投影到 128 维空间并进行 L2 归一化。对于数据集,我们选择使用 COCO,因为该数据集的训练和验证分块会为每个图像人工生成字幕。请查看配套的 Colab notebook,了解训练过程的详细信息。

  • Colab notebook

    https://colab.sandbox.google.com/github/tensorflow/tflite-support/blob/master/tensorflow_lite_support/examples/colab/on_device_text_to_image_search_tflite.ipynb

双编码器模型可以从没有字幕的数据库中检索图像,因为在经过训练后,图像嵌入器可以直接从图像中提取语义,而无需人工生成的字幕。

使用 Model Maker 创建文本

到图像 Searcher 模型

6aba0ad4-e1ae-11ec-ba43-dac502259ad0.png

图 3:使用图像编码器生成图像嵌入向量,并使用 Model Maker 创建 TFLite Searcher 模型

完成对双编码器模型的训练后,我们可以使用它来创建 TFLite Searcher 模型,该模型可根据文本查询,从图像数据集中搜索最相关的图像。模型创建分为以下三大步骤:

1. 使用 TensorFlow 图像编码器生成图像数据集的嵌入向量。ScaNN 能够搜索非常庞大的数据集,因此我们结合了 COCO 2014 的训练和验证分块(总计超过 12.3 万张图像),以展示其搜索性能。相关代码请查阅此处(1)

2. 将 TensorFlow 文本编码器模型转换为 TFLite 格式。相关代码请查阅此处(2)

3. 使用 Model Maker,通过 TFLite 文本编码器和使用以下代码的图像嵌入向量创建 TFLite Searcher 模型:

  • 此处(1)

    https://colab.sandbox.google.com/github/tensorflow/tflite-support/blob/master/tensorflow_lite_support/examples/colab/on_device_text_to_image_search_tflite.ipynb#scrollTo=Bp0qBKkyu4jA

  • 此处(2)

    https://colab.research.google.com/github/tensorflow/tflite-support/blob/master/tensorflow_lite_support/examples/colab/on_device_text_to_image_search_tflite.ipynb#scrollTo=6Dzye66Xc8vE

#Configure ScaNN options. See the API doc for how to configure ScaNN. 
scann_options = searcher.ScaNNOptions(
      distance_measure='dot_product',
      tree=searcher.Tree(num_leaves=351, num_leaves_to_search=4),
      score_ah=searcher.ScoreAH(1, anisotropic_quantization_threshold=0.2))

# Load the image embeddings and corresponding metadata if any.
data = searcher.DataLoader(tflite_embedder_path, image_embeddings, metadata)

# Create the TFLite Searcher model.
model = searcher.Searcher.create_from_data(data, scann_options)

# Export the TFLite Searcher model.
model.export(
      export_filename='searcher.tflite',
      userinfo='',
      export_format=searcher.ExportFormat.TFLITE)

请在此处查阅上方代码中提到的 API doc

  • API doc

    https://tensorflow.google.cn/lite/api_docs/python/tflite_model_maker/searcher/ScaNNOptions

在创建 Searcher 模型时,Model Maker 利用 ScaNN 将嵌入向量编入索引。嵌入向量数据集首先被分为多个子集。在每个子集中,ScaNN 存储嵌入向量的量化表征。在检索时,ScaNN 会选择一些最相关的分区,并按照快速近似距离对量化表征进行评分。这个过程既(通过量化)节省了模型大小又(通过分区选择)实现了加速。请参阅深入研究资料,详细了解 ScaNN 算法。

在上方示例中,我们将数据集划分为 351 个分区(约是我们拥有的嵌入向量数量的平方根),并在检索期间搜索其中的 4 个分区,即大约是数据集的 1%。我们还将 128 维浮点嵌入向量量化为 128 个 int8 值,以节省空间。


使用 Task Library 运行推理

6b297e00-e1ae-11ec-ba43-dac502259ad0.png

图 4:使用带有 TFLite Searcher 模型的 Task Library 运行推理。推理接收查询文本并返回最近邻的元数据。我们可以在此找到对应的图像

如要使用 Searcher 模型查询图像,您只需使用 Task Library 的几行代码即可,具体如下所示:

from tflite_support.task import text

# Initialize a TextSearcher object
searcher = text.TextSearcher.create_from_file('searcher.tflite')

# Search the input query
results = searcher.search(query_text)

# Show the results
for rank in range(len(results.nearest_neighbors)):
  print('Rank #', rank, ':')
  image_id = results.nearest_neighbors[rank].metadata
  print('image_id: ', image_id)
  print('distance: ', results.nearest_neighbors[rank].distance)
  show_image_by_id(image_id)

可以尝试一下 Colab 的代码。此外,欢迎查看更多信息,了解如何使用 Task Library JavaC++ API 集成模型,尤其是在 Android 上的用法。在 Pixel 6 上,每个查询通常只需要 6 毫秒。

  • 更多信息

    https://tensorflow.google.cn/lite/inference_with_metadata/task_library/text_searcher

以下是一些示例结果:

查询:A man riding a bike

根据估算的相似距离对结果进行排序。以下是检索到的图像示例。请注意,我们仅会显示附有图像使用许可的图像。

6b85b4ae-e1ae-11ec-ba43-dac502259ad0.png

图 5:所有图像均来自 COCO 2014 训练和验证数据集。图像 1 由 Reuel Mark Delez 依据《版权归属许可证》提供。图像 2 由 Richard Masoner/Cyclelicious 依据《版权归属-相同方式共享许可证》提供。图像 3 由 Julia 依据《版权归属-相同方式共享许可证》提供。图像 4 由 Aaron Fulkerson 依据《版权归属-相同方式共享许可证》提供。图像 5 由 Richard Masoner/Cyclelicious 依据《版权归属-相同方式共享许可证》提供。图像 6 由 Richard Masoner/Cyclelicious 依据《版权归属-相同方式共享许可证》提供。

研究展望

我们将致力于启用除图像和文本之外的更多搜索类型,如音频片段。

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码器
    +关注

    关注

    45

    文章

    3903

    浏览量

    141437
  • API
    API
    +关注

    关注

    2

    文章

    2147

    浏览量

    66226
  • 向量
    +关注

    关注

    0

    文章

    55

    浏览量

    11980

原文标题:使用 TensorFlow Lite Searcher Library 实现设备端文本到图像搜索

文章出处:【微信号:tensorflowers,微信公众号:Tensorflowers】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    按图搜索1688商品API接口技术实现指南

    ​ 一、接口原理 1688的按图搜索功能基于图像特征匹配技术,核心流程如下: 用户上传商品图片 系统提取图像特征向量 在商品中进行相似度匹配 返回相似商品列表 匹配算法通常采用: $$ text
    的头像 发表于 11-11 14:18 198次阅读
    按图<b class='flag-5'>搜索</b>1688商品API接口技术实现指南

    京东拍立淘API开发指南:从零开始构建图像搜索应用

    京东图片识别搜索API(拍立淘)是基于深度学习的视觉搜索服务,通过卷积神经网络提取图像特征向量,结合近似最近邻搜索算法实现商品精准匹配‌。该技术解决了传统文字
    的头像 发表于 11-09 17:40 1948次阅读

    按图搜索1688商品的API接口

    服务(如ImageSearch)实现类似功能。本技术帖将逐步介绍原理、实现步骤和代码示例,帮助你构建一个可用的API接口。 1. 图像搜索原理 按图搜索的核心是基于内容的图像检索(CBIR),它通过提取图像特征向量并进行相似度计
    的头像 发表于 10-22 15:05 230次阅读
    按图<b class='flag-5'>搜索</b>1688商品的API接口

    在中断向量表中,数字较小的中断向量能否以 larg 中断中断向量

    在中断向量表中,数字较小的中断向量能否以 larg 中断中断向量
    发表于 08-21 08:17

    第二十六章 W55MH32 上位机搜索和配置示例

    。文章详细介绍了上位机的概念、特点、应用场景以及搜索和配置的基本工作流程,帮助读者理解其在嵌入设备管理中的实际应用价值。
    的头像 发表于 07-24 16:13 586次阅读
    第二十六章 W55MH32 上位机<b class='flag-5'>搜索</b>和配置示例

    产品搜索与过滤API接口

    这些功能。本文将详细介绍其原理、设计实现和实际应用,帮助您逐步构建可靠的API系统。 1. 什么是产品搜索与过滤API接口 产品搜索与过滤API接口是一种基于HTTP的接口,允许客户发送请求来查询产品数据,并根据特定条件筛选结
    的头像 发表于 07-24 14:35 357次阅读
    产品<b class='flag-5'>搜索</b>与过滤API接口

    Kioxia推出UFS 4.1版本嵌入式闪存设备样品

    全球存储解决方案领导者Kioxia Corporation今日宣布,已开始提供全新的通用闪存存储(2) (UFS) 4.1版本嵌入式存储设备样品,进一步巩固其在高性能存储领域的领先地位。这些
    的头像 发表于 07-10 14:35 562次阅读

    milvus向量数据的主要特性和应用场景

    Milvus 是一个开源的向量数据,专门为处理和分析大规模向量数据而设计。它适用于需要高效存储、检索和管理向量数据的应用场景,如机器学习、人工智能、计算机视觉和自然语言处理等。
    的头像 发表于 07-04 11:36 729次阅读
    milvus<b class='flag-5'>向量</b>数据<b class='flag-5'>库</b>的主要特性和应用场景

    基于STM32 HAL与标准的esp8266接入机智云方案(二)

    ,我们还将讨论如何移植HAL和标准以实现与机智云的兼容,帮助开发者更高效地完成项目的云平台接入。代码下载注意:此时手机app的该设备为网页
    的头像 发表于 05-28 18:02 1112次阅读
    基于STM32 HAL<b class='flag-5'>库</b>与标准<b class='flag-5'>库</b>的esp8266接入机智云方案(二)

    Redis 8 向量搜索实测:轻松扩展至 10 亿向量

    艾体宝Redis 8 向量搜索实测轻松支持 10 亿向量,仍保持低延迟与高吞吐。中位延迟仅200毫秒,90%精确度;处理50并发搜索请求中位延迟仅1.3秒,95%精确度。
    的头像 发表于 05-13 14:00 561次阅读
    Redis 8 <b class='flag-5'>向量</b><b class='flag-5'>搜索</b>实测:轻松扩展至 10 亿<b class='flag-5'>向量</b>

    ETAS全新嵌入式AI解决方案

    “将训练后的AI神经网络模型,自动化生成安全且高效的C代码,用于嵌入式系统” ,近日ETAS携全新的智能化工具Embedded AI Coder亮相2025上海国际车展。
    的头像 发表于 05-07 11:43 1577次阅读
    ETAS<b class='flag-5'>全新</b>的<b class='flag-5'>嵌入</b>式AI解决方案

    《AI Agent 应用与项目实战》阅读心得3——RAG架构与部署本地知识

    。RAG技术建立在向量数据的基础上,通过高维向量空间中的相似度计算来实现语义层面的匹配,这比传统的关键词搜索更能捕捉文本的深层语义关联。 第七章通过一个本地知识
    发表于 03-07 19:49

    中兴通讯推出基于AI驱动的全新网络解决方案

    在世界移动通信大会期间(MWC25巴塞罗那 当地时间3月4日上午),中兴通讯隆重举办了AIR DNA未来网络发布会,正式推出基于AI驱动的全新网络解决方案——AIR DNA。该方案以AI为核心引擎,深度重构移动网络的基因与
    的头像 发表于 03-05 16:39 1241次阅读

    labview 搜索蓝牙设备函数,搜索不到BLE设备

    请教一个问题 labview自带的搜索蓝牙设备函数,搜索不到BLE设备,这个该怎么解决?网上有评论说是自带的函数不支持搜索4.0以上的蓝牙
    发表于 02-20 10:04

    豆神AI Windows PC1.0版本登陆微软商城

    豆神 Al Windows PC 1.0 版本已于 12 月初正式登陆微软商城。作为定制版本的核心亮点,豆神教育首次面向 Windows用户全面推出为中国青少年提供大语文领域素质能力培养的数字内容产品和 AI智能学习工具 PC 产品,具备实时
    的头像 发表于 12-10 11:16 1490次阅读