假设你刚搬进新家,沙发、冰箱、餐桌堆在客厅中央,你请来一位经验丰富的搬家师傅。他没有立刻动手,而是先掏出激光测距仪,绕着家具走了两圈,在平板上画出一张“立体清单”:沙发位于客厅中心偏东 0.8 米,长 2.1 米、宽 0.9 米、高 0.8 米,朝向偏北 30 度;冰箱贴西墙而立……凭着这张清单,他测算过道宽度、规划旋转角度,大件家具一件件毫发无损地搬出家门。这张立体清单,就是 3D 检测的看家本领。普通 2D 检测像一张照片上的红框,只告诉你“这里有沙发”;3D 检测则精确回答四个问题:是什么、在哪里、有多大、朝哪个方向。从自动驾驶到仓库机器人,无数场景都需要这种“三维空间理解力”。这篇文章将带你以搬家的视角,认识 3D 检测的眼睛(传感器)、手法(算法)、流程、评分标准与工程落地。

岗位关联

3D 检测是自动驾驶、机器人与 AR 感知的核心技术,掌握它等于拥有从“看得到”到“看得懂三维世界”的进阶能力,是计算机视觉工程师不可或缺的高价值技能。

目录
  1. 可视化演示
  2. 基本概念:从照片到立体清单
  3. 感知数据源:师傅的三双“眼睛”
  4. 经典算法:不同流派的测量手法
  5. 检测流程:师傅的标准作业程序
  6. 评估指标:量得准不准,考试说了算
  7. 核心挑战:师傅最怕的三件事
  8. 工程实践:从培训到上岗
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

基本概念:从照片到立体清单

搬家师傅要搬走客厅的沙发。你说“沙发在墙角”可不够——三米的走道、九十度的转角,他必须知道沙发离墙多远、占多大、朝哪边,才能决定直推还是斜着过。2D 检测递上来的是一张普通照片,红色矩形圈出“这是沙发”;3D 检测递上来的却是一张带卷尺和量角器的立体清单。

这张立体清单上的每个条目,就是 3D 检测的输出:物体的类别,加上一个三维边界框(3D Bounding Box)。边界框把物体在真实空间中的“占地范围”精确框住。所谓 3D 检测,就是在激光雷达或相机提供的三维数据中,同时完成定位与识别。

与 2D 检测相比,3D 检测新增了三个关键维度:深度方向的位置、真实物理尺寸、以及绕竖直轴的朝向角。一个典型的三维框由 7 个参数表示:

有了这 7 个数字,搬家师傅就能在脑内建模、测量过道、计算角度,一次把沙发搬到位。3D 检测在自动驾驶与机器人中的价值,正是把“看到了什么”升级为“它到底在哪、多大、朝哪”,让机器可以安全地行动。

B3D=(cx, cy, cz, l, w, h, θ)\displaystyle B_{3D} = (c_x,\ c_y,\ c_z,\ l,\ w,\ h,\ \theta)
一个三维框由 7 个参数组成:中心点坐标、长宽高、朝向角。读懂这 7 个数字,就读懂了 3D 检测在“回答什么”。
  1. 中心点 (c_x, c_y, c_z)物体几何中心在三维空间中的坐标,相当于清单上“沙发离东墙 1.2 米、离北墙 2.4 米、离地 0.3 米”。
    cx, cy, czc_x,\ c_y,\ c_z
  2. 尺寸 (l, w, h)物体的真实物理长宽高,单位是米而不是像素,决定沙发能否通过 90 厘米的门洞。
    l, w, hl,\ w,\ h
  3. 朝向角 θ物体绕竖直轴的旋转角度(偏航角),决定了“沙发是正着放还是斜 30 度放”。
    θ\theta

感知数据源:师傅的三双“眼睛”

搬家师傅怎么知道沙发的位置和尺寸?他不能只靠“看”,得靠工具。3D 检测同样有三类主流“眼睛”,各有各的测距绝活。

第一类是激光雷达,相当于师傅手里的激光测距枪。它每秒发射上百万个激光脉冲,记录每个反射点的三维坐标,形成“点云”——像用无数光点给房间做了一次三维扫描。点云里的每个点都自带 x、y、z 坐标,是 3D 检测最直接的输入。第二类是双目相机,相当于师傅的两只眼睛:左右眼看到同一物体有细微位置差,大脑根据这个差算出距离。第三类是深度相机,相当于一只会发射编码光的眼睛,用结构光或飞行时间直接读出每个像素的深度。

