深度学习使计算机视觉得以蜕变。如今,绝大多数问题的最佳解决方案是基于端到端的深度学习模型,尤其是当卷积神经网络倾向于开箱即用后便深受青睐。但这些模型主要为大型黑箱,其透明度很差。
尽管如此,我们仍旧在深度学习领域获得了显著成果,即研究人员能通过一些数据以及使用基本的深度学习 API 所编写的20 余行代码来获得大量容易得到的成果。虽然这些成果很有突破性,但我认为它们往往过于理想化,且缺乏原则性理解。
本篇博文中,我将提出理由证明,人们通常会生硬地应用深度学习模型来处理计算机视觉问题,但实际上我们能够做得更好。我攻读博士第一年的一些成果便是范例。PoseNet 是我为了研究拍照姿势而使用深度学习开发的一个算法。这个问题在计算机视觉领域已被研究了几十年,有大量优秀的相关理论。但作为博一学生,我天真地应用了一个深度学习模型来端到端地研究这个问题,尽管我完全忽视了该问题的理论,却仍然获得了不错的成果。本文末尾我会介绍一些近期研究,它们以更理论化、基于几何学的方法来看待这个问题,从而对性能做出了极大的提升。
我们正在用尽这些唾手可得的成果,或者用简单的高级深度学习 API 解决的绝大多数问题。具体而言,我认为应用深度学习的计算机视觉在未来的许多发展都将源于对几何学的洞见。
我所言的几何学是什么?
在计算机视觉中,几何描述了世界的结构与形状,具体涉及到如深度、体积、形状、姿势、视差、运动以及光流等测量单位。
我认为几何在视觉模型中举足轻重,主要由于是它定义了世界的结构,并且我们能够理解这种结构(例如从许多著名教科书中得以理解)。因此很多复杂的关系(如深度和运动)并不需运用深度学习从头开始研究。通过构建运用这种知识的架构,我们能在现实中应用它们并简化学习问题。文末的一些例子将展示如何使用几何来提高深度学习架构的性能。
替代范式使用了语义表征。语义表征使用语言来描述世界中的关系,如我们会描述一个物体为「猫」或「狗」。但我认为几何对语义而言具有两个有吸引力的特征:
几何能被直接观察。我们可以通过视觉直接看到世界的几何外观。在最基本的层次上,我们可通过帧之间的对应像素来直接观看视频的运动与深度;其他有趣的例子还有根据立体视差的阴影或深度来观察形状。相较之下,语义表征通常是人类语言所专有的,其标签对应于一组有限的名词,从而无法直接观察。
几何基于连续量(continuous quantities),如我们能以米为单位测量深度或以像素为单位测量视差。相较之下,语义表征主要是离散量(discretised quantities)或二元标签。
为何这些属性如此重要?原因之一便是它们对无监督学习十分有效。
该结构图是英国剑桥中部附近的几何运动重建,我用手机摄像制作了它。
无监督学习
无监督学习是人工智能研究中很令人兴奋的领域,它通过非标注数据来学习表征和结构。这很使人振奋,因为获取大量的标签训练数据十分困难而昂贵。无监督学习提供了更加可扩展的框架。
我们可以使用上述的两个属性通过几何学建模无监督学习:可观察性与连续表征。
例如,去年我最欣赏的论文之一便展示了如何运用几何学来使用无监督训练研究深度。这个例子很成功地说明了如何将几何理论和上述属性相结合,进而形成一个无监督学习的模型。其他研究论文也展示了类似的想法,即将几何用于运动的无监督学习。
我最欣赏的论文之一
语义不够吗?
语义在计算机视觉中常常博得许多关注,因为大量高度引用的突破性论文都来于图像分类或语义分割。
仅仅依靠语义来设计世界的表征存在这样一个问题,即语义是由人类定义的。人工智能系统必须了解语义,从而才能与人类进行交互。 然而,正由于语义是由人类定义的,这些表征便可能不是最优的。通过观察世界中的几何来直接学习可能更加自然。
不难理解,婴儿就曾使用初级的几何学来学习观看这个世界。根据美国眼科协会的统计,在生命的最初 9 个月中,人类学习协调眼睛来聚焦并感知深度、颜色与几何;直到第 12 个月,才会明白如何识别对象和语义。这说明几何学对于人类视觉的基础而言十分重要。在将这些洞见纳入计算机视觉模型时,我们一定会做得很好。
机器对世界的语义理解(a.k.a. SegNet)。每种颜色代表不同的语义分类,如道路、行人、标志等。
我的近期研究中的几何示例
我想通过两个具体示例结束本文,它们将解释如何在深度学习中运用几何学:
1.学习使用 PoseNet 进行重新定位
在本文的介绍中,我举出的 PoseNet 示例是一个单目 6 自由度(monocular 6-DOF)重新定位算法,它解决了所谓的机器人绑架问题。
在 ICCV 2015 的初稿中,我们通过学习由输入图像到 6 自由度拍照中姿势的端对端映射来解决这个问题,这一方法单纯地将问题看作了黑盒子。而在今年的 CVPR 中,我们通过考虑问题的几何学属性从而更新了这一方法。我们并未将拍照姿势与方向值作为单独的回归目标,而是使用几何重现误差(geometric reprojection error)来一同学习。它说明了世界的几何性,结果也得到了显著改善。
2.用立体视觉预测深度
第二个示例是立体视觉,即以双目视觉估测深度。我曾有幸参去研究这个问题——在世界最先进的无人机上工作,与 Skydio 度过了一段美好的盛夏。
立体算法通常用于估测物体在一对整齐立体图像之间的水平位置差异,即视差,其与相应像素位置的场景深度成反比。因此它在本质上能被简化为一个匹配问题——找到左右图像中物体之间的对应关系,并且你可以计算深度。
立体中性能最高的算法主要使用了深度学习,但仅限于构建匹配的功能。生产深度估测所需的匹配以及正规化步骤在很大程度上仍然是人工完成的。
我们提出了GC-Net 架构,但此次着重的是问题的基础几何。众所周知,在立体中我们可以在 1-D 视差线上通过成本量的形成来估测差异。本文的创新性在于,它展示了如何以可微分的方式将成本量的几何阐述为回归模型。本文还具有更多细节。
这是一篇关于 GC-Net 架构的概述,它运用几何的清晰表征来预测立体深度。
结论
我认为本文传达的关键信息是:
了解解决计算机视觉问题的经典方法是值得的(尤其你具有机器学习或数据科学背景)。
若能将架构结构化以利用问题的几何属性,则使用深度学习来研究复杂表征便会更加容易与有效。