CVPR2023-PVO(Panoptic Visual Odometry)项目安装详解

CVPR2023-PVO(Panoptic Visual Odometry)项目安装详解本文详细介绍了 PVO 系统的下载与配置过程 包括使用 git 或 IDM 下载 conda 环境的配置 VO Module 和 VPS Module 的编译 以及 panopticapi 的安装

大家好,欢迎来到IT知识分享网。

一、Download PVO

官方下载地址:

https://github.com/zju3dv/pvohttps://github.com/zju3dv/pvo

linux中,使用git下载最方便:

git clone https://github.com/zju3dv/PVO.git

但是有时候git下载很慢,可以考虑IDM下载器下载(IDM虽然速度慢点,但是比较稳定,不像X雷需要加钱提速,或者有时候经常断线,RENMINGBI的玩家)。

Internet Download Manager: The fastest download acceleratorInternet Download Manager (IDM) is a tool to increase download speeds by up to 5 times, resume or schedule downloads and download streaming videoshttps://www.internetdownloadmanager.com/

二、Configure PVO

首先参照github中的”prepare.md”进行配置。

prepare.md:https://github.com/zju3dv/PVO/blob/main/prepare.mdhttps://github.com/zju3dv/PVO/blob/main/prepare.md

prepare.md主要配置PVO运行的conda环境编译VO_Module和VPS_Module安装panopticapi生成中间变量等。

1、checkpoint

(1)下载视频分割预训练模型(panFPN.pth)

百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com/s/1ncSi_EihY479SkCEFLHYzw?pwd=zsjq

(2)下载VO_Module预训练模型(vkitti2_dy_train_semiv4_080000.pth)

百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com/s/10_tIdaDPf5DjgmU9O6iVYg?pwd=nei5

下载之后放在checkpoint目录

2、droidenv env

(1)配置conda环境

# 使用.yml文件配置conda环境 conda env create -f VO_Module/environment.yml # 安装evo, evo主要用于slam的性能评测 pip install evo --upgrade --no-binary evo # 安装gdown, gdown是Google下载器 pip install gdown

(2)编译VO_Module

首先进入VO_Module和VPS_Module目录,进行编译安装这两个模块,执行:

# 激活conda环境 conda activate droidenv # 开始安装VO_Module python setup.py install

可能会出现:

/home/ljh/VSLAM/PVO/VO_Module/thirdparty/eigen/Eigen/SparseCore:11:10: fatal error: Core: 没有那个文件或目录 11 | #include "Core" | ^~~~~~ compilation terminated.

说明没有安装Eigen

首先下载eigen-3.3.7并安装,安装完成之后,将安装目录下的Core目录拷贝至/home/xxx/VSLAM/PVO/VO_Module/thirdparty/eigen/Eigen/src/。

然后将所有的报错都在最前面加上”Eigen/”,类似于:

#include “Eigen/Core”。

安装eigen-3.3.7,请参考:

CVPR2023-PVO(Panoptic Visual Odometry)项目安装详解

(3)设置VPS_Module环境

以下几个步骤都是在PVO项目根目录下执行:

# 激活conda环境 conda activate droidenv # 安装配置cuda conda install pytorch==1.9.0 torchvision cudatoolkit=11.1 -c pytorch -c nvidia # 安装配置VPS_Module python -m pip install -e VPS_Module # 安装配置panopticapi pip install git+https://github.com/cocodataset/panopticapi.git

在执行”pip install git+https://github.com/cocodataset/panopticapi.git“的时候,可能因为网络速度的原因,经常失败,可以先离线下载再安装。

离线安装方法:

下载panopticapi-master.zip之后,解压。进入panopticapi-master文件夹,执行:

python setup.py install

即可。

(4)数据集下载

a. 下载数据集

新建文件夹:datasets/Virtual_KITTI2

在您初次运行”sh tools/datasets/generate_vkitti_datasets.sh”的时候,绝对会出现一大堆的” XXX file not found“。

需要下载的数据集有:

