电子说
当你辗转于各种论坛时,相信会经常看到这样的问题:深度学习是否会取代传统的计算机视觉?或者说,当深度学习看起来如此有效时,是否还有必要研究传统的计算机视觉技术?
这是一个非常好的问题。
深度学习已经彻底改变了计算机视觉和人工智能这一领域,许多曾经看起来不可能解决的问题,深度学习都能够解决——尤其是在图像识别和分类问题上,机器已经超越人类。事实上,深度学习也强化了计算机视觉在行业中的重要地位。
但是,深度学习对计算机视觉来说仅仅是一种工具,它不可能成为解决所有问题的万能药。所以,在这篇文章中,我想阐述一下为什么传统计算机视觉技术仍然很重要,并且值得我们去深入学习和研究。
本文将分为以下三个部分:
深度学习需要大数据
深度学习有时过于深度(杀鸡焉用牛刀)
传统的计算机视觉有助于更好的使用深度学习
首先我需要解释下什么是传统的计算机视觉技术,什么是深度学习,以及深度学习为什么如此具有革命性。
▌背景知识
在深度学习出现之前,如果你想对图像进行分类,首先需要执行一个特征提取(wiki:http://t.cn/RnzvIJ8)的步骤。特征是图像中比较小的“有趣的”、具有描述性的或包含信息的块。在这篇文章中你将会了解到传统的计算机视觉技术,包括边缘检测(wiki:http://t.cn/RnzvqtE),角点检测(wiki:http://t.cn/RnzvSVQ),对象检测(wiki:http://t.cn/RnzvpqH)等等。
就特征提取和图像分类而言,使用这些技术的思路是:从统一类别对象的图像中(椅子、马等)提取尽可能多的特征,并将这些特征视为对象的一个“定义”(众所周知的词袋模型),然后在其他图像中搜索这些“定义”,如果词袋模型中有相当一部分的特征都可以在这幅图像中找到,那么这幅图像被分类为包含该特定对象的类别(椅子,马等)。
这种特征提取方法的难点在于,在给定图像中,必须选择需要查找哪些特征。当图像中类别过多时(如10或20个类别),就会变得复杂而难以分类。角点?边缘?还是纹理特征?只有使用不同的特征才可以更好地描述不同类别的对象。如果你在分类时使用很多特征,就必须对大量的参数进行微调。
深度学习为我们展示了端到端学习( end-to-endlearning)这一概念,简而言之,针对每个特定类别的对象,机器会自动学习需要查找什么特征。它为每个对象提供了最具描述性和显著性的特征。换句话说,神经网络可以探索图像类别中的底层模式。
因此,通过端到端的学习,你不再需要自己动手来决定使用哪种传统计算机视觉技术来描述这些特征,机器将会替你做这些工作。《连线》杂志这样描述:
“举个例子来说,如果你想训练一个[深度]神经网络来识别一只猫,你不需要告诉它要寻找图像上的胡须、耳朵、毛发和眼睛。你需要做的就是向它展示成千上万张猫的照片,这就能解决问题。如果它将狐狸误认为猫,你也不需要重写代码,只需要继续训练即可。”
下图展示了特征提取(使用传统的计算机视觉技术)和端到端学习二者之间的差异:
下面我们将继续讨论,传统的计算机视觉为什么仍然有必要且值得我们去学习。
▌深度学习需要大数据
首先,深度学习需要数据,并且是大量的数据!上面提到的那些经典的图像分类模型都是在大型数据集上进行训练的。常用于训练的三种数据集分别是:
ImageNet数据集——包含150万张图像,有1000个类别。
MicrosoftCommon Objects in Context(COCO)数据集——包含250万张图像,有91个类别。
PASCAL VOC数据集——包含500万张图像,有20个类别。
比图像分类简单的任务或许并不需要如此多数据,但也少不到哪里去。你必须在你所拥有的数据上进行训练(有些技巧能够增强训练数据,但也都是人为处理的方法)。
在训练数据范围之外的数据上,已训练模型的表现就会很差,这是因为机器并没有理解这个问题,所以不能在没有训练过的数据上进行泛化。
我们很难看到训练过的模型的内在机制,手动调参也相当困难,因为深度学习模型里面有数百万个参数——每个参数在训练过程中都需要调整。从某种意义上来说,深度学习模型就是一个黑匣子。
传统的计算机视觉具有充分的透明度,这能够使你对解决方案能否在训练环境之外运行做一个更好的评估和判断。你可以更容易地了解算法中存在的问题,弄清楚什么地方需要调整。
▌杀鸡焉用牛刀
这也许是我支持继续研究传统计算机视觉技术的最佳理由。
训练一个深度神经网络需要很长时间。如果使用专用硬件(例如高性能GPU)训练最先进的图像分类模型,也得需要将近一天的时间;如果使用标准笔记本电脑进行训练,甚至需要一周或者更长的时间。
此外,如果你的训练模型表现不佳应该怎么办?你必须重来一遍,使用不同的训练参数重新进行训练,而且这个过程有时候还得重复数百次。
并不是所有问题需要使用深度学习。在某些问题上,传统的计算机视觉技术的表现比深度学习更好,而且需要的代码更少。
例如,我曾经参与过一个项目——检测每个通过传送带的锡罐中是否有红色的勺子。你可以训练一个深度神经网络来检测勺子并完成上述过程,但这比较耗费时间;或者你也可以编写一个简单的关于红色的颜色阈值算法(在红色范围内的任何像素都标记成白色,其他像素则都是黑色),然后计算有多少白色像素,这样就可以快速检测勺子。第二个方法很简单,并且能在一个小时以内完成!
了解传统的计算机视觉技术会为你节省大量时间以及减少不必要的麻烦。
▌理解传统的计算机视觉方法可以提升你的深度学习技巧
理解传统的计算机视觉实际上真的有助于你更好的使用深度学习。例如,计算机视觉中最常见的神经网络是卷积神经网络。但是什么是卷积?它实际上是一种广泛使用的图像处理技术(例如Sobel边缘检测)。了解卷积有助于了解神经网络的内在机制,在解决问题时,它可以帮助你设计和调整模型。
其次是预处理,这通常是针对训练数据而言。预处理这一步骤用到的主要是传统的计算机视觉技术。例如,如果你没有足够多的训练数据,则可以采用数据增强的方法来处理:通过对原来的图像进行随机旋转、移位、剪切的方式来创建“新”的图像。这些操作可以大大增加训练数据的数量。
▌结论
在这篇文章中,我解释了为什么深度学习仍然没有取代传统的计算机视觉技术,以及传统的计算机视觉技术为何值得我们去学习和研究。
首先,深度学习通常需要大量的数据才能达到较好的性能,但是有时候这是不可能实现的。在这些情况下,传统的计算机视觉技术就可以成为替代方案。
其次,对于某些特定的任务来说,有时候深度学习过于深度。在这种情况下,标准的计算机视觉技术可以更有效地解决问题,并且使用较少的代码。
第三,了解传统的计算机视觉技术实际上可以让你更好地使用深度学习。这是因为通过传统的计算机视觉,你可以更好地了解深度学习的内在机制,并且可以执行某些预处理步骤来提升深度学习的性能。
简而言之,深度学习只是计算机视觉的一种工具,并不是万能药。不要因为深度学习现在较为流行就只使用深度学习。传统的计算机视觉技术仍然非常重要,它可以为你节省很多时间,并减少许多不必要的麻烦。
全部0条评论
快来发表一下你的评论吧 !