Dis-PU复现踩坑

源码链接:liruihui/Dis-PU: Point Cloud Upsampling via Disentangled Refinement, CVPR, 2021 (github.com)

一、安装CUDA和cudnn

Dis-PU用的cuda版本是10.2

采用非root用户安装cuda的方式,参考教程:非root用户在linux下安装多个版本的CUDA和cuDNN(cuda 8、cuda 10.1 等)_hizengbiao曾小虎的博客-CSDN博客普通用户不使用sudo安装多个版本CUDA和cuDNN确定安装的软件版本下载CUDA Toolkit下载cuDNN安装CUDA配置cuDNN配置用户环境变量安装多个版本的CUDA参考文献注:本文中服务器目录结构解释如下:用户名为zb,目录 /home/zb/cuda/用于存放不同的cuda版本,每安装一个版本的CUDA就在该目录下新建一个文件夹,如cuda-8.0,并安装在相应的目录下,安...https://blog.csdn.net/hizengbiao/article/details/88625044

  • 下载cuda需要注册,注册之后可以直接下载。
  • 安装路径为/home/lyl/cuda/cuda-10.2
  • 注意安装过程中不要勾选安装驱动,否则会安装失败。
  • 可以通过nvcc -V查看安装的cuda版本,目前没有找到可行的查看cudnn版本的指令,但是依照教程安装不会有问题。

二、安装TensorFlow

首先激活虚拟环境(这步可根据个人情况省略)

我安装的是GPU的版本(之前先装了cpu版本但是报错了,因为服务器是用gpu跑的)

作者github上写的是1.11.1版本,但是我去查了根本没有这个版本,于是装了1.13.1。

conda install tensorflow-gpu==1.13.1

注:用conda安装会顺便装一些别的依赖包,用pip就不会,所以推荐conda。

三、配置编译环境

1. 修改tf_ops/compile_ops.sh

由于是在非root用户下安装的cuda,所以要更改编译文件中的cuda路径。

#/bin/bash

TF_CFLAGS=$(python -c 'import tensorflow as tf; print(" ".join(tf.sysconfig.get_compile_flags()))')
TF_LFLAGS=$(python -c 'import tensorflow as tf; print(" ".join(tf.sysconfig.get_link_flags()))')
CUDA_ROOT=/home/lyl/cuda/cuda-10.2 #改这个就可以


g++ -std=c++11 -shared ./interpolation/tf_interpolate.cpp -o ./interpolation/tf_interpolate_so.so  -I $CUDA_ROOT/include -lcudart -L $CUDA_ROOT/lib64/ -fPIC ${TF_CFLAGS} ${TF_LFLAGS} -O2

$CUDA_ROOT/bin/nvcc ./grouping/tf_grouping_g.cu -o ./grouping/tf_grouping_g.cu.o -c -O2 -DGOOGLE_CUDA=1 -x cu -Xcompiler -fPIC
g++ -std=c++11 -shared ./grouping/tf_grouping.cpp ./grouping/tf_grouping_g.cu.o -o ./grouping/tf_grouping_so.so -I $CUDA_ROOT/include -L $CUDA_ROOT/lib64/ -fPIC ${TF_CFLAGS} ${TF_LFLAGS} -O2

$CUDA_ROOT/bin/nvcc ./sampling/tf_sampling_g.cu -o ./sampling/tf_sampling_g.cu.o -c -O2 -DGOOGLE_CUDA=1 -x cu -Xcompiler -fPIC
g++ -std=c++11 -shared ./sampling/tf_sampling.cpp ./sampling/tf_sampling_g.cu.o -o ./sampling/tf_sampling_so.so -I $CUDA_ROOT/include -L $CUDA_ROOT/lib64/ -fPIC ${TF_CFLAGS} ${TF_LFLAGS} -O2

