"); //-->
来源丨https://zhuanlan.zhihu.com/p/343160072编辑丨极市平台
摘要: 视觉,对于人类或动物来说,似乎是一件稀松平常的事情,我们甚至都不需要去有意识地训练自己,就可以天赋一般地认识世界。对于机器而言,理解图片却是一项极其困难的任务,计算机视觉是一门教机器如何“看”的科学。当给定一个明确的目标函数并加以不断地迭代,当前的计算机已经可以完成很多复杂的任务,比如图像视频分类,目标跟踪和检测,实例分割,关键点检测等。完成单一的复杂任务虽然能够清晰地定义目标函数,但是训练成本高,数据收集困难,并且复杂任务的数量不胜枚举,尤其是对于跨学科的图像理解任务。人类的视觉恰恰相反:通过长时间的观察学习,只需很少的监督样本就可以快速达到多个领域的专家水平。要给这种长期的,无监督的学习定义一个清晰的目标函数或目标任务,却是一项非常具有挑战的课题,也是计算机视觉一直在探索的问题。这次分享,我将会从“视觉的目的”引发讨论,简要回顾计算机视觉在通用视觉特征学习的发展历程,以及近期在这个领域取得的众多突破,最后对自监督学习框架提出一些我自己的想法。
为什么问“视觉的目的是什么?”大家好,我是周纵苇,现在是亚利桑那州立大学的博士生,再过几个月我就毕业了,今天很高兴在这里和大家聊一聊计算机视觉。视觉不是人类特有的,大多数的动物,或者更宽泛地来说,摄像头,都有所谓视觉,来收集光线,并做出某些反应。比如现在我没有真的坐在大家的面前,但是你们可以通过摄像头看到我。现在的摄像头变得越来越聪明了,它不光能检测到物体,还能跟踪,能识别人脸,能给我实时地做美颜,这还不算什么,现在的摄像头还能辅助自动驾驶,自动手术等等。真的和我们的视觉越来越像了。问题是,既然摄像头这么智能,如果用它来替换动物的眼睛,能好使吗?小猫小狗的视觉系统可能还远远做不到像现在的摄像头一样,把图片中的大大小小的东西都识别出来,打上标签,甚至把边缘都分割得那么好,它们的视觉系统看起来笨笨的,但是很稳定,很可靠。摄像头背后的秘密就是我们今天讨论的计算机视觉,它的最终目标就是能让计算机像人一样地看见,理解照片,视频,和周围的环境,并且能作出某些反应。
我们先来看看为什么现在的计算机视觉在某些任务中这么厉害——比如人脸识别——因为它目的明确。在训练计算机的时候,我们就告诉它,你把这个事儿做了,其他不用管,跟我们小时候差不多,你把学习弄好了,其他大大小小的家务不用你管。那这个事情就简单了,我们需要做的就是把目标函数设计好,计算机的任务就是不停地学,不停地迭代,直到无限靠近这个目标。用这一套方法论,你会发现计算机视觉很简单嘛,很多任务,只要我们能清晰地设计出目标函数,并且能收集到大量的数据集,计算机视觉非常容易在某个任务中超越人眼。我说到这儿,不知道大家有没有在想一个问题?如果说计算机视觉的终极目标是让计算机拥有像人类或者动物一样看上去笨笨的但是可靠的视觉理解系统,那我就请问,
这个问题很有意思,基本上贯穿了整个计算机视觉的研究脉络。在我还没生出来的时候,计算机视觉是以规则为主的,对于所有的概念,我们都需要很详细地去设计它的特征。比如要让计算机了解猫,最简单的特征就是它的脸,形状,四肢,尾巴等等,为了和狗做区分,我们还要设计那些显著的特征。有了这些特征,计算机就去匹配,能匹配上的就是猫。现在回过来看,你会发现这种方法特没谱,首先,就算计算机认出了这只猫,这算不上理解,只是对一些规则的数学匹配;其次,普遍的规则很难用在复杂的现实情况中,这只猫必须站的非常端正,计算机才能把它认出来;再有,定义一个概念是非常不容易的,何况有那么多概念要定义。那时候的计算机视觉,目的就是特征的计算和匹配——无论是人为设计的还是用公式算出来的特征,只要匹配上了,计算机就算认出了这个东西。它的弊端虽然不言而喻,但为了解决它还是费了很多时间的。
“视觉的目的是大规模分类?“后来是怎么解决这个问题的呢?我们就得回头分析人的视觉系统了,在我们认识世界的时候,没有人给设计特征,完全是靠大量地长时间地看,不知不觉地就形成了视觉理解。“不知不觉”这个事情很玄,没法在工程上实现,那么我们就退一步,给计算机看很多很多的图片,并且告诉它里面有什么,通过这个方法来形成计算机视觉。最有名的就是ImageNet,这个图片数据集,里面包含了很多人工标注的概念,比如猫,狗。它和之前方法不同的是,从此我们不再需要人为地设计特征了,而是让计算机自己从大量的图片和标签配对中学习这么多概念和它们对应的视觉特征。
用这个方法学习的计算机视觉很强,怎么看出来的呢?是在众多的benchmark任务中体现出来的。我们称这些模型为ImageNet预训练模型。计算机视觉,在这个任务中的目的也很明确,就是准确分类,让计算机的识别和人类标注越接近越好。是不是顺着这个思路,我们可以训练出一个至少像动物一样可靠的视觉系统呢?如果答案是的话,问题就简单多了,扩充ImageNet数据集,增加类别数,增加图片量,增强模型设计。虽然有人说这样很费时间也很费钱,但是如果这个思路真的可行,能用钱解决的问题都不是大问题。可是我们想一想,人类或者动物的视觉是这么形成的吗?或者说
再回到我们小时候,我们的视觉系统是否是这样形成的?当我们看东西的时候,有没有一个人在边上一直告诉我们:这是猫,那是狗,这个桌子,那是椅子。如果这个不够直接,那不妨考虑一下动物,家里的宠物狗是否需要区分这些概念才能建立起它们的视觉系统?在大量的例子中我们可以发现,概念的分类可能是一个有效的途径,但并不是建立视觉系统的必要条件。进一步讲,基于人类语言的标签不是视觉系统的必要条件,换句话说,不需要“分类”,只需要“分辨”,也就是说,是猫是狗是桌子是椅子没所谓的,重要的是把这些概念区分开即可。
这里展开来阐述一下“分类”和“分辨”的差异。它们貌似差不多,但在我们今天聊的“视觉的目的”上有本质的区别。
目前来说,训练完一个计算机模型,它能做的分类只能是数据集里面有的类而已,如果测试集中出来新的类,它是完全不知道的。那么如果说分类真的是视觉的目的,为了去真正地实现像人和动物这样的视觉系统,其中最大的难点就是去定义和标注这些类。不知道你是否认同,定义类本身这个工作,和定义特征的工作没有本质的区别。它们的目标都是让模型能更好的理解图片,但是定义类和定义特征这两个工作都是无穷尽的,并且有很多人为主观的干预,比如什么样的特征能刻画一个概念,什么样的类能帮助建立可靠的视觉系统。但是,话说回来,你是否认同分类是视觉的目的这个假设?
也许不见得吧,再回想我们小时候,监督学习,或者类别学习占的毕竟少数,特别是对动物而言,它们很少很少会出现监督学习这个情况。大多数情况下,视觉系统的建立是无监督的,靠我们自己和环境之间的互动,来理解图片和视频。这个简单的想法就促成了无监督或者自监督的视觉学习方法。其实这方面的研究开始的挺早的,为什么一直都没有像现在这么火呢?关键还是当时的实验结果没有像全监督的分类学习那么好,虽然它蛮符合我们对视觉的期望,实验结果还是硬道理。不过就这几年,自监督学习发展地特别快,某些方法已经在实验中被验证比有监督的分类学习要好。这又是我们在了解视觉系统中迈出的很大的一步。那么我们就来聊一聊自监督学习是如何回答“视觉的目的是什么”这个问题的。
我们所有的系统,视觉,听觉,触觉,嗅觉都是自我迭代学习的,很多时候它们在学习而我们是不自知的。有人会问自监督学习是不是就是给一堆数据,让计算机自己实现智能?不是的,一个很简单的例子,我给一条狗看MNIST数据集,不停地看,不停地看,很多很多的数字,它会建立起对数字的认知吗?我再换一个方法,还是让它不停地看,但是每次看到数字9的时候,给吃的。第二个方法狗的视觉系统会产生学习,但是第一个不会。也就是说,视觉系统,或其他系统的学习是天生惰性的,虽然说我们的视觉系统感觉上是自发学习的,如果没有明确的动机,它是不会在脑回路中真的产生变化的,那也就回到了我们一直在讨论的问题,视觉的目的是什么?如果我们了解了它的动机,那么实现通用的计算机视觉算法就没有那么困难了。现在那么多的自监督学习方法,其实本质上都在探索这个问题的答案。
我们可以先猜一猜,视觉的目的是什么?科学研究就是先提出假设,然后验证这个假设。那好,生物最基本的动机就是活着,为了活着,视觉必须学会一个很重要的功能,那就是
试想一直老虎向你跑过来了,你不会等它到了才跑吧,视觉系统需要做准确的预判并且马上采取行动。对于那些不能做预判的,可能就被自然淘汰了。另一个不那么极端的例子,你看到苹果从树上掉下来,应该会躲吧,这也是一种预判。往大里说是你的视觉系统学习到了牛顿定理,其实就是它学习到了重力的表现形式。很多很多生活上的例子表明,视觉系统需要学习预判的能力。那么预判在自监督学习上体现在哪儿呢?其实有很多,最基本的就是auto-encoder,还有去噪声的auto-encoder,in-painting,out-painting,在视频处理中应用的更多,根据当前帧来预测下一帧的图片。这些方法在实验中被证明是非常有效的,并且不需要人工的标注,因为图片和视频本身就是最好的标注。
但是这一系列的预判方法在某些时候可能会不太好用。比如,我随机遮住一只猫脑袋的一部分,让计算机去脑补,如果它知道这只猫,就会补全它的脑袋,这没有问题。但是,如果我遮住那只猫的尾巴,计算机去脑补的时候就会出问题,因为就算我知道这只猫需要补一条尾巴,但是我不知道那尾巴原来是朝哪儿的。再看原图,它只是提供了某一种可能性,但并不唯一的可能性。发现问题了吗?这一系统方法被人诟病的最重要的一个点就是,预判是一个概率的问题,不能用原图的每一个像素来做严格训练,特别是需要预判的内容特别多的时候,会出现问题。Yann Lecun有一个非常经典的例子,视频中一只铅笔笔尖朝下竖直放着,预测下一时间,我们都知道铅笔会因为重力倒下,但是具体往哪个放下倒是一个随机的问题,并不能用原数据来监督学习。最近有论文就对这个问题做了详细的诠释和提出了解决方案,大家有机会可以去看一看:
好,我们再想想还有什么是视觉系统需要自发学习的。刚刚说了一只老虎朝你跑过来,你需要预判并且躲避,那么如果一只小猫跑过来呢?注意这里需要学习的是
最简单的动机,还是为了生存,我们需要区分能吃的和不能吃的,往大里说,我们需要区分不同物体的差异,并不是分出来猫和狗的类别差异就可以了,更需要分出来不同的猫之间的差异,大小胖瘦,毛色等等,从这个角度讲,每一只猫个体都是不一样的,并且,即便是一只猫,在早中晚也是不一样的。这就和刚刚说的以分类为核心,类与类之间正交的学习方法完全不同了,广义上说,我们需要承认世界上没有两片一样的雪花,即便给的标签是一摸一样的,(0,1,0,0),计算机也需要看出物与物之间的不同。这个思路引出了最近火的不行的对比学习。和预判不同的是,这一系列的方法不需要“脑补”,而是能在对比中发现不同即可。很有代表性的工作包括聚类,旋转,和最近的SimCLR,MoCo等。特别一提的是,就是这种方法最近被发现比ImageNet上的分类学习更有效。SimCLR和MoCo假设是世界上没有两片一样的雪花,我们在这个基础上又加了一个假设,也就是我们承认没有两片一样的雪花,但是雪花和雪花之间的差异还是会比雪花和树叶之间的差异更小。
这个很重要,对比学习,除了对比出不同点,也应该同时发现相似处。这就是我们去年在MICCAI Workshop中发表的一篇工作。大家有兴趣的也可以看一看。
Parts2Whole: Self-supervised Contrastive Learning via Reconstructionlink.springer.com
https://link.springer.com/chapter/10.1007/978-3-030-60548-3_9
这也引出了一个更深层的讨论,不同概念的内涵(connotation)和外延(denotation):内涵是一个概念中事物的共有属性,外延是一切属于这个概念的具体事物。分类问题事先给定了一个概念的外延的一部分,比如在所有ImageNet数据集中,“猫”这个概念的外延就是它对应的那几张图片,模型根据这个外延,来学习“猫”这个概念中图片的共有属性(内涵)。分辨则不同,它是不断地放缩一个概念的外延,来辨别两幅图片的相似点和差异性,即便是两幅“猫”,当外延只缩到每一幅图本身了,模型在承认这两幅图都有猫的同时,还需要辨别出两只猫细微的差异的,比如颜色,动作,长相,年龄。对比学习在缩放不同概念的内涵和外延之间,学习到更立体,更丰满的视觉特征。
前沿成果的比较谈到这里,我们离学术前沿是越来越近了。回顾一下我们到底想要一个什么东西?我们需要一个通用的,可靠的,可延展的视觉模型,这个模型不是去做博士干的事情,比如分割一个细胞,区分一个肿瘤是恶性还是良性的,从图片中找病灶等等,这些工作都是后话,有足够标签就能做好,我们需要的是一个五岁小朋友的视觉系统,一种虽然看上去傻乎乎的什么都不会,但是很稳定,很全面的一个模型。很多人在诟病深度学习说需要很多的标签,而人只需要学习一两个样本中就掌握一项任务。这个认识是有偏见的,人确实可以通过学习一两个样本就能大概分清什么是肋骨,什么是心脏,但是这个人想必不是刚出生的婴儿,婴儿视觉系统是没有办法短时间内完成这个one-shot或者few-shot的任务的。而这个五岁左右的视觉系统,就是我们追求的视觉模型。这个模型,是有机会让无数的下游任务实现少样本学习。这相当于是一件“磨刀不误砍柴工”的工作。在众多的下游任务中,我们只需要极少的模型参数量的调整,极少的人工标注,就可以达到一个不错的水平。
我们离这个梦想是有距离的。现在我们就来看看自监督学习离真正回答“视觉的目的是什么”还差多少。现在每天都有那么多自监督学习的方案发表,可以说是公说公有理,婆说婆有理,大家都从不同的角度去思考如何训练一个通用的视觉模型,所以给模型设定的目标也是非常不一样的。有说脑补可以的,有预测旋转角度的,有做拼图游戏的,有比较学习的。一时间出现这么多套训练方案百家争鸣,正常吗?非常正常。想想我们在建立视觉基础的时候也不就是自己摸索出自己的一套方法吗?打个比方,如果说一个厉害的视觉预训练模型是高考状元,高考每年有那么多的状元,他们成功背后的方法也是不一样的嘛。每一个方法都可以发表一篇论文,每个家长都说自己的一套方法是训练状元的有效途径。但是,真的要去评价孰好孰坏是不容易的,确实可能某些自监督方法在特定的情况下会很强,它的通用性是需要在很多具体任务来评判。最新的一篇论文
How Well Do Self-Supervised Models Transfer?
https://arxiv.org/pdf/2011.13377.pdf
就有对大部分自监督学习方法做一个比较,得到的结果参差不齐,有时候这个方法好,有时候那个方法好。这方面的研究论文一般来说有两种,一种是提出新的自监督学习方法,说新提出的方法比其他的方法好。随着越来越多的方案的提出,另一种文章是对这么多方法的一个综述和比较。除了这两种论文,现在又有一种论文的题目特别有趣儿,形如:
Do Better ... Transfer Better?
这里的省略号代表不同的预训练方法。你可能会觉得很奇怪,人家论文都说了,比如预测旋转角度可以让模型更好地迁移学习,为什么还有问这个问题呢?其实这两个论述不太一样,一个是实然层面的,我做了实验,结果表明预测旋转角度可以提高迁移学习的效果,另一个是应然层面的,意思是说预测旋转角度是不是视觉的目的,也就说如果我提升了预测旋转的能力,是否保证这个预训练模型一定会更好?这是一个很有意思的问题,我们可以从实验中总结出来一个自监督学习的方法,比如预测旋转角,是不是直接地学习了视觉特征,还是在预测角度的同时间接地学到了视觉特征。还是高考状元为例,我写一篇论文说根据我的统计结果,发现高考状元的家境普遍比较贫寒。我再写一篇论文,问是不是家境越贫寒,高考成绩越好呢?这就是这一类论文的价值所在,它简直就是灵魂拷问,它从本质上去测试一个自监督学习方法是不是学习到了视觉的目的。大家能明白我接下来要讲什么吗?如果这个类的论文“Do Better ... Transfer Better?”,但凡有一篇的回答是Yes,那真的是,学习通用视觉特征这个问题就大体解决了,或者变成了一个可解的问题了。为什么呢?打个比方,我发现脑补图片的技能越强,模型的迁移学习能力越强。视觉的目的一下子被清晰的定义下来了,也就说训练模型的目标函数被定义下来了。我们把一个模糊的,抽象的所谓“视觉的目的”,转化成了一个具体的,可量化的函数,接下来的任务就是刷高分数,像ImageNet竞赛一样,有一个清晰的评价指标,然后每年把分数往上刷。
现在我们没有办法这么直接地解决问题,还在一个探索期,视觉的目的是什么?刚刚总结了两大块主流任务,预判与分辨。计算机科学为什么是一门科学,是因为在解决工程问题的时候,我们需要做底层的分析和研究,也需要多学科的交流,比如视觉和脑科学的研究会对解决这个预训练的问题很有帮助。那我们来看看这一路走来学到了什么。从一开始的定义特征,到后来自动学习特征(但是需要定义好类别和类别数),到现在完全不需要人工的类别标签,一个趋势就是,当学习通用的视觉模型时,人为定义的东西越少越好,让计算机自主学习的东西越多越好。沿着这个思路下去,和我们的视觉系统相比,这些自监督学习的方法,至少到目前为止,我认为还有几个方面需要解决:
这三个方向的研究都非常有意思,今天我没办法一一细说,我会在后续的博客中讨论。这边我展开来讨论一下最后一条,任务是人为设计的。首先我觉得在现在的阶段,人为设计预训练的任务是可以被接受的,毕竟我们人类上课学习的时候也有一个培养计划,让计算机自己给自己设计一套学习方案,我现在还不敢想。那就看看如何去设计任务,让计算机可以学到通用的视觉特征?回溯到自监督学习一开始的时候,它是先在自然语言处理领域得到突破,为什么自然语言可以做自监督呢?原因是(1)语言可以切成词汇,(2)词汇的排列是有意义的。计算机从网上的那么多语料中学习,一个很重要的点是你不能把语料中的词汇打乱,打乱了就没有语义了。比如
视 · 觉 · 的 · 目 · 的 · 是 · 什 · 么
一共八个字组成,是一段有意义的话,但是,这八个字有很多中排列组合的形式,绝大多数的排列是没有语义特征的,而计算机就只在这种有意义的排列中学习特征,所以是有效的。反观自然图片,猫的图片可谓说是千奇百怪什么都有,像自然语言那样的理想情况是什么?最好所有的猫都端端正正地给我坐好,一个姿势,一种表情,然后计算机去学习它的纹理,形状,或其他的抽象特征。在这种严格的规定下,我清楚地知道什么在上,什么在下,什么在左,什么在右,就像自然语言一样人为地创造了一种特定的语法。计算机就可以比较直接地学习到图片的上下文语义特征。请问这一段对理想图片的描述让你想到了什么?
医学影像
首先在拍影像的时候,医生是不会让你有天马行空的姿势的,基本上两种姿势,要不站着,要不躺着。其次,如果姿势是固定的,人体的组织器官的分布也是有序的,五脏六腑都有固定的位置。所以最后拍出来的图片都看起来差不多,就像一个句子,你反复地用不同的词汇说,但是表达的内容相似。
视觉的目的是什么?视觉的动机是什么?视觉的目标是什么?
医学影像这个独特的优势和自然语言非常的类似。所以我有理由相信在医学影像处理中的自监督学习也可以得到像BERT一样很猛的预训练模型,而不依赖于人工标签。那如何去利用这个天然的优势呢?我们还需要参考自然语言处理,它们是先定义了词的概念,然后根据大量的语料学习每个词的特征,或者每个词在句子中的特征。相似地,我们也可以给医学影像定义视觉词汇,因为刚才说了,这些视觉词汇在医学影像中是有序的,并且传达出人体组织结构的语义信息,那么一个简单的思路就是去学这些视觉词汇的特征。在计算机视觉早期的时候就有Bag of Visual Word的概念,我们最近的一篇TMI就是让这些视觉词汇通过深度网络的学习,使之具备迁移学习的能力。大家有机会可以去看看,应该马上就能见刊了,下面这篇是它的会议版本:
Learning Semantics-enriched Representation via Self-discovery, Self-classification, and Self-restoration
https://arxiv.org/abs/2007.06959
我们来看看这个方法背后想要传达的信息和整体框架的基本假设。梳理一下刚刚的逻辑:
可能这个时候有小伙伴会质疑,你说的这个特征确实在医学影像中表现地非常明显,但自然图像难道不具备这个特征吗?没错,自然图片也可以有这个特征,比如说人脸识别,只要能把人脸从图片中框出来,并加上一定的旋转,也可以得到一个具有固定上下文语义特征的数据集, 也就是一个近似对齐的数据集,计算机同样可以通过自监督的视觉词汇学习,从图像中学到特征。只是构建这种数据集需要一定的工作,不像医学影像(比如ChestXray)那样是自带的属性。
再往上想一层,其实自然图片是包含了弱弱的上下文语义的。刚刚说的语义特征是来自于有序的词汇排列,如果打乱了,语义就没了。从这个逻辑出发,严格意义上讲,所有能被理解的自然图片都是有一定意义的,真的打乱图片中的像素才能说它是一堆乱码。一张图中这么多像素,它们能根据一定的规则拼成有意义的图片,本身就是一种语义信息。
如果云层是天空的一封信,能不能再听一听,听你的声音。(无人之岛)
Images are the Language of the Creator
只是没有像医学影像那么直接,看起来那么有规则。总结来讲,医学影像本身具有很好的属性,让我们可以有针对性地设计自监督学习的策略,原因是它比自然图片更有规则,总结来说,人体组织结构的一致性是自监督学习在医学影像处理中一个很独特也是很直接的学习目的。除了这个特性,医学影像和自然图片相比,还有很多宝藏可以挖,比如影像的像素值有物理意义,大多数影像是三维的等等,这些特性都是设计预训练算法的非常宝贵的参考,我今天就不细说了,因为很多想法都还没有发表,等以后和大家分享。
最后,上一个价值: 计算机视觉在学习通用特征时,需要大量参考人类或者动物的视觉系统,也就是一种跨学科的概念。当然也不是说必须我们要用电脑模拟一个一摸一样的视觉系统,很多工具在借鉴生物学的同时也会根据工程的实际需要进行调整。比如飞机借鉴了鸟的翅膀,但是最后的成品是在这个鸟的基础上优化了很多,甚至改进地面目全非。这是在了解了鸟类飞行的机理的前提下,我们才有可能进行仿真和优化。其实这方面是有争论的,我们会因为脑科学的研究对大脑有一个完整的认识,还是会先在计算机科学上有一个突破,从而反推回大脑的机理,建立起更深的认识,这个我不清楚。但是今天讨论“视觉的目的”是想给计算机找出一个可量化的目标函数,这个目标函数可以和通用视觉特征有一个很紧密的关联,而做到Better ... Better Transfer。这个目的从一开始计算和匹配人为设计的特征,到后来匹配人为定义的类别的监督学习,再到现在的预判,分辨为核心的自监督学习。除了从视觉本身出发去设计不同的预训练任务,探索视觉的目的,我们也可以通过对图片本身性质的理解出发来设计任务,也就是所谓先验的特征,特别是医学影像中那么多的模态,各有千秋,各有各的语义特征。
作者:Zongwei Zhou | 周纵苇(https://www.zongweiz.com/)微博:@MrGiovanni邮箱:zongweiz@asu.edu本文仅做学术分享,如有侵权,请联系删文。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。