论文地址:https://arxiv.org/pdf/1903.10663v4.pdf
相关资源:https://github.com/naver/cgd
《Combination of Multiple Global Descriptors for Image Retrieval》结合多个全局描述的图像搜索是2020年收录于cs.CV的论文。旨在实现同时使用多个全局特征的端到端的图像搜索框架。
当前图像搜索领域常用的方法有在卷积层后面加全连接层生成全局描述(global descriptors)以减少特征维度,以及通过池化卷积层输出的方法获取全局描述,这里指的全局描述是与具体位置无关的的特征(比如将每个通道的值作为一个特征)。
论文主要贡献如下
- 设计端到端的框架,支持多种类型的全局特征。
- 对各种类型的特征进行了统一的描述,并对模型的质和量进行了分析评估。
- 模型在CARS196,CUB200-2011评测中均得到了非常好的效果。
优化搜索的常用方法有:使用各种池化方法,选择不同区域的特征,对图像做attention等等,这些方法需要加大网络规模、复杂度以及训练时间,还需要加入更多的协作控制。而文中提出的方法只在训练过程中增加了一些额外参数。
框架
文中设计了CGD(combination of multiple global descriptors)框架,它用最简单而有效的方式——串联(concatenating)多个全局特征。如下图所示:
框架由一个CNN和两个模块组成,左侧的CNN网络作为backbone用于提取图片特征,两个模块分别计算两个损失函数:右下方的主模块用于计算图片的相似度,右上方的辅助模块用借助图片的分类信息协助精调CNN网络参数。最终结合两种损失的结果训练模型。
Backbone网络
理论上可以使用任何的卷积网络作为特征提取器,论中的实验如图中所示使用了ResNet50网络,并调整了最后两层的降采样,如果输入为224x224大小的图片,输出为14x14块,以提供更丰富的图片特征(一般从c4和c5两层提取图像特征)。
主模块:多特征描述
主模块对卷积层的输出分别做了三种池化:和池化SPoC,最大池化MAC,和广义平均池化GeM,作为三个分枝branch。
比如输入一张图片I,通过卷积层,生成3维的Tensor输出X:C×H×W,其中C为通道数,全局描述GD(Global descriptor)将X作为输入,输出为f,具体计算公式如下:
其中Xc为每一通道的数据,x为通道中每一个小块(共HxW个小块),Pc指不同的池化方法,和池化Pc=1,最大池化Pc->∞,GeM池化Pc为任意值,一般取3。
经过GD处理之后,再通过全连接层降维,以及2范数的归一化处理,得到输出特征的向量:
其中ai分别为三种池化方法,W为全连接层的参数,f为GD处理后的特征,最终得到的特征连接了三种池化的结果,并进行归一化:
其中⊕是concatenation串联操作,最后输出的特征可以用于各种比较损失函数如TripletLoss(孪生网络常用的损失函数)。
上述结构有两个优点,第一是只加入了简单的操作,不会给网络增添过大规模,也不需要特别地修改网络结构;第二是不需要对各分枝分别控制和调参,无需太多修改就能很好的融入CNN及孪生网络的结构。
辅助模块:分类损失
辅助模块也使用主模块计算出的GD结果(第一个分枝的结果),再加入批归一化层和全连接层,通过图片所属分类训练模型,对CNN网络调参。它将传统的先训练CNN分类器,再训练孪生网络的两步合二为一。分类模型让CNN网络更好地描述类别之间的距离,使相似度训练更加快速和稳定。具体的损失函数使用了Softmax。为了防止过拟合,学到更好的图像表示,在辅助分类中加入了标签平滑和温度调整(给难实例以更大梯度)。
实验
实验程序用MXNet编写,并使用了预训练的backbone模型,输入模型的图片大小为224x224,特征维度1536,训练的batch_size为128。
对比实验证明了标签平滑、温度调整、训练分类器、模型结构设计等方法都有明显效果;串联特征也比特征求和效果更好。
三种池化方法有12种组合,下图展示了在不同数据集上不同组合的效果:
可以看到,在不同数据集中,最高分的组合也不同,但相对来说,使用更多组合的分数更高,单种池化分数最低,在只使用一种池化的情况下,GeM分数最高。具体评测值如下表所示:
尽管各种方法之间有差异,但差别不算太大,各项测试中整体维度都为1536,更高的维度可描述更多的特征,因此也可以看到,组合后的高分源自组合的优势。
与其它模型的效果对比图如下(更多实验图表请详见论文):
译者注
和池化和最大池化的方法都很有效,GeM池化介于二者之间,具体更偏重哪一边还需要用参数设置,对于不同数据集用哪一种方法更好?作者给出的方案是同时使用两种或者三种方法,并将其结果串联起来,让输出的特征既关注整体(和池化)又关注细节(最大池化)。
实验重点
- 使用了C4/C5两层特征。
- 使用三种池化方法,将拼接了结果。
- 池化后再使用全连接层降维,以及归一化。
- 同时训练两个模型
网友评论