$CUDA_ROOT/bin/nvcc ./approxmatch/tf_approxmatch_g.cu -o ./approxmatch/tf_approxmatch_g.cu.o -c -O2 -DGOOGLE_CUDA=1 -x cu -Xcompiler -fPIC
g++ -std=c++11 -shared ./approxmatch/tf_approxmatch.cpp ./approxmatch/tf_approxmatch_g.cu.o -o ./approxmatch/tf_approxmatch_so.so -I $CUDA_ROOT/include -L $CUDA_ROOT/lib64/ -fPIC ${TF_CFLAGS} ${TF_LFLAGS} -O2

$CUDA_ROOT/bin/nvcc ./nn_distance/tf_nndistance_g.cu -o ./nn_distance/tf_nndistance_g.cu.o -c -O2 -DGOOGLE_CUDA=1 -x cu -Xcompiler -fPIC
g++ -std=c++11 -shared ./nn_distance/tf_nndistance.cpp ./nn_distance/tf_nndistance_g.cu.o -o ./nn_distance/tf_nndistance_so.so -I $CUDA_ROOT/include -L $CUDA_ROOT/lib64/ -fPIC ${TF_CFLAGS} ${TF_LFLAGS} -O2

cd ../

2. 修改tf_ops下的其他文件夹的编译文件

主要修改:

① cuda的安装位置

② TensorFlow的安装位置(因为我用了虚拟环境)

贴一下修改后的文件。

tf_sampling_compile.sh

#!/usr/bin/env bash
#/bin/bash
/home/lyl/cuda//cuda-10.2/bin/nvcc tf_sampling_g.cu -o tf_sampling_g.cu.o -c -O2 -DGOOGLE_CUDA=1 -x cu -Xcompiler -fPIC
g++ -std=c++11 tf_sampling.cpp tf_sampling_g.cu.o -o tf_sampling_so.so -shared -fPIC -I /home/lyl/.conda/envs/dispu/lib/python3.6/site-packages/tensorflow/include  -I /home/lyl/cuda/cuda-10.2/include -I /home/lyl/.conda/envs/dispu/lib/python3.6/site-packages/tensorflow/include/external/nsync/public -lcudart -L /home/lyl/cuda/cuda-10.2/lib64/ -L/home/lyl/.conda/envs/dispu/lib/python3.6/site-packages/tensorflow -ltensorflow_framework -O2 -D_GLIBCXX_USE_CXX11_ABI=1

tf_grouping_compile.sh

#!/usr/bin/env bash
#/bin/bash
/home/lyl/cuda/cuda-10.2/bin/nvcc tf_grouping_g.cu -o tf_grouping_g.cu.o -c -O2 -DGOOGLE_CUDA=1 -x cu -Xcompiler -fPIC
g++ -std=c++11 tf_grouping.cpp tf_grouping_g.cu.o -o tf_grouping_so.so -shared -fPIC -I /home/lyl/.conda/envs/dispu/lib/python3.6/site-packages/tensorflow/include  -I /home/lyl/cuda/cuda-10.2/include -I /home/lyl/.conda/envs/dispu/lib/python3.6/site-packages/tensorflow/include/external/nsync/public -lcudart -L/home/lyl/cuda/cuda-10.2/lib64/ -L/home/lyl/.conda/envs/dispu/lib/python3.6/site-packages/tensorflow -ltensorflow_framework -O2 -D_GLIBCXX_USE_CXX11_ABI=1

tf_approxmatch_compile.sh

#!/usr/bin/env bash
#/bin/bash

# TF1.4
/home/lyl/cuda/cuda-10.2/bin/nvcc tf_approxmatch_g.cu -o tf_approxmatch_g.cu.o -c -O2 -DGOOGLE_CUDA=1 -x cu -Xcompiler -fPIC
g++ -std=c++11 tf_approxmatch.cpp tf_approxmatch_g.cu.o -o tf_approxmatch_so.so -shared -fPIC -I /home/lyl/.conda/envs/dispu/lib/python3.6/site-packages/tensorflow/include  -I /home/lyl/cuda/cuda-10.2/include -I /home/lyl/.conda/envs/dispu/lib/python3.6/site-packages/tensorflow/include/external/nsync/public -lcudart -L /home/lyl/cuda/cuda-10.2/lib64/ -L/home/lyl/.conda/envs/dispu/lib/python3.6/site-packages/tensorflow -ltensorflow_framework -O2 -D_GLIBCXX_USE_CXX11_ABI=1

