PVO: Panoptic Visual Odometry代码复现(如何在脚本设置GPU选择,软链接映射数据集)

本文主要是介绍PVO: Panoptic Visual Odometry代码复现(如何在脚本设置GPU选择,软链接映射数据集),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

配置环境

代码:https://github.com/zju3dv/pvo

1.拉取代码

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

这个工程中的VO_Module中的thirdparty部分需要用DROID-SLAM的替换之后才行
具体参考我另一篇博客
https://blog.csdn.net/qin_liang/article/details/132635349

2.创建环境
修改environment.yaml的文件内容

name: pvoenv
channels:- rusty1s- pytorch- nvidia- conda-forge- defaults
dependencies:- _libgcc_mutex=0.1=conda_forge- _openmp_mutex=4.5=2_kmp_llvm- absl-py=1.4.0=pyhd8ed1ab_0- aiohttp=3.8.4=py39h72bdee0_0- aiosignal=1.3.1=pyhd8ed1ab_0- alsa-lib=1.2.8=h166bdaf_0- aom=3.5.0=h27087fc_0- async-timeout=4.0.2=pyhd8ed1ab_0- attr=2.5.1=h166bdaf_1- attrs=23.1.0=pyh71513ae_1- blas=2.116=mkl- blas-devel=3.9.0=16_linux64_mkl- blinker=1.6.2=pyhd8ed1ab_0- brotli=1.0.9=h166bdaf_8- brotli-bin=1.0.9=h166bdaf_8- brotlipy=0.7.0=py39hb9d737c_1005- bzip2=1.0.8=h7f98852_4- c-ares=1.19.0=hd590300_0- ca-certificates=2023.5.7=hbcca054_0- cachetools=5.3.0=pyhd8ed1ab_0- cairo=1.16.0=ha61ee94_1014- certifi=2023.5.7=pyhd8ed1ab_0- cffi=1.15.1=py39he91dace_3- charset-normalizer=2.1.1=pyhd8ed1ab_0- click=8.1.3=unix_pyhd8ed1ab_2- colorama=0.4.6=pyhd8ed1ab_0- contourpy=1.0.7=py39h4b4f3f3_0- cryptography=40.0.2=py39h079d5ae_0- cudatoolkit=11.3.1=ha36c431_9- cycler=0.11.0=pyhd8ed1ab_0- dbus=1.13.6=h5008d03_3- expat=2.5.0=hcb278e6_1- ffmpeg=5.1.2=gpl_h8dda1f0_106- fftw=3.3.10=nompi_hc118613_107- font-ttf-dejavu-sans-mono=2.37=hab24e00_0- font-ttf-inconsolata=3.000=h77eed37_0- font-ttf-source-code-pro=2.038=h77eed37_0- font-ttf-ubuntu=0.83=hab24e00_0- fontconfig=2.14.2=h14ed4e7_0- fonts-conda-ecosystem=1=0- fonts-conda-forge=1=0- fonttools=4.39.4=py39hd1e30aa_0- freeglut=3.2.2=h9c3ff4c_1- freetype=2.12.1=hca18f0e_1- frozenlist=1.3.3=py39hb9d737c_0- gettext=0.21.1=h27087fc_0- glib=2.76.2=hfc55251_0- glib-tools=2.76.2=hfc55251_0- gmp=6.2.1=h58526e2_0- gnutls=3.7.8=hf3e180e_0- google-auth=2.18.1=pyh1a96a4e_0- google-auth-oauthlib=1.0.0=pyhd8ed1ab_0- graphite2=1.3.13=h58526e2_1001- grpcio=1.54.2=py39h227be39_2- gst-plugins-base=1.22.0=h4243ec0_2- gstreamer=1.22.0=h25f0c4b_2- gstreamer-orc=0.4.33=h166bdaf_0- harfbuzz=6.0.0=h8e241bc_0- hdf5=1.14.0=nompi_hb72d44e_103- icu=70.1=h27087fc_0- idna=3.4=pyhd8ed1ab_0- importlib-metadata=6.6.0=pyha770c72_0- importlib-resources=5.12.0=pyhd8ed1ab_0- importlib_resources=5.12.0=pyhd8ed1ab_0- jack=1.9.22=h11f4161_0- jasper=2.0.33=h0ff4b12_1- jpeg=9e=h0b41bf4_3- keyutils=1.6.1=h166bdaf_0- kiwisolver=1.4.4=py39hf939315_1- krb5=1.20.1=h81ceb04_0- lame=3.100=h166bdaf_1003- lcms2=2.15=hfd0df8a_0- ld_impl_linux-64=2.40=h41732ed_0- lerc=4.0.0=h27087fc_0- libabseil=20230125.2=cxx17_h59595ed_2- libaec=1.0.6=hcb278e6_1- libblas=3.9.0=16_linux64_mkl- libbrotlicommon=1.0.9=h166bdaf_8- libbrotlidec=1.0.9=h166bdaf_8- libbrotlienc=1.0.9=h166bdaf_8- libcap=2.67=he9d0100_0- libcblas=3.9.0=16_linux64_mkl- libclang=15.0.7=default_h7634d5b_2- libclang13=15.0.7=default_h9986a30_2- libcups=2.3.3=h36d4200_3- libcurl=8.1.0=h409715c_0- libdb=6.2.32=h9c3ff4c_0- libdeflate=1.17=h0b41bf4_0- libdrm=2.4.114=h166bdaf_0- libedit=3.1.20191231=he28a2e2_2- libev=4.33=h516909a_1- libevent=2.1.10=h28343ad_4- libexpat=2.5.0=hcb278e6_1- libffi=3.4.2=h7f98852_5- libflac=1.4.2=h27087fc_0- libgcc-ng=12.2.0=h65d4601_19- libgcrypt=1.10.1=h166bdaf_0- libgfortran-ng=12.2.0=h69a702a_19- libgfortran5=12.2.0=h337968e_19- libglib=2.76.2=hebfc3b9_0- libglu=9.0.0=he1b5a44_1001- libgpg-error=1.46=h620e276_0- libgrpc=1.54.2=hb20ce57_2- libhwloc=2.9.1=hd6dc26d_0- libiconv=1.17=h166bdaf_0- libidn2=2.3.4=h166bdaf_0- liblapack=3.9.0=16_linux64_mkl- liblapacke=3.9.0=16_linux64_mkl- libllvm15=15.0.7=hadd5161_1- libnghttp2=1.52.0=h61bc06f_0- libnsl=2.0.0=h7f98852_0- libogg=1.3.4=h7f98852_1- libopencv=4.7.0=py39h2ca4621_1- libopus=1.3.1=h7f98852_1- libpciaccess=0.17=h166bdaf_0- libpng=1.6.39=h753d276_0- libpq=15.3=hbcd7760_1- libprotobuf=3.21.12=h3eb15da_0- libsndfile=1.2.0=hb75c966_0- libsqlite=3.42.0=h2797004_0- libssh2=1.10.0=hf14f497_3- libstdcxx-ng=12.2.0=h46fd767_19- libsystemd0=253=h8c4010b_1- libtasn1=4.19.0=h166bdaf_0- libtiff=4.5.0=h6adf6a1_2- libtool=2.4.7=h27087fc_0- libudev1=253=h0b41bf4_1- libunistring=0.9.10=h7f98852_0- libuuid=2.38.1=h0b41bf4_0- libuv=1.44.2=h166bdaf_0- libva=2.18.0=h0b41bf4_0- libvorbis=1.3.7=h9c3ff4c_0- libvpx=1.11.0=h9c3ff4c_3- libwebp-base=1.3.0=h0b41bf4_0- libxcb=1.13=h7f98852_1004- libxkbcommon=1.5.0=h79f4944_1- libxml2=2.10.3=hca2bb57_4- libzlib=1.2.13=h166bdaf_4- llvm-openmp=16.0.4=h4dfa4b3_0- lz4-c=1.9.4=hcb278e6_0- markdown=3.4.3=pyhd8ed1ab_0- markupsafe=2.1.2=py39h72bdee0_0- matplotlib=3.7.1=py39hf3d152e_0- matplotlib-base=3.7.1=py39he190548_0- metis=5.1.0=h58526e2_1006- mkl=2022.1.0=h84fe81f_915- mkl-devel=2022.1.0=ha770c72_916- mkl-include=2022.1.0=h84fe81f_915- mpfr=4.2.0=hb012696_0- mpg123=1.31.3=hcb278e6_0- multidict=6.0.4=py39h72bdee0_0- munkres=1.1.4=pyh9f0ad1d_0- mysql-common=8.0.32=hf1915f5_2- mysql-libs=8.0.32=hca2cd23_2- ncurses=6.3=h27087fc_1- nettle=3.8.1=hc379101_1- nspr=4.35=h27087fc_0- nss=3.89=he45b914_0- numpy=1.24.3=py39h6183b62_0- oauthlib=3.2.2=pyhd8ed1ab_0- opencv=4.7.0=py39hf3d152e_1- openh264=2.3.1=hcb278e6_2- openjpeg=2.5.0=hfec8fc6_2- openssl=3.1.0=hd590300_3- p11-kit=0.24.1=hc5aa10d_0- packaging=23.1=pyhd8ed1ab_0- pcre2=10.40=hc3806b6_0- pillow=9.4.0=py39h2320bf1_1- pip=23.1.2=pyhd8ed1ab_0- pixman=0.40.0=h36c2ea0_0- platformdirs=3.5.1=pyhd8ed1ab_0- ply=3.11=py_1- pooch=1.7.0=pyha770c72_3- protobuf=4.21.12=py39h227be39_0- pthread-stubs=0.4=h36c2ea0_1001- pulseaudio=16.1=hcb278e6_3- pulseaudio-client=16.1=h5195f5e_3- pulseaudio-daemon=16.1=ha8d29e2_3- py-opencv=4.7.0=py39hcca971b_1- pyasn1=0.4.8=py_0- pyasn1-modules=0.2.7=py_0- pycparser=2.21=pyhd8ed1ab_0- pyjwt=2.7.0=pyhd8ed1ab_0- pyopenssl=23.1.1=pyhd8ed1ab_0- pyparsing=3.0.9=pyhd8ed1ab_0- pyqt=5.15.7=py39h5c7b992_3- pyqt5-sip=12.11.0=py39h227be39_3- pysocks=1.7.1=pyha2e5f31_6- python=3.9.16=h2782a2a_0_cpython- python-dateutil=2.8.2=pyhd8ed1ab_0- python_abi=3.9=3_cp39- pytorch=1.10.2=py3.9_cuda11.3_cudnn8.2.0_0- pytorch-mutex=1.0=cuda- pytorch-scatter=2.0.9=py39_torch_1.10.0_cu113- pyu2f=0.1.5=pyhd8ed1ab_0- pyyaml=6.0=py39hb9d737c_5- qt-main=5.15.8=h5d23da1_6- re2=2023.03.02=h8c504da_0- readline=8.2=h8228510_1- requests=2.29.0=pyhd8ed1ab_0- requests-oauthlib=1.3.1=pyhd8ed1ab_0- rsa=4.9=pyhd8ed1ab_0- scipy=1.10.1=py39h6183b62_3- setuptools=67.7.2=pyhd8ed1ab_0- sip=6.7.9=py39h3d6467e_0- six=1.16.0=pyh6c4a22f_0- suitesparse=5.10.1=h9e50725_1- svt-av1=1.4.1=hcb278e6_0- tbb=2021.9.0=hf52228f_0- tensorboard=2.13.0=pyhd8ed1ab_0- tensorboard-data-server=0.7.0=py39h079d5ae_0- tk=8.6.12=h27826a3_0- toml=0.10.2=pyhd8ed1ab_0- tomli=2.0.1=pyhd8ed1ab_0- torchaudio=0.10.2=py39_cu113- torchvision=0.11.3=py39_cu113- tornado=6.3.2=py39hd1e30aa_0- tqdm=4.65.0=pyhd8ed1ab_1- typing-extensions=4.5.0=hd8ed1ab_0- typing_extensions=4.5.0=pyha770c72_0- tzdata=2023c=h71feb2d_0- unicodedata2=15.0.0=py39hb9d737c_0- urllib3=1.26.15=pyhd8ed1ab_0- werkzeug=2.3.4=pyhd8ed1ab_0- wheel=0.40.0=pyhd8ed1ab_0- x264=1!164.3095=h166bdaf_2- x265=3.5=h924138e_3- xcb-util=0.4.0=h166bdaf_0- xcb-util-image=0.4.0=h166bdaf_0- xcb-util-keysyms=0.4.0=h166bdaf_0- xcb-util-renderutil=0.3.9=h166bdaf_0- xcb-util-wm=0.4.1=h166bdaf_0- xkeyboard-config=2.38=h0b41bf4_0- xorg-fixesproto=5.0=h7f98852_1002- xorg-inputproto=2.3.2=h7f98852_1002- xorg-kbproto=1.0.7=h7f98852_1002- xorg-libice=1.0.10=h7f98852_0- xorg-libsm=1.2.3=hd9c2040_1000- xorg-libx11=1.8.4=h0b41bf4_0- xorg-libxau=1.0.9=h7f98852_0- xorg-libxdmcp=1.1.3=h7f98852_0- xorg-libxext=1.3.4=h0b41bf4_2- xorg-libxfixes=5.0.3=h7f98852_1004- xorg-libxi=1.7.10=h7f98852_0- xorg-libxrender=0.9.10=h7f98852_1003- xorg-renderproto=0.11.1=h7f98852_1002- xorg-xextproto=7.3.0=h0b41bf4_1003- xorg-xproto=7.0.31=h7f98852_1007- xz=5.2.6=h166bdaf_0- yaml=0.2.5=h7f98852_2- yarl=1.9.1=py39hd1e30aa_0- zipp=3.15.0=pyhd8ed1ab_0- zlib=1.2.13=h166bdaf_4- zstd=1.5.2=h3eb15da_6
prefix: /.../.conda/envs/pvoenv
conda env create -f VO_Module/environment.yaml
conda activate pvoenv
pip install evo --upgrade --no-binary evo
pip install gdown
cd VO_Module
python setup.py install

