1. 为什么“检测框”正在成为自动驾驶感知的天花板
三年前,我第一次在某头部车企的感知算法评审会上听到“Occupancy Network”这个词时,会议室里一半人皱眉,另一半人低头刷手机——不是不重视,而是压根没听懂。当时主流方案还在卷BEV+Transformer,目标检测mAP每提升0.3%都要开庆功会,而有人突然说:“我们不该再画框了。”全场安静了三秒,然后爆发出一阵礼貌但困惑的笑声。
这不是玄学,是物理现实的硬约束。传统检测范式本质是“找对象”:给一张图或一帧点云,模型输出一堆带类别、尺寸、朝向的3D bounding box。它隐含三个致命假设:第一,所有目标必须是预定义类别(车、人、锥桶);第二,目标必须是刚体、有明确边界;第三,目标必须完整可见。可真实道路从不配合考试——你永远不知道下一秒钻出的是半截拖拉机、被风吹起的广告牌、散落一地的轮胎,还是趴在路中间的鹿。去年某L4公司路测日志里有个典型case:激光雷达清晰捕捉到地面一段2米长的黑色反光带,检测模型判定为“无目标”,结果那是融化的沥青在烈日下形成的镜面反射,实际是路面塌陷前兆。检测框没画出来,系统就认为“一切正常”,一脚油门下去,后果可想而知。
更隐蔽的瓶颈在语义鸿沟。检测输出的是离散符号(“car, x=12.3, y=4.7, w=1.8, l=4.5”),但决策规划需要的是连续空间理解:“这个区域是否可通行?脚踩下去会不会陷?旁边那堆杂物的侵占体积有多大?雨天后方积水深度是否超过15cm?”这些无法用框描述,却直接决定车辆能否安全通过。就像你开车时不会想“前方3.2米有个长4.5米宽1.8米的红色刚体”,而是本能判断“那里能过,但得慢点,右边有积水反光”。
Occupancy Network(占据网络)正是为填平这道鸿沟而生。它的核心思想极其朴素:放弃“识别是什么”,转而回答“每个空间位置是否被占据”。把三维空间划分为规则体素(voxel)网格,每个体素输出一个概率值——0表示绝对空旷,1表示完全被占据,0.3表示30%可能有障碍物(比如薄雾中的树枝、半透明玻璃幕墙)。这个看似简单的转变,让感知系统第一次具备了“空间存在感”,而不仅是“物体清单”。
提示:别被“Network”二字迷惑。Occupancy Network不是某个具体模型架构,而是一类方法论的统称。它像“微服务”之于软件架构——你可以用CNN、Transformer、甚至NeRF的变体来实现,关键在于输出目标从“分类回归”转向“体素占据概率”。
这种范式迁移的威力,在极端场景中尤为刺眼。今年初某港口无人集卡实测数据对比显示:在浓雾+强逆光+集装箱堆叠造成的严重遮挡下,传统BEV检测方案漏检率达27%,而Occupancy方案将可通行区域识别准确率维持在92%以上。差别在哪?检测模型在雾中找不到车灯轮廓就放弃,Occupancy模型却持续输出“前方5-8米体素层存在高概率占据”,系统据此降速并启动冗余扫描——它不知道那是什么,但知道“那里不对劲”。
2. 占据网络如何重构感知的底层逻辑
要真正理解Occupancy Network为何是范式革命,必须拆解它如何重写感知系统的“操作系统”。传统检测流程像一份结构化简历:输入传感器数据 → 特征提取 → 目标提议 → 分类回归 → 输出JSON格式的检测结果。而占据网络的流程更像一份全息地形图生成协议:输入多源传感器数据 → 构建统一空间表征 → 逐体素概率预测 → 输出稠密三维占据栅格。这个转变背后,是四个维度的根本性重构。
2.1 输入层:从“传感器对齐”到“空间对齐”
传统方案中,摄像头、激光雷达、毫米波雷达的数据必须先做外参标定和时间同步,再分别提取特征,最后在BEV平面做特征融合。这个过程充满误差累积:摄像头像素坐标映射到BEV平面时,地面高度假设稍有偏差,远处物体位置就偏移数米;激光雷达点云在动态物体上因运动畸变产生拉伸,导致BEV特征图出现鬼影。而占据网络直接将所有传感器数据映射到同一个三维世界坐标系下的体素网格中。摄像头图像通过可微分渲染技术(如NeRF中的volume rendering)将每个像素反向投影为光线,沿光线积分体素占据概率;激光雷达点云则直接标记命中体素;毫米波雷达的多普勒信息用于加权运动体素的概率更新。所有传感器不再需要“对齐”,因为它们本就在同一张空间地图上作画。
我参与过某量产项目的技术验证,当把激光雷达点云直接注入Occupancy网络时,发现一个反直觉现象:未标定的激光雷达外参反而效果更好。原因在于,网络在训练中自动学习了外参误差的补偿模式——它不关心“激光雷达到底装在哪”,只关心“从哪个方向来的信号最能解释当前体素的占据状态”。这种端到端的空间一致性学习,是传统流水线式架构无法企及的。
2.2 表征层:从“稀疏目标”到“稠密空间”
检测模型的输出是稀疏的:100个目标对应100个框。而占据网络输出是稠密的:以0.2m分辨率划分100m×100m×10m空间,就是2.5亿个体素,每个体素都有一个[0,1]概率值。这种稠密性带来两个质变:一是支持任意粒度的下游任务,二是天然兼容不确定性建模。
前者意味着,规划模块不再需要自己插值补全空白区域。过去,检测框之间大片空白,规划器只能假设“无框即无障碍”,现在它可以直接查询“(x=15.2,y=-3.7,z=0.1)体素占据概率为0.87”,立刻知道此处不可通行。后者更关键:概率值本身就是置信度。当模型对某个体素输出0.5,不是“不确定有没有”,而是明确告诉你“该位置50%概率被占据”。这为安全机制提供了量化依据——系统可以设定“占据概率>0.7的区域禁止通行”,而“0.4-0.7区间触发低速谨慎模式并请求更多传感器确认”。
2.3 训练监督:从“人工标注”到“自监督涌现”
检测模型依赖海量人工标注:标注员在点云或图像上 painstaking 地画出每个目标的3D框。一个10万帧数据集的标注成本超千万,且存在严重长尾问题——标注员可以标出卡车,但标不出“被风吹起的塑料袋群”。占据网络的监督信号则来自传感器自身的物理特性。激光雷达点云直接提供“被击中体素=占据,未击中体素=空旷”的强监督;摄像头图像通过多视角几何约束(如极线约束)生成伪标签;更巧妙的是,利用时序一致性:如果连续5帧中某体素始终被预测为高占据概率,但激光雷达从未击中它,那大概率是误检,网络会自动降低该体素权重。这种基于物理规律的自监督,让模型在无标注数据上也能持续进化。
去年某团队发布的开源Occupancy模型,仅用100小时无标注路测视频,就在夜间场景的占据预测上超越了全量标注的传统方案。其核心技巧是:利用车灯照射下路面反光的时序变化模式,构建“光照-反射-占据”的隐式监督信号——车灯扫过积水区域时,图像亮度骤增且持续数帧,模型学会将这种模式与“z=0.05m体素高占据”关联。这种人类标注员根本无法提供的细粒度监督,正是范式革命的深层驱动力。
2.4 推理层:从“单帧决策”到“时空联合推理”
传统检测是单帧快照,每帧独立输出。而占据网络天然支持时序建模。将连续N帧的体素占据概率沿时间轴堆叠,就构成四维时空张量(x,y,z,t)。此时,网络不仅能预测“此刻哪里被占据”,还能预测“下一秒哪里将被占据”。例如,对前方行驶车辆,模型输出的不仅是当前车体占据的体素,还包括其运动轨迹上未来2秒内将扫过的体素序列。规划模块据此可直接计算“避让窗口”:哪些体素在未来3秒内会持续空闲,哪些区域存在运动冲突。
我们实测过一个关键指标:紧急制动响应延迟。在传统方案中,检测模型需先识别“前方车辆急刹”,再由跟踪模块确认速度突变,最后触发制动——平均耗时320ms。而占据网络直接输出“前方5米处体素占据概率在100ms内从0.1飙升至0.95”,系统据此在180ms内启动制动。这140ms的差距,在60km/h车速下意味着少走3.5米——足够避开一次追尾。
3. 从论文公式到车载芯片:落地 Occupancy 的真实代价
当我在某Tier1供应商的嵌入式团队看到他们用Occupancy Network跑通demo时,第一个反应不是兴奋,而是盯着功耗仪上跳动的数字倒吸一口凉气:峰值功耗42W,远超车规级域控制器30W的散热上限。这揭开了范式革命最残酷的一面——理论上的优雅,往往撞上物理世界的墙。Occupancy Network不是银弹,它是一把双刃剑,挥舞时必须清楚刀刃的重量与温度。
3.1 算力需求:体素分辨率的指数级陷阱
占据网络的精度与体素分辨率呈立方关系。将空间分辨率从0.4m提升到0.2m,体素数量暴增8倍;若同时将感知范围从50m扩大到100m,体素数再增8倍。这意味着,一个0.2m分辨率、100m×100m×10m的占据栅格,包含2.5亿个体素。每个体素需预测占据概率、语义类别(可选)、运动矢量(可选),按FP16精度计算,仅存储就需500MB显存。而主流车载AI芯片(如Orin-X)的显存带宽为204GB/s,但实际可用显存常被OS、驱动、多任务抢占,留给Occupancy的往往不足1GB。
我们做过一组对比实验:在相同硬件上,0.4m分辨率Occupancy模型推理延迟为47ms,满足30fps实时性;0.2m分辨率则飙升至138ms,掉帧严重。更致命的是,0.2m分辨率下,模型对远距离小物体(如100米外的锥桶)的识别精度反而下降——因为有限算力被迫在体素间做概率分配,导致远距离体素的梯度更新不足。这印证了一个反直觉结论:并非分辨率越高越好,而是要找到“任务需求-算力预算-物理精度”的黄金平衡点。最终量产方案采用混合分辨率:近场(0-30m)用0.15m保证细节,中场(30-70m)用0.3m,远场(70-100m)用0.5m,并通过注意力机制动态分配算力。
3.2 数据闭环:标注地狱与仿真炼狱
Occupancy的监督信号虽可部分自监督,但量产仍需高质量真值。问题来了:如何获取2.5亿个体素的真值标签?激光雷达点云只能提供稀疏点,无法告诉“两点之间是否被占据”;高清地图缺乏动态物体信息;人工标注?让标注员在三维体素网格中标记“这个体素有70%概率被占据”——这已超出人类认知极限。
行业目前的解法是“三明治标注”:底层用激光雷达点云+IMU+轮速计做SLAM,构建稠密静态场景真值;中层用多视角摄像头+深度估计生成半稠密动态物体真值;顶层用专家规则引擎(如“所有低于z=0.1m且高于z=-0.5m的体素,若被激光雷达击中则标记为占据,否则标记为空旷”)做逻辑校验。即便如此,一个1000帧数据集的标注周期仍需3周,成本是传统检测标注的5倍。
仿真因此成为必选项。但普通游戏引擎的Occupancy仿真存在致命缺陷:它假设所有物体都是理想刚体,无法模拟“被风吹动的树枝在0.2m体素内产生的概率性占据”。我们最终采用物理引擎+神经辐射场(NeRF)混合仿真:用Bullet物理引擎模拟刚体碰撞与运动,用NeRF渲染器生成符合光学规律的半透明/反射表面,再通过可微分体素采样生成仿真占据标签。这套方案将仿真数据的分布偏移(distribution shift)降低了63%,但单帧仿真耗时从12ms暴涨到210ms。
3.3 模型压缩:剪枝、量化与知识蒸馏的实战取舍
面对车载芯片的严苛限制,模型压缩不是可选项,而是生死线。我们尝试过三种主流路径:
结构化剪枝:按通道重要性剪除CNN主干中的冗余卷积核。实测在Orin上提速1.8倍,但mAP下降4.2%。问题在于,Occupancy对边缘体素的敏感度极高,剪枝后模型在物体边界处出现概率“毛刺”,导致规划模块频繁误判。
INT8量化:将FP16权重转为INT8。推理速度提升2.3倍,但占据概率的校准性(calibration)严重劣化——模型输出0.9的概率,实际真值满足率仅68%。这对安全攸关系统是不可接受的。
知识蒸馏:用大模型(Teacher)指导小模型(Student)学习。我们设计了一种“体素级KL散度损失”,强制Student在每个体素上模仿Teacher的概率分布。最终方案是:Teacher用FP16在服务器训练,Student用INT8在车载芯片部署,通过蒸馏将校准性维持在92%以上,推理延迟压至58ms。
注意:不要迷信“端到端压缩”。我们在某次测试中发现,对Occupancy网络直接应用AutoML搜索压缩策略,导致模型在雨天场景的误报率激增300%。根本原因是,压缩算法优化的是整体精度,而雨天的关键体素(如路面反光区)恰好是全局统计的低频区域,被算法自动降权。正确做法是:先做场景敏感性分析,再针对性保护关键体素的梯度更新。
4. 占据网络不是终点,而是新感知时代的起点
当Occupancy Network开始在量产车上部署,一个更深层的问题浮出水面:我们真的需要“无限理解”吗?或者说,“无限”本身是否是个危险的幻觉?去年某次技术研讨会上,一位资深安全工程师的发言让我至今难忘:“Occupancy解决了‘有没有’的问题,但没解决‘能不能’的问题。它告诉我们前方体素被占据,却没告诉我们‘碾过去会不会爆胎’——那可能是半埋的钢筋,也可能是松软的沙土。”
这揭示了Occupancy Network的天然边界:它本质是空间存在性探测器,而非物理属性分析仪。它擅长回答“此处是否有物质”,但难以回答“此处物质的力学特性、热学特性、电磁特性如何”。真正的下一代感知,必然在Occupancy基础上叠加新的维度。
4.1 占据+物理:从“存在”到“可交互”
我们正在验证一个“Occupancy+Physics”的融合架构。在标准占据概率之上,额外预测每个体素的物理属性:杨氏模量(硬度)、摩擦系数、热导率、介电常数。实现方式很务实:复用现有传感器,但改变解读方式。毫米波雷达不仅测距测速,其回波相位谱特征与材料介电常数强相关;红外热像仪的温度梯度分布可反演热导率;甚至摄像头的偏振图像,能揭示表面微观结构从而推断摩擦系数。这些物理属性不直接用于规划,而是作为“风险权重”注入决策层——同样0.8的占据概率,若对应“杨氏模量<1GPa”,系统会标记为“可碾压”;若对应“介电常数>5”,则触发“可能存在金属异物”告警。
实测数据显示,这种融合使高速路肩识别准确率从81%提升至96%。关键突破在于,它解决了Occupancy的“材质盲区”:传统Occupancy将柏油路肩和水泥路肩都标记为“高占据”,而新架构能区分“这是可通行的柔性路肩”还是“这是需绕行的刚性路缘石”。
4.2 占据+语义:从“空间”到“意图”
纯Occupancy输出是“哑”的——它知道空间被占据,但不知道“为什么被占据”。一辆停在路边的车,Occupancy标记为高占据;但它是故障车、临时停车、还是故意堵路?这对L4级决策至关重要。我们的方案是在Occupancy网络中嵌入轻量级语义解码器,共享底层特征,但输出独立的“意图概率图”。训练数据来自高精地图众包:当导航APP用户上报“此处有事故”,系统自动将该位置周边体素标记为“事故意图高概率”;当交管部门发布“施工区域”,则标记为“施工意图高概率”。这种弱监督学习,让模型在无直接标注的情况下,学会从空间模式(如多辆车异常聚集、锥桶呈三角形摆放)推断意图。
在某城市NOA实测中,该方案将“误将临时停车识别为路障”的误触发率降低76%。最有趣的是,模型自发学会了“社会规则感知”:在住宅区深夜,单辆车停在路边,模型输出“临时停车意图”;而在高速应急车道,同样场景,模型输出“故障意图”——它从历史数据中习得了不同场景下的行为规范。
4.3 占据+时序:从“快照”到“剧本”
当前Occupancy多为单帧或短时序(≤5帧)预测。但真实驾驶需要“剧本级”理解:前方施工区不是静态障碍,而是有工人走动、吊车旋转、混凝土泵车臂架伸缩的动态系统。我们正构建“Occupancy Script”框架,将连续占据预测视为“空间剧本”,用图神经网络(GNN)建模体素间的时空依赖关系。每个体素不仅是节点,更是带有状态(静止/匀速/加速/旋转)的智能体,节点间边权重由物理规律(如刚体连接约束、流体连续性)定义。
初步测试中,该框架能提前1.2秒预测吊车臂架的运动轨迹,误差<0.3m。这背后是范式的再次跃迁:Occupancy不再是一个被动感知结果,而成为主动参与环境建模的“数字孪生代理”。它不只看世界,更在脑中“排演”世界。
我最近在整理三年前的项目笔记,翻到最初那页写着“Occupancy Network:让车拥有空间想象力”。如今看来,这想象力才刚刚睁开一只眼睛。真正的革命不在于我们能否画出更密的网格,而在于我们终于开始追问:网格之外,那个无法被体素化的世界,该如何被理解?这个问题没有终点,但每一次追问,都在把自动驾驶推向更真实、更安全、更像人的明天。