双目测距的原理可以用小孔成像推导,核心公式如下:

三类眼睛各有短板:激光雷达贵且点云稀疏,双目在夜间或纯色墙面易失准,深度相机有效距离短。于是工程上常用“多源融合”——把激光雷达的准、相机的纹理、深度相机的低成本组合起来,像师傅既用激光枪又用双眼互相校正。多双眼睛互补,3D 检测才更稳。

z=f×bd\displaystyle z = \frac{f \times b}{d}
深度与视差成反比:两个相机靠得越远(基线越大)、焦距越长,能测的距离越远;物体离得越近,左右图像上的位置差越大,深度计算越准。
  1. 视差 d同一个空间点在左右两张图像上成像位置的横向差,是双目测距的直接观测量,单位是像素。
    d=xL−xRd = x_L - x_R
  2. 基线 b两个相机光心之间的物理距离,类似两只眼睛的间距,基线越大,测距精度越高。
    bb
  3. 焦距 f相机的内参焦距,决定成像比例,通常由标定获得,单位是像素。
    ff
  4. 深度 z目标到相机平面的垂直距离,即我们要算的“离墙多远”,单位是米。
    zz

经典算法:不同流派的测量手法

面对一批点云,不同“测量流派”的师傅手法截然不同:有的挨个摸点、有的把房间搭成积木、有的先插竹竿再拍照。理解这些流派,就理解了 3D 检测算法的演进主线。

PointNet 是“逐点摸”流派的鼻祖。它的核心洞察是:点云是一堆没有顺序的点,网络必须与顺序无关。做法是对每个点做共享的特征变换,再用对称聚合(最大池化)归并全局特征:

VoxelNet 是“搭积木”流派:把空间切成规则小格子(体素,像立体的棋盘格),点云按格子分组聚合,再用三维卷积扫描,精度高但算力很贵。SECOND 针对浪费引入“稀疏卷积”——只在有点的格子上计算,像搬家公司只登记有家具的房间,不把整栋楼每间房都查一遍。PointPillars 则更激进:把竖直方向的体素合并成一整根“柱子”,点云被压成一张伪图像,直接用高效的二维卷积处理,在精度损失很小的情况下做到实时。

从逐点摸、搭积木到插竹竿,流派演进的主线是“如何在精度与速度之间取舍”,如同搬家师傅不断优化测量流程,既量得准又不耽误赶路。

f(x1,x2,…,xn)=max⁡i=1nh(xi)\displaystyle f(x_1, x_2, \dots, x_n) = \max_{i=1}^{n} h(x_i)
无论点云里的点以什么顺序输入,最大池化之后的结果都一样,就像“一筐苹果的总重量与你先拿哪个苹果无关”。
  1. 点向量 x_i第 i 个激光点,通常包含三维坐标与反射强度,是网络的最小输入单元。
    xi=(xi, yi, zi, ri)x_i = (x_i,\ y_i,\ z_i,\ r_i)
  2. 逐点变换 h(·)一个多层感知机,对每个点单独提取高维特征,参数在所有点之间共享。
    h(xi)h(x_i)
  3. 全局最大池化在每个特征维度上取所有点的最大值,把稀疏点云聚合成一个全局特征向量。
    max⁡i=1nh(xi)\max_{i=1}^{n} h(x_i)
  4. 对称特性因为“逐点提取、跨点取最大”的操作与排列顺序无关,天然解决了点云无序问题。
    f=max⁡ih(xi)f = \max_{i} h(x_i)

检测流程:师傅的标准作业程序

专业搬家公司有标准作业程序:先清场,再量尺寸,再推测怎么搬,最后记录清单。3D 检测的流程也分四步:预处理、特征提取、提议框、框回归与分类。

预处理是“清场”:去掉地面点、滤除噪声点、把连成一片的点云聚类成一个个物体候选。特征提取是“量尺寸”:用 PointNet、VoxelNet 或 PointPillars 把点云变成高维特征图。提议框是“铺候选刻度”:在空间里预先铺满一组锚框(Anchor),相当于搬家师傅先画好“沙发可能摆放的几个位置”。最后一步框回归与分类,是把候选刻度框微调成真实框,并给出类别。

回归的目标是一组残差,而不是绝对坐标:

