内容简介:本文经授权转载自知乎,https://zhuanlan.zhihu.com/p/65306548
本文经授权转载自知乎, 作者:李习华
https://zhuanlan.zhihu.com/p/65306548
当你看到一株未曾见过的植物,你可以打开百度APP,拍照搜索,找到相关信息;当你看到朋友穿了一件你特别喜欢的衣服,你也想买一件,你可以通过淘宝APP的拍立淘功能,找到商品;当你到达一个陌生的地方,你可以通过微信APP对着当地的街区或者建筑物拍一张照片,来定位你的详细位置。这背后都是强大的 以图搜图技术 。
以图搜图技术发展了许多年,从早期以图搜图的精度不尽如人意,到后来基于以图搜图技术开发出非常多的改变用户行为和提升效率的应用,经历了不小于10年的发展,整体的技术方案、数据量级、工程架构都进行了多轮的迭代。当前,各个大厂都在基于以图搜图技术来提供更好的产品和服务。我们希望在这篇文章中 对以图搜图技术做一个全面的总结 ,主要包含以下几个方面:
1. 以图搜图技术的通用框架;
2. 以图搜图技术迭代;
3. 以图搜图是工程+算法的结合,架构演进。
Part 1. 以图搜图技术的通用框架
在这一章,我们来介绍以图搜图技术的通用框架。在介绍以图搜图技术之前,我们来看 任何一个搜索技术所拥有的基本组件 。举个例子,我们需要到图书馆查找一本书,需要几个基本的要素:1. 图书馆(海量图书);2. 图书的分类、书名或者作者(在图书馆的编码体系下,这些信息的组合能够唯一表示这一本书);3. 图书馆的书需要按照一定的规律来布置(科目、难易程度、首字母、作者、年份等);在有了这些基本的要素之外,只要图书馆有这本书,我们就能够快速找到它;或者即便没有某一本具体的书,我们也能够查询到与这本书有着相近内容的书。
结合上面的例子,我们来看一个典型的以图搜图系统所拥有的 基础框架 :
先来看 offline部分 ,包括3个基本的要素:
01. 检索图片库 :这就相当于上一个例子中的图书,我们需要有一个足够规模的图片库,比如淘宝的所有商品的图片集合,比如百度图片搜索中收集到的互联网图片数据集合。当然,这里我们介绍的是一个静态的图片库,在实际项目中,我们需要有能力来 处理动态变化的图片数据库 。
02. 特征提取 :这就相当于上一个例子中图书的作者、年份、科目等等,我们称为图片的特征。实际上,图片的任何统计量都可以作为图片的特征,甚至图像的像素值本身通过归一化之后也可以作为图片的特征。在实际中,我们使用图片的颜色分布、梯度变化统计量、纹理、BOW统计、底层/中层/高层语义特征等作为图片的特征,非常丰富。
03. 检索结构 :检索结构的唯一目的就是让查找更快更准。简单的, 一一对比 是最简单的查询结构,最准,但是最慢;所以所有检索结构本质上都是效率和精度的平衡。常见的,我们可以 对数据集进行聚类 ,把数据分成一堆一堆的,比对时先选择相似的堆,然后在堆内部再进行细致的比对。而分堆的理念又可以通过树结构、Hash结构、倒排索引、图结构等等来刻画。
再来看online部分,其中 特征提取和offline的特征提取 需要保持高度的一致性,所以实际中我们通常使用一个 单独的特征服务器 来提供特征提取服务。这里之所以将检索结构和检索引擎分开,主要是基于如下的考虑:检索引擎需要应对高并发等一些的工程方面的问题,所以本质上检索引擎更倾向于工程架构的优化,而检索结构更倾向于检索结构算法方面的优化;但实际上,二者是没办法完全拆分开的。
以图搜图技术本质上是寻找相似图片,但两张图片是否相似有非常多的维度:
因此在很多时候,以图搜图技术需要 根据不同的使用场景 来选择合适的技术方案,尤其是特征的选择。产品层面,也层出不穷,可以参考下面的几个链接:
The Best Image Search Engines on the Web
https://www.lifewire.com/where-to-find-images-online-3482427
The 7 Best Search Engines for Finding Free Images
https://www.sitepoint.com/7-best-search-engines-free-images/
Part 2. 以图搜图的技术迭代
这个部分我先打算介绍一下特征、检索引擎各自都经历了哪些 迭代 ,然后在以不同时段典型的工业界的使用方案来介绍以图搜图技术代际的迭代。
特征层面:
简单的,图像的单通道、多通道的颜色直方图可以作为一个简单的特征;进一步颜色矩特征,图像中任何的颜色分布都可以通过它的矩来表示。另外需要强调的局部特征是 SIFT特征 (参考:https://blog.csdn.net/abcjennifer/article/details/7639681) , SURF特征 , HOG特征 等;当有了局部特征之后,我们需要对局部特征进行聚合,作为图像的全局表示;将多个局部特征矢量聚合成一个统一维度的矢量表示的方法有:BOW、VLAD、Fisher Vector等等。
深度学习技术兴起之后,基于深度学习的图像特征开始成为图像检索的主流。 我们知道CNN网络具有很多不同程度对图像进行抽象的layer,较低的层得到的是图像的简单特征,而较高层得到的是图像的语义相关的特征,不同层的特征在检索层面精度有很大的区别,在Oxford Building数据集上,使用VGGNet进行简单的测试,得到了如下的统计结果。
(参考:http://yongyuan.name/blog/layer-selection-and-finetune-for-cbir.html)
实际上,深度网络最后的 FC层 同样可以作为图像的特征表示,当使用FC作为特征时,网络训练时使用的label对检索的效果有较大的影响。理论上,label如果能够提供更多的细粒度的信息,则学习到的FC特征则更能够表达 图像的细粒度特征 。
特征类型对检索效果影响很大;但特征的学习方式,尤其是引入度量学习的思路之后,即便是同一个网络的同一层特征, 不同的训练方式对最后的精度也会有很大的影响 。
比如 Class weighted conv features
(参考:https://github.com/bikong2/retrieval-2017-cam)
分类loss和triplet loss结合 :
引入更多监督信息 的学习:
以及 通过KL散度来优化 :
其实通过不同的方式进行网络学习的优化方式还有很多,这里大致总结几个 优化的大致方向 :
1. 引入更多的监督信息;
2. 不同程度、维度的attention(包括层、channel、类等等);
3. Triplet loss及其各种变种;
4. 不同的特征聚合方式。
检索引擎:
检索引擎方面,早期我们通过层次化的聚类来对数据分组,通过K-D Tree对数据进行划分,通过Hash对空间进行划分,通过倒排索引加速检索的效率,通过PQ量化对更大规模的数据进行二次方的划分。参考:
:white_small_square: 图像检索:再叙ANN Search
https://blog.csdn.net/qq_27245709/article/details/72393613
:white_small_square: 图像检索:基于内容的图像检索技术
https://yongyuan.name/blog/cbir-technique-summary.html
:white_small_square: Product Quantization for Nearest Neighbor Search论文理解
https://blog.csdn.net/CHIERYU/article/details/50347735
层次化的聚类算法 可以通过如下的图片来表示:
通过聚类来 减少检索时比对的检索时间 。K-D Tree和Hash请参考下面的图片。K-D Tree相对层次化聚类基本原理是一致的,不过聚类算法更多的是数据的划分,但树结构的层次化划分包含特征和数据的划分两方面。Hash方法,尤其是LSH(局部敏感哈希),则是同时在寻找特征的mapping和空间的划分。
PQ量化 本质上是在特征和数据的两个层面对数据集进行量化,如下图所示,特征向量本身是16*8=128维,通过特征层面的划分,分成y1…y8总共8组特征;划分之后,对每一组特征在全数据集上进行聚类等量化手段,比如量化的长度是8bits的01向量。最终得到的是8*8bits的01向量,压缩比超高。
接下来,介绍 两代不同的以图搜图技术 。
局部特征(如SIFT特征)+BOW+LSH的方案:
这种方案大致在2015年之前算是比较流行的框架,通常针对特殊的使用场景,在检索基础上可能还需要进行细粒度的精排序。这个方案 在10亿以内的数据量级上非常适用 ,当然如果数量级更大,也是可以的,只是需要引入其他的检索结构。关于LSH,推荐使用一个 开源的 工具 包FALCONN :
https://github.com/FALCONN-LIB/FALCONN
CNN卷积特征+VLAD+PQ量化的方案:
这是目前比较主流的方案,卷积特征建议做多层特征的组合,PQ量化建议根据数据规模做密集的参数选择,推荐使用 Facebook开源的工具包FAISS :
https://github.com/facebookresearch/faiss
当然,卷积特征的学习方式的选择层面,需要根据实际拥有的数据的标签信息来决策。有一些基于弱监督学习的方案,也可以尝试。
Part 3. 以图搜图是工程+算法的结合
架构演进
在这里,我们介绍一个 理想状态下的以图搜图架构 ,需要尝试去解决的几个问题:
1. 如何解决检索库动态增加的问题;
2. 如何解决全量的特征迭代的问题,也就是说query和database的特征需要同步;
3. 特征增强,在检索结构确定的情况下获得更好的检索效果;
4. 高并发低延迟。
以上只是一个简单的架构示意图,如果涉及到特征评价,检索结构评价,甚至其他的策略迭代等一系列的关于AB Test的需要,架构层面需要进行深度的优化。
到这里基本上对以图搜图技术从特征、检索结构、架构等层面进行了一个基本的介绍。其实工业界的以图搜图产品或者说引擎远比我写到的要复杂,如果有大家有兴趣,建议研究以下几个检索系统的演进:
阿里的拍立淘
百度的图片搜索
谷歌的图片搜索
Pinterest的商品搜索
-The End-
将门 是一家 以专注于 发掘、加速及投资技术驱动型创业公司 的新型 创投机构 ,旗下涵盖 将门创新服务、将门技术社群以及将门创投基金。将门成立于2015年底,创始团队由 微软创投在中国的创始团队 原班人马构建而成,曾为微软优选和深度孵化了126家创新的技术型创业公司。
将门创新服务 专注于使创新的技术落地于真正的应用场景,激活和实现全新的商业价值,服务于行业领先企业和技术创新型创业公司。
将门技术社群 专注于帮助技术创新型的创业公司提供来自产、学、研、创领域的核心技术专家的技术分享和学习内容,使创新成为持续的核心竞争力。
将门创投基金 专注于投资通过技术创新激活商业场景,实现商业价值的初创企业,关注技术领域包括 机器智能、物联网、自然人机交互、企业计算。 在三年的时间里,将门创投基金已经投资了包括量化派、码隆科技、禾赛科技、 宽拓科技、 杉数科技、迪英加科技等数十家具有高成长潜力的技术型创业公司。
如果您是技术领域的初创企业,不仅想获得投资,还希望获得一系列持续性、有价值的投后服务, 欢迎发送或者推荐项目给我“门”: bp@thejiangmen.com
点击右上角,把文章分享到朋友圈
将门创投
让创新获得认可!
微信:thejiangmen
bp@thejiangmen.com
点击“ ❀在看 ”,让更多朋友们看到吧~
以上所述就是小编给大家介绍的《一文了解「以图搜图」技术背后的原理及架构优化》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 使用AnalyticDB轻松实现以图搜图和人脸检索
- 让数据关联产生价值,「创邻科技」以图数据库加速数据挖掘
- 『互联网架构』软件架构-分布式架构(14)
- 『互联网架构』软件架构-电商系统架构(上)(69)
- 『互联网架构』软件架构-电商系统架构(中)(70)
- 『互联网架构』软件架构-电商系统架构(下)(71)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
结构化计算机组成
Andrew S.Tanenbaum / 刘卫东 / 机械工业出版社 / 2001-10-1 / 46.00
AndrewcS.Tanenbaum获得过美国麻省理工学院的理学学士学位和加利福尼亚大学伯克利分校的哲学博士学位,目前是荷兰阿姆斯特丹Vrije大学计算机科学系的教授,并领导着一个计算机系统的研究小组.同时,他还是一所计算与图像处理学院的院长,这是由几所大学合作成立的研究生院.尽管社会工作很多,但他并没有中断学术研究. 多年来,他在编译技术.操作系统.网络及局域分布式系统方面进行了大量的一起来看看 《结构化计算机组成》 这本书的介绍吧!