3.安装全景分割的部分
video panoptic segmentation requirements. The Video panoptic segmentation module is based on Detectron2, you can install Detectron2 following the instructions.

conda activate droidenv
# conda install pytorch==1.9.0 torchvision cudatoolkit=11.1 -c pytorch -c nvidiapython -m pip install -e VPS_Module
pip install git+https://github.com/cocodataset/panopticapi.git

可视化还要安装open3d

pip install open3d==0.17.0

4.处理数据集(可以先建立软链接)
下载vkitti
https://europe.naverlabs.com/research/computer-vision/proxy-virtual-worlds-vkitti-2/
在这里插入图片描述

在这里插入图片描述
生成训练和测试的数据集

conda activate pvoenv
sh tools/datasets/generate_vkitti_datasets.sh
python tools/datasets/generate_dynamic_masks.py

软链接映射数据集

假设你有一个数据集文件夹位于 dataset/VKITTI,并且你希望在 pvo/data/VKITTI 和 pvo2/data/VKITTI 中访问它,你可以按照以下步骤创建软链接:

  1. 打开终端,并进入 pvo 项目的根目录。

  2. 使用以下命令创建一个软链接来将 pvo/data/VKITTI 映射到 dataset/VKITTI:

ln -s /绝对路径/dataset/VKITTI /绝对路径/pvo/data/

