加入收藏 | 设为首页 | 会员中心 | 我要投稿 92站长网 (https://www.92zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 移动互联 > 应用 > 正文

[多模态检索] 视觉搜索技术在淘宝的应用 - 拍立淘系统介绍

发布时间:2022-10-31 16:01:00 所属栏目:应用 来源:转载
导读: 论文链接:
最近工作有些图片检索的任务, 所以想好好读一读淘宝pailitao系统的这篇文章.
1. 场景
Pailitao
Content-based image retrieval, 以图搜图
在淘宝的业务场景做这种事情主要的挑战

论文链接:

最近工作有些图片检索的任务, 所以想好好读一读淘宝pailitao系统的这篇文章.

1. 场景

Pailitao

Content-based image retrieval, 以图搜图

在淘宝的业务场景做这种事情主要的挑战有:

但是, 得益于淘宝的成功, 淘宝做这样的事情也有着得天独厚的优势:

2. 相关工作

CNN for instance Retrieval:

基于CNN模型对图片提取特征向量, 一般来说有两种方案:

不过这种image search对于淘宝的场景不是很符合. 这种考虑的是图片整体的匹配, 而商品图搜更关注image中的主体商品, 最好可以排除掉背景.

Deep metric embedding:

metric learning 常规操作了, 一般基于siamse或者triplet, 虽然训练相对于之前的方案复杂一些, 不过得到的向量又更好的类内聚集度和类间区分度, 对于fine-grained 和 various的图片集效果较好. 这里的方案也是基于这种

Weakly supervised object location:

前面提到因为只想关注用户拍摄图片的主体商品, 因此有一种方案就是用目标检测的方法定位商品位置.

但是这种方案对数据标注要求高, 而且通常是两阶段的模型, 检测的网络需要单独训练, 线上使用很不方便.

基于上面的技术, 这里给出的方案主要的优势在于:

3. Visual Search 架构

淘宝手机应用_淘宝 应用_淘宝应用

主要分成 offline 和 online 两部分:

online 主要负责实时请求, 在用户上传一张图片后

3.1 Category Prediction

搞了两个模型做融合

classification 模型

用GoogLeNetV训练了一个商品图片 -> 商品品类的softmax多分类模型

Search-based 模型

离线用2亿图片构建一个向量索引库, 对于新图片返回最接近的30张图片.

根据这30张图片的类目来预测query图片的类目 w(x, x_i) = exp(-\lambda |x-x_i|)^2 , 这是每个返回图片的权重, 然后把每个类目下权重加起来, 最大的类目就是预测类目. \lambda 的选择可以离线用最大似然统计得到.

然后为了提升整体效果, 对两者的结果做加权和. 得益于特征比较有区分度, search-based模型可以提升classification在某些容易混淆的类目的效果. 大概提升 2% top1 准确率

3.2 Joint Detection and Feature Learning

这一节有两大块, 一个是如何挖掘样本做triplet mining, 还有一个是怎么巧妙用简单方法端到端实现目标检测任务

再介绍具体方案之前, 可以先看下目标检测在商品图片检索任务的重要性:

淘宝应用_淘宝手机应用_淘宝 应用

没有了检测框, 返回的结果受杂乱背景影响太大. 而框出了具体商品, 才有了理想的instance的召回结果.

3.2.1 PVLOG triplet mining

ranking loss:

f是特征提取函数, 也就是要求query image和正样本的距离 - query image和负样本的距离 大于 margin, 也称为margin loss, 这里margin \delta = 0.1 , 一般都是调参得到的.

淘宝手机应用_淘宝 应用_淘宝应用

模型和训练比较简单, 主要是正负样本怎么构建, 尤其是难样本.

最直接的方法选择类目和query image一样的图片作为正样本, 类目不一致的作为负样本. 但是这种样本区分度太高了, 模型很容易就学到类目差异就结束了, 这显然不满足召回商品的需求.

offline 挖掘

因此这里使用了点击日志进行数据挖掘. 对于用户查询的query image - q, 返回列表中被点击的image就是正样本 d^{click} , 未点击的image就是负样本 d^{nonclick} .

这样得到的负样本通常来说和query会比较接近, 属于难样本的范畴. 但是存在一个问题: 用户并不会对所有和query相同的图片发生点击, 一模一样的东西点击一次就够了.

所以再加条约束, 负样本不能和query image太过接近, 也不能和被点击的image太过接近:

这里的挖掘是offline的, 所以dist的计算比较复杂, 综合了local feature, previous version feature 和 ImageNet feature.

相对应的, 为了确保正样本的准确性, 也约束了正样本必须和query image非常接近:

online 挖掘

m组triplet, 可以将负样本在mini batch内共享, 就得到 m^2 个triplet

最终的ranking-loss:

淘宝 应用_淘宝应用_淘宝手机应用

其中Q是所有query image, Nq是所有负样本集合. loss是将所有query针对所有负样本的平均loss求和后再求平均. query-level相比triplet-level更能减少噪声query的影响, 均衡采样的数据.

通过优化ranking loss, 也实现了将用户上传的图片和库里面的标准商品图片在同一个向量空间

3.2.2 Unified deep ranking framework

训练fasterRCNN 或者 SSD等目标检测算法成本比较高, 而且部署两阶段模型也比较困难. 为此这里采用模型拟合一个矩形框来识别主体.

矩形框的数学表达可以看作是一个阶跃函数:

这样就转化为对 x_l, x_r, y_l, y_b 四个坐标的建模, 但是阶跃函数是不可导的, 实际训练比较麻烦, 为此可以用sigmoid来近似: f(x) = \frac{1}{1+e^{-kx}}

, 然后只要k取值比较大, 就可以实现阶跃函数的近似. 而这个sigmoid函数可以直接作为网络层, 进行端到端学习:

淘宝手机应用_淘宝 应用_淘宝应用

上图就是一张图片先学习mask, 再应用在原图的效果. 融合近ranking loss的训练为:

淘宝手机应用_淘宝应用_淘宝 应用

这样就可以在降低ranking loss的适合兼顾到尽量只关注目标区域的效果,而这并没有依赖额外的bounding box的标注.

3.3 Image Indexing and Retrieval

线上的索引服务结构图:

淘宝手机应用_淘宝应用_淘宝 应用

3.3.1 Large-scale search of billion-scale image

multi-shards和multi-replications是索引服务上线的常规操作了.

multi-shards是对完整的索引切成多个分片淘宝应用, 每片有一部分候选池. 这个主要是为了应付索引量太大, 单机内存不够的情况. 最后会将每个shard的knn结果汇总.

multi-replica是把同样的索引部署多台机器, 应付线上QPS过高的问题.

然后每个节点有两种索引: coarse filter 和 fine re-rank.

coarse filter会根据索引直接返回ANN的结果.

re-rank会用到其他信息, 例如: visual attributes, local feature等对ANN的结果重新排序.

3.3.2 Quality-aware image re-ranking

除此之外, 在query image和return image的相似性之外, 为了提升图片最终的点击和转化, 又额外引入了一些质量相关的信息. 对于返回的top60的结果, 用销售额, 转化率等业务指标重新建模了一个排序模型. 基于GBDT组合特征+LR映射到[0, 1]分进行排序.

最终结果既保证了和query的相似性, 又保证了返回的商品结果的转化效果.

4. Experiment4.1 Evaluation of Category Prediction

先看分类结果:

淘宝手机应用_淘宝应用_淘宝 应用

分类模型的ACC@1 为88.86%, 而search-based模型为 85.51%, 略差于分类模型. 但是融合后的结果为91.01%, 验证了这种方案的有效性.

4.2 Evaluation of Search RelevanceEffect of feature branch:

先和基于ImageNet训练的分类模型做对比, 为了只对比特征提取的效果, 选用最后的FC层, 拿掉了检测框的识别:

淘宝应用_淘宝 应用_淘宝手机应用

这个明显是要好于用ImageNet训练的结果的.

然后table1(b)中的0.465, 相比于这里的0.415提升5个点, 说明了同时建模一个检测框的优势, 可以过滤不必要的背景干扰.

淘宝 应用_淘宝应用_淘宝手机应用

Effect of PVLOG triplet:

相对于分类模型的特征, 使用triplet数据训练后的模型效果更好:

淘宝 应用_淘宝应用_淘宝手机应用

无论是recall还是map都有明显提升.

淘宝手机应用_淘宝应用_淘宝 应用

可视化结果展示了向量相似结果对于实际语义相似的描述.

4.3 Evaluation of Object Localization

对比SSD做目标检测和端到端方案:

淘宝手机应用_淘宝应用_淘宝 应用

Recall指标只是略低, 而且latency有明显优势.?

淘宝 应用_淘宝应用_淘宝手机应用

上面结果显示了简化版的端到端target定位得到的矩形框可以很好的标出图中的主体目标.

4.4 Evaluation of Indexing and Reranking

淘宝手机应用_淘宝 应用_淘宝应用

为了对比特征向量索引化后的效果差异, 以线性搜索(每两个向量的距离都会计算)的结果为groundtruth, 对比ann结果的差异. 显示在Recall@60上的损失也非常小.

然后针对CVR优化的基于quality-aware的rerank, 也确确实实带来了CVR的增长, +7.85%.

最后整理每一步的时效分析:

整体的时效控制在100ms以内, 在实际业务场景是完全可以接受的.

5.总结

本文介绍了Palitao使用的visual search 系统. 主要分成四个模块:

这里面还是有很多值得借鉴的地方:

分类

工作上分类的任务做的不少, 一般肯定是有监督的分类模型效果好. 然后依靠相似聚合top类别的方式也用过, 不过准确率比分类模型还是差不少.

融合后显示这种相似方法对分类模型处理不好的混淆类别有一定提升. 分类模型遇到瓶颈时可以试试这种方案.

target detection + feature extraction

在训练过程中强行加个矩形框mask的学习还是挺有意思的, 避免了使用耗时的常规目标检测效果, 而且最终学到的框的位置还挺准的, 可以对应target物品的区域.

这其实很像加了一个global attention, 只是这个attention值不是随机分布的, 而是在spatial上必须构成一个矩形区域. 在实际中, 对于这种需要忽略背景影响的instance 匹配场景也可以试试.

indexing

依靠分类缩小候选范围, 依靠multi-shard + multi-replica 提升索引规模

先直接ann检索得到coarse结果, 再依靠模型重排

rerank

以图搜图是一个纯内容匹配的任务, 但是在实际业务上, 肯定还是希望能尽可能提升业务指标.

因此在保证语义匹配相似度的同时, 在粗排结果后, 用以CVR为目标训练的模型对top结果再精排一次. 既保证了相关性, 又提升了业务指标.

召回+粗排+精排的模式真是屡试不爽.

(编辑:92站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!