想象你是一位仓库理货员,每天面对堆积如山的货箱。要抓起一只橙色货箱放到传送带上,你心里其实要完成两个问题:第一,货箱在哪个位置、有多大?第二,它的“正脸”和提手朝哪边?第一个问题叫3D目标检测,第二个问题叫6D姿态估计。一个管“在哪”,一个管“怎么放”,两者叠在一起,机器人才能真正伸出手去稳稳抓取。这篇文章,我们就跟着理货员阿理在仓库里走一遍:从“瞄一眼”到“伸手抓”的全过程,顺便把 3D 检测、6D 姿态、点云、体素、评价指标这些听起来吓人的词,一个个拆解成仓库里的日常操作。

岗位关联

对 AI 从业者而言,理解 3D 目标检测与 6D 姿态估计是进入机器人抓取、空间智能领域的入场券——这门技术决定了智能体能否从“看懂一张图”升级到“理解一个三维世界”,也是工业自动化落地中最值钱的核心能力之一。

目录
  1. 可视化演示
  2. 核心概念:从“在哪”到“怎么放”
  3. 输入数据:理货员的三种眼睛
  4. 3D检测方法:粗看与细看
  5. 6D姿态方法:旋转与平移
  6. 数据集评测:理货员的训练题库
  7. 评价指标:给理货员打分
  8. 机器人应用:从模拟到实战
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态演示3D目标检测与6D姿态估计技的核心机制,通过入门/进阶/实战/优化四种模式展示关键概念与交互流程。

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

3D目标检测与6D姿态估计技:D目标检 3D目标检测的核心原理与方法 6D姿态估计的问题定义与挑战 核心机制可视化 3D目标检测与6D姿态估计技整体架构与关键组件

核心概念:从“在哪”到“怎么放”

阿理今天接到的任务是:从货堆里抓出那只橙色货箱。他站在仓库门口先扫一眼——橙色货箱在第三排货架下方,大概有一台冰箱那么大。这一眼,做的就是3D目标检测:在三维空间里回答“物体在哪里、边界有多大”。但光知道位置还不够,货箱的提手可能在左边也可能在右边,如果他直接伸手过去,很可能抓住箱子的光面而滑脱。于是阿理需要再判断一件事:箱子的“正脸”朝向哪个方向?这一步,就是6D姿态估计。

3D 目标检测的输出是一个带朝向的三维框。与 2D 检测只需给出一张“照片上的矩形”不同,3D 检测框要描述物体在真实世界中的中心坐标、长宽高,以及水平朝向角。这七个数字像一张“货箱身份证”。

6D 姿态更进一步,它输出一个完整的刚体变换:3 个平移量加上 3 个旋转量,共 6 个自由度。如果说 3D 检测框是“货箱在哪、多大”,6D 姿态就是“货箱的每一面分别朝哪个方向”。在空间智能里,两者像钥匙和锁孔:检测负责“发现”,姿态负责“对准”。

B=(cx,cy,cz,l,w,h,θ)\displaystyle B = (c_x, c_y, c_z, l, w, h, \theta)
括号里依次是中心的 X、Y、Z 坐标、长、宽、高和水平偏航角,就像用“柜子在房间的第几排第几列、柜门朝哪开”来描述一件家具。
  1. 中心坐标三元组$(c_x, c_y, c_z)$ 表示货箱中心在三维空间的位置,对应阿理判断“箱子大致在这片区域的中间位置”。
    (cx,cy,cz)(c_x, c_y, c_z)
  2. 尺寸三元组$(l, w, h)$ 表示货箱的长、宽、高,对应“箱子大概一米长、半米宽、四十厘米高”。
    (l,w,h)(l, w, h)
  3. 水平偏航角$\theta$ 表示箱体在地面上绕竖直轴转了多少度,对应“箱子是正对着我还是斜了三十度”。
    θ\theta

输入数据:理货员的三种眼睛

