【问题标题】:Using Bag of words/features and neural network使用词袋/特征和神经网络
【发布时间】:2017-06-17 03:52:16
【问题描述】:

我正在尝试实现一个包含以下步骤的对象检测模块:

1) 使用 SURF 提取图像描述符,创建大小为 [x, 64] 的矩阵,其中 x 取决于图像中找到的关键点的数量;

2) 使用特征/词袋方法将描述符大小固定为 [k,64] 格式。其中 k 是使用 k-means 创建的集群的数量。

3) 使用生成的词袋矩阵作为训练样本来输入神经网络。

到目前为止,我已经实现了第 1 步和第 2 步,但我不太确定如何格式化 NN 的输出向量。在 OpenCV CvANN_MLP 上,输出向量中的行数应该与输入行数相同(否则返回 what() 异常),但输入行数是第 2 步中 k 个簇的数量,所以我我不明白如何基于此编写输出矩阵。

我知道输出矩阵应该有 n 列,对应于我想要的输出中的类数(例如 3 个类:猫、狗和鸟将在一个具有 3 列的矩阵上产生),但是我如何组织基于输入行的该矩阵的行?我读了这个相关的post,它使用matlab,它说每个特征应该是一行,但我不知道如何在OpenCV C++上做到这一点。 如果有人对如何进行此操作有任何想法/提示,将不胜感激。

【问题讨论】:

    标签: opencv neural-network feature-detection object-detection surf


    【解决方案1】:

    你这样做了吗:

    但是,正如您所怀疑的那样,在您训练神经网络之前,您 必须代表您希望使用此特征向量训练的每张图像。

    在喂食你的神经网络之前?我缺乏使用神经网络的经验,但是在阅读 this 和您的问题之后,您似乎正在尝试将词袋集群提供给您的神经网络,这是不正确的。

    【讨论】:

    • 感谢您的回复。所以,我不知道我的想法是否正确,但对我来说,特征向量是从 surf 中提取的向量(步骤 1),这与我用作词袋的输入相同,我只是将其组织起来聚类,因为 surf 给出了一个大小不同的向量。之后我应该做些什么吗?
    • 所以你有 k 个集群对吗?在词袋中,我们称之为视觉词。现在您需要将特征向量转换为词向量(即计算输入描述符相对于您的集群的最近邻居)。你这样做了吗?该转换的输出应该是每个输入图像的 1xN 向量(其中 N 是图像的总数)。
    • 哦哦好的!!!现在我懂了!!!我对如何获得这个 1xN 向量有点迷茫,我现在就去做,谢谢! :)
    • 很高兴我能帮上忙 :)
    猜你喜欢
    • 2018-01-22
    • 2015-12-28
    • 2011-07-30
    • 2017-04-22
    • 2012-07-10
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    相关资源
    最近更新 更多