我正在考虑做一个涉及使用某种机器学习识别简单二维对象的小项目。我认为最好让每个网络专门用于识别一种类型的对象。所以这是我的两个问题:
我应该使用哪种网络?我能想到的两个可行的是简单的前馈网络和Hopfield网络。由于我也想知道输入看起来像目标多少,Hopfield网可能不适合。
如果我使用需要监督学习的东西而且我只想要一个输出单位来指示输入看起来像目标的数量,我应该在训练过程中显示哪些反例?只是给它积极的例子我很确定不会工作(网络只会学会总是说'是')。
图像分辨率低,黑白分明。
答案 0 :(得分:3)
首先,关于使用的分类方法的说明。 如果您打算将图像像素本身用作特征,神经网络可能是一种合适的分类方法。在这种情况下,我认为培训相同的网络以区分各种对象可能是一个更好的主意,而不是为每个对象使用单独的网络,因为它将允许网络专注于最具辨别力的特征。
但是,如果您打算从图像中提取合成特征并根据它们进行分类,我建议考虑使用其他分类方法,例如: SVM。 原因是神经网络通常需要设置许多参数(例如网络规模和架构),这使得构建分类器的过程更长,更复杂。
特别是关于你的NN相关问题,我建议使用一个前馈网络,它相对容易构建和训练,具有softmax输出层,允许为各个类分配概率。 如果您使用单个网络进行分类,则关于否定示例的问题无关紧要;对于每个班级,其他班级将是其负面例子。如果你决定使用不同的网络,你可以使用相同的反例(即其他类),但根据经验,我建议每个正面例子显示不超过2-10个负面例子。
编辑: 基于下面的评论,似乎问题是决定给定图像(绘图)与给定概念的拟合程度,例如,与树类似的是用户提供的树图。
在这种情况下,我建议采用一种完全不同的方法:从每幅图中提取视觉特征,并根据过去用户提供的所有图纸及其分类(可能加上您生成的预定义集)执行knn分类。您可以通过与同类示例的名义距离或最接近匹配的类别分布来对相似性进行评分。
我知道这不是你所要求的,但在我看来,这似乎是一种更容易和更直接的方法,特别是考虑到实例和类的数量预计会不断增长的事实。
答案 1 :(得分:2)
使用FindObject进行游戏,并使用功能检测/说明查看您是否希望使用OpenCV进行对象检测。如果它看起来很匹配,那么你可以试试opencv包中附带的find_obj.py演示。
然而,我发现这个演示非常令人困惑,因为我还不熟悉基础概念。我做了一个更线性的演示,解释了一些问题,并指出了一些陷阱,如果你想要check it out on github。