bag of features
1. BOF图像检索实验原理
1.1 基础概念
1.1.1 前景:Bag of Words
Bag of Words照字面上是将文字归类为包。即在寻找文本的主要内容时,抓取文本中的关键词,根据大概率的关键词来确定文本的中心思想,可用于文章分类。
- 特点:只针对词汇,不依赖于顺序,单词相对于文本是独立存在的,不受顺序和语法句法等要素的影响。
1.1.2 Bag of Features
Bag of Featuresfeature为特征,即根据特征进行分类。
Bag of Feature 是一种图像特征提取方法,参考了Bag of Words的思路,把每幅图像描述为一个局部区域/关键点(Patches/Key Points)特征的无序集合。同时从图像抽象出很多具有代表性的「关键词」,形成一个字典,再统计每张图片中出现的「关键词」数量,得到图片的特征向量。
1.2 Bag of Feature 算法基本流程
大概分为四步:
- 提取图像特征;
- 对特征进行聚类,得到一部字典( visual vocabulary );
- 根据字典将图片表示成向量(直方图);
- 训练分类器或者用 KNN 进行检索(这一步严格来讲不属于「Bag of Feature」的范畴)。
1.3 基本步骤原理详解
1.3.1 提取图像特征–SIFT特征提取法
- SIFT特征提取算法的特点:
- FT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性;
- 区分性(Distinctiveness)好,信息量丰富;
- 多量性,可以产生大量的SIFT特征向量;
- 高速性;
- 可扩展性,可以很方便的与其他形式的特征向量进行联合。
实验所要提取的特征必须具有较高的区分度,而且要满足旋转不变性以及尺寸不变性等,因此,根据以上SIFT算法的特点,我们通常都会采用SIFT特征提取法最为合适。
1.3.2 构造训练字典–K-means算法
- K-means算法流程:
- 随机初始化 K 个聚类中心
- 重复下述步骤直至算法收敛:
对应每个特征,根据距离关系赋值给某个中心/类别
对每个类别,根据其对应的特征集重新计算聚类中心
- 构造
提取完特征后,我们会采用一些聚类算法对这些特征向量进行聚类。最常用的聚类算法是 k-means。
我们通过控制k的数量来确定聚类的数目,并且通过k-means收敛后,我们可以得到聚类的质心。k个质心就相当于词典里的词,我们称之为visual word(视觉单词),k即视觉单词数量。
步骤大致如下图:
1.3.3 计算权值–IDF算法
- IDF原理
IDF 即逆向文件频率 (inverse document frequency, IDF) IDF的主要思想是:如果包含词条t的文档越少, IDF越大,则说明词条具有很好的类别区分能力。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。 - 公式
IDF=log(语料库的文档总数/(包含词条w的文档数+1))
分母加1,以避免分母为0
1.3.4 通过特征集根据视觉词典量化–TF-IDF算法
- TF-IDF的基本概念
TF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文件频率). 是一种用于资讯检索与资讯探勘的常用加权技术。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
总而言之,当 一个词语在一篇文章中出现次数越多, 同时在所有文档中出现次数越少, 越能够代表该文章。
通过某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。 - 公式
TF指的是当前文档的词频,
,在这个公式中,分子表示的是该某一文档中出现的次数,分母表示在该文档中所有关键词出现的次数之和。
为了归一化,将 nw 除以整个文档中单词的总数。
逆向文档频率为:
将两者 相乘可以得到矢量 v 中对应元素的 tf-idf 权重。
tf-idf = tf * idf
1.4 Bag of Feature 的缺点
Bag of Feature 在提取特征时不需要相关的 label 进行学习,因此是一种弱监督的学习方法。Bag of Feature 也存在一个明显的不足,那就是它完全没有考虑到特征之间的位置关系,而位置信息对于人理解图片来说,作用是很明显的。
2. BOF算法实现图像检索
1.构造不小于 100张图片的数据集
2.针对数据集,做SIFT特 征提取
3.根据SIFT特征提取结果,采用k-means算法学习“视觉词典.(visual vocabulary)”,其中维度至少满足4个量级(比如10, 50, 100, 1000, 5000 )
4.根据IDF原理,计算每个视觉单词的权
5.针对数据库中每张图片的特征集,根据视觉词典进行量化
以及TF-IDF解算。每张图片转化成特征向量
6.对于输入的检索图像(非数据库中图片),计算SIFT特征,.并根据TF-IDF转化成频率直方图/特征向量
7.构造检索图像特征到数据库图像的倒排表,快速索引相关候选匹配图像集
8.针对候选匹配图像集与检索图像进行直方图/特征匹配
2.1 实验基本数据集
2.2 实验代码
- 提取特征,并创建视觉词典
# -*- coding: utf-8 -*-
import pickle
from PCV