阿理能在黑暗中找到货箱,靠的不是肉眼,而是装备了三副“眼睛”。第一副是普通彩色相机(RGB),它像人的眼睛,能分辨颜色和纹理,但拍出来是一张二维照片,看不出距离。第二副是深度相机(RGB-D),它在彩色照片的每个像素上额外记一个“离我多远”的数字,像是一张自带标尺的照片。第三副是激光雷达,它向四周发射激光束,碰到物体反弹回来,形成一大团带有三维坐标的点——这团点就叫点云。

点云是 3D 感知最直接的“原料”。你可以把它想象成无数个小球悬浮在空间里,每个小球都带着自己的 X、Y、Z 坐标,共同勾勒出货箱的轮廓。它不像照片那样有整齐的网格顺序,而是一堆无序的点,这正是处理点云比处理图片更棘手的原因。

为了让点云“好嚼”,工程师常把它切成均匀的小立方格,称为体素。体素就像把乐高积木格子铺满整个空间,每个落在格子里的点都被归入对应的格子。这一步骤把无序的点云变成规整的三维网格,让神经网络可以用类似处理图像的方式来处理三维数据。

P={pi∣pi=(xi,yi,zi),  i=1,2,…,N}\displaystyle \mathcal{P} = \{ p_i \mid p_i = (x_i, y_i, z_i),\; i = 1, 2, \dots, N \}
点云就是一组三维坐标点的集合:第 1 个点 $(x_1, y_1, z_1)$、第 2 个点 $(x_2, y_2, z_2)$……一直到第 N 个点,描述的是空间中采样到的物体表面。
  1. 集合符号$\mathcal{P}$ 表示整个点云,就像“仓库里拿到的一份所有激光反射点的清单”。
    P={… }\mathcal{P} = \{ \dots \}
  2. 单个点$p_i$ 表示清单上的第 $i$ 个点,每个点对应激光打到的那个微小位置。
    pip_i
  3. 坐标分量$(x_i, y_i, z_i)$ 是这个点的三维坐标,对应“这个反射点离我左右多远、前后多远、上下多远”。
    (xi,yi,zi)(x_i, y_i, z_i)
  4. 点数量$N$ 表示点云里总共有多少个点,一帧激光扫描可能有几万到几百万个点,像一场由光点组成的雪。
    i=1,2,…,Ni = 1, 2, \dots, N

3D检测方法:粗看与细看

阿理在仓库里找货箱,其实有几种不同的“找法”。第一种是两阶段法:先快速扫过全场,圈出几个“可能是货箱”的候选区域,再走近每一个候选区仔细核对,确认是货箱并量出精确尺寸。第二种是单阶段法:一眼扫过去,直接在脑子里同时报出“这里的橙色块就是一个货箱,边界在这里”,省去了候选区这一步,速度更快但精度稍逊。类似地,在 3D 检测领域,两阶段方法(如先做区域提议再精调)追求精度,单阶段方法(如 VoxelNet)追求速度。

处理点云时还有一个选择:直接吃原始点云,还是先切体素。直接处理点云的方法就像阿理走进货堆里,挨个触摸每个箱子的棱角;而体素化方法则像先在仓库地面上画好网格线,再统计每个格子里堆了多少货。体素化的好处是把连续、杂乱的空间离散化,让神经网络可以复用成熟的三维卷积结构。

实际系统中,单阶段与两阶段并非水火不容。聪明的工程师会组合使用:远距离时用单阶段快速筛选,近距离再用两阶段精细确认——就像阿理先远距离喊一声“在那片区域”,走过去再弯腰细看。选哪种,本质上是速度与精度的天平向哪边倾斜。

