识别数据中的模式最佳方法是什么?学习这个主题的最佳途径是什么?

19
我正在与一位开发者合作,他正在开发一个分析路面图像以查找路面裂缝的程序。对于它找到的每个裂缝,它会在文件中生成一个条目,告诉我哪些像素组成了这个特定的裂缝。然而,他的软件存在两个问题:
1)它会产生几个错误报告
2)如果他找到了一个裂缝,他只能找到其中的一小部分,并将这些部分标记为单独的裂缝。
我的工作是编写软件来读取这些数据、分析它并区分假阳性和实际裂缝。我还需要确定如何将所有小段裂缝组合成一个裂缝。
我已经尝试了各种方法来过滤数据以消除假阳性,同时也在有限的程度上使用神经网络来组合裂缝。我知道会存在误差,但到目前为止,错误太多了。有没有人能给一个非AI专家的建议,告诉我完成任务的最佳方式或学习更多相关知识的书籍或课程类型?
编辑:我的问题更多的是关于如何注意同事数据中的模式,并将这些模式识别为实际的裂缝。我关心的是高级逻辑,而不是低级逻辑。

编辑实际上,要准确地展示我的数据需要至少20张样本图片。由于数据变化较大,但我这里有一些样本在此在这里在这里。这些图片已经通过我的同事的处理过程进行了处理。红色、蓝色和绿色数据是我需要分类的(红色代表深裂缝,蓝色代表浅裂缝,绿色代表宽/密封裂缝)。


2
你能否发布一张样例图片,以便我们更好地评估问题的难度? - Amro
误报是指发现了实际上并不是破解的东西。对于浅色或深色的破裂,除了黑色破裂较难与浅色破裂一起分组外,没有不同的规则。 - Phil
12个回答

16
除了关于图像处理的有用评论外,您似乎还在处理聚类问题
聚类算法来自机器学习文献,具体来说是无监督学习。正如其名称所示,基本思想是尝试在一些大数据集中识别出数据点的自然聚类。
例如,下面的图片展示了聚类算法如何将一堆点分成7个聚类(由圆圈和颜色表示):

k-means
(来源:natekohl.net

在您的情况下,聚类算法将尝试重复合并小裂缝以形成更大的裂缝,直到满足某些停止标准为止。最终结果将是一个较小的连接裂缝集。当然,裂缝与二维点有些不同--让聚类算法在这里起作用的部分技巧将是定义两个裂缝之间有用的距离度量。
流行的聚类算法包括k-means clustering演示)和hierarchical clustering。第二个链接还有一个很好的逐步解释k-means如何工作的说明。 编辑:这篇由飞利浦工程师撰写的论文似乎与您正在尝试做的事情相关:
  • Chenn-Jung Huang,Chua-Chin Wang,Chi-Feng Wu,"用于晶圆缺陷聚类识别的图像处理技术",IEEE计算机设计与测试,vol. 19, no. 2, pp. 44-48, March/April, 2002.

他们正在对硅片上的缺陷进行视觉检查,并使用median filter来消除噪声,然后使用最近邻聚类算法来检测缺陷。

以下是一些相关的论文/书籍,他们引用可能会有用:

  • M. Taubenlatt和J. Batchelder,“使用空间滤波进行集群环境下的图案晶圆检测”,应用光学,第31卷,第17期,1992年6月,3354-3362页。
  • F.-L. Chen和S.-F. Liu,“神经网络方法识别半导体制造中的缺陷空间模式”,IEEE交易.半导体制造,第13卷,第3期,2000年8月,366-373页。
  • G. Earl、R. Johnsonbaugh和S. Jost,《strong>模式识别与图像分析》,Prentice Hall,Upper Saddle River,N.J.,1996年。

1
当我读到这个问题时,这也是我的第一反应。有一个免费的工具可以使用,称为'R',这里是一个很好的介绍:http://www.liaad.up.pt/~ltorgo/DataMiningWithR/。 - slashmais
这对于寻找所谓的“鳄鱼”裂缝肯定是有帮助的,这些裂缝在路面的一个小区域内交叉形成。谢谢。然而,由于存在太多的误报情况,我怀疑聚类算法是否能够注意到少量曲线边缘。 - Phil
误报可能会很棘手。如果它们不太多,您可以通过运行具有有限聚类数的聚类算法来检测它们。任何未出现在聚类中的裂缝都可以被丢弃。或者,在进行聚类之前,您可能需要执行预处理步骤来识别和删除误报(也许使用其他人建议的方法),然后聚类才能正常工作。 - Nate Kohl

3
您的问题属于图像分类这一广泛领域。这些问题通常非常困难,解决它们需要技巧。您必须利用您对问题领域的所有知识,使其易于处理。
一个基本问题是规范化。您希望被分类的对象在数据表示方面尽可能相似。例如,如果您有一个裂缝的图像,那么所有图像的方向都相同吗?如果不是,旋转图像可能有助于您的分类。同样,缩放和平移也是如此(参见this)。
您还希望从训练集中尽可能删除无关数据。也许您可以使用边缘提取(例如Canny边缘检测),而不是直接处理图像。这将从图像中删除所有“噪音”,只留下边缘。然后,练习就减少到识别哪些边缘是裂缝,哪些是天然路面。
如果您想快速找到解决方案,我建议您首先尝试使用卷积神经网络,它可以在最少的预处理和归一化下进行相当不错的图像分类。它在手写识别中非常出名,可能正适合您所做的事情。

我很想将这个标记为答案,因为它几乎是我正在寻找的。我的同事似乎处理边缘提取时做得不错。您能否提供有关如何对他的数据进行分类而不是来自图像本身的像素数据的见解? - Phil

