为什么深度学习没有取代传统的计算机视觉

但深度学习仍然只是计算机视觉的一个工具,而且它也不是万能的。在这片文章中我将对这一点做详细的阐述,我想说明传统的计算机视觉技术仍然非常有用,并且值得学习与研究。

本文的主要内容分为以下三个部分:

  • 深度学习需要大量数据训练

  • 深度学习有时会产生过犹不及的效果

  • 传统的计算机视觉技术能够帮助你更好的使用深度学习

首先,我认为需要先解释一下什么是“传统的计算机视觉”,是么是深度学习,以及深度学习引起变革的背后原因。

 背景知识

在进入深度学习时代之前,对于诸如图像分类的这种任务,都需要经过一个特征提取的步骤。特征是图像中的具有描述性的信息块,通常来说模型对这些信息块比较感兴趣 (即特征将为模型提供图像中的大部分信息)。在这篇博客里你会看到一些 传统计算机视觉技术 的组合,包括边缘检测、角检测、目标检测等。

在使用这些技术时 (例如,特征提取和图像分类),主要思想是从一类目标的图像中提取一些特征,然后将这些特征作为一种“定义”(例如词袋模型)。然后我们可以在其他图像中查找这些“定义”,如果在一张图像中的找到了某个词袋中的大量特征,那么这张图片会被分为包含该特定对象的类。(例如,椅子、马等)

这种特征提取方法中的难点在于,你必须在每张照片中查找所有特征。当分类的数量增加的时候,例如 10 或 20,这个问题就变得很复杂甚至难以完成。你应该使用角落、边缘还是纹理信息?不同类型的对象可以用不用类型的特征描述。随着特征数量的增长,你必须微调模型中大量的参数。

但是,深度学习引入了端到端学习的概念,即告诉机器针对每个特定类别的对象需要查找什么。它为每个对象提供了最具描述性和显著的特征。换句话说,神经网络可以发现图像中的潜在模式。

因此,通过端到端的学习,你不再需要手动决定使用哪种传统计算机视觉技术来提取特征。机器可以帮你完成所有的工作。《连线》杂志这样说到:

“例如,如果你想教一个深度神经网络识别一只猫,你不用告诉它注意胡须、耳朵、毛皮以及眼睛。只需要简单地给它展示成千上万张猫的图像,最终它就可以完成这项任务。如果它还是容易将狐狸错分为猫,不用写代码,只需要继续训练它就行。”

下图展示了特征提取 (使用传统 CV) 和端到端学习的区别:

图片

这就是一些背景知识,下面让我们来分析为什么传统的计算机视觉仍不可或缺并值得研究。

 深度学习需要大量数据训练

首先,深度学习需要海量的数据支持。上面提到的一些著名的图像分类模型都是在庞大的数据库上训练出来的。使用最多的三种数据库分别是:

  • ImageNet 数据集 —— 150 万张图像,含有 1000 个类别

  • 微软 COCO 数据集 —— 250 万张图像,含有 91 个类别

  • PASCAL VOC 数据集 —— 50 万张图像,含有 20 个类别

尽管一些简单的任务往往不需要这么多的数据,但数据量仍然是至关重要的。如果没有这样海量的数据应该怎么办?那就只好有什么用什么了 (一些技术能够增强训练数据,但都是些人为的方法)

但是数据集过小带来的问题就是模型对未知数据的泛化能力较差,这是因为机器并没有去学习解决目标问题,而是仅仅对训练数据进行了调优。

并且想要深入了解训练好的模型并进行一些手动调整是非常困难的,因为深度学习模型有数百万的参数,这些参数通过训练进行调优。也就是说,深度学习模型是一个黑盒。

对于一个训练好的模型,想要手动调整其中的一些内容是十分困难的,因为深度学习模型里面有数百万个参数。这些参数通过训练过程被调整,从某种意义上说,深度学习模型是一个黑箱。

传统的机器视觉是一个完全透明的系统,可以更好地衡量和判断模型在训练数据之外的有效性。你可以更深入地研究一个问题并将其迁移到算法中,并且针对模型中存在的问题,更容易找出需要调整的地方。

 深度学习有时会产生过犹不及的效果

这是我认为需要学习传统计算机视觉技术最重要的原因。

训练深度神经网络需要很长时间,并且对硬件要求也很高。一般来说使用专用设备 (例如高性能 GPU) 训练一个最先进的图像分类模型需要一整天的时间。而使用笔记本电脑进行训练则会花费不止一周的时间。

此外,如果训练的模型表现不好怎么办?这时候就要调整参数并从头开始训练,这个过程有时可能会重复数百次。

但有时这些都是不必要的,因为在某些问题上传统 CV 技术比深度学习更有效,并且代码行数也更少。例如,我曾参与过一个项目,检测通过传送带的每个锡罐是否有红色的勺子。你可以选择使用深度学习技术需要训练一个模型来检测勺子,这是非常耗时的。或者,你也可以编写一个简单的颜色阈值算法就可以完成这项功能。原始图像中红色像素点被转为白色像素点,其他像素点则为黑色,然后统计白色像素点的数量就可以了。

掌握传统的计算机视觉技术可以为你节省很多时间和避免不必要的麻烦。

 传统的计算机视觉技术能够帮助你更好的使用深度学习

理解传统的计算机视觉技术能够帮助你更好的使用深度学习。

例如,计算机视觉中最常用的神经网络是卷积神经网络。但什么是卷积?其实这是一个图像处理中广泛使用的技术 (例如 Sobel 边缘检测)。掌握这些知识有助于提升你对神经网络的理解,同时可以帮助你针对特定任务更好地微调网络。

同样在深度学习领域也有预处理的步骤。这个步骤通常是对输入数据进行操作,目的是为了帮助训练过程。这些预处理的步骤在传统计算机视觉技术中对算法性能会起到显著的提升。例如,如果没有足够的训练数据,你可以进行数据增强 (通过随机地旋转、平移、裁剪等操作增加数据的多样性)。这些计算机视觉方法可以大大增加训练数据量。

 结论

这篇文章中作者解释了为什么深度学习仍然不能完全取代传统机器视觉技术以及后者仍然值得研究与学习的原因。首先,作者提出深度学通常习需要大量数据训练,但有时这是无法实现的,而传统的计算机视觉方法可以在这种情况下进行使用。其次,很多时候针对特定问题深度学习往往会过犹不及,而标准的计算机视觉方法可以更高效地解决这些问题。最后,掌握计算机视觉知识可以帮助你更好地使用深度学习。这是因为你可以更深入地理解深度学习,并使用一些预处理的步骤改进深度学习的效果。

简而言之,深度学习只是计算机视觉的一个工具,他肯定不是万能的。尽管深度学习现在很火,但是在学习深度学习技术的同时仍需要了解传统计算机视觉方法,这样可以节省很多时间和避免不必要的麻烦。


猜你喜欢

转载自blog.51cto.com/15060462/2684647