替换 /绝对路径/ 为你的系统上的绝对路径。

  1. 同样,在 pvo2 项目的根目录,使用相同的命令创建软链接:
ln -s /绝对路径/dataset/VKITTI /绝对路径/pvo2/data/

这样,你在 pvo 和 pvo2 项目中的代码就可以通过相同的路径访问数据集文件夹 dataset/VKITTI,而无需复制或调整路径。请确保在软链接命令中使用正确的绝对路径以使其正常工作。

  1. 如果要取消软链接,删除’/绝对路径/pvo2/data/VKITTI’后面这个文件夹就行了

我们这里就可以通过软链接把VKITTI数据集进行映射

ln -s  /data/qinl/Dataset/Virtual_KITTI2   /data/qinl/code/pvo/datasets/

测试

下载模型后放在checkpoints中,参考checkpoint的readme.md

1.生成全景分割

sh tools/initial_segmentation.sh  

运行结果
在这里插入图片描述

2.vps->vo,vo Module generate pose, flow and depth.
因为numpy版本不同,所以这里np.range要改为np.arange
在这里插入图片描述

sh tools/test_vo_scene.sh  

可视化运行效果(去掉–disable_vis)
在这里插入图片描述

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

sh tools/test_vps.sh  

目前有点bug

训练

1.训练一下vo部分

