图像相似性
此目录提供了构建图像相似性系统的示例和最佳实践。我们的目标是让用户能够使用自己的数据集,轻松快速地训练出高精度模型。为此,我们提供了示例笔记本,其中预设了在各种数据集上表现良好的默认参数,并提供了关于常见陷阱、最佳实践等方面的详细文档。
图像检索示例,左侧是查询图像,右侧是与其最相似的6张图像
最先进技术
大多数最先进的图像相似性系统都使用深度神经网络(DNN)来计算图像的表示(例如,一个包含512个浮点值的向量)。然后,两张图像之间的相似性定义为它们各自DNN表示之间的余弦或L2距离。
最近的图像相似性论文之间的主要区别在于DNN的训练方式。一种简单但出人意料地强大的方法是使用标准的图像分类损失——这是01_training_and_evaluation_introduction.ipynb笔记本中采用的方法,并在分类文件夹中进行了解释。更精确的模型通常通过三元组学习(Triplet Learning)明确地为图像相似性进行训练,例如著名的FaceNet论文。虽然基于三元组的方法能达到良好的准确性,但它们概念复杂、速度较慢,并且由于如何挖掘好的三元组等问题,更难以训练/收敛。
相反,笔记本02_state_of_the_art.ipynb实现了BMVC 2019论文《分类是深度度量学习的强大基线》,该论文表明这种额外的开销是不必要的。实际上,通过对标准分类模型进行微小更改,作者在三个常见研究数据集上取得了与之前最先进技术相当或更好的结果。
以下是该领域一些热门论文及其在标准基准数据集上报告的准确率
论文 | 年份 | 使用三元组学习 | Recall@1 CARS196 | Recall@1 CUB200-2011 | Recall@1 SOP |
---|---|---|---|---|---|
通过提升结构化特征嵌入的深度度量学习 | CVPR 2016 | 49% | 47% | 62% | |
带角度损失的深度度量学习 | ICCV 2017 | 是 | 71% | 55% | 71% |
采样在深度嵌入学习中的重要性 | ICCV 2017 | 是 | 80% | 64% | 73% |
使用代理的无忧距离度量学习 | ICCV 2017 | 是 | 73% | 49% | 74% |
带层次三元组损失的深度度量学习 | ECCV 2018 | 是 | 81% | 57% | 75% |
分类是深度度量学习的强大基线 (在此存储库中实现) |
BMVC 2019 | No | 84%(512维) 89%(2048维) |
61%(512维) 65%(2048维) |
78%(512维) 80%(2048维) |
重排序
除了上述SOTA方法之外,我们还提供了CVPR 2017论文《使用k-reciprocal编码对行人再识别进行重排序》中发表的流行重排序方法的实现。重排序是提高检索准确性的后处理步骤。所提出的方法快速、全自动、无监督,并且在准确性方面超越了其他最先进的方法。
常见问题
关于“我需要多少张图像来训练模型?”或“如何标注图像?”等常见问题的答案可以在FAQ.md文件中找到。有关图像分类的特定问题,请参阅分类文件夹中的FAQ.md。
Notebook
我们提供了几个笔记本,以展示如何设计和评估图像相似性算法。
Notebook 名称 | 描述 |
---|---|
00_webcam.ipynb | 快速入门笔记本,演示如何使用单张图像或网络摄像头作为输入来构建图像检索系统。 |
01_training_and_evaluation_introduction.ipynb | 笔记本,解释基于用于图像分类训练的DNN的模型训练和评估的基本概念。 |
02_state_of_the_art.ipynb | 实现了上表中提到的最先进的BMVC 2019论文。 |
11_exploring_hyperparameters.ipynb | 使用网格搜索寻找最佳模型参数。 |
12_fast_retrieval.ipynb | 使用最近邻搜索实现快速图像检索。 |
编码规范
请参阅根文件夹中的编码规范。