vj=(⌊xiΔ⌋,⌊yiΔ⌋,⌊ziΔ⌋)\displaystyle v_j = \left( \left\lfloor \frac{x_i}{\Delta} \right\rfloor, \left\lfloor \frac{y_i}{\Delta} \right\rfloor, \left\lfloor \frac{z_i}{\Delta} \right\rfloor \right)
体素化就是把空间切成边长为 $\Delta$ 的小立方格,再算出每个点落在第几行、第几列、第几层的格子里。
  1. 网格边长$\Delta$ 是小立方格的边长,相当于仓库地面上粉笔线的间距,它决定了空间被切得多细。
    Δ\Delta
  2. 向下取整$\lfloor \cdot \rfloor$ 表示向下取整,把连续坐标在格子编号上,相当于“把小数位抹掉,只留整数格”。
    ⌊xiΔ⌋\left\lfloor \frac{x_i}{\Delta} \right\rfloor
  3. 三维索引$(v_{j,1}, v_{j,2}, v_{j,3})$ 表示第 $j$ 个体素在三个方向上的编号,像“第 3 排第 2 列第 1 层的货架格”。
    (⌊xiΔ⌋,⌊yiΔ⌋,⌊ziΔ⌋)\left( \left\lfloor \frac{x_i}{\Delta} \right\rfloor, \left\lfloor \frac{y_i}{\Delta} \right\rfloor, \left\lfloor \frac{z_i}{\Delta} \right\rfloor \right)

6D姿态方法:旋转与平移

找到了货箱的位置,阿理还得知道它的“正脸”朝哪。这一步骤在数学上是一个刚体变换:把货箱从“出厂时的标准朝向”旋转、平移到“当前摆放的朝向”。姿态由两部分组成:旋转矩阵 $R$ 负责转,平移向量 $t$ 负责挪。只要知道 $R$ 和 $t$,货箱表面上的任意一个点,都能算出它现在应该出现在哪里。

旋转矩阵 $R$ 虽然直观,但三个方向的转动顺序容易产生歧义,因此工程中还常用四元数表示旋转——四元数像一个“带方向的一根旋转轴加一个旋转角”,没有万向锁问题。求解姿态的主流路线有三种:一是让神经网络直接回归出 $R$ 和 $t$;二是先用 2D 检测找到物体在图像上的关键点,再通过 PnP(透视 n 点)算法反推出姿态;三是先估一个粗略姿态,再用迭代最近点等方法做姿态细化,把误差一点点磨小。

对于像圆柱形杯子这样的对称物体,姿态估计会面临“转 90 度看起来一样”的困扰,此时常用 ADD-S 指标配合相应的损失设计来缓解。姿态估计的终极目标,是让阿理看清提手在哪,然后稳稳一把抓住。

p′=R p+t\displaystyle p' = R\,p + t
旋转矩阵的 9 个数字并非独立,它本质上是三根坐标轴旋转后的新方向。
  1. 矩阵行向量第一行 $(r_{11}, r_{12}, r_{13})$ 表示旋转后新的 X 轴方向在原来坐标系中的投影。
    [r11r12r13]\begin{bmatrix} r_{11} & r_{12} & r_{13} \end{bmatrix}
  2. 三行组合三行分别对应旋转后 X、Y、Z 三个新轴的方向,像“箱子转完之后,长边、宽边、高边分别指向哪里”。
    [r21r22r23]\begin{bmatrix} r_{21} & r_{22} & r_{23} \end{bmatrix}
  3. 正交约束旋转矩阵满足 $R^TR = I$,即三根轴彼此垂直且长度不变,对应“箱子不会因为旋转而变形”。
    RTR=IR^T R = I

数据集评测:理货员的训练题库

阿理并不是天生就会找箱子,他上岗前要刷大量“题库”。在 3D 感知领域,这些题库就是各种公开数据集。ModelNet 是一套 CAD 三维模型库,里面的椅子、桌子、飞机都是干净整齐的网格模型,常用于训练分类和基础检测网络;ShapeNet 规模更大,包含数万个带语义标注的三维模型,像一本“三维形态大辞典”。真实场景下的抓取研究则常使用 YCB-Video 数据集——它拍摄了真实货架上的各类日用品,包含视频、深度图和精确的 6D 姿态标注,是机器人抓取最常用的“练兵场”。自动驾驶领域还有 Waymo 数据集,它用激光雷达采集了城市道路上的车辆与行人点云,推动了户外大场景 3D 检测的发展。

