[CS131] Lecture 14 Visual Bag of Words

根据 Stanford CS131 课程写的笔记(大部分为 note 翻译),英语水平一般,如有错误请评论指正

Lecture 14 Visual Bag of Words

Introduction

首先我们要将图像表现为特征向量形式。接下来创建图像图像的空间形式,观察在低维的图像值。然后将每个图像转换成一组系数,并投影到 PCA 空间。转换后的数据用分类器分类,例如:K-means、HAC。

Idea of Bag of Words

词袋模型是一个简化目标表示的方式,将其作为它们子部分的集合,以便于分类之类的操作。例如:一个段落里的单词列表和单词的频率就可以构成一个词袋,我们用词袋来表现段落以便于后续分析。

在计算机视觉领域,我们将图像考虑为图像特征的集合。同样,结合特征的频率,我们也可以运用词袋模型来进行预测任务,例如:分类、脸部检测。

词袋模型主要分为两步:

  1. 从多张图片上构造特征 “字典” 或者 “单词表”——图像中存在什么通用特征?例如:房间的色系、脸的部分。

    • 提取特征

      [CS131] Lecture 14 Visual Bag of Words

    • 学习视觉词典

      [CS131] Lecture 14 Visual Bag of Words

    • 用视觉词典量化特征

  2. 给定一张新图像,将它们转换为我们收集过的特征直方图——我们在 1 中构建的特征频率。

    [CS131] Lecture 14 Visual Bag of Words

Origins

词袋可以看作一个体现在一系列图像或者文档上建立的字典的频率——新数据可以建立这个模型并用于后续预测任务。

Algorithm Summary

Extracting Interesting Features

我们可以选择我们想要的任何特征。例如:简单的将图片分割,用子图片作为特征(如下图)。后者我们可以用 SIFT 特征的角检测。

[CS131] Lecture 14 Visual Bag of Words

Learning Visual Vocabulary

一旦我们找到特征,我们必须将大特征集转换为一套小 “主题”。“主题” 等于在自然语言分析中的 “单词”,也等于计算机视觉中的纹理基元 (texton)。

我们可以用任何聚类技术(通常为 K-means,Mean Shift 或者 HAC 也可用)来聚类特征。接下来用每个集群的中心作为纹理基元。纹理集被称作视觉词典,如下图。

[CS131] Lecture 14 Visual Bag of Words

Quantize Features

码矢量 (codevector) 是纹理基元在这种情况下的同义词,码矢量集构成码本 (codebook)。我们用码本量化特征:用相同的方法从新图像中提取特征,接下来用码本将特征向量映射到相近的码矢量标签。

码本的大小(等于集群的个数)是很重要的超参数。太小会导致码矢量没有代表性;太大会导致码本过拟合。

Represent Images by Frequencies

首先,我们可以将数据集中的每张图表现为码矢量频率的直方图(如下图),我们通过特征量化完成。接着,我们有两个选择,取决于问题类型。如果是监督学习,可以基于直方图训练一个分类器。因为这个分类器是在纹理基元上训练的,所以对类之间的区分是很稳定的。如果是非监督学习,我们可以对直方图进一步聚类来找到数据集中的视觉集合。

[CS131] Lecture 14 Visual Bag of Words

Large-Scale Image Search

词袋模型在大规模图像检索上十分有效。词袋模型可以帮助构造一个有效检索的数据集。首先,从数据中提取特征。接着用 k-means(通常 k=100000)构造一个词典。接下来我们为每个词计算一个权重。赋予权重可以帮助我们降低特定词的重要性。例如:把”is”, “are” 之类的词降低权重。在图像中就是把无用特征赋予低权重。

词频逆文档频率 (Term Frequency Inverse Document Frequency, TF-IDF) 通过单词在文件中的频率赋予权重。

一个单词 j 的逆文档频率 (IDF) 为:

IDF=log(Num DocsNum Docsj appears)

图像中 bin j 的值表示为:
Binj=frequencyj in IIDF

我们可以对文档构造一个词映射的逆文档,以便于快速寻找新图像和数据集中所有图像的相似性。我们只考虑 bins 和新图像重叠的图像。

[CS131] Lecture 14 Visual Bag of Words

大规模数据检索的缺点在于算法的表现随着数据集的增大而削弱。因为量化误差和不完美的特征检测,词袋模型有时会产生噪声图像相似度。

Spatial Pyramid Matching

Motivation

空间金字塔匹配 (Spatial Pyramid Matching) 可以将空间信息结合到模型中。

Pyramids

一个金字塔通过多张源图像的拷贝构建。每层金字塔大小是上一层的 1/4。层数越低,分辨率越高。从几何角度看,整个多尺度表现看起来像一个金字塔, 原始图像位于最底部,每个周期导致更小的图像叠加在另外一个图像上。

[CS131] Lecture 14 Visual Bag of Words

Bags of Words(BoW) + Pyramids

空间金字塔匹配将图像分割为越来越细的子区域 (sub-region),并允许我们计算每个子区域的局部特征直方图 (BoW)。

如下图,如果金字塔上方的 BoW 包含天空特征,中部包含植被和山特征,底层包含山特征,那么整张图很可能被分类为山。

[CS131] Lecture 14 Visual Bag of Words

Some results

[CS131] Lecture 14 Visual Bag of Words

Naïve Bayes

Basic Idea

一旦我们产生了一个视觉词直方图,我们可以用朴素贝叶斯 (Naïve Bayes) 来对直方图进行分类。我们简单的衡量一个给定的视觉词是否存在,然后假定一个视觉词的存在 / 缺失和给定类的每个视觉词条件独立。

[CS131] Lecture 14 Visual Bag of Words

如上图,考虑一些视觉词直方图 Xxi 是视觉词 i 在直方图中的总和。我们只在意视觉词 i 是否存在,即 xi{0,1}

Prior

P(c) 是在所有类中出现类 c 的概率。所以对总共 m 个物体类,我们有

i=1mP(c)=1

对于一个用直方图 x 表现的图像和一些物体类 c,我们可以计算
P(x|c)=i=1mP(xi|c)

Posterior

现在我们可以用贝叶斯理论 (Bayes Theorem) 来计算图像 x 属于类 cj 的概率:

P(c|x)=P(c)P(x|c)cP(c)P(x|c)

c 表示所有类。拓展分子和分母,我们可以重写方程:
P(c|x)=P(c)i=1mP(xi|c)cP(c)i=1mP(xi|c)

Classification

为了将用直方图 x 表现的图像分类,我们简单的找到能够最大化方程 (6) 的类 c

c=argmaxcP(c|x)

因为公式中含有大量的小概率累乘,所以可能会产生一个接近于 0 的不稳定值。因此,我们改用 logs 计算概率:
c=argmaxclogP(c|x)

现在我们考虑两个类 c1c2
P(c1|x)=P(c1)i=1mP(xi|c1)cP(c)i=1mP(xi|c)


P(c2|x)=P(c2)i=1mP(xi|c2)cP(c)i=1mP(xi|c)

因为分母是固定的,所以我们计算最大值时可以忽视分母。即 ( 是正比于的意思)
P(c1|x)P(c1)i=1mP(xi|c1)


P(c2|x)P(c2)i=1mP(xi|c2)

对于类 c
P(c|x)P(c)i=1mP(xi|c)

用上 logs:
logP(c|x)logP(c)+i=1mlogP(xi|c)

现在,分类任务变成
c=argmaxcP(c|x)=argmaxclogP(c|x)=argmaxclogP(c)+i=1mlogP(xi|c)