思考 | 怎样的视觉识别算法才是完整的?
如果有不同见解,或者发现我这个想法已经被前人提出过,请以任何一种方式告诉我,非常感谢!
初稿的链接:arxiv.org/abs/2105.1397
0. 铺垫部分
视觉识别,是计算机视觉领域最重要的任务。虽然深度学习技术给这个领域带来了深远的影响,许多任务的SOTA相比于十年前也已经是突飞猛进,但就目前来看,还没有任何一套方法能够在一般意义上解决识别问题。当前算法的不足之处有很多,而学界较为公认的未来发展方向主要分为数据、模型、知识三大方面。其中,知识是一个相对模糊的概念,迄今学界还没有准确清晰的定义。而数据和模型,则构成了当前大部分视觉算法的主要困难。
回顾过去一年,在视觉识别领域,有两类方法得到了广泛的重视。一个是自监督学习,尝试从数据的角度来提升算法的泛化性能;一个是Transformer,尝试引入新型模型设计,提升神经网络的拟合能力和泛化能力。这两类方法确实为视觉识别提供了种种新线索,但是它们也很快展现出了各自的局限性。
在拼命内卷、忙于刷新各种指标的间隙,我时常会问自己一个问题:计算机视觉领域,有没有一些被忽视,却十分重要的问题?在一段时间的思考以后,我在数据和模型层面都有了一些不成熟的idea。今天写写数据方面的想法,未来有机会,再写写模型方面(更不成熟)的想法。
下面进入正题。
1. 研究动机
开门见山,我研究的主要动机是在标题中提出的问题:怎样的视觉识别算法才是完整的?这里我对“完整”的定义是:识别出所有人类无需专门记忆就能够识别的内容。
我们以上述图片为例。这是一张来自MS-COCO数据集的图片,主要包含“人”这一类别。虽然MS-COCO已经提供了像素级标注——几乎是当前能够获取的最精细级别,然而还是有大量的语义信息无法被标注出来。更加重要的事实是:即使提供足够的人力成本,我们也很难定义出一套规范的标准,完成“所有语义信息”的标注。举个例子:当我们标注出“人”以后,还可以进一步标注“手臂”,进而标注“手”、“手指”、“指节”、“指纹”,甚至是“指纹上的缺口”。即使某些语义信息已经到达“子像素级”,只要人类愿意,就可以通过语言、刻画等某种方式,将它从图像中识别出来。
通过上述例子,我们可以得出以下两个结论:
我们难以定义人类识别能力的极限——虽然对大多数人而言,这个极限应当是差不太多的
当前计算机视觉能够通过标注获取的监督信号,远远低于这个极限——即使投入大量人力,也很难逼近这个极限
于是我认为:要想得到完整的识别结果,就不能依靠人工标注来学习。那靠什么呢?我认为应该靠数据压缩。认知科学的实验提供了一条重要的线索:人类在识别图像时,往往倾向于最省事的做法:也就是说,人类会寻找一种最容易记忆的形式,而识别只是为了方便压缩而做的一种量化。
沿着这条思路,我设计出了下面的预训练任务。
2. 通过压缩来学习(learning-by-compression)
这个概念是相对于“通过标注来学习”(learning-by-compression)而言的。当然实现要说明的是,这个概念并不新:早年的autoencoder就是建立在类似的思想上的。如果想看related work,可以参考原文。这里想要强调的是,我们重新提出这个概念,是基于“标签学习”无法解决上述gap的判断。而我们的提议和autoencoder类方法最大的不同,恰恰在于我们把重心从网络结构的设计转到对图像恢复质量的评估上。
如上图所示,我们的设想很简单:一张图像通过编码器压缩成维度尽可能低的向量,再通过解码器恢复成与原图差距尽可能小的图像。其中编码器和解码器都可以是标准的神经网络(不限定于CNN或者Transformer),而评估器既可以是自主学习的神经网络,也可以是预先定义的函数,甚至可以通过human-in-the-loop的方式来设计。后面我们会说到,评估器是整个框架中最难设计的模块,也是当前阻止我们把这个idea变成现实的最大障碍。
用几个小点,来解释这样做的目的:
我们的假设是:如果能够设计出一对编码器和解码器,使得输入图像能够被压缩成尽可能短的向量,同时这个低维向量能够用于生成高质量的输出,那么我们就认为编码器和解码器只有一条路可走——学习高效的语义特征,并以此对图像进行编解码。
如果压缩率足够高,那么算法一定无法准确地恢复原图的所有细节。这看似与“完整的视觉识别结果”相矛盾,但我们可以通过调节压缩率(比如在编码器和解码器之间插入一些线性映射层,详见原文)来控制恢复的质量。于是,只要有一个合理的评估器,我们就可以在任何一对编码器和解码器上,得到一组压缩率和恢复质量的tradeoff,如下图所示。
顺便要指出:天下没有免费的午餐。追求更高的压缩率和恢复质量的tradeoff,就意味着编码器和解码器存储了更多视觉特征(可以理解为更大的视觉词典),以供算法调取。这也就为当前盛行的视觉预训练大模型提供了另一种视角。
最后,如果我的设想成真,那么业界的注意力会更多地转向追求上图左边的tradeoff而不是右边。虽然右边也很重要,但我认为左边或许更接近本质一些。
3. 评估算法的困难
上述自监督学习算法,都建立在一个合理的评估函数上。然而我们不难想象,这个评估函数是很难设计的。我们知道,人类的对图像的理解是层次化的。在能够存储的信息很少(即压缩率很高)的情况下,人类往往倾向于关注图像的全局信息,而忽略图像的细节。仅就满足这一特性而言,要设计出合理的评估函数,就十分困难。我大胆地猜测:设计这个评估函数的难度,甚至不亚于视觉识别问题本身。也就是说,某种意义上看,设计评估函数能够提供视觉识别问题的另一种视角,或者启发些新的思路。
这里顺带说明,以autoencoder为代表的算法,大多建立在无差别地恢复图像像素的基础上,而这并不是我们想要达到的效果。换句话说,既然已经决定压缩数据,就不应指望能够恢复出所有细节来。于是,我设想了几种评估算法的可能性:
语义弱监督:如果在庞大的预训练数据集中,部分图像被赋予了语义标签,那么这些图像就可以用语义层面的监督来度量相似度。举例说,如果恢复前后的图像在某个检测算法上的结果一致,那么就可以粗略地认为,恢复算法保留了一定的语义信息。原文中,我还根据这个思路设想了一个迭代算法,此处不再展开。
利用human-in-the-loop的思路:即将人类的反馈机制引入训练过程,在需要评估恢复图像的时候,让受试者指出几张图像中恢复较好的或者恢复较差的图,或者指出一张图像上恢复较好的或者恢复较差的区域。这些反馈可以作为弱监督信息,让算法不断迭代。
当然我们要强调,上述两个方案都不是完美的。语义监督方面,从我们的研究动机就知道,所有语义信息都只能提供有偏的弱监督,因而不可能从头到尾训练一个高效模型;而利用人类反馈,则需要大量的人力劳动,同时随着训练的进行,受试者将越来越难以客观地区分恢复效果的好坏,因而导致预训练过程出现瓶颈。
4. 下游任务的应用
如果上述算法得以实现,那么我们将得到一个通用的视觉预训练模型。由于这一模型不偏向任何特定的识别算法,且它同时包含编码器和解码器,我们就可以用它来完成各种下游任务。
如果要做分类或者检测,直接继承编码器,加上轻量级的head做微调即可
如果要做分割,同时继承编码器和解码器,并且对解码器做微调即可——在高压缩率的驱动下,编码器和解码器将更擅长将不同物体区分开来,否则难以生成出高质量的图片
如果要做底层视觉任务(如图像超分),同时继承编码器和解码器,并且在合理的位置插入一些shortcut连接,微调解码器即可
如果要做图像生成任务,直接继承解码器的分布和解码器的权重,采样生成即可;如果是有条件的生成任务,可以事先将编码器进行微调,以适应给定的分布
最有趣的应用是视频识别:视频数据比图像数据的维度更高,也更难学习;为此可以设计两阶段的特征学习方法:利用上述的编码器逐帧抽取特征,再将序列特征送入时序模型(如seq2seq或Transformer)进行进一步压缩,以期得到适合视频识别的预训练模型
……
当然,在现阶段,这些还都无法成为现实。
5. 总结和展望
我们首先指出,当前所有视觉识别任务,距离完整识别还有相当大的距离,而且这一鸿沟难以通过增加标注量和标注粒度来跨越。基于这一判断,我们提出了一个新的视觉预训练任务,即通过压缩来学习(learning by compression)。这个任务的难度主要体现在评估函数上,而我们甚至认为,这也许是视觉本质问题的另一种表现形式,或许能够提供新颖的思路。
面向未来,我们认为大规模预训练模型是计算机视觉乃至整个人工智能领域的大势所趋。然而当前的预训练模型还比较笨重,除了用于抽取强有力特征外,并没有一个完整的pipeline去释放它们的能力。更重要的是,大模型预训练和小样本微调,似乎有着天然的冲突:大模型希望看到更general的数据分布,在均摊意义上追求最优解;而小样本则往往针对一个特定的领域,在单点上追求最优解。于是,模型规模越大,微调的难度就越大——现在的大模型更多地是说服下游应用无需微调,而对于下游domain相差较大的场景,往往就难以取得良好的效果。这一点,也是AI部署算法需要着力解决的问题。
声明:部分内容来源于网络,仅供读者学术交流之目的。文章版权归原作者所有。如有不妥,请联系删除。
---END---
双一流大学研究生团队创建,一个专注于目标检测与深度学习的组织,希望可以将分享变成一种习惯。
由于微信公众号试行乱序推送,您可能不再能第一时间收到「目标检测与深度学习」的消息。可以的话,将公众号设为星标★,并点击右下角“在看“,可第一时间收到我们的最新分享。
整理不易,点赞三连↓