SLAM中常用到的评价指标

本文详细介绍了TUM RGBD和KITTI数据集的评价指标RPE(相对位姿误差)和ATE(绝对轨迹误差),讨论了它们的计算方法、含义及在不同场景的应用。同时,比较了RPE和ATE的区别,以及如何在实际使用中通过EVO工具进行评估和解读结果。

主要是想整理一下关于tum rgbd数据集和kitti数据集的评价指标,之后比较结果不能只看数值大小,还要非常清楚背后的含义。

一. 从TUM数据集出发

前提假设:
给出的位姿估计值为 P 1 . . . P n ∈ S E ( 3 ) P_1 ... P_n \in SE(3) P1...PnSE(3), 真值为 Q 1 . . . Q n ∈ S E ( 3 ) Q_1 ... Qn \in SE(3) Q1...QnSE(3), 下标代表时间t(或帧),这里假设估计位姿和真实位姿各帧时间已对齐,总帧数相同。

1. 相对位姿误差RPE(relative pose error)

用来评价轨迹中相隔固定时间的局部准确度, Δ \Delta Δ表示时间间隔,也可以转变成frame的间隔。 P i P_i Pi是估计的位姿,是一个4*4的矩阵,因此这个相对位姿误差是包括了旋转和平移的。
E i = ( Q i − 1 Q i + Δ ) − 1 ( P i − 1 P i + Δ ) E_i = (Q_i^{-1}Q_{i+\Delta})^{-1} (P_i^{-1} P_{i+ \Delta}) Ei=(Qi1Qi+Δ)1(Pi1Pi+Δ)

为什么要有一个指标来计算相隔固定时间差的两帧间位姿“差”的精度呢?
理解:里程计本身就是为了估计相邻帧之间的定位精度,举例子就是为了估计人走一步的距离(类似于位姿“差”),RPE就是为了估计这人走一步的精度是怎么样的。

RMSE
实验比较中写的RMSE(root mean squared error),是平方后求均值再开根号,其中 m = n − Δ m=n - \Delta m=nΔ
R M S E ( E 1 : n , Δ ) : = ( 1 m ∑ i = 1 m ∥ t r a n s ( E i ) ∥ 2 ) 1 2 RMSE(E_{1:n}, \Delta) := (\frac{1}{m} \sum_{i=1}^m \Vert trans(E_i) \Vert ^2 )^{\frac{1}{2}} RMSE(E1:n,Δ):=(m1i=1mtrans(Ei)2)21

也有人不用RMSE,直接使用平均值、甚至中位数来描述相对误差情况。 需要注意的是,RPE包含了两部分的误差,分别是旋转误差和平移误差,通常使用平移误差进行评价已足够,但如果需要,旋转角的误差也可以使用相同的方法进行统计。

举例

  • 对于匹配相邻帧的视觉里程计系统, Δ = 1 \Delta=1 Δ=1是直觉的选择,算出来的 R M S E ( E 1 : n ) RMSE(E_{1:n}) RMSE(E1:n)就能给出每帧的偏移;如果对于一个序列记录频率是30Hz的系统, Δ = 30 \Delta=30 Δ=30时就相当于是在算每一秒的偏移。
  • 如果直接取最大值 Δ = n \Delta=n Δ=n, 就代表着直接去比较起点和终点,这样度量就会产生误导性,因为他对起始时的旋转误差的惩罚比终点时更大(这里个人的理解就是,相同的旋转误差,如果发生在起点附近,对最后的偏移影响会更大,因为后续所有的位姿都会被影响。TUM一个数据集随便就是几千帧,差别肯定会很明显)。所以说,为了避免这种不一致的影响,就会来平均所有可能的 Δ \Delta Δ值的结果

