首页/知识库/自动驾驶感知系统:多传感器融合与目标检测

自动驾驶感知系统:多传感器融合与目标检测

🌍实践应用高级✍️ AI Master📅 创建 2026-05-30📖 28 min 阅读
💡

文章摘要

自动驾驶感知系统是自动驾驶的核心技术栈。本文系统讲解从单一传感器到多传感器融合(摄像头+LiDAR+毫米波雷达)的完整方案,涵盖目标检测、语义分割、BEV表示、Occupancy Network以及工业级传感器融合架构设计。

1自动驾驶感知的核心挑战:为什么需要多传感器

自动驾驶感知系统的使命是理解车辆周围的环境:有哪些物体(车辆、行人、交通标志)、它们在什么位置、以什么速度运动、道路结构如何。这是自动驾驶最基础也是最关键的环节——如果感知错了,后续的规划和控制都无从谈起。

为什么单一传感器不够?因为每种传感器都有物理极限。摄像头擅长语义理解(识别交通标志、车道线),但在暗光和逆光下性能骤降。LiDAR 提供精确的 3D 几何信息,但无法识别颜色和纹理,且在雨雪天气中性能下降。毫米波雷达全天候工作、测速精准,但分辨率极低、无法做精细的语义理解。

自动驾驶感知系统的核心设计哲学是冗余与互补。冗余意味着多个传感器独立感知同一环境,当其中一个失效时系统仍能正常工作;互补意味着不同传感器的优势叠加,形成比任何单一传感器都更强的感知能力。Tesla 的纯视觉方案(摄像头-only)和 Waymo 的多传感器方案(摄像头+LiDAR+毫米波雷达)代表了两种不同的设计哲学,但工业趋势越来越倾向于多传感器融合——因为安全冗余无法替代。

图表加载中…

理解传感器特性的最佳方式是站在工程角度思考:在暴雨天气中,摄像头可能完全失效,LiDAR 点云噪声明显增加,此时毫米波雷达成为主要的感知来源。好的感知系统必须在任何传感器组合下都能工作。

传感器融合不是简单的'多装几个传感器就行'。每个传感器都有自己的坐标系、时间戳、噪声模型,融合前必须完成精确的外参标定和时间同步。未经标定的多传感器系统比单一传感器系统更危险,因为融合会产生看似合理但实际错误的感知结果。

2摄像头感知:2D目标检测与语义分割

摄像头是自动驾驶中最成熟的传感器,也是语义理解能力最强的传感器。摄像头感知的核心任务包括 2D 目标检测(在图像中框出车辆、行人、交通标志)、语义分割(逐像素分类道路、人行道、草地等)、车道线检测交通标志识别

现代摄像头目标检测以 YOLO 系列(You Only Look Once)为代表。YOLOv8/v9/v10 在自动驾驶场景中表现出色,其核心优势在于单阶段(one-stage)架构的推理速度——可以在车载计算平台上达到 30+ FPS 的实时性能。检测器输出的是 2D 边界框(bounding box),包含类别、置信度和位置坐标。

语义分割使用 Encoder-Decoder 架构(如 DeepLab、SegFormer、Mask2Former),对图像中的每个像素进行分类。在自动驾驶中,语义分割的输出用于识别可行驶区域、人行道、草地等非目标物体,为目标检测提供上下文信息。

摄像头的最大局限在于深度信息缺失。单目摄像头只能通过物体大小估计距离(远小近大),精度有限。双目立体视觉可以提供深度,但计算成本高、有效距离受限。这也是为什么纯视觉方案需要通过大量数据和时序信息来推断 3D 信息(如 Tesla 的 Occupancy Network)。

图表加载中…

在工业实践中,摄像头目标检测通常不单独使用,而是与 LiDAR 检测器并行运行,最终在融合层进行决策级融合。这意味着每个检测器都可以独立给出结果,融合引擎再做最终判断。

摄像头在逆光、大雨、隧道进出等极端场景下会出现严重的性能下降。纯视觉系统必须通过时序建模(多帧信息融合)来弥补单帧质量的下降,否则在关键时刻可能完全丢失目标。

3LiDAR感知:3D目标检测与点云处理