数据集的质量直接影响模型的上限。每个数据集都有类别分布,有的类别样本多、有的少,如果不做均衡,模型就像偏科的阿理,只会找橙色大型货箱,遇到小型圆罐就发懵。用类别占比来衡量这种不均衡:

训练集、验证集与测试集的划分也是门学问。模型在训练集上学习,在验证集上调参,最后在测试集上“模拟考试”。如果三者在相机角度或光照条件上高度相似,模型可能只是“背答案”而不是“真会找”,换一个真实仓库就露馅。因此,选数据集时不仅要看规模,还要看拍摄环境的多样性。

pk=nkN\displaystyle p_k = \frac{n_k}{N}
其中 $n_k$ 是第 $k$ 个类别的样本数量,$N$ 是总样本数,比值越大说明该类样本越充裕。
  1. 类别样本数$n_k$ 表示第 $k$ 类物体在数据集中出现的次数,比如“文件中橙色货箱出现了 2000 次”。
    nkn_k
  2. 总体样本数$N$ 表示所有类别样本的总数,对应“整个题库有 10000 道题”。
    NN
  3. 类别占比$p_k$ 表示第 $k$ 类占全部样本的比例,占比过低的类别容易学不好,就像“圆罐的题只刷了 10 道,考试肯定心虚”。
    pk=nkNp_k = \frac{n_k}{N}

评价指标:给理货员打分

阿理找得准不准,不能光靠嘴上说,得有打分标准。3D 检测最常用的分数是三维 IoU(交并比):把算法“画”出的预测框和真值框分别看成两个三维盒子,计算它们重叠部分的体积占总体积的比例。重叠得越多,得分越高,像用两把尺子比对同一只箱子。

IoU 只能衡量框定得准不准,但抓取一只箱子,框再准若姿态歪了 45 度,机械爪还是会抓空。这时要用 ADD 指标来给姿态打分:把货箱表面采样一堆点,分别用真值姿态和预测姿态变换这些点,然后计算两组点之间的平均距离。距离越小,说明预测的“正脸”越接近真实朝向。

对于对称物体,比如一个把手均匀的水杯,转 180 度后视觉上看不出差别,此时每个标记点找一个“最近点”来比较,这个变体被称为 ADD-S。除此之外还有视角误差等指标用于衡量旋转估计偏差。打分的最终目的不是让分数好看,而是让机械臂的抓取成功率实打实地提升。

IoU=V(A∩B)V(A∪B)\displaystyle \text{IoU} = \frac{V(A \cap B)}{V(A \cup B)}
这个公式对每个模型点,先算“真值姿态下的位置”与“预测姿态下的位置”之间的距离,再对所有点取平均。
  1. 模型点集$p_i$ 是货箱表面采样的第 $i$ 个点,总共采 $m$ 个点,像在这只箱子上贴了 $m$ 个标记。
    pi,  i=1,2,…,mp_i,\; i=1,2,\dots,m
  2. 真值变换位置$R p_i + t$ 是这些标记在真实摆放姿态下的位置,对应“箱子真的这样放,提手会在这边”。
    Rpi+tR p_i + t
  3. 预测变换位置$\hat{R} p_i + \hat{t}$ 是模型预测姿态下标记的位置,对应“模型猜箱子这样放,提手可能在另一边”。
    R^pi+t^\hat{R} p_i + \hat{t}
  4. 平均距离对所有点的距离求平均,得到整体姿态误差,单位通常是厘米或毫米,ADD 越小抓取越稳。
    1m∑i=1m∥⋅∥\frac{1}{m}\sum_{i=1}^{m} \| \cdot \|

机器人应用:从模拟到实战