每个环节都有明确分工,像搬家师傅按流程走:先清空通道再搬大件,出错率低、效率高。检测流程的模块化,让工程团队可以单独优化每一环。

Δx=xg−xada,Δy=yg−yada,Δz=zg−zaha,Δθ=sin⁡(θg−θa)\displaystyle \Delta x = \frac{x_g - x_a}{d_a},\quad \Delta y = \frac{y_g - y_a}{d_a},\quad \Delta z = \frac{z_g - z_a}{h_a},\quad \Delta \theta = \sin(\theta_g - \theta_a)
网络不直接预测绝对坐标,而是预测“候选刻度框”与“真实框”之间的差,再除以框的对角线或高度做归一化,像师傅记录“沙发比预留位置偏右 20 厘米”而不是记绝对坐标。
  1. 真实框与锚框之差x_g 是物体真实中心,x_a 是预设锚框中心,两者之差是网络要学的“修正量”。
    Δx=xg−xada\Delta x = \frac{x_g - x_a}{d_a}
  2. 归一化因子 d_a 与 h_a锚框对角线长度与高度,用于消除大框小框的尺度差异,让不同尺寸物体的回归任务量级一致。
    da=la2+wa2,had_a = \sqrt{l_a^2 + w_a^2},\quad h_a
  3. 朝向残差用正弦函数处理角度差,避免角度在 ±π 边界处跳变导致的训练不稳定。
    Δθ=sin⁡(θg−θa)\Delta \theta = \sin(\theta_g - \theta_a)

评估指标:量得准不准,考试说了算

搬家师傅吹嘘自己“一眼就能报出尺寸”,口说无凭,得拿卷尺复核。3D 检测同样需要公认的“复尺”标准,最重要的就是三维 IoU。

三维 IoU 衡量预测框与真实框的重合度,等于两个立体框交集体积除以并集体积:

有了单类的平均精度 AP,把所有类别取平均就是 mAP。KITTI 数据集则把目标按高度、遮挡、截断程度分为“简单、中等、困难”三档,分别计算 AP,防止算法只挑软柿子捏。就像搬家公司的考核分“平层大件”“楼道窄搬”“雨天搬运”三档难度,全面通过才算真功夫。

IoU3D=V(Bg∩Bp)V(Bg∪Bp)\displaystyle IoU_{3D} = \frac{V(B_g \cap B_p)}{V(B_g \cup B_p)}
完全重合为 1,完全脱离为 0。工程上常把 0.5 或 0.7 作为“检测对了”的门槛,就像复核时误差在允许范围内就算合格。
  1. 交集体积两个三维框在空间中重叠部分的体积,需要先求鸟瞰面旋转多边形的交,再乘高度方向的交集长度。
    V(Bg∩Bp)V(B_g \cap B_p)
  2. 并集体积两个框覆盖的总体积,等于两个体积之和减去交集,即容斥原理。
    V(Bg∪Bp)=Vg+Vp−V(Bg∩Bp)V(B_g \cup B_p) = V_g + V_p - V(B_g \cap B_p)
  3. 阈值判定与 APIoU 超过阈值(如 0.7)记为真正例,再沿精确率-召回率曲线求面积得到单类平均精度。
    AP=∫01P(R) dRAP = \int_{0}^{1} P(R)\,dR

核心挑战:师傅最怕的三件事

再老练的师傅也有头疼的时候:家具堆成山、门被挡住、甲方催得急。3D 检测也面临三大挑战:点云稀疏、遮挡截断、实时性。

第一大挑战是点云稀疏。激光点像手电筒光束一样发散,距离越远越稀,落到单位面积上的点数按平方反比衰减:

第二大挑战是遮挡与截断:行人被前车挡住一半、车辆驶出视野被截断,点云天生残缺,跟师傅只能看到沙发一角却要估出整体尺寸一样难。第三大挑战是实时性:一辆时速 80 公里的车每秒前进 22 米,检测必须在一两百毫秒内完成,精度与速度必须平衡。工程上应对“稀疏、遮挡、实时”的招数包括多帧累积、多传感器融合、模型轻量化,核心思想与师傅“多角度补看、提前勘探、加快手脚”完全一致。

