阅读笔记:CNN Image Retrieval Learns from BoW:Unsupervised Fine-Tuning with Hard Examples

名词解释

BoW:

Bag-of-words model, 将文档表示成特征矢量。它的基本思想是假定对于一个文本,忽略其词序和语法、句法,仅仅将其看做是一些词汇的集合,而文本的每个词汇都是独立的。 
简单说就是将每个文档看成一个袋子,然后看每个袋子里装的都是些什么词汇,将其分类。通过统计文档中各个此出现的次数判断该文档在描述什么。例如,一个中如果猪、牛、马、羊、山谷、土地、拖拉机这样的词汇多,而银行、大厦、汽车、公园这样的词汇少,就可以断定该文档描述的乡村的场景,而不是城镇。 

简单说就是将每个文档看成一个袋子,然后看每个袋子里装的都是些什么词汇,将其分类。通过统计文档中各个此出现的次数判断该文档在描述什么。例如,一个中如果猪、牛、马、羊、山谷、土地、拖拉机这样的词汇多,而银行、大厦、汽车、公园这样的词汇少,就可以断定该文档描述的乡村的场景,而不是城镇。 

对于这样两句话:

John likes to watch movies. Mary likes too.   John also likes to watch football games.

构建出如下的字典:

{"John": 1, "likes": 2, "to": 3, "watch": 4, "movies": 5, "also": 6, "football": 7, "games": 8, "Mary": 9, "too": 10}

根据字典,可以由上述字典表示这两句话:

[1, 2, 1, 1, 1, 0, 0, 0, 1, 1]  [1, 1, 1, 1, 0, 1, 1, 1, 0, 0]

    BOW也可以应用在视觉领域的图像分类中,其基本思想就是将图像的特征看成一个特征集合,通过统计图像中特征出现的次数来对图像进行分类。这里以SIFT特征为例来理解如何利用BOW对图像进行分类。


Bow模型(解释的很好) – Hanson-jun

BOW模型理解

Bag-of-words model From Wikipedia


Fine-Tuning

把已经训练过的模型应用到新的数据集上。因为直观的认为CNN中靠近Input端的layer提取的是纹理色彩等基础特征,靠近Output的更为面向具体任务。所以认为可以将一个用数据集A(数据量大)的网络A的参数为初始参数,以数据集B(数据量小)作为train set继续训练来得到网络B。

更普遍的微调方法是:固定其他参数不变,a网络最后几层的参数重新训练,之后再用较小的学习率将网络整体训练。

caffe的fine-tuning是什么意思? - 知乎

深度学习之模型finetuning - CSDN博客

Caffe fine-tuning 微调网络 - 楼燚(yì)航的blog


Hard Example

利用第一次训练的分类器在负样本原图(肯定没有人体)上进行行人检测时所有检测到的矩形框,这些矩形框区域很明显都是误报,把这些误报的矩形框保存为图片,加入到初始的负样本集合中,重新进行SVM的训练,可显著减少误报。

用初次训练的SVM+HOG分类器在负样本原图上检测HardExample


图像检索遇到的挑战

1、视角和图片缩放的变化

2、光照的变化

3、severe occlusions严重的遮挡

4、视觉上相似但不同的物体

用BoW和CNN解决上述问题。

    问题1: BoW:affine co-variant local features, invariant descriptors

    问题2:BoW:color-normalized feature descriptors

    问题3:BoW:locality of the features, geometric verification

    问题4:BoW:discriminability of the features, geometric verification

    对这几个问题,CNN都可以用更多的training set来解决(废话),但因为很贵,所以才找别的办法。


使用现成的CNN:

目标是classification,用ImagNet上的图做数据集,结构模型用 AlexNet & VGG


CNN学习时,利用SfM information,同时学习Hard Negative Examples(与目标完全不匹配的样本)和Hard Postive Examples(与目标匹配的很好的样本),

网络机构和图像表示

文章重点关注用于classification的CNN,如AlexNet和VGG。使用Fully convolutional的网络架构,Fully Connected Layer 被舍弃,input为一张图片,output为一个3Dtensor X,为W*H*K维(K为上一层的feature map数)。Xk为feature map k的所有W*H 的所有激活集合。网络的output由K个这样的激活集合组成。预先训练好的网络构成用于卷积层的初始化。MAC层由每个feature map的所有维度的max-pooling构成,特征向量有每个feature map的最大激活组成,维度数为K 。feature vector由每个feature map的最大激活 组成,它的维度数为K。对于大多数网络为256或512d。 随后将MAC向量做l2-normalized ,并用inner product来评估图像的相似性。通过相应的mac分量的乘积来评测feature map对图像相似度的贡献。

卷积层的最后一层直接跟上来进行MAC计算的MAC层。MAC层的input是一个激活的3D的tensor,output是一个非负向量。然后通过l2-normalized处理输出结果。

网络和siamese

采用siamese 网络结构,训练两个网络,共享同样的参数

Siamese Network理解(附代码)

白化和降维

利用3D投影提供的标记数据,用上linear discriminant projections。它分为whitening和rotation两部分。

训练集

BoW和3D重建

给定一个带的带label的图片集合,图像会被聚类,每个集群建立一个3D模型。对于每张图片,估计的相机位置和在3D模型中注册好的局部特征都已知,放弃可能有不同种子构建的冗余(重叠)的3D模型。重建同一个地标的不同且视点不相交的模型认为是不重叠的。

训练图像对的选择

1个3D模型被描述为1个二分可见图,通过相机和点的可见性关系定义了图的边缘。如果在图像i中点p为可见的,那就存在一条(i, p),的边。创建一个数据集的tuples,包括查询图片q,positive的图片集合m(q),和negative的图片集合N(q),这些tuples用来生成训练图片对,每个tuple对应  |N(q)|+ 1  个对。定义一个候选postive image的pool  m(q) ,他根据q的相机位置集合构建而来。由于摄像机方向的范围很广,因此它不一定描述相同的对象。

因此我们提出三个方向来对positive sample进行取样。在所有三种策略的整个培训过程中,positive sample都是固定的。

MAC distance:有最小MAC distance的图片选为positive

maximum inliers:和查询图片有最多共同观察的3D点的选为positive

relaxed inliers:从与查询图片有足够多共同观察点的,但并不展现出过于极端的缩放的一组图像中随机选positive,通过提高匹配难度保证匹配正确性。

Negative images:由于群集不重叠,因此从不同于查询图像的群集的群集中选择Negative images,选择hard negative(具有最相似descriptor的不匹配图)。


我们针对图像检索中的cnn进行了调整。训练数据从应用于大型无序照片集的自动化3D重建系统中选择。所提出的方法不需要任何手动注释,且在descriptor维度的很宽的一个范围里(16至512)的许多标准基准上优于现有技术的状态。


Training data, ne-tuned networks and evaluation code



你可能感兴趣的:(图像检索,无监督学习,CNN)