tip:GPU选择


export CUDA_VISIBLE_DEVICES=1,2,3,4python VO_Module/train.py --gpus=4 --lr=0.00025

报错

AttributeError: module ‘distutils’ has no attribute ‘version’

问题: AttributeError: module ‘distutils’ has no attribute ‘version’.

解决: setuptools版本问题”,版本过高导致的问题;setuptools版本

第一步: pip uninstall setuptools【使用pip,不能使用 conda uninstall setuptools ; 【不能使用conda的命令,原因是,conda在卸载的时候,会自动分析与其相关的库,然后全部删除,如果y的话,整个环境都需要重新配置。

第二步: pip或者conda install setuptools==59.5.0【现在最新的版本已经到了65了,之前的老版本只是部分保留,找不到的版本不行

IndexError: list index out of range

运行python tools/datasets/generate_dynamic_masks.py 发生的报错
需要从ALL_clone里面把panoptic_gt_id单独复制出来,放在每个secene的clone里面
在这里插入图片描述
但其实可以直接改一下代码,因为segments其实对于生成dynamic mask并没有用
在这里插入图片描述

运行vkitti数据集

需要修改的文件
在这里插入图片描述
在这里插入图片描述

这篇关于PVO: Panoptic Visual Odometry代码复现(如何在脚本设置GPU选择,软链接映射数据集)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/701843