2

这里有一些非常好的答案。但是如果您无法解决问题,可以考虑使用 Mechanical Turk。在某些情况下,它可以非常具有成本效益地解决顽固性问题。我认识一些人将其用于各种类似的事情(验证人类可以轻松完成但难以编码的任务)。

https://www.mturk.com/mturk/welcome


3
支付你的机械土耳其劳工一分钱作为正确分类的报酬。然后向你的客户按照每个10美分的价格收费。 - Barry Brown
1
哈哈,谢谢你的建议Barry。 机械土耳其听起来像是个好主意(我们过去使用过rentacoder.com,类似的想法)。 如果stackoverflow上的人告诉你付钱让别人解决问题,那么你知道你有一个困难的问题。 - Phil

2
我有点困惑你选择分解问题的方式。如果你的同事没有识别出完整的裂缝,而这是规格要求的话,那么这就成了你的问题。但是,如果你能把所有的裂缝都拼接在一起,并避免他的误报,那么你岂不是已经完成了他的工作?
此外,我认为这是一个边缘检测问题,而不是分类问题。如果边缘检测器很好,那么你的问题就解决了。
如果你仍然坚持使用分类方法,那么你需要一个已知答案的训练集,因为你需要一种方法来量化区分假阳性和真正的裂缝的差异。然而,我仍然认为你的分类器不可能连接裂缝,因为这些是特定于每个铺路石的。

我的同事的工作是找到裂缝(主要使用边缘检测),而我的工作是对它们进行分类。我将确定它是哪种类型的裂缝(横向 vs. 纵向 vs. 鳄鱼皮纹等)。问题在于,他用于查找它们的算法并不完美,因此我必须找到一种方法来筛选和分类不完美的数据。 - Phil

2

我必须同意ire_and_curses的观点,一旦你深入到边缘检测领域来修补你的共同开发者的裂缝检测,并消除他的误报,似乎你会在做他的工作。如果你可以修补他的软件没有检测到的问题,并在他给你的问题周围消除他的误报,那么你似乎可以为整个图像做到这一点。

如果规格要求他检测裂缝并对其进行分类,那么他的工作就是进行边缘检测并消除误报。而你的工作是接受他所提供的内容并对裂缝类型进行分类。如果你必须进行边缘检测才能完成这项工作,那么你似乎已经离让你的共同开发者失业不远了。


没有任何破解检测算法是完美的。必须有一些更高级别的逻辑来处理低级别的数据,而此刻,更高级别的逻辑是我的工作,而低级别的则是他的。 - Phil
1
我同意你的观点,我只是想说,如果你深入研究边缘检测来解决他的“不完美数据”,那么你距离让他的工作变得过时只有一步之遥。顺便说一句,这是一个非常好的问题,也是我今天看到的最有趣的问题。 - jsmith

1
什么是识别数据模式的最佳方法,以及学习该主题的最佳方式是什么?
最佳方法是研究模式识别和机器学习。我建议从Duda的Pattern Classification开始,并使用Bishop的Pattern Recognition and Machine Learning作为参考。这需要一段时间才能理解材料,但了解模式识别的基本概念和分类问题的主要方法应该会给您指引。我可以做出一些关于您的数据的假设,但老实说,您可能比任何人都更了解数据集。例如,一些有用的技术可能包括support vector machineboosting

编辑:提升(boosting)的一个有趣应用是实时人脸检测。请参阅Viola/Jones的《使用简单特征串级提升器进行快速目标检测》(pdf)。此外,从样本图像来看,我认为你应该尝试改进边缘检测。也许用高斯平滑图像并运行更激进的边缘检测可以增加对较小裂缝的检测。


从未听说过提升。那可能有所帮助。我也会看看那些书。谢谢。 - Phil

1

虽然我不是专家,但你可以尝试查看Haar Cascades。你也可以尝试使用OpenCV工具包进行实验。这两个工具结合在一起可以完成人脸检测和其他物体检测任务。

你可能需要进行“训练”来开发用于裂缝检测的Haar Cascade。


1
我建议您拿起任何一本图像处理教材,深入了解这个领域。特别是,您可能会对形态学操作(如膨胀和腐蚀)感兴趣,这些操作可以补充边缘检测器的工作。网络上有大量相关资料...

0

你应该阅读关于数据挖掘,尤其是模式挖掘的内容。

数据挖掘是从数据中提取模式的过程。随着更多的数据被收集,数据量每三年翻一倍,数据挖掘成为将这些数据转化为信息的越来越重要的工具。它通常用于各种分析实践,例如市场营销、监视、欺诈检测和科学发现。

关于这个主题的好书是《数据挖掘:实用机器学习工具和技术》

数据挖掘可以在亚马逊购买。
(来源: waikato.ac.nz) ](http://www.amazon.com/Data-Mining-Ian-H-Witten/dp/3446215336 "ISBN 0-12-088407-0")

基本上你需要做的是将统计工具和方法应用到数据集中。最常用的比较方法是学生 t 检验卡方检验,以确定两个无关变量之间是否存在相关性。


0
你得到了一些非常好的答案,尤其是 @Nate 的答案,所有建议的链接和书籍都是值得的。不过,我惊讶地发现没有人建议一本我认为最好的书——O'Reilly 的 Programming Collective Intelligence。这个标题可能似乎与你的问题无关,但相信我,其中的内容是最实用的,面向程序员的数据挖掘和“机器学习”覆盖范围之一。试一试吧!-)

我想我肯定会检查这个。谢谢指引。 - Phil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接