草庐IT

阿里云产品-图像搜索快速测评

armcvai 2023-03-28 原文

背景知识

什么是云计算

对于纯新人,首先我们需要了解下什么是云计算。所谓云计算,就是指通过互联网,以按需服务的形式提供计算资源。这样企业就无需自行采购、配置或管理资源,而且只需要为实际使用的资源付费。

通俗来讲,就是将实体物理计算机提供的各种服务搬到了线上,这样即使我们没有实体电脑也能体验和使用一些计算资源,比如:云服务器、云数据库、人工智能相关服务等。

阿里云产品

阿里云计算提供的热门产品包括以下几类:

  • 计算:如云服务器 ECS ,可能最为畅销
  • 存储:如文件存储 NAS
  • 网络:如负载均衡 SLB、弹性公网 IP
  • 安全:如 WEB 应用防火墙
  • 容器与中间件:如分布式容器服务平台
  • 数据库:如关系型数据库、数据仓库
  • 大数据计算:如云原生大数据计算服务 MaxCompute
  • 人工智能与机器学习:提供人工智能产品等 API 调用功能,一般按调用次数计费,本文测评等产品-图像检索属于此类。
  • CDN 与云通信:CDN
  • 企业服务与媒体服务:如视频点播服务
  • 物联网:如 AliOS Things 物联网操作系统。
  • 开发工具:如代码管理与流水线
  • 运维管理:如日志服务(SLS)。

一,图像检索原理

1.1,图像检索概述

在大型图像数据库上,CBIR(Content-Based Image Retrieval,基于内容的图像检索) 技术用于检索在视觉上具相似性的图像。它是计算机视觉中的一项基本任务,因为它与各种实际应用直接相关。CBIR是通过分析视觉内容(颜色、纹理、形状、物体等),在图库中搜索相关图像的问题。

图像检索的通俗定义:从一堆图片中找到与待匹配的图像相似的图片,即以图搜图,图像检索的一个子问题是以人搜人,也称为行人重识别。

本文对 CBIR 和图像检索、图像检索的定义不做严格区分,都指代图像检索技术。

1.2,图像检索任务分类

通常,CBIR 方法可以分为两个不同的任务:

  1. 类别级图像检索(CIR),也叫相同类别物体检索。

    对给定的查询图片,相似图像检索的目标是从图像库中查找出那些与给定查询图像属于同一类别(例如,狗,汽车)的图像。

  2. 实例级图像检索(IIR),也叫相同物体图像检索。

    相同物体图像检索是指对查询图像中的某一物体,从图像库中找出包含有该物体的图像。一个特定实例(例如,埃菲尔铁塔,我的邻居的狗)的查询图像可以在不同的条件下被捕获,如不同的成像距离、视角、背景、光照和天气条件(重新识别同一实例的范例)。

关于人脸识别问题和图像检索问题的关系,我个人理解是人脸识别可以看作是一种更严格的相同物体图像检索问题。

图像检索任务另外一种分类划分:

  1. 追求所谓的相似性,即从图像数据库中找到相似或相同的图片。

    常见的人脸识别,行人重识别(reid),购物商品检索,草图检索,都是属于这个范畴,目前的深度学习方法,更多的就是追求如何获得更好的 feature,在这些领域,特征提取方法都是可以通用,即 backbone 是通用的。

  2. 传统领域里的 match 的问题。即如果某个建筑在一张图里出现,假使其在另外一张图里只出现一半,或者在某个角落里出现,能否再次找到。

    如果直接采用 cnn 特征,很有可能找到的轮廓相似的建筑物,而非相同的建筑物。这种情况下,一般是切成 patch 再分别抽特征,随着目标检测模型的进步,可以直接在最后的 feautre map 上直接划分。也可以对 feature map 的特征做 vlad(Vector of Local Aggregated Descriptors)或者 fv(Fisher Vector)的编码再检索。一般论文里的标题都是 CBIR,instance retrieval 这种。

FV(Fisher Vector)10 本质上是用似然函数的梯度向量表示一幅图像。梯度向量的物理意义就是描述能够使模型更好地适应数据的参数变化方向,也就是数据拟合中参数调优的过程。

1.2,图像检索技术发展历程

传统图像处理中图像特征分为:全局特征(颜色、纹理、形状)和局部特征(SIFT和 SURF描述符)两类。

