4. 场景索引基础

在自动驾驶数据闭环中,数据量往往以 PB 级增长,但真正有价值的片段通常只占很小比例。场景索引的核心任务,就是把“我要找某类场景”这一自然语言或业务需求,快速映射到具体的数据切片上。它既不是简单的文件名检索,也不是单纯的数据库查询,而是围绕场景定义、场景要素、分类体系、索引结构建立的一套可计算、可扩展的检索基础设施。

一、场景定义:从“一段路”到“可检索对象”

在工程语境下,场景不是抽象故事,而是时间、空间、参与者、环境、行为共同约束下的一段可标注数据。一个可被索引的场景通常需要具备三个条件:有明确的起止边界、有可枚举的要素标签、有稳定的唯一标识。例如“城市十字路口左转遇行人横穿”可以定义为一个场景,而“今天开车有点堵”则无法直接进入索引系统。

场景定义通常以结构化描述表达,例如:

scene_id: SCN-20240512-0017
time_range: 2024-05-12T08:31:22Z ~ 2024-05-12T08:31:29Z
location: 城市主干道-十字路口
ego_action: left_turn
participants: [pedestrian, oncoming_vehicle]
weather: sunny
road_type: intersection
risk_level: high

这段描述既是标注结果,也是索引字段的来源。场景定义越规范,后续检索越稳定。

二、场景要素:索引的最小语义单元

场景要素是构成场景的原子化标签,通常分为静态要素和动态要素。静态要素包括道路类型、车道数、交通标志、天气、光照等;动态要素包括自车行为、他车轨迹、行人动作、交通流状态等。索引系统并不直接存储原始视频,而是存储这些要素的编码值及其与数据切片的关联关系。

  • 环境要素:天气、光照、时间、路面附着条件。
  • 道路要素:高速、城市道路、匝道、环岛、路口、施工区。
  • 参与者要素:车辆、行人、骑行者、动物、障碍物。
  • 行为要素:跟车、变道、超车、左转、右转、掉头、紧急制动。
  • 风险要素:冲突点、近距离切入、鬼探头、湿滑路面。

这些要素在索引中通常以“字段-值”形式存在,例如 road_type=intersection、ego_action=left_turn。检索时通过组合多个字段条件,缩小候选切片范围。

三、场景分类体系:让检索有层次

场景分类体系决定了索引的粒度与组织方式。常见做法是采用多级分类:一级按道路类型,二级按交通参与者,三级按行为与风险。例如:

层级分类维度示例值索引用途
L1道路类型高速、城市、乡村粗筛数据域
L2场景类型路口、匝道、环岛定位场景族
L3参与者行人、车辆、骑行者筛选交互对象
L4行为/风险左转、切入、鬼探头精确定位片段

分类体系不是越细越好。过细会导致标签稀疏、检索命中率下降;过粗则无法区分关键差异。工程上常采用“核心标签 + 扩展标签”的方式,核心标签保证稳定性,扩展标签支持业务迭代。

四、索引结构与倒排索引入门

场景索引的底层结构通常包含正排索引和倒排索引。正排索引以切片 ID 为主键,存储该切片的全部要素,适合“已知切片查属性”;倒排索引以要素值为键,存储包含该值的切片列表,适合“已知条件查切片”。

倒排索引的基本形式如下:

left_turn -> [SCN-0017, SCN-0042, SCN-0108]
pedestrian -> [SCN-0017, SCN-0055, SCN-0108]
intersection -> [SCN-0017, SCN-0042, SCN-0099]
high_risk -> [SCN-0017, SCN-0108]

当查询“路口左转且存在行人”时,系统对 left_turn、pedestrian、intersection 三个 posting list 求交集,快速得到候选切片。倒排索引的优势是精确、可解释、更新灵活,适合标签体系明确的场景检索。

五、向量索引入门:从标签匹配到语义相似

倒排索引擅长精确条件,但难以处理“类似雨天夜间行人横穿”这类模糊语义。向量索引将场景切片编码为高维向量,通过近似最近邻搜索找到语义相近的片段。常见流程是:场景描述文本或要素序列经过编码模型生成 embedding,写入向量库,查询时计算相似度并返回 Top-K。

query_text = "夜间雨天行人突然横穿"
query_vec = encoder(query_text)
results = vector_index.search(query_vec, top_k=20)

向量索引的优点是泛化能力强,能发现未显式标注的相似场景;缺点是结果可解释性弱、对编码质量依赖高。实际系统中,通常采用“倒排索引粗筛 + 向量索引精排”的混合架构。

场景索引混合检索架构 查询输入 标签条件 / 自然语言 查询解析 要素抽取 + 向量编码 倒排索引 精确标签求交 向量索引 语义相似检索 候选切片集合 倒排粗筛结果 ∪ 向量 Top-K 结果 融合排序 标签匹配度 + 向量相似度 + 业务权重 返回场景切片列表 + 置信度 场景要素库 道路 / 天气 / 行为 参与者 / 风险 分类体系 L1-L4 标签编码规范

六、案例与误区复盘

假设某团队要检索“城市路口左转遇行人横穿”的高风险片段。若只建倒排索引,可以快速命中同时包含 intersection、left_turn、pedestrian、high_risk 的切片,但会漏掉标注为“行人突然进入车道”但未打 pedestrian 标签的数据。引入向量索引后,查询文本“行人突然横穿”可以召回语义相近但标签缺失的片段,再通过融合排序提升召回率。

常见误区:把场景索引等同于数据库索引,只建字段不建语义;或者只建向量索引,忽视标签体系的稳定性。前者导致模糊查询失效,后者导致结果不可解释、难以调优。正确做法是倒排与向量互补,标签负责精确,向量负责泛化。

实践建议:先定义最小场景要素集,再建立 L1-L4 分类体系,最后按“倒排粗筛 + 向量精排”搭建混合索引。每次新增业务查询,都回看标签覆盖率与向量召回率,持续迭代编码模型和标签规范。

场景索引不是一次性工程,而是随着数据规模、业务需求和模型能力不断演进的检索基础设施。理解场景定义、要素、分类、倒排与向量索引之间的关系,是后续构建高效场景检索系统的前提。