内容简要:
一、UDS & Milvus
二、Image Search
三、UseCases
一、 UDS & Milvus
(一)Unlock the treasure of unstructured data
我们通常将数据分为三类:
第一类是结构化数据,包括数字日期和字符串等。
第二类是半结构化数据,包括有一定格式的文本信息,比如说系统日志等。
第三类就是非结构化数据,像图片、视频、音频、自然语言等不容易被计算机所理解的非结构化数据。
关系型数据库和传统的大数据技术都是为了解决结构化数据问题,而半结构化数据可以通过基于文本的搜索引擎来处理。在我们的日常生活中,每天的产生大量非结构化数据约占总数据的80%。过去一直缺乏有效的数据分析手段,直到近年来随着人工智能和深度学习的兴起,非结构化数据才被广泛应用。
深度学习的魅力在于,它可以将原本计算机难以处理的非结构化信息转化为计算机容易理解的特征向量。通过利用深度学习模型,把图片、视频、音频和自然语言等非结构化数据提取成特征向量,再通过对特征向量做相似度计算等实现对非结构化数据的分析。
(二)The flow-based AI applications
以基于流的人工智能应用为例,假设我们要分析一段视频,可以创建一些操作流实现,通常称之为管道Pipeline。
如上图所示,最左边的流水线会首先截取视频的帧,然后从截取到的图像中提取到图像特征。比如这里可以使用VGG模型,获得视频当中的图片特征向量来实现对视频中的图像分析。中间的流水线会处理视频中的音频,生成一个音频特征向量,然后最右边的流水线会自动为视频标注一些相关属性。如果有其他的特殊要求,也可以建立一个新的Pipeline。
AI的应用十分灵活和易部署,可以通过扩展操作流来增加AI应用,可以通过基于Web界面通过对操作流的增加和修改,同时对操作流的划分,每个Pipeline的操作也会变得相对简单,这样也给我们带来了更多的挑战。数据会变得十分碎片化,原本是一个视频,随着管道的运行,逐渐变成了不同的数据分散在了不同的角落。
我们需要一套非结构数据化的服务。如上图所示,上下层的输入输出都是非结构化数据,AI技术主要应用在中间绿色模型的推理层和蓝色数据服务层。
模型推理的任务主要是将非结构数据转化为一些特征向量,模型通常都是训练好的,但目前在数据服务层还没有全面的解决方案,有些用户会把向量放在传统关系型数据库中,有些用户会放在HDF当中,利用Sparse做向量分析,也有用户会引入一些ARN算法库。
挑战主要在于如何高效管理和分析向量,针对海量的非结构化数据,高效分析需要付出大量成本。针对这一挑战,我们给出的答案是由Milvus项目去驱动非结构化数据服务,它包含了4个部分:
第一部分是嵌入向量相似度搜索,包括深度学习场景下的高危稠密向量和传动机器学习下的系数向量。
第二部分是属性和标签数据,如用字符串等结构化数据去描述标签,把标签和向量结合起来,实现混合查询功能。
第三部分是支持多模型,比如前面讲到的视频例子,一个视频会有不同维度向量,有图片向量和音频向量,在现实世界中多模态的减缩也是一个常见需求,那么我们需要引入非结构化数据实体概念,一个实体可以包含多个不同维度的向量。
第四部分是融合打分机制,比如在多模态搜索中,我们引入了一些不同的模型,对多个模型进行融合,形成一个新的打分机制来实现综合打分,目前Milvus已经具备了矢量分析能力。
Milvus的定位不仅是高性能的向量搜索引擎,在此基础上希望可以建立全面的非结构化数据分析服务。
(四)Why Milvus: Vectors are different.
向量是由一组数字构成的,向量和数字的区别主要在两个方面。
首先向量和数字的常用操作不同。数字之间的常用操作包括加减乘除,向量最常见的操作是计算相似度,比如计算向量之间的欧式距离,从上图可以看出向量的计算会比数字的计算复杂得多。
其次向量和数字的索引方式也是不同的。两个数字之间可以进行数词比较,然后建立Betray索引,而向量之间无法比较大小,只能计算它们之间的相似度,所以向量的索引通常都是基于最近04ARN算法。上图给出了两种ARN方式,分别是基于聚类的索引以及基于图的索引。传统的数据库以及大数据分析技术很难满足传统的数据和向量,所需要的算法以及构建的索引都是不一样的。
Mlivus整体架构图主要由4个部分构成:
第一,对异构计算的支持。目前Mlivus所支持的异构计算资源包括X86平台上的SSE指令集AVX2和AVX512指令集,还有英伟达的CPU等。
第二,数据管理的能力。提供非结构化数据的服务,所以数据管理的功能也是十分关键,Mlivus支持了数据分片、数据分区、向量插入和删除等操作。
第三,吸收和完善ARN算法库。向量搜索的能力是非结构化数据服务中的一个基本功能,Mlivus通过采用和改进FAISS、Annoy ARN算法库,可以提供一个良好的搜索性能。
第四,对应用开发环境的支持。为了让AI开发者可以轻松的在Mlivus上构建应用,提供了Python、C++、Java还有Go等多种API。
一、 Image Search
(一)Why image search.
图片检索是一个常见的应用,常见的图片检索包括根据文本内容搜索图片和基于图片本身的内容搜索图片。之前是通过给图片打标签,然后通过搜索标签来实现对图片的搜索。
(二)Image search Scenarios.
基于图片内容搜索图片,就是常说的以图搜图,这种搜图方式在电商领域被广泛应用。
电商网站主要通过以图搜图搜索商品,商品外观是最好的呈现方式,同时图像搜索可以用于文字搜索无法描述的场景,用户会将拍摄到的图片在电商网站中去搜索,去找同款或者相似的商品来提升搜索查找的便捷性,优化用户的体验。
以图搜图在设计类行业的应用也是比较广泛的,包括服装设计、室内设计以及海报素材的设计等。
例如拍摄照片时,可以通过拍摄的照片查找相似或者相同图片,方便设计师查询原版图片或者是更加相似的图片。除此之外,企业商标或者品牌logo的搜索引擎的以图搜图以及在部分查重网站中也是陆续上线了。
以图搜图还可以用于广电行业的媒体资讯等,同时也是AR、VR三重模型建立以及辅助驾驶等热门应用的一个基础的支撑技术之一。
(三)What is image
图片是由一组像素点的集合组成的,第一张图片上面左图的红色圈内圈出的部分就是右图一系列的像素点,再第二张图片,假设红圈部分一是一幅图像,其中每一个独立的小方格就是一个像素点,像素是一个图片的最基本的信息单元,这幅图片图像的像素就是11×11px。
在数学上表示像素点有两种方式,一种是二值图像,二值图像的像素点只有黑白两种情况,因此每种像素点都可以由0和1来表示,如图所示的是一张像素点为4成4的二值图像的表示,还有一种用RGB来表示图像,RGB分别代表了红、绿蓝,对于RGB、图像,每个像素点包含了 RGB共三个通道的信息,这里是一张4×4相素点的 RGB图像表示。
(五)Image search system
对于图像搜索来说,如果只是找原图,也就是像素点完全相同的图像,直接对比MD5即可,然而图像在网络传输过程中常常会伴随着压缩以及水印等情况,由于MD5的特点是小部分内容的一个改变,最差的结果也是偏差的比较多的,因此只要图片中有一个像素点不一致,那MD5都是无法去比较的,对于以图搜图的系统而言,我们要搜索的本质其实是搜索内容相似的图片,为此我们需要准备三个基本的过程。
首先需要在架构图中进行目标检测,在检测出要搜索的目标对象后,需要提取图片的特征信息,也就是这里的Encoder这一步,在提取完特征信息之后,我们需要对图片的特征向量进行相似度的比较,返回图片的一个相似度,概括来说,以图搜图就是目标检测加目标特征的提取以及特征向量的一个相似度计算。
(六)Object detection
以图搜图中第一个关键技术就是目标检测,目标检测关注的是特定的物体目标,要同时获得这一目标的类别和位置信息,目标检测给出的是对图景前景和背景的理解,需要从背景中分离出感兴趣的目标,并确定这一目标的类别和位置信息等。
目前目标检测领域的深度学习方法主要分为两类,分别是两阶段的目标检测算法和一阶段的目标检测算法。对于两阶段的目标检测算法来说,首先会有算法生成一系列的样本候选框,然后会通过卷积神经网络去进行样本框分类,常见的两阶段目标检测算法有R-CNN、Fast R-CNN、Faster R-CNN,都是基于卷积神经网络,一阶段的目标检测是不需要产生候选框的,直接将目标框候选转化为回归的问题去处理,常用的算法有YOLO和SSD。
(七)Feature extraction
在以图搜图中图像特征的提取也是一个非常重要的技术点。特征提取的好坏是决定后续图像搜索准确率的关键。过去的20年中,计算机视觉研究集中在了人工标注上,通过人工标注去提取良好的图像特征.随着深度学习的兴起,特别是得益于卷积神经网络-CNN的发展,基于卷积神经网络的一些模型也不断的推陈更新。常用的CNN模型,从早期影响力比较大的AlexNet到后来常用的VGG和ResNet以及DenseNet等,都是目前用的比较广泛的图像特征提取模型。
这些模型大体结构如上面的图片所示,基本上是包含了多个卷积层以及磁化层,还有全连接层去构建这样一个网络。然后通过对图片的训练,提取出我们的图片特征。
(8)Embedding search
将图片转化为特征向量后,我们需要进行某种相似度度量来比较它们。在以图搜图中常用的度量特征相似度的方法有欧式距离还有余弦距离两种方式。根据我们选用的提取特征的模型不同,使用的相似度计算方式也是不同的。欧式距离表示的是空间上两个点的直线距离,余弦距离表示的是两个高位向量在空间上的夹角。
为了实现在大规模的向量库中找到与给定向量相似的一些向量,我们通常需要对库中的这些向量建立索引,常用的索引有基于聚类的索引和基于图的索引,这一过程会用到Mlivus,提供了从向量的存储、删除以及查询等一系列完整的向量检索服务。
在数据量比较大的以图搜图的过程中,向量检索的性能会直接影响到我们整个以图搜图的性能。
一、 UseCases
(1)Use case: Image search helps sports event
例一,一家移动互联网公司,有一个专业的摄影服务平台,主要用于为运动员和赛事方提供赛事拍摄、实时上传以及照片的云端识别等服务,以此来连接线上线下的运动人群和民间赛事,其中有一项重要的服务是用户可以上传运动员的照片,然后在赛事的图片库中去搜索出包含该运动员的一些赛事图片,在他们的图像搜索服务中都用到了前面讲到过的目标检测、特征提取以及向量检索这三个关键技术。
其中,目标检测、特征提取使用自研的算法,向量搜索起初也用自研的算法,但项目初期仅有只有百万级的图片,随着赛事的业务飞速发展,仅2019年一年的照片量就达到了6000万,整个系统中存储了上亿的图片以及十几亿的人像特征,这些数据让系统更为庞大,占用的资源也会越来越多,为了保障搜索服务的高性能,只能通过不断的增加硬件资源和服务器的数源来进行横向扩容,通过增加内存和使用高性能的CPU去提高他们的执行效率,只是这样会导致服务成本变得非常高。
另外,在图像上传高峰期会出现上百万张图片同时入库的情况,在运动员的赛事图像入库后,需要尽快能够查到,满足用户对照片的期待,因此为了节约运维的成本和支持后续的业务发展,进行服务的改造和升级。通过调研多个向量服务之后,最终决定使用Mlivus来支持向量服务。
之所以选择Mlivus,是因为在检索的速度上,Mlivus单机版可以达到10亿向量的秒内级搜索响应。其次是Mlivus可以实现数据的快速插入,同时满足客户对检索方面的需求,后续他们数据如果持续增长的话,Mlivus也可以直接从单机版很便捷的升级到分布式。
(2)Use case: Image search for company trademark
例二,一家大数据公司,收集了大量企业的金融数据和5500多万张商标图片,希望为会员提供通过商标去检索公司的功能,他们在微调了VGG模型和Mlivus的基础上建立了一个图像搜索功能与之前不同的是,这里的图像搜索去掉了目标检测的环节,因为图片本身就是商标,没有额外的多余信息。
此外目标检测针对的是有一定规则可循的事物,对于商标来说,任何设计图像都可以成为商标,因此就无需去做目标检测,可直接使用VGG模型对有商标的图像进行特征提取,然后进行一个向量相似度检索。
由于在开发初期不知道有多少人会因为新功能成为新会员,所以他们的开发和托管成本是十分敏感的,就开源的Mlivus对他们来说是一个非常好的选择。同时他们对Mlivus的简单应用、低成本、搜索性能这些特点都非常满意。
(3)Use case: Image search for poster design
例三,一家从事海报设计的公司,在他们的设计库中有大量的海报素材,基于那些图片库做了一个海报搜索的网站,希望能根据用户的需求搜索到相似的海报,供用户选择。该网站提供了根据文字检索、根据海报内容检索相似海报这两种方式,在使用海报搜索海报这一过程中没有使用到目标检测,而是直接去使用的ResNet去提取图片中的特征向量,然后存入到Mlivus中做相似向量检索。
对于海报来说,我们关注的是整个海报所展现的内容,要检索的也是与海报整体内容和风格相似的图片,而不是图片中的某个目标。所以在这个案例中不需要用到目标检测的。