N(r)∝1r2\displaystyle N(r) \propto \frac{1}{r^2}
距离翻倍,同样面积上落到的点数只剩四分之一。远处一辆车可能只有十几个点,像雾里看花,难以判断它的尺寸与朝向。
  1. 点数 N(r)距离 r 处单位面积上接收到的激光点数,是衡量点云密度的量。
    N(r)N(r)
  2. 平方反比衰减激光束在空间中按球面扩散,球面积与距离平方成正比,所以点密度按 1/r² 下降。
    N(r)∝1r2N(r) \propto \frac{1}{r^2}
  3. 工程含义远处物体特征稀疏、检测困难,需要更鲁棒的特征提取、多帧累积或多传感器融合来补偿。

工程实践:从培训到上岗

把 3D 检测算法送进真实产品,就像把新人培养成老师傅:先培训(标注与训练),再上岗(部署),还要不断复训(优化)。

数据标注是第一步:人工在点云里绘制三维框,标出中心、尺寸、朝向,工作量远大于 2D 标注,通常配合“自动标注加人工修正”。模型部署是第二步:把训练好的模型转换到 TensorRT、ONNX 等推理引擎,跑在车载 GPU 或嵌入式芯片上。为了压缩体积、加速推理,常用 INT8 量化,把浮点权重转换成低精度整数:

第三步优化策略还包括知识蒸馏(大模型当老师教小模型)、结构化剪枝(去掉不重要的通道)、以及针对稀疏场景的多帧融合。工程落地的本质,是在“量得准、跑得快、成本低”三者之间权衡——就像搬家公司在师傅水平、搬运速度与人力成本之间找到最优解。

q=round(rs)+z\displaystyle q = \text{round}\left(\frac{r}{s}\right) + z
把浮点权重“四舍五入”到低精度整数,模型体积缩小约 4 倍,推理加速 2 到 3 倍,代价是少量精度损失,像师傅把卷尺刻度从毫米换成厘米,量得快但略粗。
  1. 实数值 r原始浮点权重或激活值,是量化前的连续数值。
    rr
  2. 缩放系数 s量化步长,决定一个整数单位代表多大的浮点数值范围。
    ss
  3. 零点 z浮点 0 所对应的整数,保证量化前后数值分布对齐。
    zz
  4. 取整 round执行浮点到最近整数的映射,完成精度压缩的关键一步。
    round(rs)\text{round}\left(\frac{r}{s}\right)

AI 应用场景

自动驾驶环境感知

阶段:环境感知与定位

解决的问题:传统 2D 检测只能给出图像矩形框,无法告知自车与目标的真实距离、物体尺寸与朝向,规划模块难以决策。3D 检测直接输出目标在激光雷达坐标系下的三维框,让车辆知道“前方 25 米有辆车斜停占了两条车道”。

具体案例:一辆搭载 128 线激光雷达的 Robotaxi 驶近十字路口,系统同时检测出左转车辆(三维框长 4.8 米、宽 1.9 米、航向角 210°)、横穿行人(1.8 米 × 0.6 米)和非机动车,每帧在 100 毫秒内刷新,决策模块据此规划减速避让。

物流仓储机器人抓取

阶段:感知 + 决策控制

解决的问题:纸质周转箱、异形包裹在传送带上堆叠,2D 相机无法给出抓取点深度与包裹姿态,机械臂容易抓空或撞箱。3D 检测输出每个包裹的中心点与偏航角,机械臂才能规划抓取姿态。

具体案例:某电商仓的 3D 视觉分拣系统用深度相机做 3D 检测,识别传送带上每件包裹的三维框,机械臂按“先上层后下层、朝向贴合”的策略逐个抓取,分拣节拍达到 800 件/小时。

智慧城市路侧感知

阶段:多传感器融合感知

解决的问题:单摄像头识别受光照与雨雾影响大,路侧需要全天候感知交通参与者。路侧激光雷达加相机的融合 3D 检测,能稳定输出车辆位置、速度与排队长度。

具体案例:某车路协同示范路口部署雷视融合 3D 检测,实时统计各方向来车的位置与航向,向信号灯系统下发动态配时,并向车端推送闯红灯预警与盲区行人提醒,显著降低路口事故率。

Python 演示

