Matlab中的一系列特征和神经网络

时间:2015-09-30 15:29:38

标签: matlab machine-learning computer-vision neural-network matlab-cvst

我一直在尝试在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”矩阵来训练我的神经网络吗?我是否必须对训练集中的每个图像进行编码?

1 个答案:

答案 0 :(得分:4)

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

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

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

但是,在您训练神经网络之前,正如您所怀疑的那样,必须代表您希望使用此特征向量训练的每个图像。如果您打算使用MATLAB的神经网络工具箱,则必须确保每个是一个输入样本,每个是一个功能。 featureVector实际上会返回1 x N向量,其中N是要素总数。但是,如果您想要更加智能地执行此操作,只需创建要转换的所有图像的imageSethttp://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是要素总数。要尊重神经网络工具箱,必须转置此矩阵,因为每个需要是输入样本,而不是每一行。