图像检索(也叫以图搜图)技术等发展大致经历了三个阶段:

  1. 最初的图像检索引擎是基于文本关键字检索的。

    即利用图像的文件名和路径名、图像周围的文本,以及Alt标签中的注释索引和搜索相关图像的。从本质上来说,这样的图像检索引擎其实还是基于文本搜索引擎的,因为对比的是文本信息而不是直接图像信息。

  2. 1992年,T. Kato提出了基于内容的图像检索(CBIR)概念,即人工提取图像特征构建索引以实现图像检索。

    首先基于传统图像处理技术(如SIFT特征提取算子)进行特征提取,然后将图像特征信息进行编码,并将海量图像编码做查找表,最后进行相似度匹配运算。

  3. 基于计算机视觉技术的图像检索技术。

​ 随着人工智能技术(深度学习)的发展,CNN 和 Transformer 技术在自动提取图像特征方面已经做得非常优秀,因此极大地提高了图像表达和搜索的准确性。目前主流搜索引擎的图像检索功能其实都引入了深度学习算法。

1.3,图像检索的SOTA 模型

paperswithcode 可以看出图像检索领域最新的 SOTA 模型-X-VLM 是在 2021 年发表的,后续没有更好的论文。

1.4,图像检索算法流程

图像检索算法流程的 pipeline 如下所示:

注意,上述步骤中,图片入库是用户看不到的。图像特征相似度的度量标准一般有以下几类:

  1. 欧氏距离
  2. 曼哈顿距离
  3. 海明距离
  4. 余弦相似度
  5. 杰卡德相似度

二,阿里云 ImageSearch 产品测评

2.1,ImageSearch 产品介绍

图像搜索(Image Search)是一款用于图片间相似性检索的平台型产品。图像搜索以深度学习和机器视觉为核心,提取图片内容特征、建立图像搜索引擎。用户通过输入图片,用以图搜图的方式可快速在图片库中检索到与输入图片相似的图片集合。可广泛应用于拍照购物、商品推荐、版权保护等场景。

ImageSearch 使用过程

阿里云的图像搜索(ImageSearch)产品主要用来实现搜索相似图片功能,其简单使用过程总结如下:

  1. 创建实例
  2. 添加图片
  3. 搜索相似图片。

1,第一步,我们要完成产品实例的免费创建,并进入控制台页面

点击免费试用链接,进入产品示例购买页面,并输入实例名称(注意不要超过20个字符),然后点击立即购买,进入订单确认页面,因为是试用链接,所以应付款为 0,点击支付按钮,再次点击支付按钮,最后完成支付和实例的创建。

2,第二步,在实例中新增等待搜索的图片

点击实例 ID 进入实例详情页面,选择图片搜索,确定搜索类型、上传图片并输入相关配置后,点击确认即可得到 json 形式的字符串返回结果。

3,第三步,解析字符串形式的返回结果

参考教程-图片查询,理解各个参数的含义,从而得到易理解的图片搜索结果。这里我输入的是树莓派3B的图片,返回结果如下所示:

{
  "data": {
    "result": {
      "body": {
        "auctions": [],
        "code": 0,
        "head": {
          "docsFound": 0,
          "docsReturn": 0,
          "searchTime": 225
        },
        "picInfo": {
          "allCategories": [
            {
              "id": 0,
              "name": "Tops"
            },
            {
              "id": 1,
              "name": "Dress"
            },
            {
              "id": 2,
              "name": "Bottoms"
            },
            {
              "id": 3,
              "name": "Bag"
            },
            {
              "id": 4,
              "name": "Shoes"
            },
            {
              "id": 5,
              "name": "Accessories"
            },
            {
              "id": 6,
              "name": "Snack"
            },
            {
              "id": 7,
              "name": "Makeup"
            },
            {
              "id": 8,
              "name": "Bottle"
            },
            {
              "id": 9,
              "name": "Furniture"
            },
            {
              "id": 20,
              "name": "Toy"
            },
            {
              "id": 21,
              "name": "Underwear"
            },
            {
              "id": 22,
              "name": "Digital device"
            },
            {
              "id": 88888888,
              "name": "Other"
            }
          ],
          "categoryId": 22,
          "multiRegion": [
            {
              "region": "282,1973,180,1282"
            }
          ],
          "region": "282,1973,180,1282"
        },
        "requestId": "EAD5F8B7-2BAB-52F5-89D6-AE2F16569E2E",
        "success": true
      },
      "headers": {
        "access-control-allow-origin": "*",
        "date": "Tue, 07 Feb 2023 12:47:36 GMT",
        "content-length": "635",
        "x-acs-request-id": "EAD5F8B7-2BAB-52F5-89D6-AE2F16569E2E",
        "connection": "keep-alive",
        "content-type": "application/json;charset=utf-8",
        "x-acs-trace-id": "e52901da46aa5e61a2243a1109cf0a93"
      },
      "statusCode": 200
    }
  },
  "success": true
}