相关文章

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq

mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespace id不一致处理

《mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespaceid不一致处理》文章描述了公司服务器断电后数据库故障的过程,作者通过查看错误日志、重新初始化数据目录、恢复备... 周末突然接到一位一年多没联系的妹妹打来电话,“刘哥,快来救救我”,我脑海瞬间冒出妙瓦底,电信火苲马扁.

golang获取prometheus数据(prometheus/client_golang包)

《golang获取prometheus数据(prometheus/client_golang包)》本文主要介绍了使用Go语言的prometheus/client_golang包来获取Prometheu... 目录1. 创建链接1.1 语法1.2 完整示例2. 简单查询2.1 语法2.2 完整示例3. 范围值

Java中有什么工具可以进行代码反编译详解

《Java中有什么工具可以进行代码反编译详解》:本文主要介绍Java中有什么工具可以进行代码反编译的相关资,料,包括JD-GUI、CFR、Procyon、Fernflower、Javap、Byte... 目录1.JD-GUI2.CFR3.Procyon Decompiler4.Fernflower5.Jav

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

前端知识点之Javascript选择输入框confirm用法

《前端知识点之Javascript选择输入框confirm用法》:本文主要介绍JavaScript中的confirm方法的基本用法、功能特点、注意事项及常见用途,文中通过代码介绍的非常详细,对大家... 目录1. 基本用法2. 功能特点①阻塞行为:confirm 对话框会阻塞脚本的执行,直到用户作出选择。②

Python3脚本实现Excel与TXT的智能转换

《Python3脚本实现Excel与TXT的智能转换》在数据处理的日常工作中,我们经常需要将Excel中的结构化数据转换为其他格式,本文将使用Python3实现Excel与TXT的智能转换,需要的可以... 目录场景应用:为什么需要这种转换技术解析:代码实现详解核心代码展示改进点说明实战演练:从Excel到