实际情况中,我们发现对 Δ \Delta Δ的选取有多种选择,为了能综合衡量算法表现,我们可以计算遍历所有 Δ \Delta Δ的RMSE的平均值:
R M S E ( E 1 : n , Δ ) : = 1 n ∑ Δ = 1 n R M S E ( E 1 : n , Δ ) RMSE(E_{1:n}, \Delta) := \frac{1}{n} \sum_{\Delta=1}^n RMSE(E_{1:n}, \Delta) RMSE(E1:n,Δ):=n1Δ=1nRMSE(E1:n,Δ)
但这样计算复杂度非常高,很耗时间,所以最终在TUM的工具中,通过计算固定数量的RPE样本计算一个估计值作为结果。

*这里的trans是指的平移部分,也可以计算旋转的。 怎么对3*1的平移求模长??对两种“位姿差”求

2. 绝对轨迹误差ATE(absolute trajectory error)

把跑出来的轨迹直接和gt轨迹计算误差,可以非常直观地反应算法精度和轨迹全局一致性。但是,因为估计位姿和groundtruth通常不在同一坐标系中,所以要先将两者对齐:
1)对于双目SLAM和RGB-D SLAM,尺度统一,因此我们需要通过最小二乘法计算一个从估计位姿到真实位姿的转换矩阵 S ∈ S E ( 3 ) S \in SE(3) SSE(3)
2)对于单目相机,具有尺度不确定性,我们需要计算一个从估计位姿到真实位姿的相似转换矩阵 S ∈ S i m ( 3 ) S \in Sim(3) SSim(3)。 因此第i帧的ATE定义如下:
F i : = Q i − 1 S P i F_i := Q_i^{-1} S P_i Fi:=Qi1SPi

与RPE相似,建议使用RMSE统计ATE:
R M S E ( F 1 : n , Δ ) : = ( 1 m ∑ i = 1 m ∥ t r a n s ( F i ) ∥ 2 ) 1 2 RMSE(F_{1:n}, \Delta) := (\frac{1}{m} \sum_{i=1}^m \Vert trans(F_i) \Vert ^2 )^{\frac{1}{2}} RMSE(F1:n,Δ):=(m1i=1mtrans(Fi)2)21
当然,使用平均值、中位数等来反应ATE都可以。 综上,我们需要注意的是,RPE误差包含了translation和rotation两部分的误差,而ATE只包含translation的误差(论文里又说ATE会间接捕捉到旋转误差,因为旋转误差也可能体现在错误的平移上),二者具有强烈的相关性,却也不尽相同。我们仍需结合实际,选择合适的指标进行算法评价。
论文中说道:
用所有可能的 Δ \Delta Δ求平均值得到的RPE也可以用来评估轨迹的全局误差。这时的RPE总会比ATE稍微大一点(如果等于的化,就说明没有旋转误差),下面还给出了图示:
在这里插入图片描述

在检索时看到答主大佬评论区的几个问答(供参考):
Q1:在TUM格式的位姿结果,当相机不动即每帧真值的平移和旋转都不变(统一设为0,0,0,0,0,0,1),此时evo还可以评估ape吗?跑的时候会出现[ERROR]“Degenerate covariance ranke,Umeyama alignment is not possible”
A: 这个错误是进行轨迹对齐的时候发生的,因为没有足够的约束无法求解。可以试试去掉-a选项。默认not align即可。

Q2:现实slam 时间与Ground truth 都是不同的,而且帧数也不同。请问有什么方法来对齐时间戳?
A:EVO本身提供了时间戳对齐的选项,前提是要有时间戳。像ORB SLAM跑出的单目结果,轨迹里只包含关键帧位姿,并且尺度也不一致,可以加-as选项,将估计的轨迹做一个7DoF变换与groundtruth对齐。

