分层表示改善图像检索
图像匹配的实践应用
图像匹配具有许多实际应用。例如,某中心的StyleSnap或某购物应用的相机搜索功能允许客户上传照片以搜索相似图像。图像匹配通常通过将图像映射到表示空间(嵌入空间)并查找映射位置相近的图像来实现。
在我们于WACV 2022会议上发表的论文中,我们阐述了在训练神经网络计算图像表示时,通过显式建模对象层次结构来提高图像检索准确性的方法。
商品图像的层次结构
以购物网站为例,可能将一组商品分类为服装(超类),其中包含T恤和连帽衫等类别,这些类别又包含特定T恤和特定连帽衫的实例。
在我们的论文中,我们展示了在构建图像检索系统时如何利用此类层次结构,或者在不存层次结构时如何构建它们。通过在五个不同数据集上使用多种性能指标将我们的方法与九种先前方法进行比较实验,我们发现我们的方法在大多数情况下都能提供最佳结果。
深度度量学习
图像检索的图像匹配通常依赖于深度度量学习(DML),其中深度神经网络不仅学习如何将输入映射到嵌入空间,还学习用于测量该空间邻近度的距离函数。
训练DML网络主要有两种损失函数:成对损失和代理损失。成对损失(例如对比损失、三元组损失)在正负对之间计算,将正对拉近,同时将负对推开。代理损失(例如proxy-NCA、proxy-anchor)学习一组称为代理的嵌入,这些代理表示类成员的平均位置或类中心点。每个训练样本的损失是相对于代理计算的。
成对损失需要从训练数据中采样信息丰富的对/三元组;代理损失则不需要这种采样,消除了对采样的复杂性并加速了训练。特别是,代理锚点损失已被证明可以实现最先进的图像检索精度,同时比成对损失收敛得更快。
我们的工作提出了一种新的代理损失,它显式利用类层次结构信息来提高图像检索准确性。
分层数据
对于分层数据,有机会通过损失函数对嵌入空间施加额外约束,使得同一超类中的图像也被分组在一起。这不仅有助于模型泛化到未见过的类(因为它学习了超类内的共性),而且在模型犯错时也会导致更合理的检索结果。
分层代理损失
我们的分层代理损失(HPL)是现有代理损失的扩展。HPL由代理层次结构组成,每个训练图像在每一层都被分配给单个代理。然后,损失计算为所有层代理损失的加权和。
在每一层,每个图像被拉向分配的代理并远离所有其他代理。这通过在每个层级学习每个组内的共性,引导网络分层分组图像。
现在的问题是如何在数据层次结构未提供(例如通过电子商务目录)的情况下构建代理层次结构。在这种情况下,我们在训练期间对较低层代理应用在线聚类以获得较高层代理。
我们从一个经过训练以在最细粒度级别生成代理的DML模型开始。然后我们运行以下训练算法:
- 在精细代理上运行聚类算法(例如k-means)以获得粗糙代理;将每个样本分配给一个粗糙代理
- 训练网络T次迭代,更新网络和细粒度代理
- 每T次迭代后,更新样本到粗糙代理的分配,并通过分配的低层代理平均值更新高层代理
- 重复步骤2-3直到收敛
实验结果
我们在最新代理损失(proxy-NCA和代理锚点损失)的基础上实现了HPL,其中代理锚点损失是度量学习中最先进的损失函数。我们在五个标准度量学习数据集上评估了图像检索准确性,发现HPL持续改进了proxy-NCA和代理锚点损失的检索准确性,实现了新的最先进水平。详细的实验评估可在我们的论文中找到。