发布于: Jan 7, 2022

机器学习人工智能相结合给我们的生活带来了诸多便利,今天我们将介绍如何利用机器学习提升视觉搜索能力。有时候,我们可能很难找到合适的词汇来描述自己想要寻找的东西。正如俗语所言,一图抵千言。一般来说,展示真实示例或者图像,对于目标的表达效果确实要比纯文字描述好上不少。这一点,在使用搜索引擎查找所需内容时显得尤其突出。接下来我们将在一个小时的演练中从零开始构建一款视觉图像搜索应用程序,其中包含用于提供视觉搜索结果的全栈 Web 应用程序。 视觉搜索能够提高客户在零售业务与电子商务中的参与度,这种功能对于时尚及家庭装饰零售商而言尤其重要。视觉搜索允许零售商向购物者推荐与主题或特定造型相关的商品,这是传统纯文本查询所无法做到的。根据 Gartner 公司的报告,2021 年,重新设计网站以支持视觉及语音搜索的早期采用者品牌,将推动数字商务收入增长 30%

视觉搜索的高级示例

Amazon SageMaker 是一项全托管服务,可为每位开发人员及数据科学家提供快速构建、训练以及部署机器学习(ML)模型的能力。Amazon Elasticsearch Service (Amazon ES) 同样为全托管服务,可帮助您轻松以符合成本效益的方式大规模部署、保护并运行ElasticsearchAmazon ES 还提供k最近邻(KNN)搜索,能够在相似性用例中增强搜索能力,适用范围涵盖产品推荐、欺诈检测以及图像、视频与语义文档检索。KNN 使用轻量化且效率极高的非度量空间库(NMSLIB)构建而成,可在数千个维度上对数十亿个文档进行大规模、低延迟最近邻搜索,且实现难度与常规 Elasticsearch 查询完全一致。

下图所示,为这套视觉搜索架构的基本形式。

building-a-visual-search-application-with-amazon-sagemaker-and-amazon-es1

解决方案概述

视觉搜索架构的实现分为两个阶段:

  • 通过示例图像数据集在 Amazon ES上构建参考KNN索引。
  • Amazon SageMaker 端点提交一份新图像,并由 Amazon ES 返回相似图像。

创建 KNN 推理索引

在此步骤中,托管在 Amazon SageMaker 当中、且经过预先训练的Resnet50 模型将从每幅图像中提取 2048 个特征向量。每个向量都被存储在 Amazon ES 域的 KNN 索引当中。在本用例中,我们将使用来自 FEIDEGGER 的图像——FEIDEGGER 是一套 Zalando 研究数据集,其中包含 8732 张高分辨率时尚图像。 

下图所示, KNN 索引的创建工作流程。

整个流程包含以下操作步骤:

  • 用户与 Amazon SageMaker noteoobk 实例上的 Jupyter notebook 进行交互。
  • Keras 处下载经过预先训练的 Resnet50 深层神经网络,删除最后一个分类器层,并对新的模型工件进行序列化,而后存储在 Amazon Simple Storage Service (Amazon S3) 当中。该模型负责在 Amazon SageMaker 实时端点上启动 TensorFlow Serving API
  • 将时尚图像推送至端点,端点通过神经网络运行图像以提取其中的特征(或称嵌入)。
  • Notebook 代码将图像嵌入写入至 Amazon ES 域中的KNN索引。

通过查询图像进行视觉搜索

在此步骤中,我们提供来自应用程序的查询图像,该图像通过 Amazon SageMaker 托管模型进行传递,并在期间提取 2048 项特征。您可以使用这些特征来查询 Amazon ES 中的 KNN 索引。Amazon ES KNN 将帮助您在向量空间中搜索各点,并根据欧几里德距离或余弦相似度(默认值为欧几里德距离)找到这些点的最近邻。在找到给定图像的最近邻向量(例如k=3最近邻)时,它会将与之关联的 Amazon S3 图像返回至应用程序。

下图所示,为视觉搜索全栈应用程序的基本架构。

整个流程包含以下操作步: 

  • 终端用户通过自己的浏览器或移动设备访问 Web 应用程序。
  • 用户上传的图像以 base64 编码字符串的形式被发送至 Amazon API Gateway  Amazon Lambda,并在 Lambda 函数中重新编码为字节形式。
    1. 在该函数中,公开可读的图像 URL 以字符串形式传递,并可下载为字节形式。
  • 各字节作为载荷被发送至 Amazon SageMaker 实时端点,而后由模型返回图像嵌入的向量。
  • 该函数将搜索查询中的图像嵌入向量传递至 Amazon ES 域内索引中的k近邻,而后返回一份包含k相似图像及其对应Amazon S3 URL 的列表。
  • 该函数生成经过预签名的 Amazon S3 URL 并返回至客户端Web 应用程序,此 URL 用于在浏览器中显示相似图像。

相关亚马逊云科技服务

要构建这样一款端到端应用程序,大家需要使用以下亚马逊云科技服务:

  • Amazon Amplify – Amazon Amplify 是一套面向前端与移动开发人员的 JavaScript 库,用于构建云应用程序。
  • Amazon API Gateway – 一项全托管服务,用于以任意规模创建、发布、维护、监控以及保护 API
  • Amazon CloudFormation – Amazon CloudFormation 为开发人员及企业提供一种简便易行的方法,借此创建各亚马逊云科技与相关第三方资源的集合,并以有序且可预测的方式进行配置。
  • Amazon ES – 一项托管服务,能够帮助用户以任意规模轻松部署、运营以及扩展Elasticsearch集群。
  • Amazon IAM – 亚马逊云科技身份与访问管理(Amazon Web Services Identity and Access Management,简称 IAM) 帮助用户安全地管理指向各亚马逊云科技服务与资源的访问操作。
  • Amazon Lambda – 一套事件驱动型、无服务器计算平台,可运行代码以响应事件,并自动管理代码所需的各项计算资源。
  • Amazon SageMaker – 一套全托管端到端机器学习平台,用于以任意规模构建、训练、调优以及部署机器学习模型。
  • Amazon SAM– Amazon Web Services Serverless Application Model (Amazon Web Services SAM)是一套开源框架,用于构建无服务器应用程序。
  • Amazon S3 – 一项对象存储服务,可提供具备极高持久性、可用性、成本极低且可无限扩展的数据存储基础设施。

相关文章