tf_interpolate_compile.sh

#!/usr/bin/env bash

g++ -std=c++11 tf_interpolate.cpp -o tf_interpolate_so.so -shared -fPIC -I /home/lyl/.conda/envs/dispu/lib/python3.6/site-packages/tensorflow/include  -I /home/lyl/cuda/cuda-10.2/include -I /home/lyl/.conda/envs/dispu/lib/python3.6/site-packages/tensorflow/include/external/nsync/public -lcudart -L /home/lyl/cuda/cuda-10.2/lib64/ -L/home/lyl/.conda/envs/dispu/lib/python3.6/site-packages/tensorflow -ltensorflow_framework -O2 -D_GLIBCXX_USE_CXX11_ABI=1

tf_nndistance_compile.sh

#!/usr/bin/env bash
/home/lyl/cuda/cuda-10.2/bin/nvcc tf_nndistance_g.cu -o tf_nndistance_g.cu.o -c -O2 -DGOOGLE_CUDA=1 -x cu -Xcompiler -fPIC
g++ -std=c++11 tf_nndistance.cpp tf_nndistance_g.cu.o -o tf_nndistance_so.so -shared -fPIC -I /home/lyl/.conda/envs/dispu/lib/python3.6/site-packages/tensorflow/include  -I /home/lyl/cuda/cuda-10.2/include -I /home/lyl/.conda/envs/dispu/lib/python3.6/site-packages/tensorflow/include/external/nsync/public -lcudart -L /home/lyl/cuda/cuda-10.2/lib64/ -L/home/lyl/.conda/envs/dispu/lib/python3.6/site-packages/tensorflow -ltensorflow_framework -O2 -D_GLIBCXX_USE_CXX11_ABI=1

注:如果不改第③个,报错信息是:TensorFlow undefined symbol: __cudaPushCallConfiguration

3. 运行修改后的编译文件

运行:tf_sampling_compile.sh、tf_grouping_compile.sh、tf_approxmatch_compile.sh、tf_interpolate_compile.sh、tf_nndistance_compile.sh。例如:

sh tf_nndistance_compile.sh

运行Dis-PU文件夹下的compile_op.sh

sh compile_op.sh

三、训练

编译完成后执行训练操作。

首先从 Google Drive 下载 HDF5 格式的训练补丁,并将其放入文件夹 data 中。

PUGAN_poisson_256_poisson_1024.h5 - Google 云端硬盘

执行训练语句

python dis-pu.py --phase train

注:执行训练语句时可能会出现缺少包的情况,根据报错pip install就好了。

四、测试

首先从 Google Drive 下载预训练模型,将其解压缩并放入文件夹“model”中。 

model.rar - Google 云端硬盘

执行测试语句:

python dis-pu.py --phase test

五、评估

1. P2F

安装CGAL,教程:Linux(Ubuntu)安装CGAL(非root)_Yilien10的博客-CSDN博客

cd evaluation_code
cmake .
make
./evaluation fandisk.off fandisk.xyz
./evaluation Icosahedron.off Icosahedron.xyz

可以得到P2F的评估数据。

2. CD HD

evaluate.py。

把这一行的注释取消掉:

parser.add_argument("--save_path", type=str, required=True, help="path to save the result")

把预测数据和地面真值放到对应的文件夹下,注意要让文件名保持完全一致。

运行evaluate.py:

python evaluate.py --pred /home/lyl/pu/Dis-PU/data/test/output/ --gt /home/lyl/pu/Dis-PU/data/test/gt/ --save_path /home/lyl/pu/Dis-PU/data/eval/

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值