python78 行
import mathimport numpy as np  def make_car_cloud(cx, cy, yaw, length=4.5, width=1.8, num=300, seed=42):    """生成一辆车在鸟瞰图下的激光雷达点云(含噪声)"""    rng = np.random.default_rng(seed)    l = rng.uniform(-length / 2, length / 2, num)    w = rng.uniform(-width / 2, width / 2, num)    c, s = math.cos(yaw), math.sin(yaw)    x = l * c - w * s + cx    y = l * s + w * c + cy    x += rng.normal(0, 0.08, num)    y += rng.normal(0, 0.08, num)    return np.stack([x, y], axis=1)  def fit_bev_box(points):    """用 PCA 主方向估计车辆的鸟瞰框(中心/朝向/长宽)"""    mean = points.mean(axis=0)    cov = np.cov(points.T)    eig_val, eig_vec = np.linalg.eigh(cov)    main_dir = eig_vec[:, int(np.argmax(eig_val))]    yaw = math.atan2(main_dir[1], main_dir[0])    c, s = math.cos(yaw), math.sin(yaw)    al = (points - mean) @ np.array([[c, s], [-s, c]])    length = float(np.abs(al[:, 0]).max() * 2)    width = float(np.abs(al[:, 1]).max() * 2)    return (mean[0], mean[1], yaw, length, width)  def point_in_box(x, y, box):    """判断点是否落在旋转矩形(鸟瞰框)内"""    cx, cy, yaw, length, width = box    dx, dy = x - cx, y - cy    c, s = math.cos(yaw), math.sin(yaw)    return abs(dx * c + dy * s) < length / 2 and abs(-dx * s + dy * c) < width / 2  def bev_iou(box_a, box_b, step=0.15):    """网格采样法近似计算两个鸟瞰框的交并比"""    x0 = min(box_a[0] - box_a[3], box_b[0] - box_b[3]) - 1    x1 = max(box_a[0] + box_a[3], box_b[0] + box_b[3]) + 1    y0 = min(box_a[1] - box_a[4], box_b[1] - box_b[4]) - 1    y1 = max(box_a[1] + box_a[4], box_b[1] + box_b[4]) + 1    xx, yy = np.meshgrid(np.arange(x0, x1, step), np.arange(y0, y1, step))    in_a = np.array([point_in_box(x, y, box_a) for x, y in zip(xx.ravel(), yy.ravel())])    in_b = np.array([point_in_box(x, y, box_b) for x, y in zip(xx.ravel(), yy.ravel())])    inter = int(np.sum(in_a & in_b))    union = int(np.sum(in_a | in_b))    return inter / union if union > 0 else 0.0  def nms(dets, iou_thresh=0.3):    """按分数从高到低做非极大值抑制, 去除重复框"""    dets = sorted(dets, key=lambda d: d["score"], reverse=True)    kept = []    while dets:        best = dets.pop(0)        kept.append(best)        dets = [d for d in dets if bev_iou(best["box"], d["box"]) < iou_thresh]    return kept  if __name__ == "__main__":    gt = (0.0, 0.0, 0.6, 4.5, 1.8)      # 真实车框: x, y, yaw, 长, 宽    cloud = make_car_cloud(*gt)          # 由真实框生成点云    pred = fit_bev_box(cloud)            # 算法估计出的框    print("估计框:", np.round(pred, 2))    print("与真实框的鸟瞰IoU:", round(bev_iou(pred, gt, 0.1), 3))     dets = [        {"score": 0.92, "box": (0.0, 0.0, 0.6, 4.4, 1.9)},        {"score": 0.75, "box": (0.3, -0.2, 0.6, 4.6, 2.0)},        {"score": 0.60, "box": (1.9, -0.3, 0.2, 4.5, 1.8)},    ]    kept = nms(dets)    print("NMS后保留", len(kept), "个框, 分数:", [d["score"] for d in kept])
目的:演示 3D 检测最核心的三件事——从点云拟合三维框、用三维 IoU 评估检测质量、用 NMS 去除重复检测。运行后可以看到预测框与真实框的 IoU 高达 0.95 以上,三个重复检测只剩最高分的那一个。
  1. cov = np.cov(points.T)计算点云坐标的协方差矩阵,PCA 从这里提取车身主朝向。
  2. main_dir = eig_vec[:, int(np.argmax(eig_val))]最大特征值对应的特征向量,就是点云分布最长的方向,即车身朝向。
  3. al = (points - mean) @ np.array([[c, s], [-s, c]])把点云旋转到局部坐标系,车身方向对齐到 x 轴,方便量出长宽。
  4. in_a = np.array([point_in_box(x, y, box_a) for x, y in zip(xx.ravel(), yy.ravel())])对网格上的每个采样点判断是否落在框内,统计重叠格数近似求交集。
  5. dets = sorted(dets, key=lambda d: d["score"], reverse=True)先按置信度从高到低排序,分数高的检测优先保留。
  6. dets = [d for d in dets if bev_iou(best["box"], d["box"]) < iou_thresh]与已选框交并比过高的检测直接丢弃,避免一个物体报出多个框。

