业务背景随着电子商务的快速发展,“货比三家”已经成为大众的日常生活,但种类繁多的商品也增加了很多负担比价,各个购物平台的优惠规则不一样。为了让用户实时找到最新的低价,同款的识别成为破局的关键,只有相同的产品(相同sku尺寸)才有比价意义。淘宝官方比价平台“有好价”专注于实时更新全网最低价商品,能够第一时间向用户展示同款低价商品。业务难点图1图2不同于一般的图片搜索,你只需要找到相似的图片,而同一物品的图片检索属于细粒度搜索,需要找到完全相同的物品。同款图片检索的难点在于:类别之间混淆的问题,即如何区分相似款式和同款,如图1所示,都是黑色的连衣裙,是通过图片搜索召回图片,但是在局部细节上的特征不同,所以不是同一个段落。类内混淆问题,即同一风格本身存在较大差异。如图2所示,是同一商品的主副图,但由于拍摄角度不同,增加了检索难度。解决方案?网络结构BatchDropblock随着淘宝商家越来越多,商品的陈列也“百花齐放”。不同角度、不同场景拍摄的产品图片增加了识别难度,牛皮癣的扩散使得图片碎片更加难以区分。然而,目前主流的CNN网络往往将重点放在被识别物体的主体上,忽略了局部细节特征,从而抑制了其他可区分的部分,导致召回产品中存在大量相似产品。当然,可以通过检测和分割来改善癣的问题,但这些工作对于处理全球产品来说显然过于复杂和繁琐。Batchdropblock旨在设计一个简单且适应性强的网络来解决这个问题。具体方案如下:即对于一批featuremaps,随机遮挡同一区域,强制网络在剩余区域学习一些细节特征。通过结合全局特征和局部特征,CNN可以提取更稳健和全面的图像特征。网络结构如图所示。使用ResNet50作为骨干网络提取特征,去除ResNet50中第四阶段的下采样,得到更大的特征图。然后将特征分成两个分支,一个分支为全局分支学习全局特征,另一个分支为局部分支学习局部特征。在训练期间,两个分支同时学习为多任务。测试时,将全局特征和局部特征concat在一起作为图像的embeddingvector。BatchDropblock的优点是不增加网络参数,适用于所有CNN模型,可以针对不同的任务调整超参数。Second-OrderAttention淘宝商家经常会在图片上添加一些注释。这些注释通常用于描述产品。但是由于卷积神经网络的感受野有限,很难得到笔记和商品之间的联系。对此,在卷积层之间加入SelfAttention,计算局部特征之间的相关性。具体算法如下:q、k、v表示图像特征m*m经过1*1卷积后生成的特征向量。GemPooling的localfeatures的maxpooling和globalfeatures的averagepooling比较极端,可以用generalizedmeanpooling代替(poolinglayerwithlearnableparameterp),p值越大,局部化程度越高特征图响应。其中,当p接近无穷大时为maxpooling,当p=1时为averagepooling。?LossFunctionTripletLoss相同模型的核心解决方案是让网络缩小类内距离,扩大类间距离。这就是MetricLearning的核心思想。所以,第二个难点遇到的问题,通过优化Lossfunction来解决。众所周知,Softmax优化类间距离比较强,但是类内距离比较弱。基于MetricLearning构建的损失函数可以做到类内紧凑和类间分离,比如ContrastiveLoss和TripletLoss,但是这些Loss对噪声比较敏感,单独训练时模型很难收敛。对此,将Softmax和Tripletloss叠加训练,LossFunction如下,其中xi表示锚点,xp表示与锚点相同的正样本,xn表示与锚点相同的负样本与锚点不是同一类型,f(x)表示模型输出的embedding。SoftmaxLoss仅使用TripletLoss来训练网络,网络很难收敛。需要添加用于分类的SoftmaxLoss。SoftmaxLoss可以很好地放大逻辑值的差异,将正确类别的概率逼近1,有利于模型的快速收敛。SoftmaxLoss分类器学习到的特征空间呈现扇形分布,余弦距离检索优于欧氏距离。但是,SoftmaxLoss也有明显的问题。边界样本与相邻类之间的余弦距离很可能小于样本与同类之间的距离,容易造成检索错误。SolarLoss因为图片在输入网络之前需要resize到224×224,但是商品图片的不一致会造成变形,所以使用了二阶相似度(可以捕捉到更多的结构化信息,robusttodeformation)highperformance)作为正则项加入到损失函数中。实验过程?训练集准备在使用TripletLoss进行训练时,需要提供图像对作为训练样本,但是pairpairs的labelingcost非常高。如图所示,网站中的主副图是商家从不同角度拍摄同一商品生成的,所以主副图大部分可以理解为同一个商品。因此在TripletLoss中可以将主副图作为正样本对,负样本只需要选择不使用乘积的主副图,最终分类任务的标签选择叶子产品类别。实验中,训练集随机选取了2230万张商品主副图,但由于主副图中有商家展示的活动图片,这些嘈杂的图片会使模型无法收敛。为了处理嘈杂的样本,我们在训练前清理训练集。首先使用ResNet50提取图像特征,然后使用DBSCAN聚类算法对提取的特征进行聚类,去除噪声样本(如下图红框内的广告图片)。清洗后得到1910万张图像数据。DBSCAN聚类算法需要调整阈值。如果阈值太高,样本分布会很简单。阈值太低,噪声太大,达不到过滤效果。因此,这里将参数设置为0.8,保证加入困难的正样本,提高检索模型的鲁棒性和泛化能力。?在开始训练过程中,模型的权重是使用ImageNet数据集预训练的ResNet50模型。此时如果选择较大的学习率,模型可能会出现震荡。为此,选择Warmup预热学习率方法,并在开始训练前的几个epoch或一些步骤中使用较小的学习率。在预热的小学习率下,模型可以逐渐稳定。在模型相对稳定后,选择预设的学习率进行训练,可以加快模型的收敛速度,使模型更加有效。训练与优化同一个图像检索模型的训练过程中最重要的是困难样本的挖掘。最近,大量工作致力于改进抽样或加权方案。目前的改进方法主要有两种思路:第一种思路是在mini-batch上下功夫,对于mini-batch中的样本对,从各个角度衡量它们的难度,然后给出更难的样本对。高权重,比如N-pairLoss、LiftedStrutureLoss、MSLoss,都是这种方式。第二种思路就是在mini-batch的生成上做文章,比如HTL,divideandconquer。虽然他们的方法看似各有不同,甚至复杂微妙,但其实差别还不错。严格来说,大意是对整个数据集进行聚类。每次生成一个mini-batch时,它不是从整个数据集中采样,而是从一个子集,或者说一个小的集群中采样。这样一来,由于采样范围本身就比较集中,那么生成的mini-batch中困难样本的比例自然就会高。但是上面所有的思路都只是比较当前mini-batch中的样本对,形成样本对。跨时空难点样本挖掘(CrossBatchMemory,XBM)就是要突破这个限制,将过去的mini-batch样本提取的特征进行比较,形成样本对,这样只需要少量的显存就可以用于挖掘大量困难样本。XBM非常简单。需要先按原来的方式训练网络,等featureoffset变小,再加入XBM。一个特征队列,用于记住过去小批量的特征。每次迭代,将从当前mini-batch中提取的最新特征加入队列,将最旧的特征踢出队列,从而保证XBM中的特征尽可能是最新的..每次都去打样。当前mini-batch和XBM中的所有特征都进行了配对和比较。结果,形成了大量的样本对。如果XBM存储过去100个mini-batches的特征,它生成的样本对数量是mini-batch-based方法的100倍。由于XBM可以工作的假设是特征偏移量小,因此在实际应用过程中很难确定模型特征偏移量小到什么时候启动XBM,偏移量的相对大小受限于数据集和模型。因此,提出了一种新的训练方法——IncrementalXBM。具体操作如下:最初选择一个小的历史特征库,随着训练的进行,不断增加历史特征库的数量,效果比一开始就指定一个大的要好。特征库的数量。实验结果选取天猫淘宝站内500万件商品作为产品锅,外包选取30000个匹配对进行标注。下面的实验结果是Top1000的召回率。?选择ResNet50作为模型优化实验的backbone,对比实验分别为ResNet50+SelfAttention、ResNet50+GEMPooling、ResNet50+BDB。由于网络结构不同,收敛时间不同,以验证集上召回率变化小于0.05%作为收敛条件。LossFunction只使用SoftmaxLoss,实验结果如下:AlgorithmschemerecallResNet5057.75%ResNet50+SelfAttention58.03%ResNet50+GEMPooling59.27%ResNet50+BDB63.64%从实验结果来看,可以可见BDB可以显着提高模型的召回率。?LossFunction优化实验的backbone仍然使用ResNet50。由于单独使用TripletLoss,模型很难收敛,所以不单独比较。实验分别是SoftmaxLoss、SoftmaxLoss+TripletLoss、SoftmaxLoss+SolarLoss。实验结果如下:算法方案召回率SoftmaxLoss57.75%SoftmaxLoss+TripletLoss65.32%SoftmaxLoss+SolarLoss58.27%?训练优化实验仍然使用ResNet50作为backbone,因为CrossBatchMemory主要用于挖掘困难样本,LossFunction需要加入TripletLoss。实验分别是ResNet50+Tripletloss、ResNet50+TripletLoss+XBM、ResNet50+TripletLoss+IncrementalXBM。实验结果如下:该算法方案的召回率ResNet50+Tripletloss65.32%ResNet50+Tripletloss+XBM67.54%ResNet50+Tripletloss+IncrementalXBM69.13%?最终实验结果通过以上实验结果,对所有的优化方案进行总结,实验结果如下:RecallrateofalgorithmschemeResNet50+BDB+Tripletloss+IncrementalXBM+GEMPooling+SolarLoss+SelfAttention77.65%识别图像算法优化。首先,本文提出随机遮挡同一区域,强制网络在剩余区域学习局部特征,结合局部特征和全局特征同时训练,不增加新的参数,针对局部特征改进图像.特点关注。其次,本文还通过加入selfattention来获取localfeatures之间的联系,增加textnote和products之间的联系。三、本文采用多任务学习的方式,同时联合训练SoftmaxLoss和TripletLoss,并加入二阶Loss作为正则化,不仅可以加快模型的收敛速度,还可以大大提高模型的鲁棒性。第四,在训练过程中加入CrossBatchMemory,只需少量增加内存消耗,就可以大大提高难点案例挖掘的效率。在未来的工作总结中,我们将重点优化以下几个方向:使用VisionTransformer代替ResNet网络,VisionTransformer保留了更多的空间信息。目前只是针对物品维度的同款识别,需要具备识别同款图片的能力。扩展到sku维度
