纯视觉方案又站在风口浪尖上了。某品牌新发布的 X01 量产车,直接把激光雷达拿掉,靠着 7 路摄像头打天下,号称要用“纯视觉”挑战自动驾驶技术极限。作为参与过好几代智驾感知系统开发的从业者,我看到这种方案真正走到量产,心情挺复杂的:一边是敬佩这种敢做的决心,一边是清楚它在工程上要填的坑比外界想象的多得多。
这篇文章不打算站队,也不吹不黑。我想用自己实际做感知算法、跑数据闭环、调极端场景问题时的经验,把“纯视觉自动驾驶”这件事拆开来讲:它到底在赌什么,核心算法链路是怎么工作的,量产前要准备多少基础设施,以及那些真正让方案“接近极限”的工程细节。不管你是做算法、做测试、做产品,还是单纯关心智驾技术路线,这篇文章应该都能给你一些参考价值。
1. 纯视觉方案为何敢不装激光雷达
1.1 成本与工程约束:激光雷达不是不行,是“不划算”
很多人对纯视觉方案的第一个疑问是:激光雷达明明更精确,为什么不用?答案没那么玄学,第一关就是成本。激光雷达从早期几十万一颗的高线束产品,到现在量产车用的半固态补盲雷达,价格已经压到几千块一颗。听起来好像不贵了,但和摄像头一比就完全不是一回事。一颗车规级高清摄像头,批量采购价可以做到几百块人民币,就算上镜头、外壳、线束,整套 7 路摄像头的成本也远低于一组激光雷达。
成本还不是全部。激光雷达要安装在车顶或者前保位置,牵涉到造型设计、风阻系数、碰撞维修成本和售后更换难度。装车之后,它还会持续面对泥水、石子冲击和温度变化,本身也需要一套清洗和加热方案。摄像头就不一样,可以藏在挡风玻璃后面,靠着雨刮系统就能日常维护,藏在翼子板里的侧视摄像头也只需要高压喷嘴冲洗。从整车工程角度看,摄像头是更容易“驯服”的传感器。
消费者层面也很有意思。很多人买车时会对比“这车有没有激光雷达”,这种配置认知在过去几年被市场教育得非常深。但实际体验过一段时间后会发现,对普通用户来说,决定辅助驾驶好不好用的,根本不是车顶有没有凸起,而是高速能不能长时间不接管、城区红绿灯能不能稳定识别、鬼探头能不能及时刹住。X01 敢把激光雷达拿掉,本质上是有信心用算法和数据把这些体验问题填平。
1.2 放弃深度融合:统一感知空间带来的简洁性
我在不少项目里都做过激光雷达与视觉的融合方案,说实话,融合本身就是一个巨大的工程泥潭。毫米波雷达有稀疏点、激光雷达有 3D 点云、摄像头有高分辨率图像,这三种传感器各自处在不同的坐标系里,时间戳也不完全对齐。要做一个能用的融合感知系统,得同时搞定传感器标定、时间同步、空间同步和外参在线纠偏。
任何一步出问题,感知结果就会变得很奇怪:图像说前面有行人,激光雷达说没有,融合之后到底听谁的?算法层面可以设计复杂的置信度分配逻辑,但工程上很难穷尽所有冲突场景。尤其车辆在烈日下暴晒几小时,传感器支架热胀冷缩之后,激光雷达和摄像头的相对外参可能已经偏移,如果不做在线标定,融合质量会肉眼可见地下降。
纯视觉方案从根源上绕开了这个问题。所有传感器都是同类型的摄像头,都在同一个车身坐标系下做标定,数据模态完全一致。图像特征被投影到统一的鸟瞰视角网格里之后,不存在“两种异构传感器打架”的情况。感知链路变简洁,调试也变简单:定位一个问题,只需要看图像特征和 BEV 特征之间的映射关系,不用再去排查传感器之间谁对谁错。这种“统一感知空间”带来的工程简洁性,是我认为纯视觉方案真正吸引人的地方,而不是单纯为了省成本。
1.3 摄像头布局与感知范围的工程计算
X01 的传感器配置大致是 7 路环绕视觉:前向一组双目加广角,侧向左右各 1 路,后向一路,再加环视鱼眼补盲。前向负责远距离目标检测和车道线识别,鱼眼负责近场低速泊车和路口盲区。这套布置下,整车感知范围可以做到前方 100 到 150 米、左右及后方无死角覆盖。
用工程计算来说明这个布局的合理性。假设前向长焦摄像头安装高度 1.5 米,传感器分辨率是 4K(垂直 2160 像素),垂直视场角约 21 度。在 60 米外,垂直视场覆盖的距离大约是 2×60×tan(10.5°)≈22.2 米。一个高 1.5 米的行人在画面中约占 6.8%,换算成像素就是 2160×6.8%≈147 像素。这么高的像素密度,足以让模型在 60 米外稳定识别出行人轮廓。
再算一下近场鱼眼。单颗鱼眼水平视场角通常能到 190 度以上,左右各装一颗就能覆盖整个车身侧面和后部盲区。BEV 网络在车身周围建立一个约 100 米宽、150 米长的网格范围,如果栅格分辨率取 0.2 米,横向就是 500 个格子,纵向就是 750 个格子,总共 37.5 万个网格。网络要为每个网格输出特征向量和占用概率,这就是为什么纯视觉方案对算力要求高的原因之一——不是摄像头贵,而是网格推理贵。
2. 三维重建的核心:环视摄像头与 BEV 网络
2.1 从透视图像到鸟瞰网格:BEV 怎么把二维变三维
摄像头输出的图像是透视视角,近大远小,没有尺度信息。要让自动驾驶系统在三维空间里做规划,第一步就得把图像信息“掰”成鸟瞰视角——BEV(Bird's Eye View)网格。业内也把它叫俯视图视角,简单理解就是在地面上方画一个网格,把每个摄像头感知到的内容放进对应坐标里。
实现上,X01 这类方案会用视觉模型先把每路图像编码成多尺度特征,再用“BEV 查询”机制,通过注意力机制从各路图像特征里抽取信息,填到 BEV 网格的每个坐标上。这个过程不需要显式的深度估计网络,而是让模型自己学习“图像里的这个像素,在地面坐标系里应该落在哪个位置”。
我经常用一个拼图类比来解释 BEV。你站在球场不同位置拍照,每张照片都只能看到球场的一部分,而且近处的球员很大、远处的很小。要还原整个球场的俯视布局,就得把照片按拍摄位置拼起来,再根据透视关系校正每个球员的位置。BEV 网络做的就是这件事,只不过它不靠手工几何校正,而是从大量标注数据里学出来“怎么拼最准”。
这个思路解决了一个核心痛点:单目摄像头在三维空间里的深度估计天然不稳定,同一个像素可能对应不同距离的物体。BEV 把问题从“逐像素测距”变成“空间栅格分类”,网络只需要回答“这个网格里有没有障碍物、障碍物是谁、速度多少”,容错空间大得多。
2.2 时序信息与动态目标建模:不能只看单帧
只看一帧 BEV 图像,系统分不清前车是停在那里等红灯,还是缓慢蠕行。必须把时序信息叠加上去。X01 的做法是把前几帧的 BEV 特征缓存下来,用循环网络或者注意力机制做时序融合,从而输出每个网格的速度和朝向。
这里有一个很容易踩的坑:时序融合如果做不好,车辆会出现“目标抖动”。我在项目里见过好几次,一辆静止在路边的车被反复识别成低速运动,车内屏幕上的目标框跳来跳去,严重时还会触发频繁预警甚至误刹车。后来排查发现,问题出在时序特征权重分配上,网络把“过去几帧里的位置微小波动”误解读成“物体在移动”。解决办法是在输出层加一个“静止概率”分支,让模型先判断物体是否静止,再做运动跟踪,效果立竿见影。
时序信息还带来一个额外好处:遮挡处理。人在车后面走了几步又被挡住,单帧模型立刻丢失目标,但时序模型可以根据前几帧的位置和速度,对目标位置做预测,保持跟踪不中断。这个能力在城市复杂路口尤其关键,也是纯视觉方案敢挑战激光雷达的一个底气来源。
2.3 占用网络:不依赖“认得出”也能避障
传统感知流程是先检测目标类别,再给规划模块输出目标列表。问题在于模型只知道“训练里见过的物体”。一旦路上出现一个形状怪异的施工围挡、倒下的树干、掉落的货物,检测模型大概率把它当成背景,车辆直直开过去就是大事故。
占用网络(Occupancy Network)是这几年纯视觉方案里最重要的突破之一。它不关心障碍物是什么类别,只把三维空间划分成小格子,预测每个格子是否被占据。只要这个空间里有东西,不管认不认得出来,一律输出占用概率。规划模块拿到占用网格后,直接在网格里搜索可行路径,完全不需要依赖语义分类结果。
占用网络的计算开销非常大。举个例子,要覆盖前方 60 米、宽 15 米、高 4 米的空间,如果用 0.2 米分辨率的体素划分,就是 300×75×20=45 万个格子。每个格子都要卷积计算的话,算力根本扛不住。工程上的解法是用稀疏卷积或者“候选区域筛选”,只在有物体边缘的体素周围做密集计算,空旷区域直接跳过。我在复现这类网络时发现,加一个简单的体素级状态筛选,计算量能省一半以上,精度损失几乎可以忽略。
3. 数据闭环:纯视觉方案的命门与落地实操
3.1 大里程数据采集与难例挖掘
纯视觉模型的性能,某种意义上就是数据的镜子。神经网络要“看过”足够多刁钻场景,才敢说自己在路上能扛得住。我参与过的智驾团队,路测里程都以百万公里为量级,即便如此,每天回传的数据仍然不够用,问题不在数据总量,而在于有效样本比例太低。
高速上跑 100 公里,可能 99% 的画面都是普通车道和正常车流,只有 1% 是真正值得训练的场景。把所有数据都回传既不现实也不经济,所以团队会在车端做一套筛选逻辑:把与高精地图差异大的区域、模型置信度低的片段、出现过用户接管的片段优先标记和回传。这套逻辑业内叫“难例挖掘”,是整个数据闭环的第一道闸门。
难例挖掘有个容易被忽略的细节:不能只盯着极端场景。我见过一个项目,模型在暴雨场景下表现越来越好,但晴天的车道线误判率突然上升了。原因就是回传数据比例失衡,网络被极端场景“带跑偏”了。现在我们的做法是按场景配额采样:下雨、逆光、拥堵分别占总样本的固定比例,极端样本再多也只能超配一点点。这样模型才能在学新东西的同时不忘基本功。
3.2 离线真值生成与模型蒸馏(实操流程)
纯视觉模型训练需要三维真值,但摄像头图像本身没有深度信息。怎么解决?答案是造一个“老师模型”,用激光雷达、组合惯导和多摄融合算法,离线生成高精度的三维标注,再把这些标注“蒸馏”给纯视觉网络。
实际操作流程是这样的:采集车同时装激光雷达和摄像头,做联合标定时外参精度要控制在毫米级。数据回传后,先用激光雷达点云聚类生成 3D 目标框,再用摄像头图像做多传感器融合优化,得到最终 3D 框。接下来把每个 3D 框投影到各路摄像头图像上,自动生成 2D 框、语义分割掩膜和关键点标注。这份自动标注数据,就是纯视觉模型的“标准答案”。
这套流程里最怕的是“老师模型也看错”。激光雷达点云在夜间、雨雾天也会有噪声,3D 框投影到图像上可能出现错位。所以流程里必须保留一个人工抽检环节。我一般建议抽检比例不低于 5%,重点抽查夜间、弱光、遮挡严重的样本。抽检不能只看 2D 框准不准,还要看 3D 框与图像边缘的相对位置,否则模型会把“悬挂在半空的车”学进去。
3.3 场景库与仿真回灌
光靠真实路测永远集不齐所有危险场景:两车紧贴变道、行人突然横穿、倒地的锥桶,真实路上遇到一次都是运气,靠运气集数据不现实。仿真平台的价值就在这里,可以在虚拟世界里批量生成这些 corner case。
纯视觉的仿真不能只调画面,还得在相机位姿、曝光参数、物体运动速度、光照变化上全部符合物理规律。如果模型在仿真里看到的是“真实世界永远不会有的光线”,它学到的就是假模式,真上车时反而丢分。我团队里的做法是“实景增强+仿真叠加”:用真实道路图像做基础,加亮度扰动、雨滴模拟、运动模糊,再把仿真物体抠进画面。这样既保留了真实纹理的分布,又能生成极端组合场景。
这套做法在逆光和夜间场景上效果特别好。之前夜间漏检率一直压不下去,后来在仿真里模拟了大量“深色行人+低照度+逆光”的组合,模型在仿真场景里先学了一轮,再配合少量真实夜间样本微调,漏检率降幅非常明显。纯视觉方案想走到量产,这套“仿真回灌”体系几乎就是必需品。
4. 极端场景实测:逆光、雨雾、隧道口
4.1 逆光与夜间低照度的攻防
摄像头物理短板很明显:动态范围有限。同一个画面里,亮的地方过曝成一片纯白,暗的地方死黑看不清,而驾驶场景经常就是这种极端对比,比如逆光时对向车灯直射、夜间路灯下的深色行人。
应对逆光靠的是硬件加算法两条腿走路。硬件层面,X01 这类量产车会选用高动态范围传感器,通过多帧合成技术:短曝光帧用来保留高光细节,长曝光帧用来提亮暗部,然后在 ISP(图像信号处理器)里做局部色调映射,把两帧信息融合成一张肉眼观感还算自然的图。算法层面,模型训练时会大量用逆光数据做增强,主动把图像亮度曲线拉高压低,让网络学会在极端对比下依然找回目标轮廓。
夜间低照度是另一个大坑。行人穿深色衣服走在柏油马路上,对比度极低,人眼都费劲,纯视觉模型更可能直接漏检。我试过单纯堆夜间真实样本,效果有提升但有限,因为真实样本里“深色行人+低照度”的组合太少。后来改成在图像增强阶段主动做亮度下调、加高斯噪声、做局部对比度削弱,相当于给模型开了一场“夜间视力训练营”,泛化效果比堆数据好很多。
4.2 雨雪镜头脏污与清洗策略
雨天是摄像头方案最狼狈的时刻。飞溅的泥水一旦糊住侧视镜头,整路感知直接就瞎了。X01 的做法是算法加执行器联动:模型持续分析各路摄像头的图像清晰度,如果发现某路图像长期模糊、锐度下降,就触发高压清洗喷嘴冲洗镜头。
听起来简单,实际标定很讲究。清洗液喷射不能太频繁,高速行驶时喷液会遮挡镜头视野,反而引入短暂的感知真空期;太懒又会导致脏污越积越厚。我建议用分级策略:结合雨刮信号、车速、行驶环境做一个综合判定。低速雨夜增加清洗频率,高速晴天减少触发,同时每次喷射前先减速到安全范围,最大程度减小对感知的影响。
还有个容易被忽略的细节:摄像头脏污检测本身要在图像层面排除“画面本来就模糊”的干扰。比如雨雾天气整体图像就是发雾的,不能把这种情况误判成镜头脏污。比较稳的做法是横向对比多路摄像头的变化趋势,只有某一路图像突然变差才判定为脏污,几路同时变差就先怀疑天气而不是镜头。
4.3 常见问题排查速查表
做量产测试时,我整理过一张纯视觉感知问题排查表,都是实际路上跑出来的案例。这里分享给大家,遇到相似问题可以直接对照排查。
| 场景 | 现象 | 可能原因 | 处理建议 |
|---|---|---|---|
| 逆光 | 对向远光灯直射时前车轮廓丢失 | ISP 多帧 HDR 合成强度不足 | 调整局部色调映射曲线,补充逆光样本 |
| 雨夜 | 路面反光导致车道线误判 | 反光与真实车道线难以区分 | 引入时序车道线融合,加雨夜反光样本 |
| 隧道口 | 进出隧道瞬间画面过曝或发黑 | 曝光收敛速度不够快 | 结合地图和 GPS 预判,提前切换曝光模式 |
| 侧视镜头 | 被泥水覆盖后长时间漏检 | 脏污检测算法灵敏度不够 | 集成清洗系统触发信号,优化脏污判断阈值 |
| 夜间静止车 | 深色车辆停在路边未检出 | 低对比度且缺少标注样本 | 加夜间样本和对比度增强数据增强 |
| 高速坡顶 | 上坡后突然出现低速车 | 远距模型检出距离不足 | 提升长焦相机目标最小像素阈值,并补充远距样本 |
这张表里的很多问题,单纯加算法参数是治标不治本,本质问题在于数据分布不够广。排查时先看是不是数据问题,再看是不是算法结构问题,最后才动参数。顺序反了容易把模型越调越畸形。
5. 技术极限的另一面:我对纯视觉路线的一些真实体会
5.1 什么才算“挑战技术极限”
行业里聊纯视觉,总是把焦点放在神经网络结构、端到端、大模型这些听起来很酷的词上。但真正量产过这套方案的人会告诉你,最难的部分根本不是算法结构,而是工程化。摄像头标定精度、镜片起雾、震动漂移、装配公差、散热对成像的影响,每一个细节都会在最终的感知结果里显形。
摄像头外参只要偏差 0.1 度,在 50 米外投射到 BEV 网格里的位置误差就有将近 8.7 厘米。一辆车从生产线下来,经过颠簸、暴晒、不同温度环境,外参到底还能保持多少精度,这是纯视觉量产最核心的工程命题。激光雷达方案就算视觉外参偏了,点云还能兜底;纯视觉一旦外参飘了,整个感知几何就歪了。
所以我觉得,X01 用“纯视觉挑战自动驾驶技术极限”,挑战的其实不是某一道神经网络题,而是整个从算法到整车工程的链条。能不能把数据闭环跑通、把传感器标定做成可复现的生产流程、让模型在重度脏污和极端光照下保持稳定,这些才是真正的技术护城河。
5.2 我的个人经验与后续扩展方向
如果今天让我再做一个辅助驾驶平台,我的第一选择仍是激光雷达加视觉融合,理由不是纯视觉不好,而是安全冗余裕度更高。但我也坦诚地说,纯视觉是我长期看好的技术方向。它对算力的要求甚至比激光雷达方案更高,因为图像数据远比点云稠密,需要更强的模型和更稳的部署能力才能压榨出好的感知结果,这恰恰说明“纯视觉就是低配”的想法站不住脚。
最后分享一个比较私人的体会吧。做智驾感知这几年,我慢慢发现,技术路线之争很多时候不是对错之争,而是成本和阶段之争。好的工程师不该只忠于某一派,而应该在真实产品里找到每种传感器的正确位置,用 BEV 和占用网络把不同模态统一起来,让传感器在它最擅长的维度上发挥作用。这套思路,对我来说比“纯视觉还是激光雷达”这个选择题重要得多。希望这篇内容也能给正在做感知规划的朋友一些启发,让你们少踩一些我在项目里踩过的坑。