为什么在经典的简历模板匹配上使用卷积神经网络进行视觉检查任务?


9

基于我们正在研究的项目,我进行了有趣的讨论:为什么在模板匹配算法上使用CNN视觉检查系统?

背景:我展示了一个简单的CNN视觉系统(网络摄像头和笔记本电脑)的演示,该系统检测特定类型的对象是否“损坏” /有缺陷-在这种情况下,是PCB电路板。我的CNN模型显示了在静态背景下正确和断裂的电路板(每个电路板大约100张图像)的示例。我们的模型使用了预先训练的VGG16的前几个conv / maxpool层(在imagenet上),然后我们添加了一些可训练的conv / pool,并带有一些密度,从而得到了dim-3一个热编码的矢量输出用于分类:(is_empty,has_good_product,has_defective_product)。

该模型非常容易训练,并且达到99%的验证准确无误;由于我们知道我们的数据集很小,因此我们还进行了各种数据扩充方面的培训。实际上,它的工作效率约为10的9倍,但是同一块电路板的几次随机平移/旋转有时会使其处于相反的类别。也许更积极的数据增强会有所帮助。无论如何,对于原型概念项目,我们感到很高兴。

现在我们正在向另一位工程师和他的同事介绍,他提出了这样的论点,即NN对于此而言是过大的,应该只使用模板匹配,为什么要做CNN?

对于为什么我们的方法在某些应用程序(例如要检查的其他零件)中会更好,我们没有一个很好的答案。我们提出了一些要点:

1)对不变性更健壮(例如通过数据增强)

2)可以进行在线学习以改进系统(例如,人可以告诉软件哪个示例出错了)

3)不需要像传统计算机视觉算法中那样设置阈值,您认为呢,对于这种类型的检查任务,CNN系统还有更多优势吗?在什么情况下会比模板匹配更好?

对于何时将深度NN用作工作的技术,还有一些随机的想法:对于需要3D深度感测作为输入一部分的系统,或者可以变形/拉伸/挤压但仍然“好”的任何类型的对象,以及没有缺陷(例如毛绒动物,电线等)。很好奇听到您的想法:)


我喜欢深度学习方法,我知道它们是未来。但是,当您需要高精度结果时,比如说精确的旋转和精确的比例,模板匹配仍然可以提供更好的结果。我说的是0.1度/比例因子误差或更小。深度学习不断为您提供可能是“最佳”结果的“概率”,因此在需要高精度时还不够,我很想找到一种使用深度学习获得这种准确性的方法,但是我仍然找不到任何算法使用深度学习进行高精度模板匹配。我欢迎任何意见/建议,或者
Pablo Gonzalez

Answers:


3

有问题的工程师为您的应用提出了传统的CV方法,只是出于习惯。使用模板匹配已非常过时,并且已证明其性能很差。但是,我确实认为CNN过于严格,取决于数据集的大小。

模板匹配如何工作?

模板匹配可在图像上滑动一个窗口,该窗口将提供与模板的百分比匹配。如果百分比匹配高于某个预定阈值,则假定为匹配。例如,如果您有一只狗的图像,并且想要确定图像中是否有一只狗,则可以在整个图像区域上滑动一个狗模板,并查看匹配百分比是否足够大。这可能会导致非常差的性能,因为它要求模板相同重叠图像。在实践中这种可能性是什么?不太高。

唯一一次模板匹配是一种足够的技术,那就是如果您确切知道要查找的内容,并且确信它会在给定类的每个示例中几乎相同地出现。

为什么要改用机器学习?

机器学习技术不是严格的。与stmax所说的不同,CNN可以很好地概括数据集。这就是为什么它们如此强大。以狗为例,CNN无需查看存在的每只狗的图片即可了解什么是狗。您可以通过Google搜索为它显示1000张图像,然后该算法将能够检测到您的狗,实际上是狗。机器学习算法具有很好的通用性,这是它们取代了所有古老的CV技术的原因。现在的问题是训练CNN所需的数据量。它们非常耗费数据

我认为100个数据点不足以训练强大的CNN。由于模型的高度复杂性,为了限制偏差,您需要增加示例数量。对于深层模型,我通常建议每个特征100个示例,对于浅层模型,我通常建议每个特征10个示例。这实际上取决于您的功能空间。

我的建议。

您真正要做的是异常检测。您将有很多示例,这些示例将以其他方式呈现良好状态的PCB。您要检测那些已损坏的。因此,我将尝试一些异常检测方法。它们更易于实现,使用浅层模型可以获得良好的效果,尤其是在偏斜的数据集中(过度表示了1类)。


感谢您的全面评论!您能提供解释异常检测的项目或论文示例吗?干杯
JDS

1
这是有关异常检测的文献综述V. Chandola,A。Banerjee和V. Kumar,“异常检测:调查”,ACM计算调查,第一卷。41号 3,第 2009
JahKnows

5

答案取决于任务。模板匹配可以用于某些任务,但不能用于所有任务。CNN可能具有对与您的任何模板都不匹配的看不见的输入进行概括的能力,因此可以更好地进行概括。

但是,CNN是否会胜过模板匹配将取决于特定任务以及您要实现的目标。这是一门经验科学。最终,找出哪种方法更好的方法是同时尝试两者-或向尝试过它们的其他人学习(例如,阅读文献)。我认为您不会找到任何理论或分类法来代替对实际数据的经验评估。


5

NN(以及其他分类方法)可能会遇到的一个问题是,由于仅显示了某些缺陷,因此它可能不知道如何应对将来可能会出现的全新的/尚未发现的缺陷。

您希望NN学习“看起来像无缺陷的PCB就是有缺陷的PCB”。但是,如果它学会了“任何看起来不像是有缺陷的PCB就是无缺陷的PCB”呢?

您可以尝试通过在随机位置向它们添加一个小的白点(或另一个小的扰动)来修改一些无缺陷的PCB图像,并让神经网络对这些修改后的图像进行分类。绝对应该将它们归类为有缺陷,对吧?但是它可能会错过一些(或很多),因为它以前从未见过这样的缺陷。

为了检测全新的缺陷,异常检测方法/一类分类器可能会更多..值得信赖,因为它们应该获取从未见过的任何东西。

正如DW所说,您只需要尝试两种方法,然后找出哪种方法更好。只要确保有一个非常好的测试集,其中也包含全新的缺陷!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.