我一直在尝试在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”矩阵来训练我的神经网络吗?我是否必须对训练集中的每个图像进行编码?
答案 0 :(得分:4)
是的,这当然是可能的。通过查看示例,训练数据集是一组图像,您正在找到500"单词" /描述所有这些内容充足的功能。通过使用featureVector = encode(bag, img);
,您正在做的是确定每个单词的哪个部分用于描述输入图像img
。具体来说,如果您查看该示例部分中的代码,它们会绘制一个条形图,其中水平轴表示单词索引,垂直轴表示词汇表中每个单词/特征用于表示该图像的分数。
具体来说,这是生成的条形图(取自链接):
因此,类似的图像应该用相似的特征/单词来描述,因此您当然可以将其用作神经网络的输入。
但是,在您训练神经网络之前,正如您所怀疑的那样,必须代表您希望使用此特征向量训练的每个图像。如果您打算使用MATLAB的神经网络工具箱,则必须确保每个列是一个输入样本,每个行是一个功能。 featureVector
实际上会返回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
是要素总数。要尊重神经网络工具箱,必须转置此矩阵,因为每个列需要是输入样本,而不是每一行。