基于我们正在进行的一个项目,我提出了一个有趣的讨论:为什么要使用 CNN 视觉检测系统而不是模板匹配算法?
背景:我展示了一个简单的 CNN 视觉系统(网络摄像头 + 笔记本电脑)的演示,该系统检测特定类型的物体是否“损坏”/有缺陷 - 在本例中是 PCB 电路板。我的 CNN 模型在静态背景上展示了正确和损坏的电路板的示例(每个大约 100 张图像)。我们的模型使用了预训练的 VGG16 的前几个 conv/maxpool 层(在 imagenet 上),然后我们添加了更多可训练的 convs/pools,其中有一些密集,导致 dim-3 one 热编码矢量输出用于分类: (is_empty, has_good_product, has_defective_product)。
该模型很容易训练并达到 99% 的验证,没有问题;因为我们知道我们的数据集很小,所以我们还进行了各种数据增强训练。在实践中,它在 10 次中大约工作了 9 次,但是同一电路板的一些随机平移/旋转偶尔会将其置于相反的类别中。也许更积极的数据增强会有所帮助。无论如何,对于原型概念项目,我们很高兴。
现在我们正在向另一位工程师和他的同事展示,他提出了这样的论点,即 NN 在这方面太过分了,应该只使用模板匹配,为什么要使用 CNN?
对于为什么我们的方法在某些应用程序(例如要检查的其他部件)中更好的原因,我们没有很好的答案。我们提出的一些观点:
1)对不变性更鲁棒(例如通过数据增强)
2)可以进行在线学习以改进系统(例如,人类可以告诉软件哪些示例出错了)
3) 无需像经典计算机视觉算法那样设置阈值 你们认为,对于此类检查任务,CNN 系统是否有更多优势?在什么情况下会比模板匹配更好?
关于深度神经网络何时可以成为这项工作的技术的一些随机想法:对于需要 3D 深度感应作为输入的一部分的系统,或者任何可以变形/拉伸/挤压但仍然“好”的对象类型无缺陷(例如毛绒玩具、电线等)。很想听听你的想法:)