SLAM_轨迹算法精度评价指标(ATE、RPE)
目录
1. 前言
2. 相对位姿误差 (Relative Pose Error, RPE)
3. 绝对轨迹误差 (Absolute Trajectory Error, ATE)
4. 工具:EVO
4.1 安装
4.2 usage
1). 轨迹可视化
2). APE
3). RPE
4.3 metrics解析
参考:视觉SLAM基础:算法精度评价指标(ATE、RPE)
1. 前言
- 当我们需要评估一个SLAM/VO算法的表现时,可以从时耗、复杂度、精度多个角度切入,其中对精度的评价是我们最关注的,这个过程中不可避免会遇到两个精度指标ATE和RPE。这两个evaluation metrics最早是在TUM数据集benchmark中定义的,应用非常广泛。介绍前,先对定义一下公式中的符号表示:
- 估计位姿:
- 真实位姿:
- 下标:代表时间t(或帧),这里我们假设估计位姿和真实位姿各帧时间已对齐,总帧数相同
- :表示相隔时间time interval。
2. 相对位姿误差 (Relative Pose Error, RPE)
(对应evo工具中的“evo_rpe”命令)
相对位姿误差(relative pose error)用于计算相同两个时间戳内的位姿变化量的差, 同样, 在用时间戳对齐之后, 真实位姿和估计位姿均每隔一段相同时间计算位姿的变化量, 然后对该变化量做差, 以获得相对位姿误差, 该标准适合于估计系统的漂移。
相对位姿误差主要描述的是相隔固定时间差 两帧位姿差的精度(相比真实位姿),相当于直接测量里程计的误差。
因此第i帧的RPE定义如下:
已知总数n与间隔 的情况下,可以得到 个RPE,然后我们可以用均方根误差RMSE统计这个误差,得到一个总体值:
其中 代表取相对位姿误差中的平移部分translation。当然也有人不用RMSE,直接使用平均值、甚至中位数来描述相对误差情况。 需要注意的是,RPE包含了两部分的误差,分别是旋转误差和平移误差,通常使用平移误差进行评价已经足够,但是如果需要,旋转角的误差也可以使用相同的方法进行统计。 到这一步,我们基本可以从RMSE值的大小来评价算法的表现,然而实际情况中,我们发现对 的选取有多种选择,为了能综合衡量算法表现,我们可以计算遍历所有 的RMSE的平均值:
但这样新的问题又出现了,这样的计算复杂度非常高,很耗时间,因此TUM在自己给定的工具中,通过计算固定数量的RPE样本计算一个估计值作为最终结果。
3. 绝对轨迹误差 (Absolute Trajectory Error, ATE)
(对应evo工具中的“evo_ape”命令)
绝对轨迹误差(absolute trajectory error)**直接计算相机位姿的真实值与SLAM系统的估计值之间的差。程序首先根据位姿的时间戳将真实值和估计值进行对齐, 然后计算每对位姿之间的差值, 并最终以图表的形式输出, 该标准非常适合于评估视觉 SLAM 系统的性能。
绝对轨迹误差是估计位姿和真实位姿的直接差值,可以非常直观地反应算法精度和轨迹全局一致性。需要注意的是,估计位姿和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 git@github.com:MichaelGrupp/evo.git
cd evo
pip install --editable . --upgrade --no-binary evo
3. 输入下面这个命令,如果成功会有响应。
evo_ape -h
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
2). APE (ATE)
evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode xz
3). RPE
evo_rpe tum fr2_desk_groundtrutr2_desk_ORB.txt -va --plot --plot_mode xyz
命令参数较多,每个命令都有比较详细的帮助,多用 --help,如:evo_ape kitti --help
这里列举了一些常见选项的含义:
4.3 metrics解析
上文提到pose error包含平移和旋转两部分误差,在evo设置输出误差项对应的option为-r/–pose_relation,并有如下模式:
其中trans_part很容易理解,但是无单位的full和rot_part的误差指标比较特殊,使用了矩阵的二范数:
其中 表示groundtruth和estimate位姿之间的变换矩阵, E 为单位阵,这里用了矩阵的范数表示某种抽象的空间距离,从而用来度量误差,因此没有单位(仅供参考,这一块不确定,还行批评指正)。
同理rot_part的误差:
相比较而言,用平移误差单位为m,旋转误差单位可以是度或弧度,更容易理解。从旋转矩阵 R 到旋转角的转换使用了罗德里格斯公式(旋转向量的二范数为旋转角的大小)。
反推:
这里参考了《SLAM十四讲》中的内容。
#附EVO metric的相关代码
if self.pose_relation == PoseRelation.translation_part:# E is an array of position vectors only in this caseself.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")
SLAM_轨迹算法精度评价指标(ATE、RPE)相关推荐
- 轨迹误差评估指标[APE/RPE]和EVO[TUM/KITTI]
轨迹误差评估指标[APE/RPE]和EVO[TUM/KITTI] 1. ATE/APE 2. RPE 3. EVO 3.1 评估指标 3.2 使用 3.2.1 轨迹可视化 3.2.2 APE 3.2. ...
- 五、在测试集上评估图像分类算法精度(Datawhale组队学习)
文章目录 配置环境 准备图像分类数据集和模型文件 测试集图像分类预测结果 表格A-测试集图像路径及标注 表格B-测试集每张图像的图像分类预测结果,以及各类别置信度 可视化测试集中被误判的图像 测试集总 ...
- 融合算法性能评价指标
前言 多目标跟踪器的性能需要某些指标来进行度量,目前使用比较广泛的评测指标主要有 Bernardin 等人定义的 CLEAR MOT 指标.Ristani 等人定义的 ID scores 指标以及最新 ...
- 目标检测精度评价指标
在目标检测领域中,存在着很多精度评价指标,需要根据应用场景自主的选择更合适的评价指标. 有人举过一些很典型的例子: 倘若某人声称创建了一个能够识别登上飞机的恐怖分子的模型,并且准确率(accuracy ...
- 图像显著性检测算法的评价指标介绍
图像显著性检测算法的评价指标介绍 要评价一个图像显著性检测(Saliency Detection,SD)算法的好坏,当然离不开评价指标(Metric),显著性检测分为眼注视点显著性(eye fixat ...
- 深度学习、遥感领域常用精度评价指标盘点
最近几年,以深度学习技术为代表的新型前沿技术在图像处理领域,取得了巨大的成功,从图像处理到场景理解,从图像分类到图像实时分割,深度学习无处不在.在遥感领域,深度学习技术更是火热. 本篇博文就对常用的深 ...
- 目标检测算法的评价指标
目标检测算法的评价指标 0 不同比赛中的指标 1 基础概念 1.1 Intersection over Union (IoU) 1.2 Predictions: TP - FP - FN - TN 1 ...
- 机器学习——算法常用评价指标
机器学习--算法常用评价指标 一.常用评价指标 二.案例 一.常用评价指标 参考书籍:<机器学习>--周志华 错误率: 分类错误的样本数占样本总数的比例 精度: 分类正确的样本数占样本总数 ...
- 西工大开源拥挤人群数据集生成工具,大幅提升算法精度 | CVPR 2019
作者 | 周强(CV君) 转载自 我爱计算机视觉(公众号id:aicvml) 近年来,因为拥挤人群计数在视频监控.公共安全方面的应用广泛,引起了不少学者的关注. 简单说来这个任务就是给定图像,返回该图 ...
- CVPR 2019 | 西北工业大学开源拥挤人群数据集生成工具,大幅提升算法精度
点击我爱计算机视觉标星,更快获取CVML新技术 近年来,因为拥挤人群计数在视频监控.公共安全方面的应用广泛,引起了不少学者的关注. 简单说来这个任务就是给定图像,返回该图像所描述场景中有多少人. 这可 ...
最新文章
- 解读Go语言的2018:怎么就在中国火成这样了?
- javaScript中的提示对话框
- 招程序员不要信中医的? | 极客视频
- 花33元租号玩2小时王者荣耀,未成年为绕过防沉迷用上黑科技上号器App
- 用ASDM管理思科PIX防火墙
- Android Service完全解析,关于服务你所需知道的一切(下)
- mysql 慢查询 不重启_开启mysql慢查询日志,不重启数据库的方法
- rfc方式的集成 sap_转载: 与SAP集成的接口方式比较:IDOC BAPI RFC 之间的区别
- android samba github,安卓手机访问树莓派samba文件共享出错解决
- linux 内核 发送数据类型,Linux内核数据类型及跨平台
- react-native 金币彩带雨下落动画
- 腾讯“立知”被指抄袭“即刻” APP,目前已被下线
- .bat以管理员身份运行
- SIM800C 不停的回复Call Ready NET指示灯一直不能进入3秒闪烁的状态
- 详解 Elasticsearch refresh 机制
- 客流分析江湖争端再起,新旧势力谁更胜一筹?...
- (转)零基础入门--中文命名实体识别
- 分享自己在uniapp开发中用的css样式
- 6.10 通过屏幕截图功能快速插入网页图片 [原创Excel教程]
- BS架构说明以及网页组成
热门文章
- sql中in与=的异同
- springMVC实现 MultipartFile 多文件上传
- [Swift]LeetCode145. 二叉树的后序遍历 | Binary Tree Postorder Traversal
- DHCP原理及报文格式
- css3的一些知识点
- SpringBoot学习之文件结构和配置文件
- php : 开发记录(2017-03-10)
- [OS] 进程相关知识点
- apache2配置rewrite_module
- 对比iOS网络组件:AFNetworking VS ASIHTTPRequest