(1) vkitti_2.0.3_rgb.tar (rgb数据,必须

(2) vkitti_2.0.3_classSegmentation.tar  (类分割,必须

(3) vkitti_2.0.3_instanceSegmentation.tar  (实例分割,必须

(4) vkitti_2.0.3_textgt.tar.gz  (相机各种参数,必须

(5) vkitti_2.0.3_depth.tar (深度值,必须

(6) vkitti_2.0.3_forwardFlow.tar (前向流,必须

(7) vkitti_2.0.3_backwardFlow.tar (后向流,必须

(8) vkitti_2.0.3_forwardSceneFlow.tar  (前向场景流,必须

(9) vkitti_2.0.3_backwardSceneFlow.tar (后向场景流)

首先将必须要的数据集解压到Virtual_KITTI2目录,如下。

CVPR2023-PVO(Panoptic Visual Odometry)项目安装详解

 b.生成用于训练和评估的数据

# 激活conda conda activate droidenv # 产生vkitti数据集 sh tools/datasets/generate_vkitti_datasets.sh # 产生动态掩码 python tools/datasets/generate_dynamic_masks.py

 sh tools/datasets/generate_vkitti_datasets.sh脚本执行结果如下:

CVPR2023-PVO(Panoptic Visual Odometry)项目安装详解

没有出错,表明执行成功。

接着运行”python tools/datasets/generate_dynamic_masks.py“,可能会出现下面的错误:

CVPR2023-PVO(Panoptic Visual Odometry)项目安装详解

通过分析,发现原因是项目中,作者有一个地方没有做修改,还是用的是Neural-iMAP中的包。

PVO/tools/datasets/generate_dynamic_masks.py中第8行:

原文:sys.path.append(‘Neural-iMAP/droid_slam’)

修改为:sys.path.append(‘VO_Module/droid_slam’)

运行”python tools/datasets/generate_dynamic_masks.py” ,可能会出现2个错误:

CVPR2023-PVO(Panoptic Visual Odometry)项目安装详解

针对错误1:

原因是自己的服务器配置太laji了,num_workers需要设置小点。

修改文件PVO/tools/datasets/generate_dynamic_masks.py中第24行:

原文:train_loader = DataLoader(db, batch_size=1, num_workers=2)

修改之后:train_loader = DataLoader(db, batch_size=1, num_workers=0)

修改之后变成: 

CVPR2023-PVO(Panoptic Visual Odometry)项目安装详解

针对错误2:

原因可能是项目中,作者将路径配置不正确。

修改方法:

vim /home/ljh/VSLAM/PVO/VO_Module/droid_slam/data_readers/vkitti2.py

大约在88行左右,将该判断修改为如下:

if self.flow_label: fo_flows = sorted( glob.glob(osp.join(scene, VKitti2.split[self.split_mode], 'frames/forwardFlow/Camera_0/*.png'))) ba_flows = sorted( glob.glob(osp.join(scene, VKitti2.split[self.split_mode], 'frames/backwardFlow/Camera_0/*.png'))) # 作者原来的写法 ''' scene:datasets/Virtual_KITTI2/Scene01 VKitti2.split[self.split_mode]:clone/15-deg-left 也就是说,作者在查找分割结果的时候,在路径:datasets/Virtual_KITTI2/Scene01/clone/panoptic_gt_id/*.png中查找, 而分割结果保存在:datasets/Virtual_KITTI2/ALL_clone/panoptic_gt_id/*.png中。 ''' #segments = sorted(glob.glob(osp.join(scene, VKitti2.split[self.split_mode], '/panoptic_gt_id/*.png'))) # *huarzail:开始修改 # huarzail:修改之后的写法。 path = "datasets/Virtual_KITTI2/ALL_" + VKitti2.split[self.split_mode] + '/panoptic_gt_id/*.png' segments = sorted(glob.glob(path)) # *huarzail:结束修改 scene_info[scene] = {'images': images, 'depths': depths, 'fo_flows': fo_flows, 'ba_flows': ba_flows, 'poses': poses, 'intrinsics': intrinsics, 'segments' : segments} else: masks = sorted( glob.glob(osp.join(scene, VKitti2.split[self.split_mode], 'frames/dynamicMask/Camera_0/*.npy'))) # 按理说,下面这句话也需要改,但是作者没有提供panFPN_segm分割的结果,可以暂时不用管。 segments = sorted( glob.glob(osp.join(scene, VKitti2.split[self.split_mode], 'panFPN_segm/*.png'))) scene_info[scene] = {'images': images, 'depths': depths, 'dymasks': masks, 'poses': poses, 'intrinsics': intrinsics, 'graph': graph, 'segments': segments, }

三、Test on vkitti 15-deg-left datasets

首先参照github中的”prepare.md”进行配置(参照上述步骤2)。

1、generate inital panoptic segmentation.

产生初始化全景分割,用于VPS初始化。

这里是使用PanopticFPN[1]算法,进行所有的图片进行分割,初始化VPS。

sh tools/initial_segmentation.sh 

tools/initial_segmentation.sh 内容如下: 

# generate initial segmentation CUDA_VISIBLE_DEVICES=0 python3 -W ignore VPS_Module/tools/train_net.py \ --config-file VPS_Module/configs/COCO-PanopticSegmentation/panoptic_fpn_R_50_3x_vkitti_init_clone.yaml --num-gpu 1 \ --eval-only MODEL.WEIGHTS checkpoints/panFPN.pth \ OUTPUT_DIR shared_data/panoptic_segm_init_clone/ CUDA_VISIBLE_DEVICES=0 python3 -W ignore VPS_Module/tools/train_net.py \ --config-file VPS_Module/configs/COCO-PanopticSegmentation/panoptic_fpn_R_50_3x_vkitti_init_test.yaml --num-gpu 1 \ --eval-only MODEL.WEIGHTS checkpoints/panFPN.pth \ OUTPUT_DIR shared_data/panoptic_segm_init_15-deg-left/ # split initial segmentation into datasets/ python tools/split_init_segm.py

源码分析:

命令:

的作用是将clone子场景和15-deg-left子场景,将分割的结果进行数据拷贝。

''' 针对clone子场景 将PanopticFPN算法初步分割的结果复制到datasets中 shared_data/panoptic_segm_init_clone/inference/pan_seg复制到datasets/Virtual_KITTI2/Scene01/clone/panFPN_segm '''
''' 针对15-deg-left子场景 将PanopticFPN算法初步分割的结果复制到datasets中 shared_data/panoptic_segm_init_15-deg-left/inference/pan_seg复制到datasets/Virtual_KITTI2/Scene01/15-deg-left/panFPN_segm '''

运行结果为:

CVPR2023-PVO(Panoptic Visual Odometry)项目安装详解

2、vps->vo,vo Module generate pose, flow and depth.

vps增强vo,产生pose, flow and depth。

sh tools/test_vo_scene.sh 

可能会出现如下错误:

错误1:

vim  VSLAM/PVO/VO_Module/droid_slam/droid_net.py

295行原文:lay = torch.as_tensor(np.range(1, num+1).repeat(ht*wd).reshape(num,ht,wd)).unsqueeze(0)

295行改为:

lay = torch.as_tensor(np.arange(1, num+1).repeat(ht*wd).reshape(num,ht,wd)).unsqueeze(0)
这个地方的修改非常关键,很多错误都是由这个错误引起的。

错误2:

/home/ljh/anaconda3/envs/droidenv/lib/python3.9/site-packages/torch/functional.py:445: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at  /opt/conda/conda-bld/pytorch_61/work/aten/src/ATen/native/TensorShape.cpp:2157.)
  return _VF.meshgrid(tensors, kwargs)  # type: ignore[attr-defined]

解决方法:

vim /home/ljh/anaconda3/envs/droidenv/lib/python3.9/site-packages/torch/functional.py

445行原文:return _VF.meshgrid(tensors, kwargs)  # type: ignore[attr-defined]

445行改为:return _VF.meshgrid(tensors, kwargs, indexing=’ij’)  # type: ignore[attr-defined]

错误3:

Traceback (most recent call last):
  File “/home/ljh/VSLAM/PVO/VO_Module/evaluation_scripts/test_vo2.py”, line 93, in <module>
    for i_batch, item in enumerate(train_loader):
  File “/home/ljh/anaconda3/envs/droidenv/lib/python3.9/site-packages/torch/utils/data/dataloader.py”, line 521, in __next__
    data = self._next_data()
  File “/home/ljh/anaconda3/envs/droidenv/lib/python3.9/site-packages/torch/utils/data/dataloader.py”, line 1203, in _next_data
    return self._process_data(data)
  File “/home/ljh/anaconda3/envs/droidenv/lib/python3.9/site-packages/torch/utils/data/dataloader.py”, line 1229, in _process_data
    data.reraise()
  File “/home/ljh/anaconda3/envs/droidenv/lib/python3.9/site-packages/torch/_utils.py”, line 434, in reraise
    raise exception










IndexError: Caught IndexError in DataLoader worker process 0.

解决方法:

vim /home/ljh/VSLAM/PVO/VO_Module/evaluation_scripts/test_vo2.py

93行原文:train_loader = DataLoader(db, batch_size=1, num_workers=2) 

93行修改为:train_loader = DataLoader(db, batch_size=1, num_workers=0) # huarzail

错误4:

原因:

pytorch中的torch.Tensor数据类型和lietorch中的at::Tensor数据类型不匹配。(正常情况下是可以自动隐式转换,但是到了PVO里面,就出错了)

解决方法:

使用tensor.data_ptr()函数,显示转换数据类型。

进入/home/ljh/VSLAM/PVO/VO_Module,重新编译:VO_Module

python setup.py install

错误5:

/home/ljh/VSLAM/PVO/VO_Module/droid_slam/geom/ba.py:75: UserWarning: __floordiv__ is deprecated, and its behavior will change in a future version of pytorch. It currently rounds toward 0 (like the ‘trunc’ function NOT ‘floor’). This results in incorrect rounding for negative values. To keep the current behavior, use torch.div(a, b, rounding_mode=’trunc’), or for actual floor division, use torch.div(a, b, rounding_mode=’floor’).
  jj = jj // rig – fixedp

原因:警告提示的是在使用__floordiv__操作符进行整除运算时的变更情况。在未来的 PyTorch 版本中,__floordiv__ 的行为将发生改变

解决方法:

vim /home/ljh/VSLAM/PVO/VO_Module/droid_slam/geom/ba.py

大约74行左右,修改为:

ii = torch.div(ii, rig, rounding_mode='floor') - fixedp jj = torch.div(jj, rig, rounding_mode='floor') - fixedp 

3、vo->vps, vps Module use flow and depth from vo Module and generate final video panoptic segmentation results and vpq.

vo增强vps,vps模块利用从vo模块中产生的flow和depth,来产生最后的视频全景分割结果。

sh tools/test_vps.sh 

可能出现的错误:

问题1:

解决方法:

这个地方明显是作者在发布项目的时候,没有修改他的路径。

vim VSLAM/PVO/VPS_Module/detectron2/data/datasets/others.py

107行原文:flow_dir = “/mnt/nas_8/group/lanxinyue/droid_slam_output/full_flow”

107行修改为:flow_dir = “shared_data/full_flow”

问题2:

vim /home/ljh/VSLAM/PVO/VPS_Module/detectron2/modeling/meta_arch/panoptic_fpn.py

194行原文:images = [v[“image”].to(self.device) for k,v in seq.items()]

194行修改为:images = [v[“image”].to(self.device) for k,v in seq.items() if v[“image”] is not None]

附录

以Virtual_KITTI2/Scene01/clone为例,查看三种数据集(rgb、instanceSegmentation和classSegmentation)的样式。

(1) rgb

Virtual_KITTI2/Scene01/clone/frames/rgb/Camera_0/rgb_00000.jpg

CVPR2023-PVO(Panoptic Visual Odometry)项目安装详解

(2) instanceSegmentation

Virtual_KITTI2/Scene01/clone/frames/instanceSegmentation/Camera_0/instancegt_00000.png

CVPR2023-PVO(Panoptic Visual Odometry)项目安装详解

(3) classSegmentation

Virtual_KITTI2/Scene01/clone/frames/classSegmentation/Camera_0/classgt_00000.png

CVPR2023-PVO(Panoptic Visual Odometry)项目安装详解

(4) PanopticFPN

使用PanopticFPN[1]算法初步分割结果。可以看出,分割的还是比较粗糙。

PVO/shared_data/panoptic_segm_init_clone/inference/pan_seg/0001_00000.png

CVPR2023-PVO(Panoptic Visual Odometry)项目安装详解

(5) depth

CVPR2023-PVO(Panoptic Visual Odometry)项目安装详解

extrinsic.txt:

——————————————————————————————————————————-

——————————————————————————————————————————-

参数解释:
frame:视频帧ID (starts from 0) 
cameraID: 相机ID (between 0 and 5) 
ri,j:  相机旋转矩阵R的系数,ti是相机平移向量T的系数。
                  r1,1 r1,2 r1,3 t1 
Extrinsic = r2,1 r2,2 r2,3 t2 
                  r3,1 r3,2 r3,3 t3 
                    0     0     0    1






intrinsic.txt:

——————————————————————-

——————————————————————-

参数解释:
frame: 视频帧ID (starts from 0)
cameraID: 相机ID (between 0 and 5)
K[0,0]: coefficient of the 1st line, 1st column
K[1,1]: coefficient of the 2nd line, 2nd column
K[0,2]: coefficient of the 1nd line, 3rd column
K[1,2]: coefficient of the 2nd line, 3rd column
                K[0,0]     0           K[0,2]
Intrinsic = 0            K[1,1]    K[1,0]
                 0            0           1








pose.txt:

———————————————————————————————————————

frame cameraID trackID alpha

0         0                0        -1.

width height    length

1.85  1.50992 4.

world_space_X world_space_Y world_space_Z

6.            -111                  -5.044228

rotation_world_space_y rotation_world_space_x rotation_world_space_z

0.                      0                                     0

camera_space_X camera_space_Y camera_space_Z

2.              1.4341                  6.

参数解释:

参数 解释 备注
frame 视频帧ID starts from 0
cameraID 相机ID 0 (left) or 1 (right)
trackID 轨迹ID 每个实例ID唯一
alpha 物体的KITTI类观测角度范围 [-pi..pi]

width,

height,

length

3D物体的维度  单位是:meters
world_space_X, world_space_Y, world_space_Z 3D物体在世界坐标系下的位置  分别表示世界坐标系下的x、y、z坐标,单位为米(3D边界框底面的中心点)
rotation_world_space_y, rotation_world_space_x, rotation_world_space_z 在世界坐标系中的yaw, pitch, roll 范围在 [-pi..pi],KITTI约定中,当ry等于0时,表示物体与x轴对齐且朝向右侧。
camera_space_X, camera_space_Y, camera_space_Z 3D物体在相机坐标系下的位置  分别表示相机坐标系下的x、y、z坐标,单位为米(3D边界框底面的中心点)
rotation_camera_space_y, rotation_camera_space_x, rotation_camera_space_z 相机坐标系下的yaw, pitch, roll 范围在 [-pi..pi],KITTI约定中,当ry等于0时,表示物体与x轴对齐且朝向右侧。

colors.txt

实例分割图像的颜色表示(不同的颜色表示不同的物体)

————————————-

————————————-

参考文献:

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/126486.html

(0)
上一篇 2025-09-18 16:00
下一篇 2025-09-18 16:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信