Q3:用evo评估轨迹精度(使用旋转对齐和尺度缩放),会导致轨迹起点与真值起点不一样,请问这样算出的APE科学吗(其他几种评估算法大都将起点设置为与真值一致)?还是说evo的评价角度不一样:侧重于评价整体轨迹趋势?
A:其实学届对这个问题也有争议,有一个观点认为只拿前几帧的数据与真值对齐(相当于你说的把起点对齐)更符合判断轨迹误差的直觉,但这样通常会使得后面的轨迹偏移的过大,反而不好比较整体轨迹的走向或模式。我认为只要保证使用的评价标准一致,那么这个指标还是可以提现出算法的表现优劣。

Q4:orbslam2的stereo对应的三个指标RPE(%) RRE(度/100m) ATE(m)前面两个怎么通过evo的结果得到呢? (这个问题和kitti的评价标准有关)
A:https://blog.csdn.net/xiaoxiaoyikesu/article/details/108963108#t3

二. 关于evo的实际使用

这里记录几条实际使用过程中经常用到的点。

1. 常用数据格式

有tum,kitti,euroc, 具体的说明参考https://github.com/MichaelGrupp/evo/wiki/Formats

2. 常用指令

1) 轨迹可视化

evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz

2)APE

在evo中,有关于APE的指令,注意evo_ape默认情况下计算的是ATE(相当于默认加了参数-r tran_part),如果想计算APE,可以加上参数-r full

evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode xz
evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode xz --save_results results/ORB.zip

3) RPE

evo_rpe tum fr2_desk_groundtrutr2_desk_ORB.txt -va --plot --plot_mode xyz

4) evo_res

先用evo_ape得到zip,再使用evo_res得到可视化的结果

3. 如何与论文中结果对应

下面是dynaSLAM论文中的结果:
在这里插入图片描述ATE[m]: 这个使用evo_ape 默认参数,得到的rmse就是结果了
对于另外两个指标,可以用KITTI-odometry-tool来计算,定义可以参考论文VSO: Visual Semantic Odometry, 其他两个指标表示:
在这里插入图片描述
RPE[%]: 每100m的平均相对translation error(m) (理解:所以单位就变成了百分之一,成了一个百分号)
RRE[deg/100m]: 每100m的平均相对rotation error(degree)。
可以先利用EVO算出轨迹整体RPE,分别为translation和rotation,然后除以ground truth的里程(单位:百米),得到最终结果。

可以使用KITTI_odometry_evaluation_tool得到结果:
在这里插入图片描述这里是RRE[deg/m],所以最后一个值要乘以100才能变为RRE[deg/100m]。
* kitti提供的evaluation工具源码与EVO或者TUM数据集工具的不同之处在于:它是将距离[100 200 …800](m) 作为计算RPE所需两帧之间的interval,而不是时间或帧数,并且将单个计算结果都除以了长度,而EVO则没有。另外EVO的interval采样更丰富,所以理论上讲,EVO的RPE结果除以100m,应该与KITTI evaluation tool得到的结果接近。


参考:
1.论文 A Benchmark for the Evaluation of RGB-D SLAM Systems
2.https://zhuanlan.zhihu.com/p/105428199
3.https://blog.csdn.net/xiaoxiaoyikesu/article/details/108963108#t3

相关推荐:

1.单目ORB-SLAM2 跑KITTI数据集的时候怎么做到和ground truth对齐呢?https://www.zhihu.com/question/56510863
2.除了evo还有一个评估工具rpg_trajectory_evaluation:https://github.com/uzh-rpg/rpg_trajectory_evaluation
3.增加对误差评价的理解:A Tutorial on Quantitative Trajectory Evaluation for Visual(-Inertial) Odometry