阿理在模拟器里练了上千次,终于要真刀真枪上岗了——不过上岗的不是他,而是装有同样“脑子”的机械臂。在工业生产线上,机械臂面临的第一个挑战是无序分拣:货箱在料框里东倒西歪、互相遮挡,系统先用 3D 检测锁定每个箱子的位置,再用 6D 姿态判断抓取面,最后规划一条无碰撞的抓取轨迹。整个过程像阿理在乱糟糟的仓库里一次挑出指定的那一个。

在家庭服务机器人场景中,任务更加开放:帮人拿桌上的水杯、整理书架上的书本。这里的难点是物体种类多、光照变来变去、桌面反光干扰点云。服务机器人通常采用多模态融合的策略——彩色相机负责辨识“这是杯子”,深度传感器负责“它离我多远”,再结合姿态网络判断“杯子的把手朝哪边”。要做到实时响应,网络必须足够轻量,像阿理一样眼疾手快。

技术选型上有一条经验法则:如果任务只要求“抓得起来”,一个松散的检测框加粗略姿态就够了;如果任务要求“插进去”(比如给螺丝刀插入刀头),姿态误差必须控制在毫米级,这时就要上姿态细化算法。评估一条产线是否可行,最终看的是抓取成功率:

真正部署时还会遇到许多“纸面上遇不到”的问题:点云在抛光面上产生空洞、阳光直射造成深度丢失、机械臂运动时视觉系统要同步刷新。优秀的工程师会像阿理一样,学会在混乱中保持判断:感知、决策、执行构成一个闭环,而 3D 目标检测与 6D 姿态估计,正是这个闭环里最先亮起的两盏灯。

η=NsuccessNtotal\displaystyle \eta = \frac{N_{\text{success}}}{N_{\text{total}}}
成功抓取次数除以总尝试次数,就是抓取成功率,工业产线通常要求 95% 以上。
  1. 成功次数$N_{\text{success}}$ 是机械臂成功完成“找准-抓住-搬运”全流程的次数。
    NsuccessN_{\text{success}}
  2. 总尝试次数$N_{\text{total}}$ 是所有尝试的次数,包括失败的那几次。
    NtotalN_{\text{total}}
  3. 成功率$\eta$ 是两者的比值,反映整个视觉系统的实际可用性,也直接决定产线能否投产。
    η=NsuccessNtotal\eta = \frac{N_{\text{success}}}{N_{\text{total}}}

AI 应用场景

工业机械臂无序抓取

阶段:感知与定位 → 姿态估计 → 抓取规划

解决的问题:传统工业上料依靠人工把工件摆放整齐,成本高且节奏慢。部署 6D 姿态估计后,机械臂可以直接应对料框中随意堆叠的工件。3D 检测先给出工件的候选位置,姿态网络再输出每个工件的旋转与平移,机械臂据此规划抓取点,实现“乱中取物”。整个过程从“人摆好机器再抓”升级为“机器自己找自己抓”,节拍提升 3 倍以上。

具体案例:某汽车零部件产线上,不同型号的变速箱壳体混装在同一个料框里。视觉系统配备两台深度相机,先在约 0.3 秒内完成候选框检测,再用姿态细化网络将 ADD 误差压到 5 毫米以内。机械臂按“先抓最上层、最不遮挡”的策略逐个取出工件,成功率稳定在 97%。

家庭服务机器人操作

阶段:多模态感知 → 3D目标检测 → 6D姿态估计 → 抓取执行

解决的问题:家庭环境中的物体种类多、摆放随机,且常常被遮挡。服务机器人需要同时利用彩色图像辨识物体身份、利用深度信息获得空间位置、利用姿态网络判断抓取姿态。相比工业场景,家庭环境对实时性和成本更敏感,因此常选用轻量级姿态回归网络配合小型深度相机,并用手臂的触觉反馈兜底。

具体案例:养老陪护机器人被要求从茶几上取一杯水递给老人。水杯半透明且反光,纯点云方法容易丢数据。系统采用“RGB 检测 + 深度补充 + 姿态估计”的三路融合,先锁定杯口位置,再从姿态网络输出杯身朝向,机械臂绕到杯柄一侧完成抓取,全程约 2 秒。

