我一直在尝试在Matlab中实现一个能够根据图像特征识别图像的神经网络我试图使用特征包/单词的方法来获得一个离散的特征向量,然后我可以将其输入到我的神经网络中。
我一直在用这个例子作为指导-http://in.mathworks.com/help/vision/examples/image-category-classification-using-bag-of-features.html
代码中的一行(featureVector=encode(bag,img);)统计图像中的单词出现次数我能用这个“特征向量”矩阵训练我的神经网络吗我是否需要对训练集中的每个图像进行编码?
最佳答案
是的,那当然是可能的通过查看示例,培训数据集是一组图像,您可以找到500个“单词”的通用词汇表/功能,这些功能可以充分描述所有图像通过使用featureVector = encode(bag, img);
,你正在做的是确定每个单词存在的分数来描述输入图像img
。具体来说,如果你看那个例子中的代码,他们绘制一个条形图,横轴代表单词索引,垂直轴代表词汇中每个单词/特征用来表示该图像的分数。
具体来说,这是生成的条形图(从链接获取):
因此,相似的图像应该用相似的特征/词来描述,所以你当然可以用它作为神经网络的输入。
然而,在训练神经网络之前,正如你所怀疑的,你必须用这个特征向量来表示你想要训练的每一幅图像如果要使用MATLAB的神经网络工具箱,必须确保每列是一个输入示例,每行是一个特性featureVector
实际上会返回一个1 x N
向量,其中N
是特征的总数但是,如果要更智能地执行此操作,只需创建要转换的所有图像的imageSet
,然后使用一个调用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
是特征的总数为了尊重神经网络工具箱,你必须转换这个矩阵,因为每一列需要是一个输入样本,而不是每一行。