计算机视觉这行快要变天了,计算机视觉正在消失?别再折腾3D重建了,那是个死胡同!为什么你的计算机视觉知识可能快要过期了
我们以前折腾的那些计算机视觉任务,比如识别图片里是猫还是狗、给每个像素分类、重建3D模型,这些事很快就要被扫进历史课本了。
未来的视觉,不会再单独存在,它会变成“感知-行动循环”的一部分。
换句话说,你不需要先教会计算机“看到什么”,然后再教它“该干嘛”。它会直接把看到的东西转化成动作。3D重建这种中间步骤,就像当年手工设计特征检测器一样,迟早会没人用。
计算机视觉到底在解决什么问题
我们得先搞清楚一件事:以前大家是怎么定义计算机视觉的?简单说,就是输入一张图或者一段视频,输出一些中间结果。这些中间结果包括:这张图里有什么物体(分类)、每个像素属于哪个物体(分割)、或者这个场景的3D形状(重建)。听起来挺合理对吧?但问题来了:这些任务其实都是人为划出来的“小问题”。就像你学做饭,不直接学炒菜,而是先去学怎么切葱、怎么倒油、怎么调火候。每一个步骤单独看都很清晰,但把这些步骤拼起来,不一定会炒菜。
真实世界里,衡量一个系统“看没看懂”的标准只有一个:它能不能根据看到的东西,做出正确的动作。比如你让机器人去洗碗机里把碗拿出来放柜子里。如果它成功了,那它一定看懂了。如果它失败了,你说它识别出了100个物体、重建了完美的3D模型,都没有用。这个标准非常简单直接:能干活,就是看懂了;不能干活,就是没看懂。
那为什么以前不直接这么干呢?因为以前的技术不够。训练一个从图像直接到动作的系统,太难了。你得让机器人在真实世界里试错,摔坏了怎么办?撞墙了怎么办?而且你也没有足够的数据。一个科学家能做的是先解决那些可以下手的小问题。所以大家就分工了:搞计算机视觉的人,负责把图像转成中间表示,比如边界框、分割图、3D点云。搞机器人学习的人,负责拿这些中间表示去生成动作。这个分工在当时是合理的,就像你先把葱切好,再学炒菜,每一步都有明确的目标。
但现在情况变了。这个老的分工方式正在失去存在的理由。你看自然语言处理那边,已经发生了类似的事情。以前搞NLP的人会花很多精力做词性标注、句法分析,这些任务当时觉得特别重要。结果大语言模型出来之后,大家发现这些中间任务根本不需要了。模型直接学会了回答问题、写文章、编程,那些中间表示就像学自行车时用的辅助轮,一旦会骑了,辅助轮就没用了。计算机视觉正处在同样的转折点上。
拿3D来说,这东西可能很快就没人用了
Rich Sutton提出过一个“苦涩的教训”:那些依靠大规模计算、通用性强的方法,最终总会打败那些精心设计、针对特定任务的方法。虽然后者在刚出来的时候看起来很聪明。在计算机视觉领域,大家都同意这个说法。没人觉得现在还要手工设计边缘检测器了,因为神经网络自己就能学出来。但奇怪的是,很少有人把同样的逻辑用到“表示”上。
你想想3D表示这个东西。不管是点云、辐射场、符号距离函数还是体素网格,它们本质上都是人为设计出来的中间表示。我们把图像先转成3D,然后再拿这个3D去做别的事。但如果我们能直接训练一个端到端的算法,从图像到动作,那为什么要中间插一个3D重建的步骤呢?这个3D步骤恰恰就是“苦涩的教训”里警告的那种东西:一个聪明的、人为设计的瓶颈。
做个思想实验。看看你现在所在的房间。假如我给你这个房间的完美3D重建,你想用它来解决什么实际问题?如果你想用这个3D模型来决定自己怎么走路,那你还是需要一个额外的算法来读这个3D模型,然后决定往哪走。整体来看,输入还是图像,输出还是动作。3D重建只是一个复杂的预处理步骤。从长远看,这种分解方式不会通过时间的考验。
事实上,很多传统上被认为依赖3D的任务,已经可以被端到端的方法做得更好。拿新视角合成来说,就是给你几张图,让你生成一个从来没拍过的角度的图。现在最先进的方法已经不是用3D渲染了,而是用生成式世界模型。有人做了实验,用扩散模型生成新视角,效果比任何基于3D结构的方法都好。而且这个结果几乎是无心插柳得到的,本来不是专门为了解决这个问题。
相机位姿也会一起消失
你可能会说,那些生成式模型还是需要输入相机位姿啊。相机位姿就是用传统方法(比如COLMAP)或者学习出来的方法得到的。但我预测,就像3D表示一样,输出相机位姿的算法也会过时。已经有工作证明,新视角合成可以纯粹当作一个表示学习问题来处理,完全不需要多视图几何里的任何概念。不需要位姿,不需要3D。
自我运动(也就是相机位姿)只是智能体能做的最基本的动作而已。它并不特殊。最终我们要解决的问题是:让人工智能控制一个它从来没控制过的身体。在这个大问题面前,推断自我运动反而是相对简单的部分。真正难的是复杂的控制问题。一个通用的智能体,它的内部表示会自动处理好自我运动,不需要我们专门把它设计进去。
想做出会3D编辑的模型,就别直接训练它做3D编辑
那建筑、CAD、制造业里那些正经的工程任务呢?盖房子、3D打印一个发动机零件,总得需要明确的3D表示吧?这个我同意。在人机交互的层面上,有一个3D网格和一个类似CAD的编辑器,确实合理。但我的论点不是关于我们怎么跟机器交流,而是关于我们怎么训练模型,让它们最终帮我们自动化完成3D设计任务。
为了得到最擅长处理3D物体的模型,我们不应该直接训练它们去输出人为设计的3D表示,也不应该把这种表示硬塞进它们的架构里。相反,我们应该直接在原始数据上训练通用的物理智能模型,让它们自己学出内部的结构。这些内部的表示很可能跟任何人类设计的3D概念都不对应。等模型训练好了,我们再根据需要用微调的方式,让它对接上我们人类喜欢的表示格式或者工具链。
至于最后一步,比如实际去3D打印一个东西,短期内我们会用同样的方式:在3D打印机的应用程序接口或者网格文件格式上做微调。放长远看,3D打印机或者挖掘机本质上就是机器人。我们想用人工智能来自动化操作的物理机器。所以最终解决3D制造问题的方式,会和解决通用智能体问题的方式一样:让人工智能直接控制机器的执行器。
感知-行动循环的核心难题
那说了这么多,现在最大的拦路虎是什么?是数据。我们需要大量的“感知-动作”配对数据来训练模型。但在真实世界里部署大量机器人太贵了。而且就算能部署,你也不知道该让它们干什么。收集有价值的数据需要智能体去做有意义的、多样化的行为。目前主要靠远程操作来实现。这个方法用在自动驾驶上效果不错,因为人本来就在开车。但要用在有灵活手指的人形机器人上,就没那么容易推广了。
长期目标是让机器人靠内在驱动力自己去收集数据,就像两三岁的小孩一样。这个想法在强化学习领域已经研究了很多年。但现在的算法需要的样本量太大,没法在真实机器人上跑。而且让大量智能体用随机的策略在物理世界里乱跑,可能会弄坏自己或者伤到别人,根本不现实。
所以现在智能体研究面临的核心问题就是:在没有大规模动作数据的情况下,怎么把感知和动作这个循环打通?
世界模型能帮上忙,但不是万能的
这时候世界模型就进入了大家的视线。表面上看,它只是另一个中间任务——一个学会的模拟器,本身并没有解决核心问题。单靠它确实解决不了。
但它提供了两个有希望的角度。
第一,视频生成建模提供了一个可以规模化预训练的目标。关键点在于:视频不仅仅是原始的感官数据,它还隐含地编码了关于物理规律的大量信息,以及关于技能、任务和它们结构的人类知识。训练一个神经网络去近似这个复杂的过程,可能会产生有用的表示。这些表示可以作为基础,通过微调变成有实际能力的策略。不过这一点目前还只是推测,到今天为止,我还没看到明确的证据表明视频模型可以轻松地微调成策略。虽然有一些早期的迹象,但还不够。
第二,如果把视频模型扩展成可以接受动作作为条件,那它就可以充当一个模拟器,在里面训练智能体。原则上,这可以实现一种数据放大:用昂贵的真实世界交互数据来启动一个模型,然后用这个模型生成更丰富的虚拟经验。但这个方法有个先有鸡还是先有蛋的问题。训练交互式世界模型需要配对的“动作-观察”数据,而恰恰这正是我们缺乏的资源。自动驾驶是个例外,这种数据很多。所以不出意外,现有的系统只能展示有限形式的交互性,而且通常跟电子游戏很像,因为游戏数据很可能占了它们训练数据的很大一部分。
基于这些原因,我不认为视频生成模型能解决智能体的问题。它们甚至可能不是最终方案的必要组成部分。它们更应该被看作是早期尝试之一,目的是找到一个可规模化的预训练目标,用于感知-动作学习。但目前来说,还没有人知道那个“正确”的预训练任务应该是什么。同样的情况也适用于其他很多必需的部件:内在驱动力、探索机制、长期记忆、持续学习、大模型的实时控制等等,这些都还是开放问题。
但现在跟以前不一样了
尽管有这么多没解决的问题,有一件事已经变了:我们现在已经可以正面去攻克这些难题了。而这正是这篇文章的核心观点:放弃计算机视觉和机器人学习之间那些老掉牙的边界划分,转而认真思考那些当我们想要建造既能感知又能动作的机器时,真正会碰到的问题。
以前我们觉得必须先解耦、先定义好中间任务、先解决那些“可解的子问题”。但现在,大规模计算、端到端训练、世界模型这些东西给了我们一个新的选项:直接去解那个真正的问题。让视觉不再是一个孤立的模块,而是变成智能体与这个世界互动时的一个自然组成部分。3D重建也好,语义分割也好,点云也好,这些都不应该是最终目标。它们只是我们在没有更好办法的时候,临时搭的脚手架。现在脚手架该拆了。