EmbodiedScan评估指标与匈牙利匹配:AP、AR、mIoU及损失函数体系全解析
【免费下载链接】EmbodiedScan[CVPR 2024 & NeurIPS 2024] EmbodiedScan: A Holistic Multi-Modal 3D Perception Suite Towards Embodied AI项目地址: https://gitcode.com/gh_mirrors/em/EmbodiedScan
EmbodiedScan评估指标是如何设计出来的?训练一个多模态3D感知模型,你不仅要看懂AP、AR、mIoU这些数字,还要理解背后的匈牙利匹配与损失函数体系。作为 CVPR 2024 与 NeurIPS 2024 收录的开源项目,EmbodiedScan 提供了一套完整的多模态 3D 感知套件,覆盖 3D 检测、视觉接地与占用预测三大任务,每一类任务都有独立且严谨的评估方案。本文将带你逐层拆解这套评估体系,让你从源码层面彻底读懂这些指标的含义与计算方式。
一图看懂:EmbodiedScan 的三大评估器
EmbodiedScan 的评估逻辑遵循 OpenMMLab 生态的BaseMetric设计,评估流程高度统一:先由process()逐批收集预测与真值,再由compute_metrics()汇总计算指标。整套体系由三个评估器构成,分别对应三大感知任务:
| 评估器 | 所在模块 | 输出指标 | 适用任务 |
|---|---|---|---|
| IndoorDetMetric | det_metric.py | mAP、mAR | 3D 目标检测 |
| GroundingMetric | grounding_metric.py | 分组准确率 | 3D 视觉接地 |
| OccupancyMetric | occupancy_metric.py | 每类 IoU 与 mIoU | 语义占用预测 |
下面逐一说明这三套评估指标的细节。
3D 目标检测指标:AP 与 AR 的计算全流程
对于 3D 检测任务,EmbodiedScan 默认在IoU 阈值 0.25 和 0.5两档下计算指标。核心逻辑封装在 indoor_eval.py 中,整体流程可分为四步:
- 按类别拆分:将预测框与真值框按类别分别组织,每个类别独立计算。
- 计算 IoU:预测框与真值框之间计算 3D 交并比,预测框会先做防异常处理——过于细长的薄框会被 clamp 到最小尺寸,避免数值异常。
- 排序判定:按置信度降序排列所有预测,逐条判定 TP(命中真值)与 FP(误检)。
- 绘制 PR 曲线:通过累加 TP/FP 得到 Precision 与 Recall 曲线,再用
average_precision()计算曲线下面积得到 AP。
mAP 与 mAR 的含义差异
- mAP(平均精度均值):对所有类别的 AP 取平均,衡量定位+分类的综合精度,是检测任务的核心指标。
- mAR(平均召回率均值):取每类召回曲线末端的最大值再平均,衡量模型找到目标的能力,对漏检更敏感。
值得一提的是,EmbodiedScan 还支持按classes_split将 284 个类别划分为head / common / tail三组分别统计 mAP 与 mAR,便于分析模型在常见类与罕见类上的表现差异。这一设计对长尾分布下的 3D 感知研究非常有价值。
视觉接地评估指标:按难度分组的准确率
语言接地任务(Visual Grounding)评估的是"给定一句自然语言指令,模型能否定位到正确目标"。EmbodiedScan 的评估逻辑与检测不同:它不计算 AP,而是对每条查询计算是否命中——取得分最高的前 10 个预测框,若其中任意一个与真值框的 IoU 超过阈值则视为命中。
更精妙的是,grounding_metric.py 会利用标注信息将结果按多个维度分组统计:
- Easy / Hard:按查询难度分组
- View-Dep / View-Indep:按目标是否依赖观察视角分组
- Unique / Multi:按目标是否唯一(是否存在同类别干扰物)分组
- Overall:整体准确率
这种分组方式让研究者能快速定位模型在哪种困难场景下失效,是诊断模型能力短板的有力工具。
占用预测评估指标:mIoU 的逐体素计算
占用预测任务要求模型预测每个体素属于哪个语义类别(含"空"),共 80 类。评估时,occupancy_metric.py 采用逐类统计TP / 预测总数 / 真值总数的方式:
- 真值占用被展开为稠密体素标签,不可见区域标记为 255 并排除在评估外。
- 对每一类分别统计交集与并集,计算IoU = TP / (预测数 + 真值数 − TP)。
- 所有类别的 IoU 取平均得到mIoU,其中"空"类别的 IoU 被称为几何 IoU,反映场景结构重建的精度。
对于 80 类的语义占用,逐类 IoU 表格能清晰展示模型对家具、墙体等不同类别结构的感知质量。
匈牙利匹配:查询与真值的一对一分配
现代 DETR 风格检测器不再使用锚框与 NMS,而是让一组**可学习查询(queries)直接预测目标。但训练时需要明确"哪个查询对应哪个真值",这就是匈牙利匹配(Hungarian Matching)**的用武之地。
EmbodiedScan 的实现位于 hungarian_assigner.py,其核心是HungarianAssigner3D类,匹配过程分四步:
- 默认将所有预测分配为 -1(待定)。
- 计算预测与真值之间的加权代价矩阵。
- 在 CPU 上用
scipy.optimize.linear_sum_assignment求解最优一对一匹配,实现全局最小代价。 - 匹配上的预测标记为前景(分配真值索引),其余标记为背景(0)。
由于预测数量通常远多于真值,未匹配的查询会被当作背景参与分类损失,这种设计保证了端到端训练的高效性。
三种匹配代价如何组合
匹配代价由 match_cost.py 中的三类代价加权求和得到:
- FocalLossCost:分类代价,用 Focal Loss 形式衡量预测类别与真值类别的差异(alpha=0.25, gamma=2)。
- BBox3DL1Cost:回归代价,计算 9 维 3D 框参数(中心、尺寸、旋转角)之间的 L1 距离。
- IoU3DCost:几何代价,直接用 3D IoU 的负值作为代价,重叠越大代价越小。
三者的加权和构成最终代价矩阵,权重在配置文件中可调。这种"分类 + 回归 + 几何"的组合让匹配同时兼顾语义与空间位置的一致性。
损失函数体系:四大模块协同优化
匹配完成后,训练损失由多个模块共同构成,EmbodiedScan 的损失体系主要包含以下几类:
1. 旋转框 IoU 损失:直接优化几何重叠
rotated_iou_loss.py 中的RotatedIoU3DLoss采用1 − IoU的形式,通过可微的diff_iou_rotated_3d算子直接优化预测框与真值框的空间重叠度,比纯 L1 回归更能反映几何质量。
2. 角点 Chamfer 距离损失:约束框形状
chamfer_distance.py 提供了ChamferDistance与BBoxCDLoss。后者先将 3D 框转换为 8 个角点,再计算两组角点之间的 Chamfer 距离(支持 g8 全体或 g4 分组两种模式),对框的尺寸与朝向约束更强。
3. 场景类亲和损失:占用预测的利器
occ_loss.py 实现了两个专为语义占用设计的损失:
- geo_scal_loss:只区分"空/非空",优化几何结构的 Precision、Recall 与 Specificity。
- sem_scal_loss:逐类别计算场景类亲和度,同时兼顾精确率、召回率与特异性。
4. 分类与接地损失
检测与接地任务还配合 Focal Loss 分类损失,以及面向文本-框对齐的 Token 匹配代价(TokenMapCost),共同构成完整的梯度信号。
总结:从指标到损失的一体化设计
回顾全文,EmbodiedScan 的评估与训练体系呈现出高度自洽的设计:评估端用 AP、AR、mIoU 和分组准确率从多维度衡量模型;训练端用匈牙利匹配完成预测与真值的一对一分配,再用 IoU 损失、Chamfer 距离损失与场景类亲和损失驱动优化。理解了这套体系,你不仅会读指标,更能读懂指标背后的每一个设计决策。
如果你想亲手跑通评估流程,可以参考 tools/test.py 与 tools/eval_script.py,配合 det_metric.py 中默认的 IoU 阈值配置,即可在自己的数据集上复现这套评估流程。希望这篇 EmbodiedScan评估指标解析能帮助你在 3D 感知研究的道路上少走弯路!
【免费下载链接】EmbodiedScan[CVPR 2024 & NeurIPS 2024] EmbodiedScan: A Holistic Multi-Modal 3D Perception Suite Towards Embodied AI项目地址: https://gitcode.com/gh_mirrors/em/EmbodiedScan
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考