原文链接:点击打开链接
摘要: 深度学习大潮为什么淹没传统的计算机视觉技术?听听大牛怎么说~
这篇文章是受到论坛中经常出现的问题所创作的:
深度学习是否可以取代传统的计算机视觉?
这明显是一个很好的问题,深度学习(DL)已经彻底改变了计算机视觉(CV)和人工智能。许多曾经看起来不可能解决的问题都解决了,机器获得比人类更好的结果。图像分类可能就是最好的例子。
但深度学习仍然只是解决计算机视觉领域内问题的工具之一。它并不是解决该所有问题的万能药。在这篇文章中,我想详细说明这一点。也就是说,我想阐述一下为什么传统的计算机视觉技术仍然非常有用。
我将把这篇文章分成以下部分:
但在我讨论这些论点之前,我认为有必要首先详细解释什么是“传统的计算机视觉”、深度学习是什么以及它为什么如此有破坏力。
在进行深度学习之前,如果你有诸如图像分类之类的任务,这时你需要执行一个称为特征提取的步骤,特征提取是非常“有趣的”。我这篇文章中将要提到一些传统的计算机视觉技术(包括诸如边缘检测,角点检测,物体检测等等)。
在使用这些技术时,例如在特征提取和图像分类方面,我们想的是从一类对象(例如椅子,马等)的图像中提取尽可能多的特征,并将这些特征视为一种“定义”(被称为“袋”)的对象。然后,你会在其他图像中搜索这些“定义”。如果一个袋子中的大量特征位于另一个图像中,则该图像被分类为包含该特定对象(即椅子,马等)。
这种图像分类特征提取方法的难点在于,你必须选择在每个给定图像中查找哪些特征。当你尝试分类的类别数量开始增加,例如10或20时,这会变得很麻烦并且变得几乎不可能。你是否寻找边缘?纹理信息?使用不同类型的功能可以更好地描述不同类别的对象。如果你选择使用许多特征,则必须处理大量参数,所有这些参数都必须由你进行微调。
那么,深度学习介绍了端到端的学习概念,其中(简而言之)机器被告知要针对每个特定类别的对象学习要寻找什么。它为每个对象提供了最具描述性和显着的特征。换句话说,神经网络已经被告知发现图像类别中的底层模式。
因此,通过端到端的学习,你不再需要手动决定使用传统计算机视觉技术来描述你的特征。有线杂志这样说道:
例如,如果你想教一个神经网络来识别一只猫,那么你不要告诉它寻找胡须,耳朵,毛皮和眼睛。你只需要展示成千上万张猫的照片,最终就能解决问题。如果它将狐狸误分类为猫,你不需要重写代码,你只需要做的是继续训练。
下面的图片描绘了特征提取(使用传统的方法)和端到端学习之间的差异:
所以,这是整篇文章的背景。接下来,让我们来看看为什么传统的计算机视觉仍然是必要的,有益的。
首先,深度学习需要数据,很多很多的数据。上面提到的那些著名的图像分类模型都是在大数据集上进行训练的,这些用于训练的数据集的前三名是:
比一般图像分类更容易的任务不需要这么多的数据,但你仍然需要很多数据。如果你无法获得那么多的数据,你根本不知道会发生什么?(确实也有一些技巧可以提高你的训练数据量,但这些是人为的方法)。
没有充足的数据,训练出来的模型一般表现都不好,因为一台机器没有洞察能力,它不能在没有看到数据的情况下概括它看到的东西。
对于你来说,看到训练好的模型并且手动调整一些东西太困难了,因为深度学习模型里面有数百万个参数,其中每个参数在训练过程中都会被调整。从某种意义上说,深度学习模式是一个黑匣子。
传统的计算机视觉为你提供了充分的透明度,使你能够更好地评估和判断你的解决方案是否可以在训练环境之外进行工作。你可以深入了解算法中存在的问题,如果有任何不妥,你可以很容易地弄清楚在哪里以及需要调整什么。
这可能是我支持传统计算机视觉技术研究的最佳理由。训练深度神经网络需要很长时间,你需要专用硬件(例如,高性能GPU),在很长的时间内训练最新的最先进的图像分类模型。
此外,如果你的训练模型表现不佳,会发生什么?你必须返回并用不同的训练参数重做整个过程,而且这个过程有时可能重复数百次。
但有时候这些都是不必要的,因为有时传统的CV技术可以比DL更有效地解决问题,并且代码行数更少。例如,我曾经参与过一个项目,以检测通过传送带的每个锡罐是否有红色的勺子。现在,你可以训练一个深度神经网络来检测勺子,或者你可以对红色上编写简单的颜色阈值算法(红色的某个范围内的任何像素都是白色的,每个其他像素是黑色的),然后计算你有多少白色像素。
了解传统的计算机视觉可能会为你节省大量时间和减少一些不必要的麻烦。
理解传统的计算机视觉实际上可以帮助你更好地进行深度学习。
例如,计算机视觉中使用的最常见的神经网络是卷积神经网络。但什么是卷积?它实际上是一种广泛使用的图像处理技术(例如参见Sobel边缘检测)。了解这可以帮助你了解你的神经网络做了什么,因此可以更好地设计和调整你尝试解决的任务。
然后还有一件事叫做预处理。这是经常对你提供的模型的数据进行准备以进行训练。这些预处理步骤主要通过传统的计算机视觉技术来完成。例如,如果你没有足够的训练数据,则可以执行称为数据增加的任务。数据增加可以包括对训练集中的图像执行随机旋转,移位,剪切等,以创建“新”图像。通过执行这些计算机视觉操作,你可以大大增加你拥有的训练数据量。
在这篇文章中,我解释了为什么深度学习没有取代传统的计算机视觉技术,为什么后者仍应该学习。首先,我发现了DL经常需要大量数据才能执行的问题。其次,深度学习对于特定任务来说可能会出现过度拟合现象。在这样的任务中,标准的计算机视觉可以比DL更有效地解决问题,并且代码行数更少。第三,认识传统的计算机视觉实际上可以让你更好地进行深度学习。这是因为你可以更好地了解DL到底正在做什么,并且你可以执行某些预处理步骤来改善DL结果。
简而言之,深度学习只是计算机视觉的工具,当然不是万能药。不要只用它,因为它现在是新潮。传统的计算机视觉技术仍然非常有用,知道它们可以为你节省时间和解决许多麻烦。