GCN-SLAM编译pytorch以及运行TUM数据集时遇到的问题

编译pytorch问题

本人按照github上的过程进行编译pytorch(C++)的时候,一直遇到问题,一开始以为是clone代码不完整的问题,后来仔细查找报错信息,发现是pytorch源码中的一个函数跟cuda的函数名冲突了导致(本人环境cuda10.1 按照github下载的pytorch1.0.1 进行的setup.py完全编译)。

数据集问题

我在下载了一两个TUM数据集后,运行GCN下的run.sh发现怎么也启动不了。
最后发现解压后里面包含一个depth.txt和一个rgb.txt两个用来保存filename的文件,代码是通过filename从文件夹里读取的图像,depth.txt与rgb.txt文件内容如下(只放了一小部分):

# color images
# file: 'rgbd_dataset_freiburg3_long_office_household.bag'
# timestamp filename
1341847980.722988 rgb/1341847980.722988.png
1341847980.754743 rgb/1341847980.754743.png
1341847980.786856 rgb/1341847980.786856.png
1341847980.822978 rgb/1341847980.822978.png
1341847980.854676 rgb/1341847980.854676.png
1341847980.890728 rgb/1341847980.890728.png
1341847980.922978 rgb/1341847980.922978.png
# depth maps
# file: 'rgbd_dataset_freiburg3_long_office_household.bag'
# timestamp filename
1341847980.723020 depth/1341847980.723020.png
1341847980.754755 depth/1341847980.754755.png
1341847980.786879 depth/1341847980.786879.png
1341847980.822989 depth/1341847980.822989.png
1341847980.854690 depth/1341847980.854690.png
1341847980.890737 depth/1341847980.890737.png
1341847980.922989 depth/1341847980.922989.png

但是在GCN的run.sh启动文件里,启动参数传入的是association.txt,经过翻看了一下ORB的一些传入参数,发现这里传入的association.txt应该是上面rgb.txt与depth.txt合并的结果,即如下形式:

1341847980.722988 rgb/1341847980.722988.png 1341847980.723020 depth/1341847980.723020.png
1341847980.754743 rgb/1341847980.754743.png 1341847980.754755 depth/1341847980.754755.png
1341847980.786856 rgb/1341847980.786856.png 1341847980.786879 depth/1341847980.786879.png
1341847980.822978 rgb/1341847980.822978.png 1341847980.822989 depth/1341847980.822989.png
1341847980.854676 rgb/1341847980.854676.png 1341847980.854690 depth/1341847980.854690.png
1341847980.890728 rgb/1341847980.890728.png 1341847980.890737 depth/1341847980.890737.png
1341847980.922978 rgb/1341847980.922978.png 1341847980.922989 depth/1341847980.922989.png
1341847980.954645 rgb/1341847980.954645.png 1341847980.954676 depth/1341847980.954676.png
1341847980.990699 rgb/1341847980.990699.png 1341847980.990724 depth/1341847980.990724.png
1341847981.022715 rgb/1341847981.022715.png 1341847981.022728 depth/1341847981.022728.png

数据格式整理

方案一:改代码

由于我们需要的rgb.txt与depth.txt同时传入进去,所以需要在run.sh最后再加一个传入参数,这样的话对应着代码的读取图像部分的代码也需要修改。并且还需要提前将两个txt文件内的filename按时间戳对应起来(原本两个txt内的filename数量不一样,即两个文件夹图片数量不一样)。考虑到这个方法比较麻烦,所以采用了下面的方法:

方案二:按时间戳拼接rgb.txt与depth.txt

提醒一点,代码里按照filename读取文件的时候,没有考虑到这txt前三行的注释,所以也会又问题。故必须将传入的txt文件的前面三行的注释删掉,也就是rgb.txt与depth.txt按时间戳拼接后的.txt文件不要加前面的注释。按时间戳拼接代码如下:
将代码生成的association.txt复制到对应数据集文件夹下,直接执行run.sh就可以了。


def split_line(f_rgbd):
    rgbd_split = f_rgbd.read().split()
    index_to_delete = []
    for i in range(len(rgbd_split)):
        if i%2:
            index_to_delete.append(i)
    count = 0
    for index in index_to_delete:
        index = index - count
        rgbd_split.pop(index)
        count += 1
    return rgbd_split

def near_time_stamp(rgb_time_stamp, depth_time_stamp):
    """
    假设len(rgb_time_stamp)  >  len(depth_time_stamp)
    只需在rgb_time_stamp中取出len(depth_time_stamp)个元素即可
    """
    near_rgb_stamp = []
    for index in depth_time_stamp:
        min_value = 1000000000
        min_jndex = ''
        depth_float = float(index)
        for jndex in rgb_time_stamp:
            rgb_float = float(jndex)
            if abs(depth_float - rgb_float) < min_value:
                min_value = abs(depth_float - rgb_float)
                min_jndex = jndex
        near_rgb_stamp.append(min_jndex)
    return near_rgb_stamp


if __name__ == '__main__':

    f_rgb = open("rgb.txt","r")
    f_depth = open("depth.txt","r")
    f_association = open('association.txt','w',encoding='utf-8')
    data_depth = f_depth.readlines()
    f_depth.seek(0,0)

    # 切分出时间戳
    rgb_time_stamp = split_line(f_rgb)
    depth_time_stamp = split_line(f_depth)

    # 寻找最近时间戳
    rgb_time_stamp = near_time_stamp(rgb_time_stamp, depth_time_stamp)
    
    # 将rgb_time_stamp与depth_time_stamp对应行拼接起来
    for i in range(len(rgb_time_stamp)):
        str_association = rgb_time_stamp[i] + " " \
                            + "rgb/" + rgb_time_stamp[i] + ".png" + " " \
                            + data_depth[i]
        f_association.write(str_association)

    f_rgb.close()
    f_depth.close()
    f_association.close()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值