1. 项目缘起:自动驾驶感知的“盲区”之痛
在自动驾驶的研发一线待久了,你一定会对一种场景印象深刻:你的车规级传感器阵列——激光雷达、毫米波雷达、摄像头——数据流一切正常,感知模块的检测框画得漂漂亮亮,但就在一个看似平静的路口,车辆突然做出了一个让你惊出一身冷汗的决策,比如毫无征兆地减速或轻微转向。事后回看数据,你可能会发现,就在你的主车前方,一辆公交车或大卡车暂时遮挡了你的视线,而在那个被遮挡的“盲区”里,一个行人或一辆自行车正准备横穿马路。你的系统“看”不到它,但一个经验丰富的司机却能通过公交车车窗下沿晃动的影子、对向车辆微妙的避让姿态,甚至是路口整体交通流的“节奏感”,预判到那里“可能”有东西。
这就是规划关键性被遮挡智能体问题。它不像常规的物体检测那样,目标是在图像或点云里“找东西”;它的核心是判断“那个我看不见的地方,有没有什么东西会严重影响我接下来的行驶规划”。传统的感知方案在这里几乎束手无策:被遮挡意味着没有直接的视觉或点云证据。而这篇题为《What‘s Hidden Matters: Identifying Planning-Critical Occluded Agents using Vision-Language Models》的工作,提出了一种非常巧妙的思路:利用视觉-语言模型来攻克这个难题。简单来说,它不再试图去“检测”一个不存在的像素,而是去“推理”一个场景的“合理性”——如果那个被遮挡的区域是空的,整个场景看起来合理吗?如果不合理,那么那里很可能存在一个对规划至关重要的交通参与者。
我第一次接触到这个想法时,感觉它跳出了“感知-预测-规划”的经典流水线思维,更像是在模拟人类驾驶员那种基于常识和场景理解的“第六感”。它不追求百分百的检出率,而是旨在为规划模块提供一个至关重要的风险概率信号,告诉规划器:“前方左侧被卡车遮挡的区域,有高概率存在规划关键物体,请谨慎通过。” 这个信号的价值,远超一个漏检的检测框。
2. 核心思路拆解:从“检测存在”到“推理缺失”
这项工作的核心创新点,在于将“识别被遮挡的关键智能体”这个感知问题,转化为了一个“视觉-语言推理”问题。它没有去设计更复杂的神经网络结构来穿透遮挡,而是利用了大规模预训练的视觉-语言模型所蕴含的、关于物理世界和交通场景的“常识”。
2.1 传统方法的瓶颈与VLMs的潜力
在深入其方法之前,我们先看看为什么传统方法不行。主流的多模态融合感知,无论是前融合、特征级融合还是决策级融合,其基础都是传感器能接收到目标的部分信号。对于完全被遮挡的物体,激光雷达点云是空的,摄像头像素是背景,毫米波雷达可能因分辨率不足或干扰而失效。一些研究尝试用历史轨迹预测或场景补全来猜测,但这需要很强的时序关联性和准确的动态模型,在复杂、陌生的路口往往不准。
而视觉-语言模型,如CLIP、BLIP等,通过在亿级“图像-文本”对上进行训练,学会了将图像内容与丰富的语言描述关联起来。它们学到的不仅仅是“这是一辆车”,还包括“车通常在路上跑”、“行人走在人行道上”、“自行车可能从车后窜出来”这种深层的语义和关系知识。这就提供了一个新的可能性:我们能否用语言,去“询问”模型一个关于场景的假设性问题?
2.2 Planning KL-divergence:用“语言扰动”量化风险
论文的核心技术是一种称为Planning KL-divergence的度量方法。这个名字听起来有点学术,但背后的思想非常直观。我们可以把它理解为一个“场景合理性诊断”工具。
它的工作流程是这样的:
- 构建基础场景描述:对于一个给定的自动驾驶车辆视角的场景图像(或环视图像拼接),我们用自然语言客观地描述它。例如:“一张城市街道的图像。前景有一辆白色轿车正在直行。右侧有一辆公交车停靠在车站,部分遮挡了道路。左侧是空旷的车道。”
- 构建“无风险”假设描述:这是关键一步。我们基于基础描述,显式地添加一个“安全假设”。例如,在上面的描述后加上:“被公交车遮挡的区域后面没有行人、自行车或其他车辆。”
- 构建“有风险”假设描述:同样基于基础描述,我们显式地添加一个“风险假设”。例如:“被公交车遮挡的区域后面可能有一个行人正准备横穿马路。”
- 利用VLM进行合理性评分:将原始场景图像,分别与“无风险假设描述”和“有风险假设描述”输入到视觉-语言模型(如CLIP)中。VLM会计算图像与每一段文本描述的匹配程度(通常是一个相似度分数)。一个训练良好的VLM会对符合物理常识和场景逻辑的“图像-文本”对给出高分。
- 计算PKL散度:如果场景图像与被遮挡区域“安全”的描述高度匹配,而与“风险”描述不匹配,那么PKL值会很低,意味着VLM认为“那里是空的”这个假设很合理。反之,如果图像与“风险”描述的匹配度相对更高,PKL值就会升高,这暗示着“那里是空的”这个假设与VLM所学的世界知识相悖,即那个被遮挡区域存在关键物体的可能性很高。
这个过程本质上是在利用VLM作为“常识裁判”,去判断我们人为提出的两个关于隐藏区域的、互斥的假设,哪一个更符合整个场景的上下文。PKL值的大小,就成了量化“被遮挡区域存在规划关键物体”这一风险的概率指标。
2.3 为什么是“规划关键性”?
这里必须强调“规划关键性”这个定语。并不是所有被遮挡的物体都需要被识别。例如,被遮挡的远处广告牌、静止的垃圾桶,通常不会影响车辆的即时规划。规划关键性指的是那些如果存在,会显著改变车辆当前最优行驶路径的物体,比如突然出现的行人、横穿的车辆、道路施工锥桶等。
在方法实现上,这通常通过设计特定的“风险假设”语言模板来体现。例如,模板会更聚焦于“正在移动的”、“可能进入本车道的”、“与当前路径有冲突的”物体描述,而不是泛泛的“有物体”。这使得方法的输出与下游的规划模块需求直接对齐,规划器可以简单地设定一个PKL阈值:当PKL值超过阈值时,触发防御性驾驶策略,如减速、备刹、或轻微偏移以扩大感知视野。
3. 实战:在nuScenes数据集上复现与验证思路
由于原论文未提供完整的代码仓库,要验证这个想法,我们可以基于公开的nuScenes数据集和开源的VLM(如OpenCLIP)设计一个复现路线。这不仅能加深理解,还能发现工程落地中的真实挑战。
3.1 数据准备与场景提取
nuScenes数据集提供了丰富的城市场景传感器数据、标注和高质量的地图信息。我们的第一步是提取出存在严重遮挡且标注中有“规划关键”被遮挡物体的关键帧。
关键帧筛选:
- 遍历nuScenes的样本数据。
- 利用标注的3D包围框和自车位姿,计算每个物体相对于自车传感器的可视性。nuScenes本身提供了
visibility_token,但我们需要更精细的判断。可以计算物体3D框投影到图像上的2D框面积,若面积小于某个阈值(如50像素),或物体被其他标注物体(如车辆、大型交通设施)的3D框在视角上完全遮挡,则视为“严重遮挡”。 - 同时,判断该被遮挡物体是否具有“规划关键性”。一个简单的启发式规则是:检查该物体在后续若干帧(如1秒内)是否与自车的规划边界框(通常是一个以自车为中心、向前延伸的矩形区域)有交集。或者,检查其历史轨迹是否显示它正在向车道内移动。
- 筛选出同时满足“严重遮挡”和“规划关键”的物体样本,并记录其所在的场景、帧、以及被遮挡的区域位置(如“公交车后方”)。
图像与文本对构建:
- 对于每个筛选出的关键帧,渲染出自车摄像头(通常是前视或环视拼接)的图像。
- 人工或半自动生成文本描述:这是工作量最大但最关键的一步。需要为每张图像编写:
base_desc:客观场景描述。“一个十字路口,自车正在中间车道行驶。左侧对向车道有来车。正前方有一辆大型厢式货车,完全遮挡了右转车道的视野。交通灯为绿色。”safe_hypo_desc:在base_desc后追加安全假设。“被厢式货车遮挡的右转车道区域后方没有等待过马路的行人或自行车。”risk_hypo_desc:在base_desc后追加风险假设。“被厢式货车遮挡的右转车道区域后方可能有行人或自行车正准备进入车道。”
- 为了提高效率,可以基于nuScenes的标注和地图信息,预生成一些描述模板,然后进行人工校对和细化,确保语言自然且准确指向被遮挡区域。
3.2 模型选择与PKL计算流程
VLM模型加载:使用
open_clip库加载预训练的CLIP模型(如ViT-B/32或ViT-L/14)。这些模型在LAION等超大规模数据集上训练,具备了丰富的常识。import open_clip model, preprocess_train, preprocess_val = open_clip.create_model_and_transforms('ViT-B-32', pretrained='laion2b_s34b_b79k') tokenizer = open_clip.get_tokenizer('ViT-B-32')特征提取与相似度计算:
- 将图像
I用preprocess_val预处理,并通过模型的视觉编码器得到图像特征向量v_I。 - 将
safe_hypo_desc和risk_hypo_desc分别用tokenizer处理,并通过模型的文本编码器得到文本特征向量t_safe和t_risk。 - 计算图像与两个文本的余弦相似度:
S_safe = cos(v_I, t_safe),S_risk = cos(v_I, t_risk)。 - 由于CLIP输出的是未归一化的相似度,我们需要将其转换为概率分布。一种简单的方法是使用softmax:
P_safe = exp(S_safe) / (exp(S_safe) + exp(S_risk)),P_risk = 1 - P_safe。这里P_safe可以理解为VLM认为“安全假设”成立的概率。
- 将图像
计算PKL值:
- PKL的定义是“风险假设”分布相对于“安全假设”分布的KL散度。在我们的二分类设定下,可以简化为:
PKL = P_risk * log(P_risk / P_safe), 这里假设风险分布为[P_risk, 1-P_risk],安全分布为[P_safe, 1-P_safe]。 - 一个重要的工程细节:当
P_safe接近1时,PKL会趋近于0(低风险);当P_safe和P_risk相近时,PKL值会增大(不确定性高,风险可能高);当P_risk显著大于P_safe时,PKL会是一个较大的正值(高风险)。这个值可以直接作为风险分数输出。
- PKL的定义是“风险假设”分布相对于“安全假设”分布的KL散度。在我们的二分类设定下,可以简化为:
3.3 阈值确定与性能评估
得到每个测试样本的PKL值后,我们需要评估其作为风险指示器的效果。
- 标签定义:将之前筛选出的样本作为正样本(存在规划关键性被遮挡物体),标签为1。同时,需要构建负样本:从数据集中找出那些同样存在遮挡(如被建筑物、静止车辆遮挡),但遮挡物后方经标注确认没有任何交通参与者的场景,标签为0。
- 绘制ROC曲线:以PKL值为决策分数,绘制ROC曲线,计算AUC面积。AUC越高,说明PKL值区分“有风险遮挡”和“无风险遮挡”的能力越强。
- 确定操作阈值:根据规划模块对误报和漏报的容忍度,在ROC曲线上选择一个操作点。例如,如果希望尽可能避免漏报(没识别出风险),可以选择一个让召回率(TPR)较高的阈值,但这可能会增加误报(虚惊一场)。这个阈值
T将用于实际部署:当PKL > T时,系统发出风险预警。
实操心得:在nuScenes上初步尝试时,我们发现文本描述的质量对结果影响巨大。过于笼统的描述(如“有物体”)会导致PKL对任何遮挡都有反应,失去关键性。描述必须具体、空间关系明确、且与驾驶决策相关。例如,比起“有东西”,使用“一个可能进入本车道的行人”效果更好。这提示我们,未来可能需要一个专门的“驾驶场景描述生成器”来辅助这一过程。
4. 优势、局限与工程化挑战
这种方法为我们打开了一扇新的大门,但其走向实际车端应用,还有很长的路要走。
4.1 核心优势
- 无需直接感知信号:这是最大的优势。它不依赖于被遮挡物体的任何像素或点云,完美规避了传统感知的物理极限。
- 利用常识与上下文:VLM提供的是一种基于统计的“常识推理”,能够捕捉到人类驾驶员赖以判断的隐性上下文线索,如车辆类型、道路结构、交通流态势等。
- 轻量级与可解释性:相比训练一个复杂的多模态融合网络,这种方法在推理时只需要调用一次VLM的图像和文本编码器,计算相对轻量。并且,其决策依据是“文本假设”,这为为什么系统认为有风险提供了一种可解释的视角(虽然VLM内部仍是黑盒)。
- 与规划模块自然接口:输出是一个标量的风险概率(PKL值),规划器可以非常方便地将其作为一个额外的代价函数项或风险触发条件集成进去。
4.2 当前局限与挑战
- 文本描述的敏感性与生成难题:如前所述,方法性能严重依赖于文本假设描述的质量。人工编写不具可扩展性。如何自动化生成精准、多样、贴合驾驶语境的风险描述,是一个巨大的自然语言生成挑战。描述中细微的用词差别(“可能有一个行人” vs. “有一个行人”)都可能导致PKL值的波动。
- VLM的领域偏差:公开的VLM是在通用互联网数据上训练的,其“常识”可能不适用于所有驾驶场景,特别是罕见的长尾场景(如特种车辆、动物、复杂的施工区域)。模型可能会学到一些虚假关联。
- 对静态场景与动态意图的区分能力有限:当前方法主要基于单帧图像进行推理,对于判断被遮挡物体的动态意图(是静止还是即将移动)能力较弱。这需要引入时序信息,例如结合连续多帧的PKL值变化趋势来判断。
- 量化部署与实时性:大型VLM模型(如ViT-L)在车规级芯片上的推理延迟可能难以满足实时性要求(<100ms)。需要对模型进行剪枝、量化或知识蒸馏,以适配嵌入式平台,同时要小心性能下降。
4.3 可能的改进方向
- 提示工程与模板库:针对常见的驾驶场景(路口、匝道、跟车、路边停车),构建一个丰富的“风险假设”文本模板库。在实际应用中,根据感知模块输出的场景元素(物体类别、位置、道路结构)自动填充模板,生成描述。
- 领域自适应微调:使用大规模驾驶场景数据(图像-描述对)对预训练的VLM进行轻量级微调,使其“常识”更偏向于交通领域。描述数据可以通过半自动方式,利用现有感知标注和规则来生成。
- 多帧时序融合:不仅计算当前帧的PKL值,还计算过去N帧的PKL序列。通过观察PKL值随时间的变化(例如持续升高、突然跳变),可以更好地推断被遮挡物体的动态行为,过滤掉一些静态背景导致的误报。
- 与概率占用网络结合:PKL提供的是一种区域级的风险概率。可以将其作为先验信息,输入到概率占用网络模型中,引导网络在PKL高的区域预测出更高的占用概率,从而实现“推理”与“感知”的互补。
5. 对自动驾驶系统设计的启示
这项研究带给我们的,远不止一个具体的算法。它更是一种系统设计思维的转变。
它告诉我们,在自动驾驶的感知层,除了追求更高的检测精度、更远的探测距离,我们还需要一类“异常与风险感知”能力。这类能力不追求对可见物体的完美重建,而是专注于发现那些“不符合常理”、“可能存在潜在威胁”的场景片段。PKL方法只是这个方向上的一个起点。
在实际的系统架构中,我们可以将这样一个VLM-based的风险感知模块作为一个独立的、轻量的“哨兵”系统,与传统感知流水线并行运行。它的输出不直接提供物体的精确位姿和速度,而是为整个系统提供一个全局的风险热图或风险标签。规划模块可以据此调整行为策略,预测模块可以将其作为重要的上下文信息,甚至感知模块本身也可以受到启发,对高风险区域进行更积极的扫描或算法聚焦。
从我个人的工程经验来看,这类方法在落地初期,更适合作为驾驶员监控系统或高阶辅助驾驶的安全冗余特性。例如,在L2+/L3级系统中,当主感知链路由於遮挡等原因信心不足时,PKL模块可以提供额外的风险确认,触发更早、更平顺的接管提醒或降级策略,从而大幅提升系统的安全感和流畅度。它让机器开始具备一点“防患于未然”的嗅觉,而这,正是实现真正鲁棒且拟人化自动驾驶的关键一步。