Python 演示

python60 行
"""演示 3D 目标检测中最常用的 IoU 指标计算。两个轴对齐 3D 框, 用中心点和长宽高表达。"""  def volume(box):    """计算单个 3D 框的体积. box: [cx, cy, cz, l, w, h]"""    cx, cy, cz, l, w, h = box    return l * w * h  def intersect_volume(box_a, box_b):    """计算两个 3D 框相交部分的体积."""    a, b = box_a, box_b    x_min = max(a[0] - a[3] / 2.0, b[0] - b[3] / 2.0)    x_max = min(a[0] + a[3] / 2.0, b[0] + b[3] / 2.0)    y_min = max(a[1] - a[4] / 2.0, b[1] - b[4] / 2.0)    y_max = min(a[1] + a[4] / 2.0, b[1] + b[4] / 2.0)    z_min = max(a[2] - a[5] / 2.0, b[2] - b[5] / 2.0)    z_max = min(a[2] + a[5] / 2.0, b[2] + b[5] / 2.0)    if x_min >= x_max or y_min >= y_max or z_min >= z_max:        return 0.0    return (x_max - x_min) * (y_max - y_min) * (z_max - z_min)  def iou_3d(box_a, box_b):    """3D IoU = 交集体积 / 并集体积"""    inter = intersect_volume(box_a, box_b)    union = volume(box_a) + volume(box_b) - inter    if union <= 0:        return 0.0    return inter / union  def estimate_center(points):    """从点云估计物体中心: 取所有点坐标的均值"""    n = len(points)    if n == 0:        return [0.0, 0.0, 0.0]    sx = sum(p[0] for p in points)    sy = sum(p[1] for p in points)    sz = sum(p[2] for p in points)    return [sx / n, sy / n, sz / n]  def main():    pred = [0.1, 0.0, 0.0, 0.5, 0.4, 0.3]    truth = [0.0, 0.0, 0.0, 0.5, 0.4, 0.3]    print("预测框:", pred)    print("真值框:", truth)    print("3D IoU =", round(iou_3d(pred, truth), 4))     points = [(0.02 * k, 0.01 * k, 0.03 * k % 0.2) for k in range(50)]    center = estimate_center(points)    print("点云估计中心:", [round(v, 4) for v in center])  if __name__ == "__main__":    main()
目的:实现 3D 目标检测中两个核心操作——用三维 IoU 评估检测框与真值框的重合度,以及从点云坐标均值估计物体中心位置,这正是“理货员阿理”判断货箱在哪里的数学缩影。
  1. def intersect_volume(box_a, box_b):计算两个 3D 框在 X、Y、Z 三个方向上的重叠区间长度,再相乘得到交集体积,对应“两把尺子按上去,重合的那段”。
  2. if x_min >= x_max or ...若任一方向上没有重叠区间,说明两个框完全错开,直接返回 0,就像两箱货隔了十万八千里。
  3. union = volume(box_a) + volume(box_b) - inter并集体积等于两体积之和减去交集,避免把重叠部分重复计算。
  4. return inter / union交并比越接近 1,说明预测框和真值框越贴合,模型越可信。
  5. def estimate_center(points):把点云所有点的坐标分量分别求平均值,得到物体的质心位置,对应阿理“大概是那片区域的正中间”。
  6. if __name__ == "__main__":程序入口,运行后会在控制台打印 IoU 分数和点云中心坐标。

常见误区

误区“既然 2D 检测能框出物体,那 3D 检测是不是在原来的方框上再多预测一个距离值就行了?像深度图每个像素不都有距离吗?”

正解3D 检测输出的是三维空间中的立体框,需要同时预测中心的三维坐标、长宽高和朝向角,本质上是七维输出。而 2D 检测加深度只能得到“图片上的框 + 一个距离”,无法回答“这个物体在三维空间中占据多大的体积、朝哪个方向”。两者的关系像“照片里看到一个箱子”与“知道箱子在房间里的实际摆放位置”,维度完全不同。

