【问题标题】:Bag of features and Neural Networks in MatlabMatlab 中的特征包和神经网络
【发布时间】:2015-12-28 11:23:51
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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


    (来源:mathworks.com

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

    但是,正如您所怀疑的那样,在您训练神经网络之前,您必须代表您希望使用此特征向量训练的每张图像。如果您打算使用 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 是特征的总数。为了尊重神经网络工具箱,您必须转置此矩阵,因为每个都需要是输入样本,而不是每一行。

    【讨论】:

    • 非常感谢。我不确定 featureVector 向量是否会保存与从图像中获得的一组实际 SURF 或 SIFT 特征相同的目的。这对我很有帮助。
    • @user2802349 - 不客气。嗯,一袋词本质上是一个特征向量,但是你以不同的方式描述图像。 SURF / SIFT 使用方向直方图描述每个关键点,并在 128 个 bin 向量中混合高斯差异。您只是用另一个特征向量表示图像 - 每个元素是一个特定关键字用于描述图像的程度。总而言之,它们是相同的东西,但您只是使用不同的特征/表示进行分类。
    猜你喜欢
    • 2017-04-22
    • 2015-05-16
    • 2018-01-22
    • 2011-07-30
    • 2017-06-17
    • 2012-07-10
    • 2018-10-22
    • 2011-07-31
    • 2015-12-03
    相关资源
    最近更新 更多