Faster R-CNN Features for Instance Search 的阅读笔记
全文内容,均是来自个人的理解和研究,如有错误,请给予指正和探讨,谢谢。
最近一直在准备以图搜图相关的算法攻略,之前阅读了《Neural Codes for Image Retrieval》这篇算是提供了一个全新的搜索思路,将神经网络在临近softmax层中断,将这些层的输出,作为图像的描述算子来进行相似度的匹配,因为这篇文章不是特别难理解,所以这里没就不再过多讲解了,有兴趣的同学可以去自行下载看一下。另外同时想对image retrieval 有一定了解的同学,可以去踏下心来阅读一下《SIFT Meets CNN A Decade Survey of Instance Retrieval》,这篇文章较全的总结了截止至2016年,关于image retrieval 整个技术发展的方向和趋势。下图是《Faster R-CNN Features for Instance》文章最终效果图,可以参考一下。蓝色是搜索目标区域,红色框是所检测出来的图片目标区域。
1.数据集的介绍
一般image retrieval进行跑分的数据集都是Oxford 和 Paris,直到2017年的《Large-Scale Image Retrieval with Attentive Deep Local Features》才引入了新的数据集,这里主要先讲一下,Oxford数据集 ,因为本人在复现论文时,基本都是使用Oxford的数据集(官方链接),下载后会发现它包括两个文件夹,一个是包括5000+的原图像文件,第二个文件夹名字是groundtruth,里面包含着对图像的一些描述,其中还包括了55个queries,每一个query都写着搜索图片的名称,要搜索区域的左上角坐标和右下角的坐标。其他的就是根据图像质量来进行区分的,有good,ok,junk这几类的区分。每个txt都写着对应原图片的名称,如下图所示:
2.描述算子生成原理
从基于VGG16训练好的Faster RCNN的模型下,提取特征层Conv5_3的全局特征生成描述算子进行一个粗搜索,然后再通过RPN(Region Proposal Network)进行pooling形成更为具体的描述算子在进行top n的精细搜索,具体方法如下:
因为Faster RCNN 包括两个分支均共享卷积层,其中第一个分支就是RPN网络,第二个就是根据RPN来进行物体识别的分类器。因此根据这两个分支,此文分别生成了全局算子和局部算子。
2.1 Image-wise pooling of activations(IPA)
IPA生成的描述算子是全局的,通过忽视掉后面所有Conv5_3后面所有的层。VGG16的网络框架如下图所示:
根据此网络结构,这里提取出来的描述算子的维度应该是60 x 40 x 512维的,这里提取到的维度之后,怎么才能表达成一个标准的全局描述算子呢?就是通过max pooling 或者 sum pooling 来进行前两个维度的合并,从而最终变为一个1 x 1 x 512维的向量,这样每个图片都可以用这种方法表示成为一个这样的向量,这样在进行相似度的时候,实际上就变成了向量的计算了。关于是max-pooling 还是 sum-pooling, 文章在后面进行了比较这里先不深入讨论。
所以 IPA 的方法基本就是这个原理,通过query的向量和所有库中其他图片的向量进行相似度计算,就可以进行一次粗略的排序,可以理解为将特征图中每个channel的最大值(max-pooling)或者平均值(sum-pooling)进行提取来进行计算,是有一定意义的粗略计算。
2.2 Region-wise pooling of activations(RPA)
在进行完粗略计算之后,接下来就是较为精细的相似度计算。因为Faster RCNN在最后一个卷积层之后,根据RPN的选取,通过RoI pooling,会将所有的目标区域在feature map上映射截取出来,然后利用SSP(Spatial Pyramid Pooling)Net 统一大小送到分类器中去识别和分类。这其中在每次送到分类器前的维度应该为 7 x 7 x 512, 这里同样会做一个 max-pooling 或者 sum-pooling, 效果比较会在后面提到。这里得到的向量就是每个图中目标物体区域的描述算子,比如一个图检测有 t 个目标区域,那么这个图就会有 t 个512维的向量。数据集中每一个query因为所在位置已经被标出,所以只会产生该标定区域一个512维的目标向量,计算时则会用这一个向量与一张图中 t 个向量分别计算,选出一个代表本张图的结果,然后每张图都进行这样的运算,然后根据结果进行排序,具体原则在 3.2 中提到。
3.图像匹配原理
3.1 初筛阶段
这里指的就是根据IPA生成的描述算子进行初筛的过程,通过余弦相似度的计算结果,将所有图像按照得分从高到低进行排序。
3.2 空间重排序
这里就是指根据RPA生成的物体描述算子进行精确排序的过程,这里作者又分为了两个方法,具体如下:
3.2.1 Class-Agnostic Spatial Reranking(CA-SR)
这一步捋一下我们现在有的向量! 首先每个query是有一个向量的,然后现在是在top N 中排序,然后每个图又有 t 个向量,所以在每一幅图计算时,就是将 t 个向量与query向量计算的最大值作为该图与目标图片的得分来进行排序。
3.2.2 Class-Specific Spatial Reranking(CS-SR)
这一步是因为作者除了直接使用原生态的Faster RCNN的同时,也探究了根据这些建筑图片进行的 fine-tuned 网络结构,此种方法就是基于fine-tuned Faster RCNN 来进行的排序,因为fine-tuned之后,分类器的分类种类已经被改成了每个物体的名字,也就是上文我们看到 balliol, ashmolean 等11类建筑+1个背景类,所以在进行到最后物体识别的时候,每个建筑都会有一个自己的可能性得分,这里就是根据最后所属类别的可能性得分来和query的所属类别来进行的排序。
3.3 Query Expasion(QE)
这个就很好理解了,为了提高搜索效果,在排序结束后,根据前 m 张图片的向量加和求平均,以此结果为query在进行一次精细搜索。
4.结果展示
这里主要展示一下本篇文章最终的实现效果,详细可以参考文章原文,这里top N = 100, QE的 m = 5. 下图是在同一种网络框架下 sum-pooling 和 max-pooling的结果对比
下图是不同的网络结果的结果,其中(p)代表在Pascal VOC上进行的训练的得到的网络, (C)是在Microsoft COCO数据集上训练的得到。ZF 是指ZF Faster RCNN。
最后则是比较经过 fine-tuned 和没有经过 fine-tuned的网络对比。
5.总结
此篇文章其实理解比较简单,文章也给出了具体的github,也看到CSDN上也有其他复现此论文的教程,所以这类也不再赘述。此篇文章全是基于自己的理解,因为每次看文献时候,都是先看看国内是否有人已经解读或者写过该文章阅读笔记的博客,所以自己也希望在读完新文章的同时方便他人,如果有帮助到你,便是我最大的愿望。如有理解不对的地方,希望指正,谢谢!
嘿嘿嘿~ 人生第一个博客~截稿!哦哟哟 (ง •̀_•́)ง
论文下载链接:https://arxiv.org/pdf/1604.08893.pdf
论文github地址:https://github.com/imatge-upc/retrieval-2016-deepvision