当前位置: 首页 > 科技观察

为了让购物更方便,蘑菇街视觉搜索技术架构实践

时间:2023-03-14 13:24:39 科技观察

[.com原稿]众所周知,图像检索属于计算机视觉领域,研究的更早也更广泛。根据描述图像内容的不同方式,一般可分为两类:基于文本的图像检索(TBIR)和基于内容的图像检索(CBIR)。2018年11月30日至12月1日,由WOT主办的WOT全球人工智能技术峰会在北京JW万豪酒店举行。本次峰会的主题是人工智能。美丽联合集团宋洪亮给大家介绍《视觉搜索技术系统与业务应用》。本次分享将从以下三个部分展开:视觉分享背景及现状蘑菇街视觉搜索技术架构及研发体系及业务应用背景及现状。以文本标注的方式描述图像中的内容,从而为每幅图像生成内容描述的关键词,包括图像中的物体和场景。该方法不仅可以采用人工贴标,还可以通过图像识别技术实现半自动贴标。检索时,系统可以根据用户提供的查询关键词,找出该关键词对应的图片,返回给用户。由于易于实现的优点,该方法仍在一些中小型图像搜索应用中使用。当然,这种方法也存在以下缺陷:对于大规模的图像数据,由于标注过程需要人工干预,不仅费时费力,而且不断涌入的新图像也会干扰带有手动标签。当需要精确查询时,用户可能难以使用简短的关键字来描述他们真正想要获取的图像。人工标注的过程难免会受到标注者的认知水平、语言使用、主观判断等方面的影响,因此在文字描述上会有差异。随着图像数据的快速增长,基于文本的检索方法的上述问题日益突出。因此,业界普遍认为,最有效的图像信息索引方式应该是基于图像内容本身。这种方法是将图像内容的表达和相似度交给计算机自行处理,充分发挥其计算优势,大大提高检索效率。然而,基于内容的检索方法也有一个主要缺点:特征描述和高级语义之间难以弥合的鸿沟。由于环境干扰较大,需要选择抗干扰性强、局部特征不变的方法,如SIFT。同时,我们也要求此类方法具有较高的特征维度。近年来,基于深度学习(尤其是卷积神经网络CNN)的自动图像特征检索方法得到广泛应用。可以大大提高检索的准确性。此外,我们可以利用PCA等降维方法构建高效合理的快速检索机制,以适应大规模或海量的图像检索任务。上图是基于内容的图像检索的基本框架。我们可以预先建立对图像特征向量的描述,并将其存储在图像特征库中。当用户输入一张待查询的图像时,会用同样的方法提取待查询图像的特征,得到查询向量。然后,在一定的相似度度量标准下,计算查询向量与特征库中每个特征的相似度。最后按照相似度的大小排序,依次输出对应的图片。对于我们的电商场景,各种数据的来源一般分为两部分:卖家端:普通卖家上传商品主图、附图、SKU图、各种详情图。主播,制作直播内容,包括产品截图和视频等。客户端:普通用户,上传相应的UGC内容,买家展示图片等。达人,制作PGC等内容。这些图像数据不仅体积庞大,而且还具有“自然”的结构化信息。上传时,商家可以通过填写图片对应的类别和属性,完成清晰的标注。有了基础数据源,我们就可以通过构建背景图片数据库,进行风格属性识别、OCR文字识别、图片特征检索等操作。在此基础上,结合各种运营活动和策略,我们可以在前端展示产品,方便用户浏览和购买。众所周知,物体很容易受到拍摄环境的影响。例如光照变化、尺度变化、视角变化、遮挡、背景杂乱等因素都会对检索结果产生较大影响。此外,电商也面临着以下几个方面的挑战:电商平台每天都有频繁的商品上架和下架,给指数的整体建设带来了极大的挑战。规模是一把双刃剑。虽然我们有足够的数据用于模型训练,但是庞大的数据量也给整体搜索带来了巨大的压力。数据质量无法保证,尤其是用户上传的各种买家秀图片,以及商家标注错误类目的问题。用户查询也会有多样性,包括对各种上传的产品图片、视频截图、实拍图片的需求。蘑菇街视觉搜索技术架构与研发基于上述数据特征和挑战,我们开发了自己的视觉搜索技术架构。如上图所示,流程如下:收到用户的查询请求后,我们进行类别预测。通过对象检测,我们得到了我们需要的东西。通过特征提取器,提取图像的特征表达。基于ANN检索,获得了足够的检索结果。通过Rerank方法,得到最终的检索结果。基于以上流程,我们将依次介绍其不同的环节。对于类别预测,我们分为三个方向:由于输入数据杂乱,我们需要评估图像的质量,并对质量差或不合适的图像进行处理,以提高用户体验。基于同图过滤方法,对数据库中的同图进行处理。分类各种类别。图像质量评估图像质量评估实际上是对图像审美的认可。目前市场上的大部分图像质量分析主要给出粗粒度的质量分类,例如:好、中、差。因此,他们只是将问题归类为分类问题,并没有在细节上模拟人的审美,给出图像好坏的判断。在这里,我们借鉴了《具有属性和内容自适应的照片美学排名网络》一文的思路,采用了文中提到的前两种网络结构。首先,我们通过人工标注从上图右侧所示的多纬度属性方向对数据进行标注,然后得到美学的综合得分。接下来,我们同时使用单分支和多分支回归网络。单回归网络训练一个回归模型的Reg,其label为图片的总分。通过在某张图片上加上11个打分点,构建多分支,然后融合成一个基于打分的回归网络Reg+Att。训练时,标签的11个属性分数和最终分数会把Reg训练好的权重传递给Reg+Att,最后使用Reg+Att网络进行预测。有了这个网络,我们就可以对数据库中的图片数据进行美感评分,然后过滤掉美感评分差的图片。同图过滤如果我们的搜索结果中有很多相同的图片,势必会降低用户体验。因此,我们使用轻量级的pHash方法来快速过滤相同的图像。这种方法的基本思想是:为每张图片形成一个哈希值。整个计算过程如下:resize一张图片,缩放到8×8的比例,共64个像素。将其转换为灰度图像并计算灰度平均值。将每个像素的灰度值与平均值进行比较。如果大于等于平均值??,记为1;如果小于平均值,则记为0。将这些0和1的结果拼接得到二进制表达式。通过汉明距离计算距离,判断是否是同一张图片。结合销量、价格、开店时间、门店星级等业务逻辑,合并或过滤同一张图。类别分类类别分类的主要目的是减少检索的数据量,提高检索的准确性。在电商场景中,有一个“品类编号”的概念。例如:服装、鞋、包、女装、上衣、T恤构成品类编号的不同分支。其中,服装鞋包为一级品类,女装为二级品类,上衣为三级品类,T恤对应四级品类。如上图所示,我们根据不同品类的数据分布和用户对品类的认知,整理出了以上十个品类,基本涵盖了我们系统中所有的叶子品类。除了以上十个水平类别,我们还结合了垂直四级类别(共504个)来弥补后续的结果召回。同时,由于各个任务之间的相关性,我们采用基于多任务的学习方式,通过相互促进,使模型具有更好的泛化能力。如上图所示,这里的底层网络是ResNet18,下面的两个FC分支分别对应两个不同的具体任务。通过迭代,模型的top1在前十类上可以达到92%,在四级类上可以达到84%。主体检测对于一张图片,我们可以使用两种主流的物体检测方法:FasterR-CNN等两阶段方法和SSD等一阶段方法都是基于RNN的,因此两阶段方法准确率更高;同时,由于是串联的,其计算性能稍差。单阶段方法恰恰相反。鉴于两类方法的优缺点,我们最终采用了基于Refinement网络的模型训练。其中Anchorrefine模块类似于FasterR-CNN中的RPN,Objectdetect模块类似于SSD。中间通过TCB模块进行特征转换,将上层的ARM特征上传到某个检测模块。同时,TCB有一个类似于FPN金字塔形式的前向传递过程。因此,网络相当于与后续的检测模块并行处理RPN,从而保证了检索性能。而且由于接入了FPN的特定系统,对于一些小目标的检测会有更好的效果。我们还基于这个网络制定了一些检测目标。比如我们会检测某张图片中出现的上衣、裤子、裙子、鞋子、包包、人脸等区域。通过迭代训练,我们最终可以达到0.95的MAP,而在K40上的检索性能是25FPS,在P100上会达到50FPS以上。以上四张图展示了我们在不同场景下目标检测的结果:第一张图来自商品搜索结果;第二张图为用户实拍;第三张截图来自直播现场;最后一张图来自线下数据实测。图像特征学习针对真实电商场景中图像特征提取的需求,我们编写了一套多位标注系统。包括:品类的CID、SKU的颜色、图片本身的图案信息、Shape信息等扩展信息。虽然我们在制定标签的时候难免要做大量的数据清洗和整理,但是由于商家在上传图片的时候已经给商品标注了Title等属性信息,我们可以通过这些文字描述直接得到一些文字描述。“天然”标签。此外,我们还可以通过如:风格属性模型、元素图案模型、以及一些细粒度的颜色模型来标注或验证这些数据。在以上两方面的基础上,我们可以结合一些人工审核的方法,最终得到一个比较完整的标签。如上图右侧两行文字,分别代表标签的具体含义。建立好标签体系后,我们就可以开始整理数据了。一般来说,类别越详细越好,每个类别的数据越多越好。但实际中,我们需要将每类数据的体量设置为上限20000,下限1000,避免样本不均衡的问题。因此,完成后,我们最终得到了2319个标签和大约1000万个训练样本。有了数据标签和可供训练的数据,我们就可以使用基于CNN网络的分类模型来训练特征。为了得到更好的分类效果,我们引入了Triplet的网络结构。如上图所示,右图中有三个分支:中间的query,上面的positive,下面的negative。最后我们使用了两种loss:一种是classificationloss,一种是Triplet-basedloss。这样,我们不仅可以减少类内距离,还可以增加类间距离,从而增强特征学习的效果。可以看出,在基于Tripletloss的学习中,关键问题是以上三个分支的选择。对于正样本,我们会选择标签相同的样本;对于负样本,我们将尝试选择那些对应于不同移位的标签图像。因此,通过迭代训练,我们最终的分类效果(即top1)为68%。有了以上基本特征的提取网络,接下来我们就需要考虑应该选择哪些特征。如上图所示,我们对res对应的5a、5b、5c,以及res4的部分层(如fc层)进行了特征提取。通过验证,我们最终认为基于res5a层的结果是最好的。在res5a层,我们会结合GAP(GlobalAveragePooling,全球平均池化)来聚合特征。GAP主要用来解决全连接的问题。如上图所示,基于res5a处理512×7×7的featuremap,我们可以得到一个1×512512的特征。然后,我们执行各种平方和归一化操作以获得最终的检索特征。近似最近邻检索接下来,我们需要通过乘积量化的方式进行最近邻检索。乘积量化是一种在内存和效率之间取得平衡的方法。既能为图像检索结构提供足够的内存,又能保证检索的质量和速度。核心思想是对特征进行分组量化,即将一个特征分成M组,对每组进行详细的量化,然后通过每组量化中心的Carr乘积得到最终的码本。在检索过程中,我们需要建立索引的结构。左上图是我们对数据库使用的检索结构。输入Y对应数据库中的一张图片。通过粗量化的中心计算,我们可以得到一个粗量化的QC,也就是对应的倒排文件入口。通过计算Y和QC之间的残差向量,我们可以导出RY。RY再被M分组,这样每组对应一个细化的中心。这样,我们就可以将图片添加到其对应的粗量化发布链中了。如上右图所示,在查询一张图片时,我们会先通过粗量化找到X对应的检索入口,然后计算其残差,并根据已有的候选查询集计算残差到图片的具体距离集合,最后排序得到检索结果。Reranking为了得到更多的全局特征,我们需要使用Reranking来挖掘图像的局部特征。在这里,我们通过结合RMAC特性和Attention来实现它。RMAC的方法是通过改变窗口来滑动窗口。滑动窗口过程不是在图像本身上执行的,而是在特征图上执行的。因此,它保证了特征提取的速度。然而,RMAC虽然可以提取出很多局部区域特征,但是没有考虑到不同区域之间的重要性。并且在某些情况下,由于某些图片包含较多的背景区域,从而干扰了检索效果。因此,我们需要结合Regionalattention进行学习来获取特征的重要性。具体方法如上图所示:通过前面训练好的网络结构,我们可以得到图像的Res维度特征。接下来,我们根据不同的尺度提取局部特征。通过四个尺度的特征选择,我们可以保证相邻窗口有40%的重叠。之后会配备两个分支:R-MAC模块。它包括最大假脱机和后处理(Post-processing)。后处理过程包括:L2-归一化和PCA-白化。之后,通过sum-pooling和L2-normalization得到全局特征向量的表达。区域注意力模块。鉴于这些局部特征的重要性,我们需要结合Regionalattentionmodule来学习不同的权重。具体过程是:我们融合区域特征(Regionalfeature)和全局特征(Globalfeature)(Meanpooled)来实现对上下文的感知(Context-aware)。在Attention模块中,我们在Channel空间进行Concat,然后进入Attention网络(包括两个线性层和两个非线性层),得到Attention的权重。结合RMAC的上述特征,我们对它们进行加权,得到基于局部特征的表达式。接下来,我们将根据topN结果进行ReRanking。当然,我们还会结合查询扩展进一步提高检索效果。如上图所示,左边是RNN网络提取的全局特征,右边是RMAC+Attention网络提取的局部特征。评估集及指标为了评估效果,我们准备了以下评估数据:查询图片,包括:商品主图、买家秀、直播截图。类似图片,包括:产品图纸和详细图片。共2000组,1对1版式(商品主图对应商品详情图)和1对N版式(一张主图对应N张详情图)。搜索测试数据库:200万。在结果方面,我们设置了两个算法测试指标:TopN的recall结果和TopN的mAP结果。上图展示了视觉搜索的效果。系统及业务应用以上是蘑菇街可视化搜索的系统架构图。分为四个层次:基础网络模型,包括:类别识别、目标检测和深度学习进行特征提取。它还包括基于PQ量化的模型。算法模块分为离线和在线两部分:离线数据处理,包括:目标检测、特征提取、索引库生成,以及通过dump过程生成的一些回显文件和数据。网上搜索过程对应上表。中间界面层,灰色部分为Dump数据的生成,右侧白色在线部分为不同算法模块给出的界面。业务应用层,列出各种业务。目前除了http接口,我们还接入了ZSerach和推荐引擎来丰富推送结果。下面具体介绍几种业务应用:运营选品业务:导购运营是基于时尚服饰等图片,利用视觉搜索技术在蘑菇街上寻找对应的商品。我们通过接入选品后台,根据操作输入的图片搜索各种相似的产品图片。这些图片附有价格、销量、折扣、上架时间等产品信息。运营筛选所需的商品通过APP前端推送给用户,避免了人工找图的工作量,提高了运营效率。同品审核:电商基础业务需要对商户上传的商品图片进行同品审核,并为商户提供审核结果的在线查询。因此,我们在接入视觉搜索技术后,利用识别系统对同一商品进行判断,返回结果数据。算法上线后,整个系统的准确率达到99.06%,而漏检率仅为3%。搜索购买产品:我们在2017年底上线了这款产品的App端,2018年初上线了女装微信小程序。这款产品的整体情况是:日均UV可达50万左右。搭配TAB:为了向用户推荐各种搭配产品,我们基于现有的图像数据库,结合目标检测算法,对全身图像中的产品进行检测。系统通过区分不同的块来获得相似产品的搜索结果。如上图所示,用户在首页点击搭配图片后,可以获得详细的展示信息,然后在三级页面可以看到不同区块的相似度推荐结果。BuyTheLook:在内容分享场景中,明星会晒出自己的服装自拍。我们根据这些图片进行目标检测,通过每个区块进行相似搜索,最后将对应的相似商品推送给用户。【原创稿件,合作网站转载请注明原作者和出处为.com】