0

我正在考虑做一个小项目,涉及使用某种机器学习识别简单的二维对象。我认为最好让每个网络都专门用于识别一种类型的对象。所以这是我的两个问题:

  1. 我应该使用什么样的网络?我能想到的两个可行的是简单的前馈网络和 Hopfield 网络。由于我还想知道输入看起来像目标多少,因此 Hopfield 网络可能不适合。

  2. 如果我使用需要监督学习的东西并且我只想要一个输出单元来指示输入与目标的相似程度,那么在训练过程中我应该展示哪些反例?只是给它正面的例子,我很确定它不会起作用(网络只会学会总是说“是”)。

图像将是低分辨率和黑白的。

4

2 回答 2

4

首先,关于要使用的分类方法的说明。如果您打算将图像像素本身用作特征,则神经网络可能是一种合适的分类方法。在这种情况下,我认为训练相同的网络来区分各种对象可能是一个更好的主意,而不是为每个对象使用单独的网络,因为它可以让网络专注于最具辨别力的特征。

但是,如果您打算从图像中提取合成特征并基于它们进行分类,我建议您考虑其他分类方法,例如 SVM。原因是神经网络通常有很多参数需要设置(例如网络大小和架构),使得构建分类器的过程更长更复杂。

特别是关于您与 NN 相关的问题,我建议使用前馈网络,该网络相对容易构建和训练,带有 softmax 输出层,允许为各种类分配概率。如果您使用单个网络进行分类,则有关反例的问题是无关紧要的;对于每个类,其他类将是它的反面例子。如果您决定使用不同的网络,您可以使用相同的反例(即其他类),但根据经验,我建议每个正例显示不超过 2-10 个负例。

编辑:根据下面的评论,问题似乎是确定给定图像(绘图)与给定概念的拟合程度,例如用户提供的树图与树的相似程度。

在这种情况下,我会建议一种完全不同的方法:从每张图纸中提取视觉特征,并根据所有过去用户提供的图纸及其分类(可能加上您生成的预定义集)执行 knn 分类。您可以通过与同类示例的名义距离或最接近匹配的类分布来对相似度进行评分。

我知道这不一定是您要问的,但在我看来,这似乎是一种更简单、更直接的方法,尤其是考虑到示例和类的数量预计会不断增长的事实。

于 2013-02-14T14:59:58.047 回答
2

玩一下FindObject,看看您是否喜欢使用OpenCV使用特征检测/描述进行对象检测。如果看起来很匹配,那么您可以尝试 opencv 包中包含的 find_obj.py 演示。

然而,我发现演示非常混乱,因为我还不熟悉底层概念。我做了一个更线性的演示,如果你想在 github 上查看它,它会说明并指出一些陷阱。

于 2013-02-14T15:25:21.323 回答