<think>好的,我现在需要回答用户关于视觉SLAM稠密建图评估指标的问题。首先,我得回忆一下相关的知识,确保自己理解正确。视觉SLAM的稠密建图评估通常涉及几个方面,比如重建精度、完整度、一致性,还有实时性和资源消耗。用户提到可能需要技术标准或学术资料,所以应该引用一些常见的指标和方法。记得之前看到过一些论文中使用的方法,比如深度图比较、点云配准误差,还有轨迹精度评估。比如引用[1]中提到的深度估计和深度图真值评估,这可能与稠密重建的精度有关。另外,引用[2]中的EVO工具用于轨迹评估,但用户问的是稠密建图,所以可能需要区分轨迹评估和地图评估。 接下来,我需要组织这些指标,分点说明。每个指标需要解释清楚,比如绝对轨迹误差(ATE)和相对位姿误差(RPE)通常用于轨迹评估,但地图的评估可能用点云对比,比如均方误差(MSE)、Chamfer距离等。还有完整度,即重建的表面覆盖程度,以及一致性,比如在不同光照或视角下的稳定性。 还需要考虑是否有标准的数据集和评估协议,比如KITTI、TUMRGB-D等,这些数据集提供了真值数据,可以用于比较。比如引用[1]中的KITTI特征分割和深度估计设置,可能作为评估环境。另外,稠密重建可能会用到体素精度、召回率等指标。不过要注意,用户的问题可能混淆了轨迹评估和地图评估,需要明确区分。比如EVO工具主要用于轨迹,而稠密地图可能需要其他工具如CloudCompare进行点云对比。还要检查是否有遗漏的指标,比如实时性指标(帧率、处理时间)和资源消耗(内存使用),这些对于实际应用也很重要。此外,语义分割的准确性如果涉及语义建图的话,但用户问的是稠密建图,可能不需要涉及语义部分。 最后,确保回答结构清晰,分点列出每个评估指标,并适当引用提供的资料。比如引用[1]中的深度图评估和引用[2]中的轨迹评估工具,但需指出它们与稠密建图的关系。可能需要指出虽然引用中的例子是轨迹评估,但稠密地图的评估另有方法,如点云对比。</think>视觉SLAM稠密重建的评估指标主要分为几何精度、完整度、一致性及性能效率四类,具体如下: ### 一、几何精度指标 1. **绝对轨迹误差(ATE)** 通过比较重建轨迹与真值轨迹的全局对齐误差,反映整体位姿估计精度。常用EVO工具计算,例如: $$ATE = \sqrt{\frac{1}{n}\sum_{i=1}^{n} \|trans(T_{est,i}^{-1}T_{gt,i})\|^2}$$ 其中$T_{est,i}$和$T_{gt,i}$分别为估计位姿和真值位姿[^2]。 2. **点云配准误差** 将重建点云与激光雷达或高精度扫描仪获取的真值点云对齐,计算对应点之间的均方误差(MSE)或Chamfer距离。例如引用[1]中提到的KITTI数据集深度图真值对比方法。 ### 二、完整度指标 1. **表面覆盖率** 统计重建模型覆盖真值表面区域的比例,通常以体素或网格为单位计算召回率: $$Recall = \frac{TP}{TP+FN}$$ TP为正确重建区域,FN为未覆盖区域。 2. **空洞率分析** 检测重建模型中因遮挡或纹理缺失导致的未重建区域大小,常通过深度图补全率评估[^1]。 ### 三、一致性指标 1. **跨帧一致性误差** 检查同一空间点在不同帧中的重建位置偏差,反映系统对动态环境的鲁棒性。 2. **光照不变性** 评估重建模型在不同光照条件下的几何稳定性,常用合成数据集中多光照场景测试。 ### 四、性能效率指标 1. **实时性** 帧处理速度(FPS)及端到端延迟,例如ORB-SLAM2要求≥30FPS实时性[^2]。 2. **资源消耗** GPU显存占用、CPU利用率及存储开销,尤其针对大规模场景重建。 ### 五、标准化评估协议 - **数据集基准**:KITTI(室外)、TUM RGB-D(室内)等提供轨迹与深度真值[^1][^2] - **工具链**:EVO(轨迹评估)、CloudCompare(点云对比)、MVSBench(多视图重建基准)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值