MultiGrain: a unified image embedding for classes and instances
摘要
文中主要介绍一种叫做multiGrain的方法,这种方法可以同时对图片进行分类和检测。数据的标签只依赖于类别标签,训练也是相对简单,最小化交叉熵Loss以及ranking Loss,用来判定两张图片是否可区分的。这个模型是根据普通的分类模型构建的,它的奇异之处在于有一种pooling层,可以在低像素上训练的模型应用到高像素中。
文中的分类、检索结果是要优于目前存在的算法的。
简介
文中的模型可以完成三种任务,这三种任务的完成是基于一个向量编码,
目前来说卷积实现分类,已经是对图像特征提取方向的一个巨大进步,所以形成一个既可以检索又可以分类的编码本身并不存在冲突。
这种任务是与多任务这种任务有冲突很难融合不同的。虽然文中的三个任务不冲突,但是对于不同的实例相似度具有不同的评价标准比如,分类需要更多的变化来展示不变,而复制检测对于图像细节又很敏感。
为了使得模型能够满足不同的情况,模型的结构时使用一种分类网络,在分类网络的后面加上一层global pooling层。 这样可以输入不同大小的图像。
训练模型的时候主要使用,交叉熵loss以及对比损失函数。 训练的时候还使用了数据增强。
文中的主要贡献如下
- 使用了检索和分类结合的网络
- 给出了新的batch 策略,每个batch中包含重复的数据增强的实例
- 使用一个对图像检索有意义的池化层,当输入的是高像素的图像的时候分类准确率能够有很大的提升
相关工作
随着卷积网络的发展,大规模的基于imageNet的分类模型开始产生,这些模型的优秀特征提取能力能够复用到其他图像任务之中比如实例检索。
所以鉴于分类模型的优秀的特征提取能力,在图像检索中主要是对pooling层的改进,比如R-MAC结合PCA白化往往能够在图像检索中有很好的效果。 (uber-net)。
数据增强:数据增强能够防止过拟合以及提升模型效果,在一个batch中如果包含一个图像的多种增强图像,那么训练模型的效果要好于只在batch中包含一种图像的batch训练的模型。 之后产生一种成为batch 增强的增强方式,直接对batch 做数据增强增加了batch的大小,这样做的训练效果较好,也能够节省进行所有图像增强的资源。文中提出了一种新的数据增强的方式RA,使用采样策略从batch中采集少量桐乡大小的数据,然后使用重复数据增强做一个batch都能够很好的提升模型效果。
网络结构
在说明网络结构前,需要重申的是分类任务以及相似度任务在模型结构以及模型训练步骤方面有很多的不同,下面就是这种不同的一些总结。
下面就是本文将这些不同一一解决。
Special Pooling 算法
这种pooling方式就是将featuremap 转化为一个向量。
分类算法,在早起的分类模型leNet-5, AlexNet模型,其pooling方式就是把feature map 拉直。之后的ResNet以及DenseNet则使用的平均池化。
检索算法:由于需要很多的局部信息那么,GeM池化。
文中就是用的GeM池化,这是第一次将GeM池化应用到分类任务中。
训练目标函数
对于分类网络来说,其目标函数就是交叉熵,但是对于检索网络使用的loss为对比loss,公式如下
其中alpha为一个常数超参(margin),beta是一个可以学习的参数
融合Loss
其中
|B|表示一个batch的数据量,P(B)表示一个batch的数据对的量。
RA
使用训练数据训练分类,使用数据增强训练检索任务。
文中推荐一种新的针对SGD训练以及数据增强的采样策略,
从数量为|B|的网络中,使用采样策略,采样|B|/m个图片,然后将图片进行m次增强。同一图片的不同增强还是认为是同一实例。
PCA 白化
PCA白化同时应用到了 分类任务以及实例检索任务。
输入大小
在分类任务中的图像处理,首先进行resize,然后center-crop成一个224 x 224的图像,这样可以有更小的显存,更快的推理。与之相反的是图像检索主要依赖于图像细节,所以需要更高的像素。目前来说图像检索所使用的像素,需要满足长边在800~1024之间,所以在实际操作的过程中不能够同时端到端的训练分类和检索任务。为了解决这个问题,文中使用低像素的进行训练,高像素的进行推理。这得益于模型结构中所用的pooling层
一般来说像素越大,pooling的参数p越大
为了选择适用所有任务的pooling中的参数p,文中给出一个合成检索任务IN-aug。
从ImageNet中抽样2000个图片,每个类2张,并且每一个图片给出5个数据增强。
然后评估IN-aug的检索准确度,看一下在top5中,有多少个图片增强数据。选择表现最好的那个做为pooling的p值,p in {1, 2, …., 10}。
上述表格为试验的参数。
最后feature map的热力图,在224像素的条件下车辆太小不能够被激活,而在全卷积的条件下在p=3时候,能够很好的激活汽车的区域。
总体来说网络结构如下图所示
实验部分
试验使用的分类网络是ResNet50, SGD初始化学习率是0.2, 一共训练了120 epochs,分别在30,60,90 epochs后进行学习率衰减。 Batch 大小是512,每个epoch迭代5005次,使用均值采样,并且假设m=3以及RA。
数据增强:使用标准flip,随机resize crop, 随机加入亮度噪音,颜色变化。翻转。
Pooling 选择,在选择中考虑了两种pooling设置,p=1或者p=3, p=1的时候就是平均池化,应用到分类的结构中。P=3应用到检索之中。
输入大小以及剪切:训练网络使用的是224 x 224像素大小,推理过程中分别使用的是224, 500, 800。对于224的像素,小边被resize成256并且center crop 成224大小,对于大于224的图片,文中将大的边resize成需要的像素大小。不经过裁剪直接通过网络。
Margin loss 以及 batch 采样。使用m=3的数据增强每一个batch,使用4块gpu训练。
数据:使用的ImageNet的数据集合,大概1200万张图片,用5万个图片作为验证集合。对于图像检索我们使用的是假期数据的map评价,
PCA白化来源于YFCC100M,20000张数据的计算。
在实验中发现,lamta=0.1分类效果最差,为0.5分类效果最好。下面的试验主要给出的参数lamta=0.5,分类结果最佳的像素为224和500。