"categoryId": 22,参考类目参考页面,可知 "categoryId": 22 表示属于数码硬件类别,识别正确!

2.3,总结

到这里,关于图像搜索产品的背景、原理和使用过程都已经叙述完毕了,个人感觉图像搜索这款产品的识别准确率还不错,但是返回结果的可视化功能还有待提升,目前是纯 json 形式的字符串返回结果,不如直接图片上添加文字和方框形式的返回结果直观。

参考资料

  1. 自制AI图像搜索引擎
  2. 图像检索|经典方法|快速入门|发展评估
  3. 图像检索:基于内容的图像检索技术

有关阿里云产品-图像搜索快速测评的更多相关文章

  1. ruby-on-rails - Nokogiri:使用 XPath 搜索 <div> - 2

    我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll

  2. ruby-on-rails - 添加回形针新样式不影响旧上传的图像 - 2

    我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司

  3. 神州数码无线产品(AC+AP)配置 - 2

    注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配

  4. 阿里云国际版免费试用:如何注册以及注意事项 - 2

    作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。​关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐

  5. 阿里云RDS——产品系列概述 - 2

    基础版云数据库RDS的产品系列包括基础版、高可用版、集群版、三节点企业版,本文介绍基础版实例的相关信息。RDS基础版实例也称为单机版实例,只有单个数据库节点,计算与存储分离,性价比超高。说明RDS基础版实例只有一个数据库节点,没有备节点作为热备份,因此当该节点意外宕机或者执行重启实例、变更配置、版本升级等任务时,会出现较长时间的不可用。如果业务对数据库的可用性要求较高,不建议使用基础版实例,可选择其他系列(如高可用版),部分基础版实例也支持升级为高可用版。基础版与高可用版的对比拓扑图如下所示。优势 性能由于不提供备节点,主节点不会因为实时的数据库复制而产生额外的性能开销,因此基础版的性能相对于

  6. ruby-on-rails - 在 Ruby (on Rails) 中使用 imgur API 获取图像 - 2

    我正在尝试使用Ruby2.0.0和Rails4.0.0提供的API从imgur中提取图像。我已尝试按照Ruby2.0.0文档中列出的各种方式构建http请求,但均无济于事。代码如下:require'net/http'require'net/https'defimgurheaders={"Authorization"=>"Client-ID"+my_client_id}path="/3/gallery/image/#{img_id}.json"uri=URI("https://api.imgur.com"+path)request,data=Net::HTTP::Get.new(path

  7. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

  8. ruby - 如何搜索有用的 ruby - 2

    寻找有用的ruby的好网站是什么? 最佳答案 AgileWebDevelopment列出插件(虽然不是ruby​​gems,我不确定为什么),并允许人们对它们进行评级。RubyToolbox按类别列出gem并比较它们的受欢迎程度。Rubygems有一个搜索框。StackOverflow对最有用的rails插件和ruby​​gems有疑问。 关于ruby-如何搜索有用的ruby,我们在StackOverflow上找到一个类似的问题: https://stacko

  9. ruby - 如何搜索、递增和替换 Ruby 字符串中的整数子字符串? - 2

    我有很多这样的文档:foo_1foo_2foo_3bar_1foo_4...我想通过获取foo_[X]的所有实例并将它们中的每一个替换为foo_[X+1]来转换它们。在这个例子中:foo_2foo_3foo_4bar_1foo_5...我可以用gsub和一个block来做到这一点吗?如果不是,最干净的方法是什么?我真的在寻找一个优雅的解决方案,因为我总是可以暴力破解它,但我觉得有一些正则表达式技巧值得学习。 最佳答案 我(完全)不懂Ruby,但类似这样的东西应该可以工作:"foo_1foo_2".gsub(/(foo_)(\d+)/

  10. ruby - 是否有将图像文件转换为 ASCII 艺术的命令行程序或库? - 2

    有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/

随机推荐