基于内容的图像检索
整理一些基于内容的图像检索(Content-Based Image Retrieval, CBIR
)相关的文章、论文和实现
概念
CBIR(content-based image retrieval)
:通过分析图像内容来搜索相似图像;semantic gap(语义墙)
:机器捕获的低级图像像素与人类感知的高级语义概念之间存在的鸿沟。
文章
- 概述
- 综述
- 讨论
- 博客
- 袁勇博客:这老哥从事了很多年的
CBIR
实战- Image Retrieval(共30篇):作者编写的心得体会
- willard-yuan/awesome-cbir-papers:大量
CBIR
相关的论文和实现
- 自定义:相关论文、实现算法解析
- 袁勇博客:这老哥从事了很多年的
论文
2021
2020
- A Decade Survey of Content Based Image Retrieval using Deep Learning
- 3rd Place Solution to "Google Landmark Retrieval 2020"
- 北邮联合微信一起参与的
GLDv2 2020
检索竞赛,取得了第三名的好成绩。因为GLDv2 2020
的规则约束,所以没有实现非常复杂的后处理步骤,论文着重在数据清洗和增强,以及模型选择和训练上,整体架构如下:- 基于
GLDv2 clean
数据集训练基准模型,针对GLDv2
数据集进行聚类清洗得到GLDv2 cluster
; - 选择
ResNet152
和ResNest200
作为主干网络,- 调整网络架构,在
GAP
输出后新增\(1\times 1\)卷积层,输出512
维度特征,最后执行L2
归一化; - 两阶段训练:先使用
GLDv2 clean
数据集进行训练,再使用GLDv2 cluster
数据集进行微调; - 结合
Corner-Cutmix
以及双流网路架构进行训练,在GLDv2 clean
上使用SoftmaxLoss
,在GLDv2 cluster
上使用ArcFace
;
- 调整网络架构,在
- 完成训练后,集成两个模型输出特征得到
1024
维度特征。
- 基于
- Smooth-AP: Smoothing the Path Towards Large-Scale Image Retrieval
- PyRetri: A PyTorch-based Library for Unsupervised Image Retrieval by Deep Convolutional Neural Networks
PyRetri
以一个统一的架构实现了图像检索任务所需的评估实现,提供了非常多个基准功能,涵盖了预处理、特征提取以及后处理阶段,非常值得研究和深入学习。
2019
- A Benchmark on Tricks for Large-scale Image Retrieval
- 又是一篇工程性能爆满的实践性质论文,详细描述了
- 前处理阶段:聚类清洗噪声数据以及创建合适的验证数据集;
- 训练阶段:采用不同的基准模型、池化方法以及损失函数;
- 后处理阶段:组合
特征集成/DBA/QE/PCA白化
以及重排序算法。
- Deep Learning for Fine-Grained Image Analysis: A Survey
- Learning with Average Precision: Training Image Retrieval with a Listwise Loss
- Multi-Similarity Loss with General Pair Weighting for Deep Metric Learning
- Combination of Multiple Global Descriptors for Image Retrieval
- 提出
CGD
训练框架,组合多个全局描述符(SPoC/MAC/GeM
)和多个损失(Softmax/Rank
)进行端到端训练。 - 优点:
- 通过大量实验和组合配置证明了组合描述符的性能增益;
- 在多个基准数据集(
CARS196/CUB-200-2011/In-Shop/SOP
)上实现了最优的检索性能。
- 缺点:
- 并没有给出组合描述符的训练效率和部署阶段的内存占用以及推理延时情况;
- 论文提供的源码库也仅提供了测试代码,并没有相应的训练代码和模型架构。
- MultiGrain: a unified image embedding for classes and instances
MultiGrain
架构由分类卷积网络主干 + GeM池化层 + 分类head/检索head
组成。- 在训练阶段,使用较低分辨率以及
RA
采样策略,联合分类损失和检索损失共同训练; - 在测试阶段,使用较高分辨率以及变化池化指数提升分类精度。
- 在训练阶段,使用较低分辨率以及
- 2nd Place and 2nd Place Solution to Kaggle Landmark Recognition andRetrieval Competition 2019
- 百度发布的一篇竞赛总结论文,论文写作方面相较于以往文章会更加粗粒度。使用了很多的实践策略,没有具体的理论解析但确实提升了最终成绩。初步看下来还不太适应,不论是写作风格还是具体操作,还需要多多研究源码。
2018
2017
- Fine-tuning CNN Image Retrieval with No Human Annotation
- 论文主要创新点:
SfM
自动数据清洗流程;- 广义平均池化层
GeM
; CNN
描述符白化;- α-加权查询扩展算法
αQE
。
2016
- End-to-end Learning of Deep Visual Representations for Image Retrieval
- 论文大体上执行了三个方面的优化:
- 端到端学习:重构
R-MAC
网络,集成到卷积网络中;清洗大规模噪声数据集;同时设计了三元损失进行检索任务训练; R-MAC
描述符优化:使用RPN
替代最开始的多尺度固定网格大小均匀采样方式;设计了多分辨率描述符加强特征向量的检索性能;- 后处理集成:执行
QE
和DBA
后处理运算;使用向量量化算法进行维度衰减。
- 端到端学习:重构
- CNN Image Retrieval Learns from BoW: Unsupervised Fine-Tuning with Hard Examples
- 论文提出通过构建
SfM
流程来进行无标记数据的自动化清洗。将清洗得到的数据集用于微调训练(卷积网络+L2归一化MAC
),同时调研了白化学习。其检索结果接近于当时最好的检索算法,证明了无监督自动化清洗的有效性。 - Deep Image Retrieval: Learning global representations for image search
VGG16 + 重构R-MAC + C-Full分类微调 + R-Clean 排序损失微调 + RPN(256个候选建议)+ QE
,达到了当时最先进的检索性能。
2015
- Particular object retrieval with integral max-pooling of CNN activations
- 针对初始搜索阶段和重排序阶段进行了改进。在初始搜索阶段,对输入卷积激活构建
MAC/R-MAC
特征向量;在重排序阶段,结合广义平均算法、分支定界法以及积分图计算,提出近似最大池化定位(AML
)方案,对前Top-N
个排序图像分别提取多个候选区域,与查询图像两两计算相似度,选取最相似的子区域参与重排序。另外,完成上述初始搜索和重排序操作后,再执行查询扩展算法还能够提升性能。 - Cross-dimensional Weighting for Aggregated Deep Convolutional Features
- 论文首先总结过去的实现,提出一个基于卷积神经网络输出特征的通用聚合框架,然后在其中空间加权和通道加权两个阶段提出自己的无参数增强方案
CroW
,通过实验证明了其有效性。 - Deep Learning of Binary Hash Codes for Fast Image Retrieval
- 在深度网络中嵌入二值哈希码的学习,同时训练分类模型以及类哈希函数,能够兼容检索精度(深度网络)和检索时间(类哈希码)
- Aggregating Deep Convolutional Features for Image Retrieval
- 很好的介绍了传统的人工特征方式构造全局特征描述符的过程,证明了深度卷积特征区别于传统人工特征,并且探索了基于深度卷积特征构造全局描述符的新范式(设计了基于求和池化的
SPoC
描述符)
2014
- Deep Learning for Content-Based Image Retrieval: A Comprehensive Study
14
年的一篇综述,调查了深度网络特征对于CBIR
任务的提高。今天(22
年)来看很简单的实现,不过重新回顾一下还是很有意思的- Visual Instance Retrieval with Deep Convolutional Networks
- 从之前的全连接层特征研究开始转向卷积层特征研究,针对空间特征设计了多尺度搜索以及空间最大池化操作,实现效率和实用性上并不突出
实现
- 数据集
- 实现
- PyRetri/PyRetri
2020
年南理工魏秀参团队发布的图像检索框架,目前来看是Github
上最全面的图像检索基准框架- naver/deep-image-retrieval
2019
年发布的图像检索仓库,基于两篇论文(End-to-end Learning [2017]
和Listwise Loss [2019]
)- leeesangwon/PyTorch-Image-Retrieval
2019
年发布的图像检索仓库,基于两篇论文(N-pair Loss [2016]
和Angular Loss [2017]
)- msight-tech/research-ms-loss
2019
年发布的图像检索仓库,基于论文Multi-Similarity Loss with General Pair Weighting for Deep Metric Learning
- naver/cgd
2019
年发布的图像检索仓库,基于论文Combination of Multiple Global Descriptors for Image Retrieval
。仅提供了测试代码,并没有发布训练实现。- facebookresearch/multigrain
2019
年发布的图像检索仓库,基于论文MultiGrain: a unified image embedding for classes and instances
- filipradenovic/cnnimageretrieval-pytorch
2018
年Filip Radenovic发布的图像检索仓库,基于两篇论文(Fine-tuning CNN Image Retrieval [2018]
和CNN Image Retrieval Learns from BoW [2016]
)- pochih/CBIR
2017
年发布的图像检索仓库,提供了不少基于传统图像处理算法的检索算法实现- zhaotaomcp/CBIR
2017
年发布的图像检索仓库,基于一篇论文(Deep Learning of Binary Hash Codes for Fast Image Retrieval
)- willard-yuan/cnn-cbir-benchmark
2017
年发布的图像检索仓库,提供了VLAD
算法和一些深度学习算法实现- flyingpot/pytorch_deephash
2017
年发布的图像检索仓库,同样基于论文Deep Learning of Binary Hash Codes for Fast Image Retrieval
- 自定义
- zjykzj/SimpleIR
- 自定义图像检索框架,执行图像检索任务的训练和测试
- zjykzj/multigrain-pytorch
- 重构
2019
年论文Multigrain
官方实现facebookresearch/multigrain - zjykzj/crow-pytorch
- 使用
Pytorch
扩展了2015
年论文CroW
官方实现YahooArchive/crow