LiDAR(Light Detection and Ranging)通过发射激光脉冲并测量反射时间来获取环境的精确 3D 点云。每一帧 LiDAR 数据包含数十万到数百万个 3D 点(x, y, z, intensity),每个点精确到厘米级别。这使得 LiDAR 成为距离测量最精确的传感器。

LiDAR 3D 目标检测的核心挑战在于点云的不规则性和稀疏性。与图像(规则的 2D 像素网格)不同,点云是无序的 3D 点集,无法直接使用卷积神经网络(CNN)。工业界主流的 3D 检测方法有三大范式:

第一类是基于点的方法(Point-based),如 PointNet++ 和 PointPillars,直接处理原始点云。PointPillars 的创新在于将 3D 点云投影为 2D"pillar"(柱状)表示,然后用 2D CNN 处理,在速度和精度之间取得了很好的平衡,被广泛用于车载部署。

第二类是基于体素的方法(Voxel-based),如 VoxelNet 和 SECOND,将 3D 空间划分为规则的体素网格,然后用 3D 稀疏卷积处理。这种方法保留了完整的 3D 信息,但计算量大。

第三类是基于 BEV 的方法(Bird's Eye View),如 CenterPoint 和 BEVFusion,将 3D 点云投影到鸟瞰图平面上,然后在 2D BEV 空间中进行检测。BEV 表示的优势在于与自动驾驶的规划层天然对齐——规划器需要的是"前方 50 米处有一辆车",而不是"在点云中有一个聚类"。

python
import numpy as np
import open3d as o3d

def preprocess_lidar_pointcloud(pointcloud, voxel_size=0.1):
    """LiDAR 点云预处理:地面去除 + 统计离群点移除"""
    pcd = o3d.geometry.PointCloud()
    pcd.points = o3d.utility.Vector3dVector(pointcloud[:, :3])
    
    # 统计离群点移除(去除雨点/雪花噪声)
    cl, ind = pcd.remove_statistical_outlier(
        nb_neighbors=20, std_ratio=2.0
    )
    pcd_filtered = pcd.select_by_index(ind)
    
    # RANSAC 地面去除
    plane_model, inliers = pcd_filtered.segment_plane(
        distance_threshold=0.15, ransac_n=3, num_iterations=1000
    )
    non_ground = pcd_filtered.select_by_index(inliers, invert=True)
    
    return np.asarray(non_ground.points)

# 使用示例
raw_points = np.random.randn(100000, 4)  # 模拟 LiDAR 点云
filtered = preprocess_lidar_pointcloud(raw_points)
print(f"原始点数: {len(raw_points)}, 过滤后: {len(filtered)}")
图表加载中…

PointPillars 是工业界最常用的 LiDAR 3D 检测方法之一,因为它在 NVIDIA Drive Orin 等车载芯片上可以达到 50+ FPS 的推理速度。如果对实时性要求高,PointPillars 是首选。

LiDAR 在雨雪天气中性能会显著下降——雨滴和雪花会反射激光,产生大量噪声点。在恶劣天气场景中,LiDAR 检测器必须配合噪声滤除算法(如统计离群点移除),否则会将雨点误识别为障碍物。

4毫米波雷达感知:测速与全天候探测

毫米波雷达(mmWave Radar)工作在 77GHz 频段,通过发射毫米波并接收反射信号来探测目标。它的核心优势是全天候工作能力——在暴雨、大雾、黑夜等摄像头和 LiDAR 都失效的场景下,毫米波雷达仍然可以正常工作。

毫米波雷达的输出格式与摄像头和 LiDAR 完全不同:它提供的是目标列表(每个目标的距离、速度、方位角、雷达截面),而不是图像或点云。这意味着毫米波雷达天然就是"目标级"的传感器,不需要额外的检测步骤。

毫米波雷达的局限性在于分辨率极低。传统毫米波雷达的水平分辨率只有几度,无法区分相距很近的两个目标(例如并排站立的两个人)。最新的成像毫米波雷达(4D 毫米波雷达)通过增加高度维度和提高角分辨率,正在缩小与 LiDAR 的差距,但仍无法替代 LiDAR 的精确几何测量。

在工业实践中,毫米波雷达主要用于速度测量远距离探测。它的多普勒效应测量速度的精度远高于摄像头和 LiDAR(可以达到 0.1 m/s 级别),这使得它成为跟踪运动目标(如前方车辆的加速度变化)的不可替代的传感器。

图表加载中…

毫米波雷达的 RCS(雷达截面)信息可以用来粗略判断目标类型——大 RCS 通常是车辆,小 RCS 可能是行人或自行车。虽然这不是可靠的分类方法,但在融合阶段可以作为辅助特征。

毫米波雷达容易受到金属物体的多径反射干扰——例如路边金属护栏的反射会被误认为是前方车辆。多径效应导致的虚警是毫米波雷达的主要问题之一,需要通过多帧跟踪和轨迹滤波来消除。

5BEV表示:统一的多模态感知框架

BEV(Bird's Eye View,鸟瞰图)表示是近年来自动驾驶感知领域最重要的范式转变之一。它的核心思想是将所有传感器的感知结果统一投影到一个自上而下的 2D 网格中,在这个统一的表示空间中进行融合和推理。

为什么 BEV 如此重要?因为它解决了多传感器融合的根本难题:不同传感器在不同的表示空间中工作。摄像头看到的是 2D 图像(像素坐标),LiDAR 看到的是 3D 点云(相机/雷达坐标系),毫米波雷达看到的是目标列表(极坐标)。如果没有统一的表示空间,融合就需要在多个坐标系之间反复转换,既复杂又容易出错。

BEV 表示通过视角转换(View Transformation)将所有传感器数据映射到统一的鸟瞰坐标系。对于摄像头,这涉及将 2D 图像特征反投影到 3D 空间然后投影到 BEV 平面(LSS、BEVDet、BEVFormer 等方法)。对于 LiDAR,这只需将 3D 点云丢弃高度维度即可。对于毫米波雷达,将目标坐标转换到 BEV 坐标系即可。

BEV 表示的最大优势在于它与规划层天然兼容。BEV 中的每个网格单元直接对应现实世界中的一个物理区域(例如 0.5m × 0.5m),规划器可以直接在这个地图上做路径规划,无需额外的坐标转换。

图表加载中…

BEVFormer 是当前最先进的纯视觉 BEV 方法之一,它使用可变形注意力(Deformable Attention)来高效地从多视角摄像头图像中提取 BEV 特征。如果你的系统只有摄像头,BEVFormer 是最值得学习的方案。

BEV 视角转换是一个计算密集型操作。LSS 方法需要生成大量 3D 候选点,计算量和显存消耗都很大。在资源受限的车载芯片上,需要对 BEV 范围(通常限制在前后 100m、左右 50m)和分辨率(通常 0.5m/格)做精心优化。

6Occupancy Network:下一代通用表示

Occupancy Network(占据网络)是 Tesla 在 2022 AI Day 上提出的感知表示方法,代表了自动驾驶感知从"目标检测"向"通用场景理解"的范式转变。

传统目标检测只能识别预定义类别的物体(车辆、行人、交通标志等)。如果遇到训练集中没有的类别(例如道路上掉落的大型货物、侧翻的车辆、异常的交通锥排列),检测器会直接漏检——这对自动驾驶是致命的安全风险。

Occupancy Network 的核心思想是不预测物体类别,而是预测空间中每个体素(voxel)是否被占据。它将车辆周围的空间划分为密集的 3D 网格(例如 0.2m × 0.2m × 0.2m 的体素),对每个体素预测"被占据/未被占据"以及"占据物的语义类别(可驾驶/不可驾驶/障碍物等)"。

这种方法的优势在于类别无关性(class-agnostic)——不管遇到什么物体,只要它在物理上占据了空间,Occupancy Network 就能检测到。这对于处理长尾场景(long-tail cases)至关重要,因为长尾场景中遇到的物体往往不在训练集中。

Tesla 的 Occupancy Network 是纯视觉方案,通过多摄像头图像的时序融合来推断 3D 占据信息。但工业界也有 LiDAR+摄像头的融合 Occupancy 方案(如 FB-OCC、Occ3D),结合了 LiDAR 的精确几何和摄像头的语义信息。

python
import torch
import torch.nn as nn

class SparseVoxelEncoder(nn.Module):
    """稀疏体素 Occupancy 编码器
    
    将 3D 空间划分为体素,只处理被占据的体素
    大幅减少计算量(相比密集体素)
    """
    def __init__(self, voxel_size=0.2, feature_dim=64):
        super().__init__()
        self.voxel_size = voxel_size
        self.encoder = nn.Sequential(
            nn.Linear(3, feature_dim),
            nn.LayerNorm(feature_dim),
            nn.ReLU(),
            nn.Linear(feature_dim, feature_dim),
            nn.ReLU(),
        )
        self.occupancy_head = nn.Linear(feature_dim, 1)  # 占据预测
        self.semantic_head = nn.Linear(feature_dim, 4)   # 语义分类
    
    def forward(self, voxel_coords, features):
        x = self.encoder(features)
        occ_logits = self.occupancy_head(x)
        sem_logits = self.semantic_head(x)
        return occ_logits, sem_logits

# 使用:只编码被占据的体素,跳过空体素
# 200m x 200m x 10m @ 0.2m → 稀疏体素约 50000(vs 密集 10 亿)
图表加载中…

Occupancy Network 非常适合与传统目标检测器结合使用——检测器提供预定义类别的精确目标信息,Occupancy 网络提供长尾物体的安全保障。两者互补,形成更完整的感知覆盖。

Occupancy Network 的显存消耗非常大。一个 200m × 200m × 10m 的空间以 0.2m 分辨率划分会产生 10 亿个体素。在实际部署中,必须使用稀疏表示(只存储被占据的体素)或层级体素(远处用粗体素、近处用细体素)来控制计算量。

7传感器融合架构:从数据级到决策级

传感器融合根据融合发生的阶段分为三个层级:数据级融合(Data-level)、特征级融合(Feature-level)和决策级融合(Decision-level)。每个层级有不同的优势和挑战。

数据级融合(早融合)在原始数据层面进行融合——例如将 LiDAR 点云投影到摄像头图像上,然后在一个网络中联合处理。这种方法理论上信息损失最小,但对时间同步和外参标定要求极高,且不同传感器的数据格式差异大,难以直接融合。

特征级融合(中融合)在特征表示层面进行融合——例如在 BEV 空间中将摄像头特征和 LiDAR 特征拼接或注意力融合。这是当前工业界最主流的方案(如 BEVFusion),因为它在信息保留和工程可行性之间取得了平衡。

决策级融合(晚融合)在每个传感器独立完成感知后,在结果层面进行融合——例如摄像头检测到的目标列表和 LiDAR 检测到的目标列表进行匹配和合并。这种方法鲁棒性最强(一个传感器失效不影响另一个),但信息损失最大。

图表加载中…

工业级自动驾驶系统通常同时使用多个融合层级——特征级融合用于常规感知(精度高),决策级融合作为安全冗余(鲁棒性强)。这种'双保险'设计是 L4 级自动驾驶的标准做法。

传感器融合中最危险的错误是错误关联(false association)——将摄像头检测到的目标 A 错误地匹配到 LiDAR 检测到的目标 B。这会导致融合后的目标拥有错误的位置和速度信息,进而引发错误的规划决策。使用匈牙利算法进行目标匹配时,必须设置合理的位置和速度阈值。

8多目标跟踪:从检测到轨迹

多目标跟踪(Multi-Object Tracking, MOT)将单帧的目标检测扩展为跨时间帧的连续轨迹。这对于自动驾驶至关重要,因为规划层需要的不仅是"此刻有什么",还需要"它们往哪里运动、速度多快"。

工业界主流的 MOT 方法是 Tracking-by-Detection(检测后跟踪)范式:先用检测器在每一帧中找出目标,然后用跟踪算法将这些检测结果关联为连续的轨迹。核心挑战在于数据关联——如何将当前帧的检测结果与已有轨迹正确匹配。

卡尔曼滤波(Kalman Filter)是多目标跟踪的基础。它通过"预测-更新"循环来估计目标的状态(位置、速度、加速度)。在预测阶段,根据运动模型预测目标的下一帧位置;在更新阶段,用实际检测结果修正预测。扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF)用于处理非线性运动模型。

ByteTrack 是近年来最成功的 MOT 方法之一。它的核心洞察是:传统跟踪器只使用高置信度检测结果,丢弃低置信度结果,但低置信度结果中可能包含被遮挡的目标。ByteTrack 先用高置信度结果匹配已有轨迹,再用低置信度结果匹配剩余轨迹,显著提高了遮挡场景下的跟踪鲁棒性。

图表加载中…

在自动驾驶中,目标跟踪的质量直接影响规划的安全性。一个被错误跟踪的行人(速度估计错误)可能导致车辆做出危险的避让动作。始终对跟踪结果设置合理性检查(如最大速度限制),防止跟踪器输出物理上不可能的轨迹。

目标跟踪的ID 切换(Identity Switch)是工业部署中最常见的问题之一——当目标被遮挡后重新出现时,跟踪器可能给它分配一个新的 ID。这会导致规划器误以为是新出现的目标。使用 ReID(重识别)特征可以帮助减少 ID 切换,但在自动驾驶中通常更关注位置连续性而非 ID 一致性。

9车道线与可行驶区域检测

除了目标检测,自动驾驶感知系统还需要理解道路结构——车道线在哪里、可行驶区域是什么、道路拓扑如何连接。这是与目标检测并行的另一个关键感知任务。

车道线检测经历了从传统图像处理方法(边缘检测+霍夫变换)到深度学习方法的演进。当前主流方法包括基于分割的方法(LaneATT、CLRNet)和基于锚点的方法(CondLaneNet)。基于分割的方法先输出车道线的概率图,然后通过后处理提取车道线曲线;基于锚点的方法直接预测车道线上的一系列关键点。

可行驶区域检测(Drivable Area Segmentation)使用语义分割技术识别路面上车辆可以安全行驶的区域。这在非结构化道路(没有明确车道线的乡村道路、停车场)中尤为重要。可行驶区域的定义不仅仅是"路面"——它还需要排除路边停车位、人行道、施工区域等不可行驶的部分。

道路拓扑推断(Road Topology Inference)是更高级的任务——理解车道之间的连接关系(哪个车道可以左转、哪个车道是直行)、路口结构、交通灯与车道的关联。这是 L4 级自动驾驶(无人出租车)所必需的,因为规划器需要知道"从当前车道出发,可以到达哪些车道"。

图表加载中…

车道线检测在工业实践中通常与高精地图(HD Map)结合使用。高精地图提供先验的车道线位置,感知系统在此基础上进行实时检测和偏差校正。当高精地图不可用时(新开通道路),感知系统需要独立完成车道线检测。

车道线检测在车道线磨损、积雪覆盖、强光反射等场景下性能会严重下降。在这些场景中,系统应该降级为基于可行驶区域的驾驶策略(保持在路面中间),而不是尝试跟踪不可见的车道线。

10感知系统的工业部署:从模型到产品

实验室中的感知模型与车载部署的感知系统之间有巨大的鸿沟。工业部署需要考虑实时性、可靠性、算力限制、传感器故障处理等一系列工程问题。

实时性是最基本的要求。自动驾驶感知系统通常需要在 100ms 以内完成一帧的处理(10 FPS 最低要求,工业标准是 20-30 FPS)。这意味着整个感知流水线——从传感器数据采集、预处理、模型推理、后处理到结果输出——必须在严格的时间预算内完成。在 NVIDIA Orin(254 TOPS)这样的车载芯片上,一个完整的 BEV 感知流水线通常需要占用 30-50% 的算力。

可靠性通过多种机制保障:健康监控(定期检查传感器是否正常工作)、降级策略(传感器失效时的应对方案)、交叉验证(不同传感器的感知结果互相验证)。例如,如果摄像头检测到前方有障碍物但 LiDAR 没有检测到,系统需要判断是摄像头误检还是 LiDAR 漏检——这通常通过第三传感器(毫米波雷达)的独立验证来解决。

传感器标定是感知系统的基石。外参标定(传感器之间的相对位置和朝向)和内参标定(摄像头的焦距、畸变参数)直接影响感知精度。工业系统通常使用在线自标定技术——在车辆行驶过程中持续微调标定参数,而不是依赖出厂时的一次性标定。

图表加载中…

在部署感知系统时,建议先从决策级融合开始(每个传感器独立检测,结果简单合并),验证系统基本功能后再升级到特征级融合。这样可以逐步降低工程风险,避免一次性引入过多复杂度。

感知系统的安全关键性意味着任何 bug 都可能直接导致安全事故。工业级感知系统必须通过大量的场景测试(corner case testing)和仿真验证。在将感知系统部署到真实道路之前,必须在仿真环境中通过至少 100 万公里的测试里程。

11未来趋势:端到端自动驾驶与VLM

自动驾驶感知正在经历从模块化(检测→跟踪→融合→规划)向端到端(传感器输入→控制输出)的范式转变。

端到端自动驾驶使用一个大模型直接处理传感器输入并输出驾驶动作(转向角、油门、刹车)。代表工作包括 Tesla 的 FSD v12(纯视觉端到端)、UniAD(统一自动驾驶模型)和 VAD(向量化自动驾驶)。这些方法的优势在于消除了模块间的误差累积——在模块化系统中,感知层的误差会被放大传递到规划层,而端到端系统可以通过全局优化来减少这种误差。

视觉语言模型(VLM)正在进入自动驾驶领域。通过引入语言理解能力,自动驾驶系统可以理解交通场景中的语义信息("前方施工"的路牌、交警的手势、行人的意图)。这使得自动驾驶从"几何理解"向"语义理解"迈出了重要一步。

但端到端方法也面临挑战:可解释性差(无法知道模型为什么做出某个决策)、安全验证困难(传统模块化系统可以单独验证每个模块,端到端系统难以分解验证)、数据需求巨大(需要数百万公里的高质量驾驶数据)。

图表加载中…

模块化架构和端到端架构不是互斥的。当前的工业趋势是'混合架构'——用端到端模型替换感知层中高度耦合的子模块(如 BEV 检测+跟踪),但保留规划层的独立模块以确保安全性和可解释性。

端到端自动驾驶目前仍处于早期阶段,尚未有 L4 级端到端系统在公开道路上大规模部署。如果你的目标是工业级安全(L4/L5),模块化架构仍然是更成熟、更可验证的选择。

12总结与实践建议

自动驾驶感知系统是一个多学科交叉的复杂工程系统。本文从传感器特性出发,系统讲解了摄像头、LiDAR 和毫米波雷达的感知原理,然后深入讨论了 BEV 表示、Occupancy Network、传感器融合架构、多目标跟踪、车道线检测等核心技术,最后展望了端到端自动驾驶和 VLM 的未来趋势。

核心要点总结:第一,多传感器融合是工业标准——单一传感器无法覆盖所有场景。第二,BEV 表示是统一的感知框架——它解决了多传感器融合的空间对齐问题。第三,Occupancy Network 是处理长尾场景的关键——它不依赖预定义类别。第四,传感器融合需要在信息保留和工程可行性之间权衡——特征级融合是当前主流。第五,实时性和可靠性是部署的核心约束——实验室模型到车载系统需要大量工程工作。

对于想要进入自动驾驶感知领域的工程师,建议的学习路径是:先掌握单一传感器的感知方法(2D 检测 + 3D 检测)→ 学习 BEV 表示和视角转换 → 实践传感器融合(从决策级开始)→ 部署到车载平台(NVIDIA Orin 或 Jetson)→ 扩展到 Occupancy 和端到端架构。

自动驾驶感知的终极目标是让车辆像人类驾驶员一样理解周围环境——甚至更好。人类驾驶员可以通过余光、声音、经验来补充视觉信息,而自动驾驶系统需要通过精心的传感器选择和算法设计来达到甚至超越这个水平。

图表加载中…

自动驾驶感知领域正在快速发展,但核心原理(传感器特性、融合架构、BEV 表示)是稳定的。专注于理解这些核心原理,而不是追逐最新的模型架构——原理不变,架构会变。

自动驾驶感知系统的开发需要大量的真实道路数据。不要在缺乏真实场景数据的情况下仅依赖仿真数据进行开发——仿真无法完全模拟真实世界的复杂性和不可预测性。始终用真实数据验证最终系统。

继续你的 AI 学习之旅

浏览更多 AI 知识库文章,或者探索 GitHub 上的优质 AI 项目