为何常见:因为 RGB-D 相机普及后,人们自然觉得“彩色图加深度图”就是三维数据,却忽略了无序点云与规则图像在数据结构上的本质差异。

误区“3D检测框里不是已经有朝向角 θ 了吗?那 6D 姿态是不是就是多预测几个角度?”

正解3D 检测框中的 θ 通常是鸟瞰视角下的单一水平偏航角,而 6D 姿态需要描述物体绕三个轴的完整旋转以及三个方向上的平移,共 6 个自由度。一个人站在地面上转圈只需要一个角度,但一个在空中翻滚的箱子需要三个角度才能说清:偏航、俯仰、翻滚。抓取任务对完整姿态的需求也源于此——机械臂要从任意角度接近物体。

为何常见:自动驾驶场景中车辆只在平面上运动,一个朝向角足够,初学者容易把这种简化场景的设定错误推广到所有 3D 任务中。

误区“激光雷达扫描几百万个点,肯定比几万个点的深度相机更准,所以点越密效果一定越好。”

正解点云密度增加会带来两个问题:一是算力开销急剧上升,实时性变差;二是无用的地面点、噪声点也会同步增加,可能干扰检测。工程上常用体素滤波、随机降采样等方法主动减少点数,在精度与速度之间取平衡。就像阿理找箱子不会挨个摸货箱的每根纤维,而是摸几个角落就能判断形状。

为何常见:人天然认为信息越多越好,却没意识到三维数据处理中存在严重的计算瓶颈,以及“相关性强但冗余多”的数据未必提升精度。

误区“2D 检测中 IoU 0.5 就是不错的检测了,3D 检测也应该一样吧?”

正解3D 框因为多了深度和体积维度,同样数值的偏差在体积上会被放大。一个在 2D 里看起来还行的框,在 3D 里可能完全偏到一边。因此 3D 检测的合格线往往更高,自动驾驶领域常用 0.7,机器人近距离操作甚至要求 0.75 以上。更关键的是,对抓取任务而言,IoU 只反映“框得准”,姿态还需要 ADD 等指标来把关。

为何常见:初学者常直接把 2D 目标检测的评估经验带入 3D,忽略了三维空间中几何误差的非线性放大效应。

面试题

Q1. 3D目标检测相比二维目标检测,核心新增的输出维度是什么?

单选题 · easy

  • A.物体的类别概率分数
  • B.目标的深度与朝向信息← 正确答案
  • C.图像的色彩通道数量
  • D.物体的纹理特征图谱

答案:B。2D 检测输出图像上的矩形框,3D 检测输出带中心坐标、长宽高和朝向角的立体框。深度和朝向是二维框无法表达的信息。类别概率、色彩通道、纹理特征在 2D 检测中就已经存在,不是新增维度。

Q2. “6D姿态估计”中的"6D"具体指什么?

单选题 · easy

  • A.六个方向的平移自由度
  • B.三个平移加三个旋转自由度← 正确答案
  • C.六个不同的尺度缩放宽
  • D.六种颜色通道的信息

答案:B。6D 姿态由 3 个平移量(X、Y、Z 方向的位置)和 3 个旋转量(绕三个轴的转动)组成,共 6 个自由度。它完整描述了物体从“标准姿态”到“当前姿态”的刚体变换。选项 A 只有平移没有旋转,选项 C、D 与刚体变换无关。

Q3. 点云数据的本质是什么?

单选题 · mid

  • A.规则的像素网格矩阵
  • B.无序的三维坐标点集合← 正确答案
  • C.一串有序的二进制码流
  • D.多层叠加的彩色图像栈

答案:B。点云是激光雷达等传感器在物体表面采样得到的一组三维坐标点,这些点之间没有固定的排列顺序,这正是它区别于图像的重要原因。处理点云时通常需要用体素化或采样等方法先把无序点组织起来。

Q4. 体素化的核心作用是什么?