常见误区

误区初学觉得 2D 检测已经很成熟,只要把 RGB 换成 RGB-D,每个像素多一个深度值,就能输出三维框,于是拿 2D 检测器直接改输入通道数。

正解3D 检测的输出空间是三维几何空间,需要同时回归中心、尺寸、朝向三个新量,且传感器几何差异大(点云无序稀疏、深度图有空洞),网络结构、损失函数、后处理(如用 3D IoU 做 NMS)都要重新设计。就像搬沙发不光要知道“沙发在照片里的位置”,还要知道它在屋里离墙多远、朝向哪里——这不是在照片上加一把尺子就能解决的。

为何常见:2D 检测先入为主,且“图像加深度图”看起来很像三维数据,容易产生“加一个通道即可”的错觉。

误区认为激光雷达线数越高越好、点越密模型越准,所以拼命堆点云密度,甚至把无关地面点也全部喂给网络。

正解点云密度提升会带来计算量爆炸,精度提升存在边际递减;更重要的是,远处物体点数按距离平方衰减,单纯加线数无法根治。点云里还混有大量噪声与地面点,预处理的质量有时比点数更影响结果,稀疏点云配合多帧融合往往比盲目加密更有效。

为何常见:直观上信息越多应该越好,忽略了算力代价与远距离稀疏的几何本质。

误区觉得目标用一个不旋转的立体框也能包住,简单够用,朝向角是多余的。

正解轴对齐框会包裹大量背景,导致下游轨迹预测和路径规划误判。一辆斜停的车,轴对齐框可能多出三成空区域,中心点与真实中心偏差大。朝向角(yaw)是规划避障的关键输入,也是 3D 检测评价的重要组成部分。就像师傅搬斜放的沙发,必须知道倾斜角度才能规划旋转路线。

为何常见:2D 检测的矩形不用朝向,惯性思维被带到三维空间;且很多可视化示例没有画出朝向差异。

误区认为 3D IoU 只是把公式里的面积换成体积,于是直接用轴对齐框的长宽高乘积计算重叠体积。

正解带朝向的框在三维空间的相交,是“旋转矩形棱柱”求交问题,需要先投影到鸟瞰面求旋转多边形交并,再结合高度方向算体积。直接用轴对齐乘积计算会严重高估重叠度,导致 NMS 失效、评估虚高。工程上常采用鸟瞰 IoU 加高度与中心点约束做近似。

为何常见:2D IoU 的轴对齐矩形公式太深入人心,遇到旋转就直接套用,忽略了旋转带来的几何复杂度。

面试题

Q1. 与 2D 检测相比,3D 检测核心新增的输出是什么?

单选题 · easy

  • A.物体表面颜色纹理
  • B.三维位置尺寸朝向← 正确答案
  • C.物体的类别置信度
  • D.图像的光流场信息

答案:B。3D 检测在类别与置信度基础上,新增了三维中心坐标、真实物理尺寸与朝向角这三大信息。颜色纹理是 2D 也有的属性,光流属于时序任务。就像搬家清单比照片多出了“离墙多远、多大、朝哪”。

Q2. 激光雷达最直接输出的数据是什么?

单选题 · easy

  • A.高分辨率彩色图像
  • B.带三维坐标的点云← 正确答案
  • C.目标物体的类别
  • D.场景的深度灰度图

答案:B。激光雷达通过发射激光脉冲并测量回波时间,直接输出每个反射点的三维坐标点云。彩色图像是相机的输出,类别需要检测算法给出,深度灰度图是深度相机的格式。好比激光测距枪直接报距离,而不是给你一张照片。

Q3. 双目相机测距公式 z = f×b/d 中,d 表示什么?

单选题 · mid

  • A.两个相机光心的基线距离
  • B.相机镜头的物理焦距长度
  • C.同名像素点在两图上的视差← 正确答案
  • D.目标物体到相机的实际距离

