Matlab 中的特征包和神经网络

Bag of features and Neural Networks in Matlab

我一直在尝试在 Matlab 中实现一个能够根据图像特征识别图像的神经网络。我正在尝试使用 Bag of features/words 方法来获得一个离散的特征向量,然后我可以将其输入我的神经网络。

我一直在使用这个例子作为指导 - http://in.mathworks.com/help/vision/examples/image-category-classification-using-bag-of-features.html

代码中的一行 (featureVector = encode(bag, img);) 计算图像中单词的出现次数。我可以使用这个 "featurevector" 矩阵来训练我的神经网络吗?我是否必须对训练集中的每张图像进行编码?

是的,这当然有可能。通过查看示例,训练数据集是一组图像,您会发现一个包含 500 个“单词”/特征的通用词汇表,可以充分描述所有这些词汇。通过使用 featureVector = encode(bag, img);,您正在做的是确定每个词的多少部分存在以描述输入图像 img。具体来说,如果您查看该示例部分中的代码,他们会绘制一个条形图,其中水平轴表示单词索引,垂直轴表示词汇表中每个单词/特征用于表示该图像的分数。

具体来说,这是生成的条形图(取自 link):


(来源:mathworks.com

因此,相似的图像应该用相似的特征/词来描述,因此您当然可以将其用作神经网络的输入。

但是,正如您所怀疑的那样,在训练您的神经网络之前,您必须 表示您希望使用此特征向量训练的每个图像。如果您打算使用 MATLAB 的神经网络工具箱,则必须确保每个 是一个输入样本,每个 是一个特征。 featureVector 实际上 return 一个 1 x N 向量,其中 N 是特征的总数。然而,如果你想更聪明地做到这一点,只需创建一个 imageSet 的所有你想要转换的图像:http://www.mathworks.com/help/vision/ref/imageset-class.html,然后使用一次调用 encode 来创建这个所需的功能矩阵:

imgFolder = '...'; %// Specify image folder here
imgSet = imageSet(imgFolder); %// Create image set
featureMatrix = encode(bag,imgSet).'; %// Encode the images - Make sure you transpose

结果将是一个 M x N 矩阵,其中 M 是您拥有的输入图像总数,N 是特征总数。为了尊重神经网络工具箱,您 必须 转置此矩阵,因为每个 都需要是输入样本,而不是每一行。