视觉SLAM基础:算法精度评价指标(ATE、RPE)

点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

作者:三无马尔布鲁

链接:https://zhuanlan.zhihu.com/p/105428199

本文转载自知乎,作者已授权,未经许可请勿二次转载。

视觉SLAM基础:算法精度评价指标(ATE、RPE)

update:加入了EVO的介绍。

1. 前言

  • 当我们需要评估一个SLAM/VO算法的表现时,可以从时耗、复杂度、精度多个角度切入,其中对精度的评价是我们最关注的,这个过程中不可避免会遇到两个精度指标ATERPE。这两个evaluation metrics最早是在TUM数据集benchmark中定义的,应用非常广泛。

  • 介绍前,先对定义一下公式标注:算法估计位姿:

  • 真实位姿: 下标代表时间t(或帧),这里我们假设估计位姿和真实位姿各帧时间已对齐,总帧数相同。 表示相隔时间time interval。

2. RPE:relative pose error 相对位姿误差

相对位姿误差主要描述的是相隔固定时间差 两帧位姿差的精度(相比真实位姿),相当于直接测量里程计的误差。因此第i帧的RPE定义如下:

已知总数n与间隔 的情况下,可以得到 个RPE,然后我们可以用均方根误差RMSE统计这个误差,得到一个总体值:

其中 代表取相对位姿误差中的平移部分translation。当然也有人不用RMSE,直接使用平均值、甚至中位数来描述相对误差情况。需要注意的是,RPE包含了两部分的误差,分别是旋转误差和平移误差,通常使用平移误差进行评价已经足够,但是如果需要,旋转角的误差也可以使用相同的方法进行统计。到这一步,我们基本可以从RMSE值的大小来评价算法的表现,然而实际情况中,我们发现对 的选取有多种选择,为了能综合衡量算法表现,我们可以计算遍历所有 的RMSE的平均值:

但这样新的问题又出现了,这样的计算复杂度非常高,很耗时间,因此TUM在自己给定的工具中,通过计算固定数量的RPE样本计算一个估计值作为最终结果。

3. ATE:absolute trajectory error 绝对轨迹误差

  • 绝对轨迹误差是估计位姿和真实位姿的直接差值,可以非常直观地反应算法精度和轨迹全局一致性。需要注意的是,估计位姿和groundtruth通常不在同一坐标系中,因此我们需要先将两者对其:对于双目SLAM和RGB-D SLAM,尺度统一,因此我们需要通过最小二乘法计算一个从估计位姿到真实位姿的转换矩阵 ;对于单目相机,具有尺度不确定性,我们需要计算一个从估计位姿到真实位姿的相似转换矩阵 。因此第i帧的ATE定义如下:

与RPE相似,建议使用RMSE统计ATE

当然,使用平均值、中位数等来反应ATE亦可,现在很多evaluation工具会将RMSE、Mean、Median都给出。综上,我们需要注意的是,RPE误差包含了translation和rotation两部分的误差,而ATE只包含translation的误差(从二者的全称中也可以看出),二者具有强烈的相关性,却也不尽相同。我们仍需结合实际,选择合适的指标进行算法评价。

4. 工具:EVO

这里推荐一个方便全能的evaluation工具。这里贴出github链接:

EVO:Python package for the evaluation of odometry and SLAM

4.1 安装

系统:ubuntu,首先确保系统安装了Python,然后根据需要可以选择性安装PyQt5 / PyQt4 ROS,当然, 不装也不会影响基本功能。

1. 直接从pip安装。

pip install evo --upgrade --no-binary evo

2. 源代码安装

git clone [email protected]:MichaelGrupp/evo.git
cd evo
pip install --editable . --upgrade --no-binary evo

3. 输入下面这个命令,如果成功会有响应。

evo_ate -h

视觉SLAM基础:算法精度评价指标(ATE、RPE)_第1张图片

4.2 usage

可以先用evo仓库中自带的数据尝试

