目标检测:三维检测与高级应用
引言
本页面是目标检测专题的进阶内容,涵盖三维目标检测(基于激光雷达、相机和多模态融合)、开放词汇目标检测(零样本检测)以及工业缺陷检测应用。这些方向是目标检测技术与机器人感知深度融合的前沿领域。
三维目标检测 (3D Object Detection)
应用背景
二维目标检测输出图像平面上的边界框,而机器人操作、自动驾驶等场景需要知道物体在三维空间中的位置、尺寸和朝向。三维目标检测输出的是三维边界框,通常表示为 ,其中 为偏航角(yaw)。
| 输出维度 | 2D 检测 | 3D 检测 |
|---|---|---|
| 位置 | 中心坐标 | |
| 尺寸 | 宽 、高 | 长 、宽 、高 |
| 方向 | — | 偏航角 (可选 roll/pitch) |
| 传感器 | RGB 相机 | LiDAR、RGB-D、多模态融合 |
基于激光雷达的方法
激光雷达(LiDAR)直接获取三维点云,天然适合三维检测任务:
VoxelNet(2018):将点云体素化(Voxelization)后逐体素提取特征,再送入 RPN 网络预测三维框。将无序点云划分为规则体素网格,每个非空体素用 VFE(Voxel Feature Encoding)层提取特征,然后通过 3D 卷积网络处理整体体素特征图。
PointPillars(2019):将点云按垂直列(Pillar)组织,使用简化的 PointNet 提取 Pillar 特征,展平为伪图像后使用 2D CNN 检测。相比 VoxelNet 无需 3D 卷积,推理速度快(可达 62 FPS),工程实用性强,是自动驾驶工业部署中应用最广泛的方法之一。
CenterPoint(2021):将三维检测转化为鸟瞰图(BEV, Bird's Eye View)上的中心点检测,类似 2D CenterNet。
- 预测阶段:在 BEV 特征图上预测目标中心热图、尺寸、方向和速度
- 细化阶段:以中心点为基准提取关键点特征,进一步精化边界框
- 支持多类别和速度预测,是自动驾驶领域的主流方案之一
# 使用 OpenPCDet 框架进行点云三维检测推理示例
import torch
from pcdet.config import cfg, cfg_from_yaml_file
from pcdet.datasets import build_dataloader
from pcdet.models import build_network, load_data_to_gpu
cfg_from_yaml_file('cfgs/kitti_models/pointpillar.yaml', cfg)
model = build_network(model_cfg=cfg.MODEL,
num_class=len(cfg.CLASS_NAMES),
dataset=dataset)
model.load_params_from_file(filename='pointpillar_7728.pth', to_cpu=False)
model.cuda()
model.eval()
with torch.no_grad():
load_data_to_gpu(batch_dict)
pred_dicts, _ = model.forward(batch_dict)
# pred_dicts 包含 pred_boxes, pred_scores, pred_labels
基于相机的方法
相机成本低、信息丰富,但深度信息需要从单目或多目图像中恢复:
FCOS3D(2021):在 FCOS 框架上扩展,直接从单目图像回归三维边界框的中心、尺寸和朝向。通过学习目标中心点在图像中的投影位置以及相对深度,结合相机内参恢复三维位置。适合无法配置 LiDAR 的低成本机器人场景。
ImVoxelNet(2022):将多视角图像特征反投影到三维体素网格中,在三维空间直接检测。充分利用多视角的几何约束,无需 LiDAR 即可实现较好的三维检测效果。
BEVDepth(2022):引入显式的深度监督(Depth Supervision),使网络在 Lift-Splat 框架中更精确地估计每个像素的深度概率分布,从而更准确地将图像特征展开到 BEV 空间。
多模态融合方法
融合激光雷达点云与相机图像可以兼顾深度精度和语义丰富性:
BEVFusion(2022,MIT 与 Horizon Robotics 分别提出):将激光雷达点云特征和相机图像特征统一投影到鸟瞰图(BEV)空间后进行融合,再在 BEV 空间执行检测和分割。
- 相机分支:Lift-Splat-Shoot 范式将图像特征提升到 BEV 空间
- LiDAR 分支:PointPillars 或 VoxelNet 提取 BEV 特征
- 融合层:通道拼接 + 卷积融合两路 BEV 特征
- BEV 空间融合避免了透视畸变,便于多传感器对齐
鸟瞰图(BEV)的概念:将三维场景从正上方俯视投影到二维平面,x 轴为左右,y 轴为前后,物体在 BEV 图中呈现俯视轮廓。自动驾驶中 BEV 感知已成为主流范式,因为下游的规划模块也在 BEV 坐标系中工作。
机器人拣选中的三维检测
在仓储机器人和工业机械臂场景中,三维检测用于确定待抓取物体的六自由度(6-DoF)位姿,包括位置 和旋转(滚转 roll、俯仰 pitch、偏航 yaw)。常用流程:
- 使用深度相机(RGB-D,如 Intel RealSense、Azure Kinect)获取彩色图像和深度图;
- 用 YOLOv8 等检测器在 RGB 图中定位目标,获得二维边界框;
- 将边界框内的深度像素转换为三维点云;
- 对点云拟合三维边界框或使用 ICP(迭代最近点)配准 CAD 模型,得到精确位姿;
- 将位姿发布给机械臂运动规划模块执行抓取。
开放词汇目标检测 (Open-Vocabulary Detection)
零样本检测
传统检测模型只能检测训练集中出现过的固定类别集合。开放词汇目标检测(Open-Vocabulary Detection,OVD)旨在使模型能够检测任意由自然语言描述的类别,无需针对新类别收集标注数据重新训练,即零样本检测(Zero-Shot Detection)。
这一能力对机器人尤为重要:操作人员可以用自然语言指令描述目标("拿起红色杯子"),机器人无需预先知道"红色杯子"的训练样本即可定位并抓取。
基于 CLIP 的检测器
CLIP(Contrastive Language-Image Pre-training)通过大规模图像-文本对比学习,使视觉编码器和文本编码器嵌入到同一语义空间中。基于 CLIP 的检测器利用这一对齐的嵌入空间实现开放词汇识别:
OWL-ViT(Open-World Localization with Vision Transformers,Google,2022):将 CLIP 的 ViT 图像编码器与轻量级检测头结合,支持用文本或参考图像 patch 描述目标类别,实现零样本检测;既可用文本描述("a yellow cup")也可用参考图像(one-shot)定位目标。
GroundingDINO(2023):将 DINO 检测器与 BERT 文本编码器结合,通过跨模态注意力实现文本短语与图像区域的精确对应,支持任意短语定位(Phrase Grounding)。与 SAM(Segment Anything Model)组合使用,可实现"文本描述 → 分割掩码"的完整流程。
OWLv2(2023):OWL-ViT 的升级版,采用自训练(Self-Training)策略在大规模检测数据上迭代训练,在零样本检测基准上显著超越 OWL-ViT,同时保持开放词汇能力。
机器人语言引导操作示例
# 使用 GroundingDINO 实现语言引导目标定位
from groundingdino.util.inference import load_model, predict
import cv2
model = load_model("groundingdino_swint_ogc.pth")
image = cv2.imread("scene.jpg")
# 用自然语言描述目标(支持多目标,用 ". " 分隔)
text_prompt = "red cup . blue screwdriver . metal bolt"
boxes, logits, phrases = predict(
model=model,
image=image,
caption=text_prompt,
box_threshold=0.35,
text_threshold=0.25
)
# boxes 中包含与每个短语对应的边界框
# 后续可将框内点云送入位姿估计模块
print(f"检测到 {len(boxes)} 个目标:{phrases}")
结合 SAM(Segment Anything Model)实现从文本到分割掩码的完整流程:
# GroundingDINO + SAM 完整管线(伪代码)
from segment_anything import SamPredictor, sam_model_registry
# 1. GroundingDINO 定位目标框
boxes, _, _ = predict(model, image, text_prompt="red cup", ...)
# 2. SAM 生成精细掩码
sam = sam_model_registry["vit_h"](checkpoint="sam_vit_h.pth")
predictor = SamPredictor(sam)
predictor.set_image(image)
for box in boxes:
masks, _, _ = predictor.predict(box=box.numpy(), multimask_output=False)
# masks 为像素级二值掩码,可用于精确位姿估计
工业缺陷检测应用
典型场景
工业视觉检测(Industrial Visual Inspection)是目标检测最重要的落地场景之一:
- PCB 缺陷检测:检测印刷电路板上的短路、断路、针孔、毛刺等缺陷;
- 焊缝质量检测:识别焊缝中的气孔、裂纹、夹渣等缺陷;
- 瓶盖/包装检测:检测食品饮料生产线上的瓶盖破损、标签缺失等问题;
- 纺织品缺陷检测:检测布料的跳线、污渍、破洞。
类别不平衡问题
工业缺陷数据集的核心挑战是严重的类别不平衡:正常样本数量远多于缺陷样本(比例可达 1000:1 乃至更高)。应对策略:
- Focal Loss:降低易分类样本的损失权重,使模型聚焦于难分类的缺陷样本;
- 过采样/欠采样:对缺陷样本重复采样(过采样),或对正常样本随机丢弃(欠采样);
- 数据增强:对少量缺陷样本进行旋转、翻转、亮度变换等增强,扩充数据量;
- 合成数据:使用 GAN(生成对抗网络)或扩散模型生成逼真的缺陷图像,填充样本不足。
异常检测方法
当缺陷样本极度稀少(甚至没有)时,可采用异常检测(Anomaly Detection)思路:只用正常样本训练模型学习正常分布,测试时偏离分布的区域被判定为异常:
PatchCore(2022):提取正常图像的局部 Patch 特征构建记忆库(Memory Bank),推理时计算测试 Patch 与记忆库的最近邻距离作为异常分数;无需任何缺陷样本,在 MVTec AD 数据集上达到 99.1% AUROC。
# PatchCore 推理流程(简化示意)
import torch
import torchvision.models as models
from sklearn.neighbors import NearestNeighbors
# 1. 提取正常训练样本特征
backbone = models.wide_resnet50_2(pretrained=True)
# ... 逐层提取中间特征
# 2. 构建记忆库(使用贪婪核心集近似减小库大小)
memory_bank = coreset_reduction(all_features, ratio=0.1)
nbrs = NearestNeighbors(n_neighbors=1).fit(memory_bank)
# 3. 推理:计算测试样本最近邻距离
def infer(test_img):
features = extract_features(test_img)
distances, _ = nbrs.kneighbors(features)
anomaly_score = distances.max() # 最大距离作为异常分数
return anomaly_score
CutPaste(2021):通过随机裁剪并粘贴图像局部来自监督地生成"伪缺陷",训练分类器区分正常和伪缺陷,从而学习正常特征表示。
SimpleNet(2023):在 PatchCore 基础上引入可学习的特征适配层和简单的判别网络,进一步提升异常检测精度并降低推理延迟,适合工业实时部署。
MVTec AD 数据集
工业异常检测领域最常用的基准数据集,由 MVTec Software GmbH 发布,包含 15 个类别(螺栓、皮革、瓷砖等工业物品),提供像素级异常掩码标注,常用 AUROC 和 PRO(Per-Region Overlap)指标评估。
| 类别 | 正常训练图数 | 缺陷类型数 | 测试图数 |
|---|---|---|---|
| 螺栓 (Bolt) | 209 | 3 | 114 |
| 瓶子 (Bottle) | 209 | 3 | 83 |
| 皮革 (Leather) | 245 | 5 | 92 |
| 木材 (Wood) | 247 | 5 | 60 |
| ... | ... | ... | ... |
| 合计 | 3629 | 73 | 1725 |
主流方法在 MVTec AD 上的 AUROC(图像级)对比:
| 方法 | 年份 | AUROC (平均) | 特点 |
|---|---|---|---|
| GaussianAD | 2020 | 86.8% | 特征空间高斯建模 |
| CutPaste | 2021 | 96.1% | 自监督伪缺陷生成 |
| PatchCore | 2022 | 99.1% | 记忆库 + 最近邻 |
| SimpleNet | 2023 | 99.6% | 可学习判别网络 |
| UniFormaly | 2023 | 99.8% | 统一异常检测框架 |
参考资料
- Lang, A. H., et al. (2019). PointPillars: Fast Encoders for Object Detection from Point Clouds. CVPR.
- Yin, T., et al. (2021). Center-based 3D Object Detection and Tracking. CVPR.
- Liu, Z., et al. (2022). BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird's-Eye View Representation. ICRA 2023.
- Minderer, M., et al. (2022). Simple Open-Vocabulary Object Detection with Vision Transformers. ECCV.
- Liu, S., et al. (2023). Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection. arXiv.
- Roth, K., et al. (2022). Towards Total Recall in Industrial Anomaly Detection. CVPR.
- Li, C. L., et al. (2023). SimpleNet: A Simple Network for Image Anomaly Detection and Localization. CVPR.
- MVTec Anomaly Detection Dataset, MVTec Software GmbH.
- OpenPCDet: Open-source 3D Object Detection Toolbox
- GroundingDINO GitHub