单选题 · mid

  • A.把连续空间划分成规则小格子← 正确答案
  • B.把三维点云投影成二维图像
  • C.为点云数据添加彩色纹理
  • D.将二维检测框扩展为立方体

答案:A。体素化就像在空间中铺满边长为 Δ 的乐高格子,把落在每个格子里的点归入该格。它把连续、稀疏的点云转换为规则的三维网格,让神经网络可以使用三维卷积结构。它不是投影、上色或扩框操作。

Q5. 下列哪些属于3D目标检测的常见技术路线?

多选题 · mid

  • A.基于体素网格的处理方法← 正确答案
  • B.直接处理原始点云的方法← 正确答案
  • C.依赖人工规则库的几何法
  • D.两阶段提议加精调的方法← 正确答案

答案:ABD。VoxelNet 等体素方法把点云量化到网格中,PointNet++ 等方法直接消费原始点云,两阶段方法先提候选区域再精调。这三条是主流技术路线。依赖人工规则库并非深度学习的常见做法,且通常无法应对复杂场景。

Q6. ADD指标主要用来衡量什么?

单选题 · mid

  • A.检测框与真值框的体积重合度
  • B.预测姿态下对应点的平均距离← 正确答案
  • C.目标分类的置信度准确率
  • D.点云分布的均匀程度大小

答案:B。ADD 先把物体表面采样点分别经过真值姿态和预测姿态变换,再计算两组点之间的平均距离,距离越小姿态越准。IoU 衡量的是框的重合,分类置信度衡量识别,点云密度则与姿态精度无直接关系。

Q7. PnP算法在6D姿态估计中的角色是什么?

单选题 · hard

  • A.从二维三维对应点恢复位姿← 正确答案
  • B.对点云进行降采样与滤波
  • C.直接回归物体三维框尺寸
  • D.通过聚类识别物体类别

答案:A。PnP(Perspective-n-Point)利用一组已知的 2D 图像点与对应的 3D 模型点,反向求解相机的旋转和平移。它在姿态估计中常与关键点检测配合使用,从 2D 观测中恢复 6D 姿态,而不是直接回归框尺寸、降采样点云或做聚类分类。

Q8. 以下哪些数据集常用于三维检测与姿态估计评测?

多选题 · hard

  • A.YCB-Video 真实抓取场景← 正确答案
  • B.ModelNet 三维模型库← 正确答案
  • C.ImageNet 二维图像库
  • D.Waymo 自动驾驶数据集← 正确答案

答案:ABD。YCB-Video 提供真实场景视频与姿态标注,ModelNet 提供 CAD 三维模型,Waymo 提供激光雷达户外点云。ImageNet 是二维图像分类的经典数据集,不包含三维形状或姿态标注,不属于 3D 检测的常用评测集。

Q9. 评估对称物体姿态时,为什么常使用ADD-S指标?

单选题 · hard

  • A.因为对称物体无需估计姿态
  • B.最近点匹配容忍对称歧义← 正确答案
  • C.因为相机无法拍到对称面
  • D.因为对称物体体积更难计算

答案:B。对于形状对称的物体,多个不同姿态在视觉上完全相同,直接计算对应点距离会产生巨大虚误差。ADD-S 在计算每个点时取预测姿态点到真值姿态最近点的距离,从而容忍对称性带来的歧义。它不需要跳过姿态估计,也与相机成像、体积计算无关。

Q10. 机器人抓取中,6D姿态估计误差偏大可能导致哪些后果?

多选题 · extreme

  • A.机械臂抓取位置发生偏移← 正确答案
  • B.末端执行器碰撞周边货箱← 正确答案
  • C.物体类别识别结果改变
  • D.整体抓取成功率明显下降← 正确答案

答案:ABD。姿态误差会直接传导到抓取点计算上,使机械爪偏离目标表面,可能抓空或碰倒相邻物体。在产线中,这最终体现为成功率下降。类别识别由 3D 检测的分类头负责,与姿态回归的精度无关,不会因为姿态误差而改变。