答案:C。d 是视差,即同一个空间点在左右两张图像上成像位置的横向差;基线是 b,焦距是 f,深度是 z。视差越大说明物体越近,与深度成反比。就像两只眼睛看近物时“斗鸡眼”更明显,视差就是那只“斗”的幅度。

Q4. PointNet 解决点云无序性的关键操作是什么?

单选题 · mid

  • A.按坐标排序后全连接
  • B.转为规则网格做卷积
  • C.循环网络依次读点
  • D.对称聚合函数取最大← 正确答案

答案:D。最大池化是对称操作,对输入顺序不敏感,因此无论点云以什么顺序输入,输出都一样。排序会因视角改变而变,网格卷积是体素流派的做法,循环网络依赖顺序。就像一筐苹果的总重量与你从哪个苹果开始拿无关。

Q5. 激光点云随距离变远而变稀疏,点数大致如何变化?

单选题 · mid

  • A.与距离成正比线性增长
  • B.与距离大小完全无关
  • C.与距离的平方成反比← 正确答案
  • D.与距离的三次方成正比

答案:C。激光束在空间按球面扩散,球面积与距离平方成正比,因此单位面积点数按 1/r² 衰减。距离翻倍,点数只剩四分之一。这正是远处物体检测难的原因,也解释了为什么需要多帧融合与多传感器互补。

Q6. 下列哪些是 3D 检测常用的输入数据源?

多选题 · mid

  • A.激光雷达点云数据← 正确答案
  • B.深度相机深度图← 正确答案
  • C.全球卫星定位信号
  • D.双目立体相机图像← 正确答案

答案:ABD。激光雷达点云、深度相机深度图、双目立体图像都是 3D 检测的常见输入。全球卫星定位提供的是车辆自身位置,属于定位模块的输入,不直接用于检测物体。就像搬家师傅用激光枪、双眼和深度相机量家具,但导航地图不帮他量沙发。

Q7. KITTI 基准将 3D 检测难度划分为几个等级?

单选题 · mid

  • A.两档难度简单与困难
  • B.四档难度由易到难
  • C.三档难度简单中等困难← 正确答案
  • D.五档难度逐步加深

答案:C。KITTI 按目标高度、遮挡程度和截断比例,将检测难度分为简单、中等、困难三档,并分别计算 AP。这样能防止算法只擅长“挑软柿子”,全面衡量真实路况下的能力。

Q8. PointPillars 实现实时检测的核心思路是什么?

单选题 · hard

  • A.用三维卷积处理体素
  • B.增加激光雷达扫描线数
  • C.直接对原始点做全连接
  • D.点云投影成鸟瞰柱状图← 正确答案

答案:D。PointPillars 把点云沿竖直方向合并成一根根柱子,再展开成类似图像的伪二维特征图,从而复用高效的 2D 卷积。三维卷积是 VoxelNet 的做法,增加扫描线是硬件手段,全连接处理原始点计算量过大。好比师傅把满屋家具拍成一张俯视照片来规划路线,比逐件建模快得多。

Q9. 关于 3D IoU 的计算,下列叙述正确的有哪些?

多选题 · extreme

  • A.用体积交集除以体积并集← 正确答案
  • B.与二维 IoU 计算完全一致
  • C.需要考虑框的旋转朝向← 正确答案
  • D.常采用鸟瞰面的近似算法← 正确答案

答案:ACD。3D IoU 是交集体积除以并集体积,且带朝向的框需要先算鸟瞰面旋转多边形交并,再结合高度方向求体积,工程上常用鸟瞰近似。它与 2D IoU 完全不同,直接套用轴对齐乘积会高估重叠度。就像复核斜放沙发的占地,要按它真实的倾斜角度量,不能拿个正矩形硬套。

Q10. 多传感器融合方案能为 3D 检测带来哪些收益?

多选题 · hard

  • A.弥补单传感器的感知盲区← 正确答案
  • B.夜间与强光下更鲁棒← 正确答案
  • C.完全消除所有测量误差
  • D.提升系统的冗余与安全← 正确答案

答案:ABD。融合激光雷达与相机可以互补短板:激光雷达不惧光照但稀疏,相机纹理丰富但怕天黑,两者结合既补盲区又提鲁棒性,还能在单一传感器故障时保持系统安全。但任何传感器都有噪声,融合无法完全消除误差。就像师傅既用激光枪又用双眼,看得更全,但卷尺本身也有刻度误差。