Visual search at alibaba阅读笔记

Title

Zhang Y, Pan P, Zheng Y, et al. Visual search at alibaba[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. ACM, 2018: 993-1001.

Summary

这是alibaba拍立淘团队的一篇论文,介绍了拍立淘的实现方法。 总的来说,提供了大的实现方向,但是很多细节都没有介绍。

  1. 当图片类别多且细的场景下,往往应该先进行类别分类,会大大提高后面的出来性能(模型和搜索的融合,提高了精度)
  2. 图片的特征学习,往往图片背景复杂的时候,并且query与gallery之间有较大的gap,我们希望将query的图片复杂背景进行消除,就涉及到了关键物体检测,而分段的检测在特征提取会耗费大量时间,并且需要标注样本,故论文中提出了检测和特征学习结合的网络框架。
  3. 二进制倒排索引+汉明距离是一种快速的粗粒度检索方式
  4. 在re-ranking的时候要考虑到特定的业务场景,来制定re-ranking的标准
  5. 大规模的系统,单机无法支撑大量的数据存储以及高并发的请求。这时候就涉及到了分布式架构,自然就会有多片,多备份等技术。

Research Objective

建立一个健壮地大型商业视觉搜索引擎

Problem Statement

Alibaba拍立淘搜索系统的实现

Challenges

  1. Heterogeneous images matching (query与gallery之间存在语义和视觉的gap)
  2. Billions of data with fne-grained categories (大量且不断增长的细粒度类别图像数据)
  3. Huge expense for maintaining training data (模型所需训练数据的收集)
  4. Improving the user engagement (商业应用的必要)

Methods

  1. 模型和搜索融合的分类方法

    • GoogleNet V1 + softmax loss 分类模型得到类别标签 [模型]
    • 网络输出的feature在2亿图片集中进行搜索,取top30的图片类别进行加权 [搜索]

    最终结果是模型得出的标签与搜索得出的标签进行加权

  2. 检测特征学习联合的深度模型(通过挖掘用户点击行为)

    • 整体结构

    通过整体结构图,可以看出此部分模型涉及到一下关键知识点:检测 特征学习 三元组 难样本挖掘

    • 结构细分支
      在这里插入图片描述

    检测分支和特征学习分支相结合,在检测分支涉及到一个问题就是图像掩码即M是不可微的,无法进行反向学习求导。进而使用sigmoid函数来近似代替。

    • 三元组样本挖掘(用户点击数据)
      在这里插入图片描述

    original triplet loss :

    [ L 2 ( f ( q ) , f ( q + ) ) − L 2 ( f ( q ) , f ( q − ) ) + σ ] + [L_2(f(q),f(q^+))-L_2(f(q),f(q^-))+\sigma]_+ [L2(f(q),f(q+))L2(f(q),f(q))+σ]+

    selected hard positive and negative :

    positive:

    q + ∈ { d c l i c k ∣ d i s t ( d c l i c k , q ) ≤ ε } q^+\in \begin{Bmatrix}d^{click}|dist(d^{click},q)\leq \varepsilon \end{Bmatrix} q+{dclickdist(dclick,q)ε}

    negative:

    q − ∈ { d n o n c l i c k ∣ m i n ( d i s t ( d n o n c l i c k , q ) , d i s t ( d n o n c l i c k , d c l i c k ) ) ≥ γ } q^-\in \begin{Bmatrix}d^{nonclick}|min(dist(d^{nonclick},q),dist(d^{nonclick},d^{click}))\geq \gamma \end{Bmatrix} q{dnonclickmin(dist(dnonclick,q),dist(dnonclick,dclick))γ}

    improved triplet loss :

    l o s s = 1 ∣ Q ∣ ∑ q ∈ Q 1 ∣ N q ∣ ∑ q − ∈ N q [ L 2 ( f ( q ) , f ( q + ) ) − L 2 ( f ( q ) , f ( q − ) ) + σ ] + loss = \frac{1}{|Q|}\sum_{q \in Q} \frac{1}{|N_q|}\sum_{q^-\in N_q}[L_2(f(q),f(q^+))-L_2(f(q),f(q^-))+\sigma]_+ loss=Q1qQNq1qNq[L2(f(q),f(q+))L2(f(q),f(q))+σ]+
    Q = { q ∣ ∃ q − , L 2 ( f ( q ) , f ( q + ) ) − L 2 ( f ( q ) , f ( q − ) ) + σ > 0 } Q = \begin{Bmatrix}q|\exist q^-,L_2(f(q),f(q^+))-L_2(f(q),f(q^-))+\sigma > 0\end{Bmatrix} Q={qq,L2(f(q),f(q+))L2(f(q),f(q))+σ>0}
    N q = { q − ∣ L 2 ( f ( q ) , f ( q + ) ) − L 2 ( f ( q ) , f ( q − ) ) + σ > 0 } N_q = \begin{Bmatrix}q^-|L_2(f(q),f(q^+))-L_2(f(q),f(q^-))+\sigma > 0\end{Bmatrix} Nq={qL2(f(q),f(q+))L2(f(q),f(q))+σ>0}

    triplet level -> query level (减少噪声query的影响,并且平衡数据,克服用户和商家图片直接的gap)

  3. 设计了在扩大索引不影响recall和precision的二进制索引

    图像ID作为key,二值化的CNN特征作为value,建立了改进地二值倒排索引。

  4. 高效可扩展的end to end系统架构

    系统结构图:
    在这里插入图片描述
    Multi-shards:

    多台多片的策略,每片上存储的都是一个子集。当一个query请求的时候,每片的node都会在自己的子集上查找,并返回top k的结果,最后将每片的结果merge在排序。[保证了性能和召回]

    Multi-replications:

    多复制机制,如果Q个请求,会将其分为R个part,每个part有Q/R个请求,降低了压力。[保证了QPS]

    coarse flter

    二进制倒排索引 + hamming distance

    re-ranking

    在粗粒度搜索后进行进一步重排序

    大量的特征信息,通过GDBTLogisic regression来得到一个[0,1]的分数。 [用户的CTR和CVR]

Evaluation

精度:

  • 模型和搜索融合的类别分类方法比单一模型方法有效
  • 添加了检测分支的网络模型提取的特征,在搜索下得到更好的结果
  • 结果图
    在这里插入图片描述

时间:

分类 30ms / 特征提取 40ms /粗粒度搜索结果 10-20ms (1200items) / re-ranking 5ms (top60)

Conclusion

在alibaba这种商业场景下,提供了一个整体图片搜索方案,高效且实用。

Supplement

  1. 分类标签加权的权重确定方式
  2. mask函数被sigmoid近似的实现
  3. 二值化网络特征的方式

Reference

Visual Search at Alibaba

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Visual Studio是一个功能强大的集成开发环境(IDE),有许多插件可以帮助提高代码阅读和开发效率。以下是一些推荐的Visual Studio插件,它们在代码阅读、文档管理、调试等方面非常有用: 1. **Visual Studio Code Extensions** (VSCode插件): 虽然不是直接为Visual Studio设计,但VSCode插件库丰富,如GitLens, Todo Highlight, DocumentThis等,可以扩展VSCode的功能到VS上。 2. **Color Coding Extensions**: 这类插件有助于代码颜色高亮,例如Syntax Visualizer,使代码结构更加清晰。 3. **Code Navigation**: Resharper或RoslynPad提供强大的代码搜索和导航功能,帮助快速定位和理解代码。 4. **Documentation and API References**: Symbol Search Preview、NuGet Package Explorer可以帮助查看和搜索项目中的API文档。 5. **Code Quality & Linting**: SonarLint for Visual Studio可以帮助检测代码中的潜在问题,保持代码质量。 6. **Code Formatting**: Prettify Code, ESLint for Visual Studio等用于格式化代码,确保一致性。 7. **Debugging Tools**: DebugView或Visual Studio本身的一些高级调试工具,如Conditional Breakpoints, Watch Windows等。 8. **Code Snippets**: Productivity Power Tools或snippet providers,提供预定义的代码片段,提升输入速度。 9. **Version Control**: Visual Studio Team Services (VSTS) 或 GitLens提供了直观的源代码管理和版本控制支持。 10. **Code Maps**: Visual Studio Code Extensions中的Code Map View可以生成项目的代码地图,帮助理解和导航大型项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值