归因分析笔记3:视觉词袋-特征提取

Bag of Visual Words

目录

Matlab文档

使用视觉词袋进行图像分类

第1步:设置图像类别集

第2步:创建特征袋

第3步:用视觉词袋训练图像分类器

第4步:对图像或图像集分类


联系因果正则化论文作者

目前的问题是, 这篇论文里所有特征都是01, 他都处理了.

模型输入的特征不知道实际意义, 但是他最后还是能还原到图片上.

作者回信:

这篇文章当时是采用了Bag of Visual Words的特征提取方式,每张图片被抽象成了M维的词袋向量,每一维特征代表一个特定的visual word,可以被映射回原先的图像当中,一些示例可参考 (https://ww2.mathworks.cn/help/vision/ug/image-classification-with-bag-of-visual-words.html?s_tid=srchtitle_Bag%20of%20word_2)

归因分析笔记3:视觉词袋-特征提取

根据matlab文档, 直方图为图像的特征向量。

而直方图长度对应于视觉单词visual word的数量(视觉单词的数量由bagOfFeatures对象构建)。

而每个visual word对应图中的多个grid(就像NLP的单词在中一篇文章出现过几次)

理论上来说, 确实可以做映射.

那么降维是否可以逆变换呢? PCA是可以的.

Bag of visual word类似于BoW模型,基本思想概括如下:

       1)提取特征(Extract Features)

       根据具体应用考虑,综合考虑特征的独特性、提取复杂性、效果好坏,处理是否方便等选择特征。

       2)学习视觉词袋(Learn Visual Vocabulary)

       统计图像数据库中出现的所有特征,去除冗余组成词袋。如果提取的图像特征过多,一般需要利用聚类算法先把相近的单词归为一类(类似于文档检索里的找词根),利用这些聚类结果来组成词袋。

       3)利用视觉词袋量化图像特征(Quantize features using visual vocabulary)

       4)利用词频表示图像(Represent images by frequencies of visual words)

参考文献:

[1] Csurka, G., C. R. Dance, L. Fan, J. Willamowski, and C. Bray. Visual Categorization with Bags of Keypoints. Workshop on Statistical Learning in Computer Vision. ECCV 1 (1–22), 1–2.

Matlab文档

https://ww2.mathworks.cn/help/vision/ug/image-classification-with-bag-of-visual-words.html?s_tid=srchtitle_Bag%20of%20word_2

使用视觉词袋进行图像分类

通过创建一个视觉词袋,使用CV的工具包用于图像类别分类。该过程生成代表图像的视觉词出现的直方图。这些直方图用于训练图像类别分类器。以下步骤介绍了如何设置图像,创建视觉词袋,然后训练并应用图像类别分类器。

第1步:设置图像类别集

组织图像, 并划分为训练集测试集。为了训练图像分类器, 使用imageageataStore函数存储图像。将图像组织成类别, 从而更容易处理大量图像。可以使用SpliteachLabel函数将图像拆分为训练和测试数据。

读取类别图像并创建图像集:

setDir  = fullfile(toolboxdir('vision'),'visiondata','imageSets');

imds = imageDatastore(setDir,'IncludeSubfolders',true,'LabelSource',...

    'foldernames');

将集合分成训练和测试图像子集。在此示例中,划分30%的图像用于训练, 剩余的则测试

[trainingSet,testSet] = splitEachLabel(imds,0.3,'randomize');

第2步:创建特征袋

创建视觉词汇表(visual vocabulary)或特征袋(bag of features), 通过从每个类别的代表性图像中提取特征描述符(feature descriptors)。

bagOfFeatores对象定义特征或视觉单词: 在(训练集提取的)特征描述符上使用K-means聚类(统计信息和机器学习工具箱)算法。

该算法迭代地将描述符分为K个互斥簇。产生的簇是紧凑的(compact),通过类似的特性(similar characteristics)分离。每个簇中心代表一个特征或视觉字。

可以基于特征检测器(feature detector)提取特征,或者定义网格(grid)以提取特征描述符。网格方法可能会失去细粒度的(fine-grained scale)尺度信息。因此,对于不包含不同特征(distinct features)的图像使用网格,例如包含景象的图像,如海滩。使用加速鲁棒特征(或SURF)检测器提供更大的范围的不变性(invariance)。默认情况下,该算法运行“网格”方法。

归因分析笔记3:视觉词袋-特征提取

该算法的工作流将图像作为整体(entirety)分析。图像必须有合适label, 描述它们所代表的类别。例如,一组汽车图像的label为cars。工作流程不依赖于空间(spatial)信息,也不依赖于对图像中的特定对象标记。bag-of-visual-words技术依赖于无定位(localization)的检测.

第3步:用视觉词袋训练图像分类器

TrainimageCategoryClassifier函数返回图像分类器。

该函数训练一个多分类器, 通过纠错输出码(ECOC)+SVM二分类器. TrainimageCategoryClassfier函数使用(从bagOfFeatures对象得到的)视觉词袋,对图像编码得到视觉单词的直方图(histogram of visual words.)。然后使用视觉词的直方图作为正负样本, 来训练分类器。

1.使用bagOfFeatures编码方法从训练集中编码每个图像。

该函数对图像检测和提取特征,

然后使用近似最近邻算法来构建每个图像的特征直方图。

然后,该函数基于特定簇中心的描述符接近度递增直方图(increments histogram bins)。

直方图长度对应于视觉单词的数量(视觉单词的数量由bagOfFeatures对象构建)。

直方图为图像的特征向量。

归因分析笔记3:视觉词袋-特征提取 

2.对训练集中的每个图像重复步骤1以创建训练数据。

归因分析笔记3:视觉词袋-特征提取 

3. 评估分类器的效果。

使用imageCategoryClassifier的评估方法, 在图像验证集测试分类器。输出混淆矩阵表示对预测的分析。分类结果全对则得到对角线上的归一化矩阵。不正确则分类结果得到分数值。

归因分析笔记3:视觉词袋-特征提取 

第4步:对图像或图像集分类

在新图像上使用ImageCategoryClassifier预测方法来确定其类别。

上一篇:B-ICE-EDA/SOPC FPGA创新电子教学实验平台


下一篇:Facebook 新一代 React 状态管理库 Recoil