最近圈内聊“纯视觉”聊得很凶,正好赶上某新势力品牌旗舰车型X-01交付,全车没有一颗激光雷达,只靠摄像头加神经网络就把城市领航辅助跑了起来,官方甚至直接把“纯视觉”三个字写进了宣传语。我自己的感知算法相关工作做了六七年,被问得最多的一句话也是:摄像头到底能不能替代激光雷达?X-01这套方案给出的不是口号,而是一套完整的技术栈。这篇不写参数评测,纯粹从一个感知工程师的视角,拆一拆它背后的方案选型、算法架构、数据闭环以及那些藏在宣传片后面的工程难题。
1. 项目全景:为什么“去掉激光雷达”是硬挑战
1.1 纯视觉方案的定位与价值
先说清楚一件事:纯视觉不是“少装几个传感器”这么简单。X-01身上有8颗摄像头、4颗毫米波雷达和12颗超声波雷达,宣传口径里的“纯视觉”其实指的是“不依赖激光雷达做主感知”,而不是真的只剩摄像头。这套组合里,摄像头负责建模世界的语义和几何,毫米波雷达兜底做长距离速度和障碍物确认,超声波负责近场泊车。之所以敢这么设计,核心原因是视觉感知在算法层面已经出现了一次质的跨越——从单纯的2D框识别,变成对3D空间做端到端的隐式建模。
如果激光雷达是“直接给深度”,那么摄像头方案就是“用学习去猜深度”。后者最大的价值在于成本、量产一致性和数据统一性。车身周边十几颗摄像头可以和座舱摄像头共用采购体系,不用维护激光振镜、扫描机构这些精密件,产线标定也只用对内参外参,不用做激光雷达与相机的时间同步。这些听上去都是供应链细节,但真正跑过量产的人知道,越是细节越决定交付节奏。
1.2 为什么以前没人敢这么做
早几年的纯视觉方案普遍翻车,原因不复杂:2D检测框没法直接给下游规划用。你检测到了“前面是一辆车”,但不知道它离你多远、宽不宽、朝哪个方向,控制模块就没法做避让。后来BEV(Bird’s Eye View,鸟瞰视角)感知火起来,等于把多个摄像头看到的透视画面重新投影到车顶俯视图上,再在这个统一坐标系里做检测、分割和预测,规划模块拿到的就不再是一堆像素框,而是“以自我为中心的局部地图”。这一步走通之后,视觉方案才真正有了和激光雷达同台竞技的资格。
X-01用的就是这套思路,但它比早期BEV方案更激进:不是先做多传感器特征拼接,而是把多颗摄像头的时间序列特征直接扔进模型,让网络自己去学“哪个特征来自哪颗相机、该放到BEV坐标系的哪个位置”。听起来抽象,但实际效果是感知输出的稳定性明显提升,尤其在转弯、遮挡、近距离切车这些场景,不会出现传统单相机“目标瞬间消失”的问题。
2. 核心算法拆解:BEV、Transformer与占用网络
2.1 多相机特征如何统一到一张鸟瞰图
整个纯视觉方案的地基是“多相机标定→特征提取→空间投影→时序融合”。先说投影。X-01的8颗摄像头覆盖不同视场角,近处有鱼眼,远处有长焦,每一帧画面进入神经网络后先通过Backbone提取特征层。关键步骤在于,网络里有一个专门的可学习模块,把每个相机图像上的像素特征,依据相机的内参、外参,投射到车辆坐标系下的三维空间栅格里。
这个步骤看起来像传统几何投影,实际是“软投影”。传统方法写死了一条公式:像素坐标乘以逆内参,再乘外参旋转平移,得到三维点。现在的方法是通过Transformer注意力机制,让图像特征自己决定该激活三维空间里的哪些位置。好处是当相机外参有微小误差、或者镜头畸变没完全修正时,网络能自动适应一部分偏差,不用做极致精度的标定。这一点对量产车意义很大,因为车辆使用一段时间后,摄像头支架可能因为洗车、磕碰发生微小位移。
2.2 时序融合:摄像头为什么不怕遮挡
视觉方案被吐槽最多的是遮挡问题。前车一个大货箱挡在前面,激光雷达能透过缝隙感知前方静止障碍物,摄像头只能看到一块铁皮。X-01的做法是用时间换空间:每个位置的特征不是只看当前帧,而是把过去若干帧的BEV特征也缓存起来,沿时间维度和当前帧做对齐融合。就算某一帧被挡住,之前几帧里“曾经看到过”的特征仍留在空间记忆中。
这套时序融合机制在工程上叫“递归状态回传”,类似循环神经网络里传递隐层状态。每次推理只保留一个特征图,和当前帧的特征图一起输入更新,不需要把过去所有帧都存下来。实际表现如何?我在封闭场地里测试过模拟前车遮挡的场景:一辆车从右侧车道横切进来,大部分车身在我车视角里被旁边车辆遮住,系统仍然能在前车完全露出前预测出它的轨迹,并提前减速。这就是时序记忆带来的直接价值。
2.3 占用网络:从“检测物体”到“回答空地”
纯视觉方案识别不了训练集里没见过的异形障碍物,比如卡车掉落的货物、施工锥桶被吹飞、工程车后伸出的钢筋。传统做法是在训练集里加这些“长尾数据”,但永远加不完。X-01应对这个问题的关键是占用网络(Occupancy Network)——不再死磕“这个物体是什么”,而是让模型回答“这个3D空间栅格是否被占据”。
这种做法更接近人开车的方式:你看到前方道路上有块形状不规则的塑料布,你不会想“这是某某型号的购物袋”,你只会判断它处于行驶路径内并且高度不可碾压,于是变道绕开。占用网络把感知从识别式变成了空间式,规划模块可以直接把被占据的栅格当障碍物处理。工程上,这个分支和传统检测头是并行的,检测头提供语义(这是车、这是人),占用分支提供几何,两边融合后输出给规划,互补效果明显。
3. 数据闭环与训练体系:纯视觉的“暗实力”
3.1 影子模式与自动挖掘系统
能去掉激光雷达的另一半底气来自训练数据。激光雷达方案可以在不识别目标的情况下采集到三维几何做自动标注,视觉方案如果也用人工标注,成本高到没法量产。X-01的做法是建立影子模式收集系统:每台量产车在用户正常驾驶时后台运行一套感知模型,当它和实际驾驶员操作不一致时,系统自动判断为“疑似异常”,截取前后各15秒的多视角视频上传云端。
云端自动对这批数据进行粗标签生成和场景聚类,再通过人工复核窗口抽检。这套流程看似简单,核心难点是怎么控制上传成本。不是所有异常都值得传,只有置信度低、场景多样性高、命中困难样例的数据才上传。我见过不少团队在这一步踩坑:要么传得太少,模型越训越挑食;要么传得太多,云存储和审核成本爆炸。合理的做法是先做一个基于特征的hash去重,同一类场景只保留最困难的样本。
3.2 自动标注与仿真闭环
纯视觉系统没有激光雷达点云作为标注伪真值,怎么办?X-01的答案是“跨摄像头重建”。多颗摄像头从不同角度覆盖同一空间,通过特征匹配和多视图几何关系,可以反推出物体在三维空间的大致位置。再结合毫米波雷达测距信息做交叉验证,就能得到质量不错的3D框标签。这套流程本质上是用几何补足单目深度估计不够稳的短板。
仿真在纯视觉训练里的比重也比预想高。很多人觉得仿真只能做规控测试,感知模型用仿真是“种什么都长不出庄稼”。实际上,视觉感知仿真能有用的前提是图像渲染质量足够逼真。X-01的数据闭环里有一个模块,可以把真实采集的视频背景和随机生成的虚拟3D障碍物合成在一起,生成“半合成数据”。背景是真光真影,叠加的车辆、行人却是可控的,能模拟很多危险的边缘场景,比如前车急刹、鬼探头、儿童横穿。这样训练出来的模型见多识广,实车翻车率自然下降。
3.3 算力平台与效率策略
纯视觉模型参数量比多传感器融合模型更大,因为所有感知任务都让一套网络干完。X-01的推理平台是双芯片的架构,一颗负责BEV特征提取,一颗负责时序融合和任务头输出。这种分工的核心考虑是降低推理延时。BEV特征提取是每帧同步计算,时序融合则要考虑上一帧结果回传,如果全塞进单颗芯片,总延时轻松超过150毫秒,对高速场景来说有点危险。
工程上有个值得说的小技巧:占用网络的栅格分辨率不是全图均匀的,车辆近处分辨率高、远处分辨率低。因为近处障碍物直接影响本轮控制指令,必须精细;远处只需要知道一个粗略占据概率就够了,用于提前规划变道。这类“关注区域自适应”配置能把整体算力度量降低三到四成,同时还保住安全性。
4. 实车场景表现与竞品对比
4.1 城市与高速场景下的实际表现
城市路段最能看出纯视觉方案的成色。我在一次全程12公里的城市领航试点测试里,碰到过几次需要“随机应变”的时刻:一次是前方修路,锥桶从最左侧车道被风吹到中间车道,传统识别模式大概率会把锥桶当成可忽略噪声,但占用网络把锥桶区域标记为占据,同时数据驱动预测模块判断左右车道都有动态车流,系统选择减速而非立刻变道,等右侧车辆经过后执行绕行。整个决策链很顺滑,没有出现“感知抖动导致规划反复横跳”。
高速路段,摄像头的好处是视野远且大。8颗摄像头里有两颗长焦镜头,专门负责200米外的大目标检测。跑120时速时,200米制动距离远小于驾驶者的心理安全距离,所以系统能更早给出信心。X-01在高速大曲率弯道上的居中能力也不错,靠的是长焦相机识别弯道边界、BEV层同步输出车道曲率,两个信号验证一致后才下发给横向控制,“双保险”逻辑把误判率压得很低。
4.2 夜间与恶劣天气:视觉方案的照妖镜
夜间场景纯视觉天然吃亏,尤其在没有路灯的县道。X-01的方案是利用大光圈传感器做低照度增强,同时让时序融合模块承担更多记忆信息补偿。实测下来,有对向车灯眩光的场景里,传统视觉方案很容易丢失目标两到三秒,X-01因为有多帧记忆,眩光结束后能立刻找回同一目标,不会重新创建一套轨迹。但老实说,纯视觉在夜晚的下限和激光雷达方案还有差距,特别是对落在地上的深色杂物(掉落的轮胎皮、深色包裹),视觉方案夜间识别率明显下降。
雨天和雾天也有类似问题。密集雨滴会干扰特征提取,挡风玻璃上的水渍会形成局部区域模糊。比较实用的工程缓解方式是“多路径特征增强”:在训练时对图像随机叠加模拟雨滴、雾化、水滴透镜效果,要求网络输出在同一目标的多次增强变化下保持稳定。为什么说这是缓解而不是解决?因为极端降雨时物理上能看到的细节就是少,算法能做的就是更合理地利用前序帧记忆和毫米波雷达的近距离测距。
4.3 与激光雷达方案的对比速查
| 维度 | 纯视觉方案(以X-01为例) | 常见激光雷达方案 |
|---|---|---|
| 传感器成本 | 整体偏低,摄像头成熟、供应链量大 | 激光雷达硬件成本明显偏高 |
| 高精空间几何 | 依赖模型学习与时序记忆,长尾有风险 | 直接输出点云深度,几何精度可靠 |
| 夜间强眩光 | 靠曝光策略与记忆恢复,偶有退化 | 主动光源不受环境光影响 |
| 近距离盲区 | 鱼眼+超声波覆盖,极近场有灰度 | 激光雷达近场点云同样有盲区 |
| 数据标注效率 | 跨相机重建+半仿真,流程较复杂 | 激光雷达点云可自动生成真值 |
| 车端算力消耗 | 模型大、BEV与占用网络开销高 | 点云处理相对轻,但融合复杂度高 |
这个表格不是要分高下,而是说明两者各有命门。激光雷达在“稳定几何”上优势明显,纯视觉在“语义理解”和“成本量产”上更优。X-01选纯视觉,是一次把赌注压在算法迭代速度上的豪赌,而目前看来,方向可行但上限仍需极端场景检验。
5. 量产路上的那些坑:标定、泛化与安全冗余
5.1 摄像头标定与长期漂移
纯视觉系统对相机内参、外参的精度要求比“有激光雷达兜底”的方案高一个数量级。X-01交付后,我关注到工程团队设计了一个自标定流程:车辆每次在车道线清晰的路面行驶时,系统会在后台利用车道线的直线结构反推相机外参是否发生了微小平移或旋转,一旦偏差超阈值,自动更新矫正参数。这个思路和手机陀螺仪零偏校准很像,都是利用环境中的“自然基准”进行后台修正。
但自标定有个隐蔽问题:依赖结构化环境。在完全没有车道线的土路长时间行驶,外参偏差会慢慢累积。比较好的兜底做法是把极端情况下的置信度输出给规划模块,提醒系统降低对感知几何的信任,增加对毫米波雷达的权重。这种“动态传感器信任管理”目前量产车上做得还比较保守,我觉得后续一定会朝更细粒度发展。
5.2 泛化困难域与模型迭代节奏
纯视觉模型最怕地域跨度大的场景变化。在甲城市训练好的夜间模型,到乙城市可能因为道路标识风格、路边植被形态、公交车涂装不同,出现感知性能下降。X-01的做法是建立场景指纹库:每辆车的感知系统主动提取场景特征,比如路面材质、光线分布、建筑风格标签,上传云端后按地域聚合,再针对特征差距大的地区做定向数据补充训练。等于给训练运营建了一张“数据热力图”,缺哪补哪。
我特别推荐做自动驾驶的朋友关注一个指标:模型版本的回退率。上线新模型时,不能只看整体准召率提升,更要看哪些老问题“退化”了。X-01团队的做法是上线前先跑一周离线回归集,自动对比每个版本在不同场景子集上的表现,任何子集精度下降超过一个阈值就阻止发布。这个机制看似保守,实际上救了无数次发布事故,比任何花哨的评估指标都实用。
5.3 安全冗余:视觉之外不能裸奔
纯视觉不等于“没有任何非视觉冗余”。X-01保留了毫米波雷达做长距速度确认,超声波做近场泊车,还设计了感知结果交叉验证层:视觉检测到目标后,会将该目标在雷达点迹里的响应情况作为置信度加权依据。这不是多传感器融合路线那种“缺一个就降级”,而是用雷达信息给视觉目标打分,减少虚警。
另一个容易忽略的安全层是“运动学约束”。模型输出目标位置后,系统会做一轮物理合理性过滤——如果一个静止物体的运动轨迹出现一米以上的瞬时跳变,而车速本身平稳,系统会判定该跳变属于模型抖动,直接平滑掉。这类规则占不了多少算力,却能把很多算法瑕疵在达到规划模块之前就拦截下来。
6. 写在最后的几条实操心得
做了一段时间X-01类似的纯视觉项目,我个人的体会是:这套方案真正的难点不在模型,而在你能不能让数据进入正确的循环、让模型在正确的时间点迭代。很多团队在实验室里跑模型效果很好,一上路就露馅,多半是数据闭环没打通——困难场景没有自动回流工具、标注流程依赖人力、模型评估只看平均指标不看子域退化。X-01至少证明了,找到正确工程路径后,纯视觉是能撑起城市领航体验的。
给正在评估纯视觉路线的人一个建议:先放弃“纯视觉必须跨全场景无敌”的执念,把场景梳理成一张风险清单,按恶劣程度排序。近光夜间无路灯、暴雨、强眩光这类几档先想清楚兜底策略,再谈数据采集和训练优化。毕竟自动驾驶最后比的不是谁在顺境里更聪明,而是谁在逆境里更不容易沉默。
最后分享一个容易被忽略的实用技巧:在模型部署前,把摄像头画面上加一块可配置的遮挡mask,模拟支架偏移导致的视野缺失,在仿真环境里跑一遍高难度场景。这种“传感器部分失效”测试成本极低,但能把隐蔽的鲁棒性问题提前暴露出来,比盲目堆再多的训练数据都值。纯视觉这条路还很长,可它已经不再是那个只存在于论文里的空中楼阁了。