ORB3运行Urban数据集

文章描述了如何将UR数据集转换为与Kitti数据集兼容的格式,包括修改时间戳、图像命名、相机参数和标签文件。此外,还涉及了ORB3的使用,轨迹处理,以及使用Yolov5进行语义标注的问题。文章还讨论了EVO工具在轨迹评估中的应用,解决时间戳对齐和轨迹转换问题。
摘要由CSDN通过智能技术生成

声明:仅记录学习过程

 ./Examples/Stereo/stereo_kitti Vocabulary/ORBvoc.txt Examples/Stereo/yaml /media/wangxudong/xudong/KITTI-data/dataset/sequences/ur26/ ../output/urban26/

整理一下思路

首先我们下载了ur数据集,会得到相应的一些数据

我只关注双目图像,以及对应的相机配置参数,还有一个global_pose.csv

我是想用 stereo_kitti 运行这个ur系列数据集,想着改一下配置文件就可以了

但其实并不是想象的这么简单

我需要将这个数据集形式改成和读取kitti数据集一样的格式

需要有一个 times.txt 单独存放时间戳

使用脚本 readTmp.py 可以完成

但是此时间戳是以纳秒为单位,在我运行ORB3时会导致一些问题,图片不读取下一帧

因此将其转化成和kitti一样以秒为单位,且从0开始

使用脚本 ns2s.py 完成

最后需要将图片的名字改一下,原本是以时间戳命名的, 使用脚本changeName.py 给他改成和kitti一样 000000.png 000001.png ... 005837.png 这种格式

这样就完成了数据集格式的修改,就能使ORB3按照kitti数据集格式来读取

配置文件的修改

 其实相机内参已经在 left.yaml right.yaml 里边写出来了,需要在配置文件里填上相应的数值

 在此我只修改了左右相机的内参,畸变参数,关于右相机相对左相机的变换矩阵,只用了旋转部分的数值,平移向量里边的数太大了,填上反而不对

 Kaist25.yaml里边就是我填写后的,读取ur系列的数据集都用这个配置文件

完成以上就可以使用ORB3运行数据集了,但是如果要使用语义信息就需要增加额外的部分

------------addsemantic-------------------

需要将数据集经过我的yolov5的标注有一个标签文件,依据经验这个标签文件根输入的图片一样是以时间戳命名的,一样运行 changeName.py 看看是 .txt还是.png 根据实际情况修改

 我仿佛发现了一个问题,在检测过程中会有一些图像上没有label 按顺序排下来,那岂不是将空白的txt都补在最后边了,这与实际情况不符

 打个比方 有10张以时间戳命名的图像,第3 ,5 ,7 张图像没有label(当然这种概率很小),我们只有7个txt文件,并分别以自己的时间戳命名的,但是我们要 改成 000000.txt 000001.txt格式并补全,这不都补到后边去了???

 我们应该是把 第3 ,5 ,7 张图片对应的txt文件补出来。

 当我写到这里的时候我就检查了一下我用yolov5处理后的ur26数据集,果然补充的所有空白txt文件都在最后(解释为什么要补充空白txt是为了做一个对齐,有的图片上没有检测到感兴趣的检测框,但是又需要有一个txt与输入的图像一致)

 因此在进行yolov5处理图像后,一定要使用 改好名字的图片集 名字格式为000000.png 000001.png...

 这样在检查完后直接用脚本处理一下  yolo-to-format.py  完事就是我们需要的格式了,最后用脚本 add_null_txt.py 补上空白的txt文件,会把中间空的补出来,而不是一股脑的堆在后边

--------------------------------------------------------

下边就是轨迹方面

数据集提供的csv文件,没法使用evo评估 (ORB3双目模式下运行得到的是3乘4的变换矩阵来保存的位姿),所以需要对csv进行一些处理

先把第一列时间戳删掉,并改名为.txt文件

然后使用脚本 change2kitti-txt.py 变成kitti格式的 (数据之间去掉逗号,并加上空格,注意最后一个数后边不能有空格)

数据集提供的位姿非常的多,想要用evo评估,你就要保持同样的数目的位姿 比如我这个ur26的数据集 图片有5837张,因此应该有5837个位姿,但实际原始位姿有四万多,必须得来个降采样

降到和ORB3跑出来的位姿一样多,还要尽可能保留全局轨迹,因此运行 reducePose.py 就可以了

此刻csv文件已经完全转化好了 可以用kitti画出轨迹,也可以用来求 ape rpe

但是我观察到 ORB3运行保存的轨迹好像是 以z为前方向  而该数据集画出来却是以x为前方向一样  我寻思整个脚本让跑出来的orb3.txt轨迹在绕y轴旋转90度,然后与真值进行误差计算

经过验证 ape 没有啥变化,可能有对齐操作 -a -s   但是rpe变更小了,说明旋转一下可能是正确的

将运行得到的 orb3.txt 或者 orbaddse.txt 经过脚本 orb3_transformed.py 处理就可以了

但是始终有一个问题困扰着我,我的轨迹和真实轨迹好像差点意思???比如这个 以Urban26为例

听大佬们说是时间戳有问题,并给出了解决方案

evo_traj tum TrajAfterMapped.txt --ref tum-cutted-m-local.txt -apv --plot_relative_time --t_offset -16 

但是我其实很蒙比,因为我这是kitti格式下的轨迹,根本没有时间戳的事,因此只能将kitti格式转化为tum格式的轨迹,万幸evo里有这个脚本,非常方便就搞定了

evo_traj tum orb3-tum.txt  --ref ur26-tum-GT.txt -apv --plot_relative_time --t_offset -40 -as

使用evo_ape可以发现偏移之后曲线拟合度高了,同时rmse也变小了

偏移之前:  真值和orb3

max    554.273660
mean    191.243573
median    154.970013
min    57.344764
rmse    218.831137
sse    279516806.497894
std    106.362410


evo_ape tum ur26-tum-GT.txt orb3-tum.txt -as -p --plot_mode=xyz --t_offset -40

偏移之后: 真值和orb3

max    338.374245
mean    123.445974
median    115.662485
min    25.223055
rmse    145.968615
sse    115845270.804646
std    77.89611

可以看出确实是有效果的

但是当我使用改进后的代码跑出来的轨迹与真值比较并计算ape时发现没啥效果,有点尴尬

给自己想了一个接口就是 ur26数据集里边触发了回环,最后误差得到了均摊,所以和改进后的效果差不多(就是说orb3触发了回环后,其结果必然变好了一截),因此我们做对比实验的话,应该找一些没有回环的数据集来做

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值