
2020年疫情期间我们实验室的自动驾驶感知系统迎来了意想不到的考验。美国那边的测试车队报告说行人检测模型的表现断崖式下降。一开始大家以为是模型漂移或者硬件故障排查了一周才发现原因简单得让人无语行人都戴上口罩了。我们的训练数据里几乎所有的行人都是露着脸的。模型在训练时学到了一个强烈的关联——人脸是行人的重要特征。当口罩遮住了下半张脸行人检测的置信度直接掉了一个数量级。这个事后来被我们当作经典案例写进了课件的数据偏见章节但当时的挫败感是真切的——几百万张训练图片上千个GPU小时的计算被一块成本五毛钱的口罩打败了。这个事件让我开始系统性地思考计算机视觉里的未知问题。深度学习模型在训练数据分布内表现越好在分布外就可能越脆弱。这不是某个模型的缺陷而是监督学习范式的结构性弱点。传统上我们处理这个问题靠的是更多数据——让训练集覆盖尽可能多的场景变化。各种数据增强技术应运而生随机裁剪、色彩抖动、Cutout、MixUp、CutMix不胜枚举。这些方法确实提高了模型的鲁棒性但本质上是在用一个有限集合去逼近无限可能的真实世界注定存在无法覆盖的长尾案例。分布外检测是这个领域的一个重要分支。目标是在推理时判断当前输入是否属于训练分布的范畴如果属于边缘案例就给出低置信度或者拒绝判断。早期方法是在分类网络的softmax概率上加一个阈值低于阈值就认为不确定。但这太粗糙了因为深度网络的softmax输出通常过度自信即使面对完全随机的输入也会给出高置信度。Odyssey、Energy-based OOD、Mahalanobis距离法这些方法一个接一个被提出在标准基准上不断刷新性能。但真实场景的OOD远比学术数据集定义的要复杂。学术数据集里的OOD通常是训练集是CIFAR-10OOD是SVHN泾渭分明。现实中的OOD是渐变的、模糊的、多维度的。一辆侧翻的卡车对于正常训练的自动驾驶感知系统来说就是OOD但它看起来仍然像车模型会以一个奇怪但高置信度的方式错误识别它。域适应和域泛化试图从另一个角度解决问题。域适应的设定是有少量目标域的未标注数据可用于训练模型要适应新的分布。域泛化更难——目标域数据完全不可见模型要在训练时就学会泛化到新域。元学习、风格迁移、不变风险最小化各种思路都被尝试过。但说句实话这些方法的效果都还没有达到工程上满意的程度。2023年一篇全面的综述对几十种域泛化方法做了系统的比较结论是在真实场景下没有任何一种方法能稳定超过经验风险最小化的简单基线。也就是说在足够的算力和数据多样性面前老老实实收集更多数据比任何算法花招都管用。这引出了一个更深层的问题计算机视觉系统要真正可靠地工作在开放世界中到底需要什么是更好的算法还是更接近人类的学习方式人类面对戴口罩的行人这个新情况只需要一两个例子就能适应。因为我们对人的理解不依赖于嘴和鼻子的可见性。我们知道口罩是戴在脸上的脸是长在人身上的人在走路所以戴口罩的移动物体极大概率是人。这种推理链条建立在关于世界的丰富因果知识之上。而深度学习模型没有这些知识。它学到的是像素之间的统计相关性不是因果结构。这就是为什么它会被口罩这种微小的表面变化打败——因为在它的统计世界里没有嘴和鼻子的人形物体是一个矛盾信号。目前最有希望的方向可能是基础模型加快速适配。一个在海量图像上预训练过的大规模视觉Transformer它所提取的特征已经隐含了大量的视觉常识。在此基础上用很少的标注样本微调或者用提示工程的方式引导模型就能比较快地适应新场景。这类似于人类利用通用知识来快速学习新事物。另一个值得关注的方向是视觉世界模型。让模型不仅学会识别还学会预测——给定当前图像和施加的动作预测下一刻会发生什么。在预测的过程中模型被迫学习物体之间的物理因果关系。这种学习范式不需要人工标注可以大规模利用视频数据进行自监督训练。回到2020年那个戴口罩的夏天。最终我们的解决方案不是模型架构的革新而是一周之内紧急采集和标注了两万张戴口罩行人的图片重新训练。这是最笨的办法也是当时唯一可靠的办法。但每次想起这件事我都会想我们离真正的视觉理解还有多远。机器能看见越来越多但看穿的东西可能还是太少。