1. 轨迹可视化

cd test/data
evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz

视觉SLAM基础:算法精度评价指标(ATE、RPE)_第2张图片

2.  APE

evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode xz

视觉SLAM基础:算法精度评价指标(ATE、RPE)_第3张图片

3. RPE

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

视觉SLAM基础:算法精度评价指标(ATE、RPE)_第4张图片

命令参数较多,每个命令都有比较详细的帮助,多用 --help,如:evo_ape kitti --help

这里列举了一些常见选项的含义:

视觉SLAM基础:算法精度评价指标(ATE、RPE)_第5张图片

4.3 metrics解析

上文提到pose error包含平移和旋转两部分误差,在evo设置输出误差项对应的option为-r/–pose_relation,并有如下模式:

视觉SLAM基础:算法精度评价指标(ATE、RPE)_第6张图片

其中trans_part很容易理解,但是无单位的full和rot_part的误差指标比较特殊,使用了矩阵的二范数:

其中 表示groundtruth和estimate位姿之间的变换矩阵, 为单位阵,这里用了矩阵的范数表示某种抽象的空间距离,从而用来度量误差,因此没有单位(仅供参考,这一块不确定,还行批评指正)。

同理rot_part的误差:

相比较而言,用平移误差单位为m,旋转误差单位可以是度或弧度,更容易理解。从旋转矩阵 到旋转角的转换使用了罗德里格斯公式(旋转向量的二范数为旋转角的大小)。

反推:

这里参考了《SLAM十四讲》中的内容。

#附EVO metric的相关代码
if self.pose_relation == PoseRelation.translation_part:
    # E is an array of position vectors only in this case
    self.error = [np.linalg.norm(E_i) for E_i in self.E]
elif self.pose_relation == PoseRelation.rotation_part:
    self.error = np.array([
        np.linalg.norm(lie.so3_from_se3(E_i) - np.eye(3))
        for E_i in self.E])
elif self.pose_relation == PoseRelation.full_transformation:
    self.error = np.array(
        [np.linalg.norm(E_i - np.eye(4)) for E_i in self.E])
elif self.pose_relation == PoseRelation.rotation_angle_rad:
    self.error = np.array(
        [abs(lie.so3_log(E_i[:3, :3])) for E_i in self.E])
elif self.pose_relation == PoseRelation.rotation_angle_deg:
    self.error = np.array([
        abs(lie.so3_log(E_i[:3, :3])) * 180 / np.pi for E_i in self.E
    ])
else:
    raise MetricsException("unsupported pose_relation")

参考

1.Sturm, Jürgen, et al. "A benchmark for the evaluation of RGB-D SLAM systems." 2012 IEEE/RSJ International Conference on Intelligent Robots and Systems. IEEE, 2012.

2.evo https://github.com/MichaelGrupp/evo

3.高翔. 视觉 SLAM 十四讲: 从理论到实践. 电子工业出版社, 2017.

推荐阅读

吐血整理|3D视觉系统化学习路线

那些精贵的3D视觉系统学习资源总结(附书籍、网址与视频教程)

超全的3D视觉数据集汇总

大盘点|6D姿态估计算法汇总(上)

大盘点|6D姿态估计算法汇总(下)

机器人抓取汇总|涉及目标检测、分割、姿态识别、抓取点检测、路径规划

汇总|3D点云目标检测算法

汇总|3D人脸重建算法

那些年,我们一起刷过的计算机视觉比赛

总结|深度学习实现缺陷检测

深度学习在3-D环境重建中的应用

汇总|医学图像分析领域论文

大盘点|OCR算法汇总

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会(ICRA/IROS/ROBIO/CVPR/ICCV/ECCV等)、顶刊(IJCV/TPAMI/TIP等)、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近1000+星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

 圈里有高质量教程资料、可答疑解惑、助你高效解决问题

你可能感兴趣的:(视觉SLAM基础:算法精度评价指标(ATE、RPE))