视觉的目的是什么
这个问题很有意思,基本上贯穿了整个计算机视觉的研究脉络。在我还没生出来的时候,计算机视觉是以规则为主的,对于所有的概念,我们都需要很详细地去设计它的特征。比如要让计算机了解猫,最简单的特征就是它的脸,形状,四肢,尾巴等等,为了和狗做区分,我们还要设计那些显著的特征。有了这些特征,计算机就去匹配,能匹配上的就是猫。现在回过来看,你会发现这种方法特没谱,首先,就算计算机认出了这只猫,这算不上理解,只是对一些规则的数学匹配;其次,普遍的规则很难用在复杂的现实情况中,这 只猫必须站的非常端正,计算机才能把它认出来;再有,定义一个概念是非常不容易的,何况有那么多概念要定义。那时候的计算机视觉,目的就是特征的计算和匹配——无论是人为设计的还是用公式算出来的特征,只要匹配上了,计算机就算认出了这个东西。它的弊端虽然不言而喻,但为了解决它还是费了很多时间的。
后来是怎么解决这个问题的呢?我们就得回头分析人的视觉系统了,在我们认识世界的时候,没有人给设计特征,完全是靠大量地长时间地看,不知不觉地就形成了视觉理解。“不知不觉”这个事情很玄,没法在工程上实现,那么我们就退一步,给计算机看很多很多的图片,并且告诉它里面有什么,通过这个方法来形成计算机视觉。最有名的就是ImageNet,这个图片数据集,里面包含了很多人工标注的概念,比如猫,狗。它和之前方法不同的是,从此我们不再需要人为地设计特征了,而是让计算机自己从大量的图片和标签配对中学习这么多概念和它们对应的视觉特征。
用这个方法学习的计算机视觉很强,怎么看出来的呢?是在众多的benchmark任务中体现出来的。我们称这些模型为ImageNet预训练模型。计算机视觉,在这个任务中的目的也很明确,就是准确分类,让计算机的识别和人类标注越接近越好。是不是顺着这个思路,我们可以训练出一个至少像动物一样可靠的视觉系统呢?如果答案是的话,问题就简单多了,扩充ImageNet数据集,增加类别数,增加图片量,增强模型设计。虽然有人说这样很费时间也很费钱,但是如果这个思路真的可行,能用钱解决的问题都不是大问题。可是我们想一想,人类或者动物的视觉是这么形成的吗?或者说再回到我们小时候,我们的视觉系统是否是这样形成的?当我们看东西的时候,有没有一个人在边上一直告诉我们:这是猫,那是狗,这个桌子,那是椅子。如果这个不够直接,那不妨考虑一下动物,家里的宠物狗是否需要区分这些概念才能建立起它们的视觉系统?在大量的例子中我们可以发现,概念的分类可能是一个有效的途径,但并不是建立视觉系统的必要条件。进一步讲,基于人类语言的标签不是视觉系统的必要条件,换句话说,不需要“分类”,只需要“分辨”,也就是说,是猫是狗是桌子是椅子没所谓的,重要的是把这些概念区分开即可。
这里展开来阐述一下“分类”和“分辨”的差异。它们貌似差不多,但在我们今天聊的“视觉的目的”上有本质的区别。
首先,在分类问题中,所有类是完全独立的,或者说在空间中是两两正交的。但是实际情况下却并非如此,比如类别猫和老虎,猫和椅子,在分类问题的设定下,它们类之间的差异是一样的,但很显然,猫和老虎的类间差异比猫和椅子低很多。这就出来两个问题:我们如何去标注这样一个数据集,如何去训练一个模型才能够让它知道类之间的不同?
第二点,人工标注的数据集中类之间是很平衡的,猫和狗的数量一样多,但是现实情况下,类别是长尾分布的,也就是大多数类的图片是很稀有的,这里的问题是如何解决大多数类的长尾标注问题?
最后一点,也是最关键的一点是,类别这个事情,本身就是不胜枚举的。世界上有多少正交的类,类中还有子类,子类还有子子类,子子孙孙无穷尽也。同样是狗,狗中还有特别多的子类,如何去定义类和子类,以及如何去定义“有用的”类。比如,ImageNet里面大多是动物,那么植物呢,其他的物件,或者说背景信息,比如天空,大海,星辰呢?
目前来说,训练完一个计算机模型,它能做的分类只能是数据集里面有的类而已,如果测试集中出来新的类,它是完全不知道的。那么如果说分类真的是视觉的目的,为了去真正地实现像人和动物这样的视觉系统,其中最大的难点就是去定义和标注这些类。不知道你是否认同,定义类本身这个工作,和定义特征的工作没有本质的区别。它们的目标都是让模型能更好的理解图片,但是定义类和定义特征这两个工作都是无穷尽的,并且有很多人为主观的干预,比如什么样的特征能刻画一个概念,什么样的类能帮助建立可靠的视觉系统。但是,话说回来,你是否认同分类是视觉的目的这个假设?
也许不见得吧,再回想我们小时候,监督学习,或者类别学习占的毕竟少数,特别是对动物而言,它们很少很少会出现监督学习这个情况。大多数情况下,视觉系统的建立是无监督的,靠我们自己和环境之间的互动,来理解图片和视频。这个简单的想法就促成了无监督或者自监督的视觉学习方法。其实这方面的研究开始的挺早的,为什么一直都没有像现在这么火呢?关键还是当时的实验结果没有像全监督的分类学习那么好,虽然它蛮符合我们对视觉的期望,实验结果还是硬道理。不过就这几年,自监督学习发展地特别快,某些方法已经在实验中被验证比有监督的分类学习要好。这又是我们在了解视觉系统中迈出的很大的一步。那么我们就来聊一聊自监督学习是如何回答“视觉的目的是什么”这个问题的。
我们所有的系统,视觉,听觉,触觉,嗅觉都是自我迭代学习的,很多时候它们在学习而我们是不自知的。有人会问自监督学习是不是就是给一堆数据,让计算机自己实现智能?不是的,一个很简单的例子,我给一条狗看MNIST数据集,不停地看,不停地看,很多很多的数字,它会建立起对数字的认知吗?我再换一个方法,还是让它不停地看,但是每次看到数字9的时候,给吃的。第二个方法狗的视觉系统会产生学习,但是第一个不会。也就是说,视觉系统,或其他系统的学习是天生惰性的,虽然说我们的视觉系统感觉上是自发学习的,如果没有明确的动机,它是不会在脑回路中真的产生变化的,那也就回到了我们一直在讨论的问题,视觉的目的是什么?如果我们了解了它的动机,那么实现通用的计算机视觉算法就没有那么困难了。现在那么多的自监督学习方法,其实本质上都在探索这个问题的答案。
我们可以先猜一猜,视觉的目的是什么?科学研究就是先提出假设,然后验证这个假设。那好,生物最基本的动机就是活着,为了活着,视觉必须学会一个很重要的功能,那就是
试想一直老虎向你跑过来了,你不会等它到了才跑吧,视觉系统需要做准确的预判并且马上采取行动。对于那些不能做预判的,可能就被自然淘汰了。另一个不那么极端的例子,你看到苹果从树上掉下来,应该会躲吧,这也是一种预判。往大里说是你的视觉系统学习到了牛顿定理,其实就是它学习到了重力的表现形式。很多很多生活上的例子表明,视觉系统需要学习预判的能力。那么预判在自监督学习上体现在哪儿呢?其实有很多,最基本的就是auto-encoder,还有去噪声的auto-encoder,in-painting,out-painting,在视频处理中应用的更多,根据当前帧来预测下一帧的图片。这些方法在实验中被证明是非常有效的,并且不需要人工的标注,因为图片和视频本身就是最好的标注。
但是这一系列的预判方法在某些时候可能会不太好用。比如,我随机遮住一只猫脑袋的一部分,让计算机去脑补,如果它知道这只猫,就会补全它的脑袋,这没有问题。但是,如果我遮住那只猫的尾巴,计算机去脑补的时候就会出问题,因为就算我知道这只猫需要补一条尾巴,但是我不知道那尾巴原来是朝哪儿的。再看原图,它只是提供了某一种可能性,但并不唯一的可能性。发现问题了吗?这一系统方法被人诟病的最重要的一个点就是,预判是一个概率的问题,不能用原图的每一个像素来做严格训练,特别是需要预判的内容特别多的时候,会出现问题。Yann Lecun有一个非常经典的例子,视频中一只铅笔笔尖朝下竖直放着,预测下一时间,我们都知道铅笔会因为重力倒下,但是具体往哪个放下倒是一个随机的问题,并不能用原数据来监督学习。
版权所有:江苏和讯自动化设备有限公司所有 备案号:苏ICP备2022010314号-1
技术支持: 易动力网络