Ubuntu18.04+2070s+TF2.x环境,单卡训练PointNet++实战

本文详细介绍了在Ubuntu18.04系统上配置TF2.x版本环境,处理Python版本差异,编译PointNet+TF2.x的自定义动态库,下载和预处理训练数据,以及实际模型训练过程中的问题解决方法。
摘要由CSDN通过智能技术生成

1. 编译tf_ops文件夹下的三个动态库

该文件夹下定义了一些pointnet++模型中需要使用的cuda核函数,如FPS(最远点采样)、grouping等,所以在训练模型前,需要先编译这些自定义的op

具体操作
在每一个子文件夹中,运行sh tf_xxx.sh (每个子文件夹中不一样,tab一下就出来了)。

有可能需要根据自己的环境,对sh文件进行修改,例如我的环境中,cuda、tensorflow的版本、安装位置和作者都不一样,因此进行了一些头文件、库文件的路径修改,如下:

#/bin/bash
/usr/local/cuda/bin/nvcc tf_sampling_g.cu -o tf_sampling_g.cu.o -c -O2 -DGOOGLE_CUDA=1 -x cu -Xcompiler -fPIC
# 原命令 /usr/local/cuda-8.0/bin/nvcc tf_sampling_g.cu -o tf_sampling_g.cu.o -c -O2 -DGOOGLE_CUDA=1 -x cu -Xcompiler -fPIC

# TF1.2
g++ -std=c++11 tf_sampling.cpp tf_sampling_g.cu.o -o tf_sampling_so.so -shared -fPIC -I /home/hikai/.local/lib/python3.6/site-packages/tensorflow_core/include/ -I /usr/local/cuda/include -lcudart -L /usr/local/cuda/lib64/ -L /home/hikai/.local/lib/python3.6/site-packages/tensorflow_core/ -ltensorflow_framework -O2 -D_GLIBCXX_USE_CXX11_ABI=0

#原命令
## TF1.2
## g++ -std=c++11 tf_sampling.cpp tf_sampling_g.cu.o -o tf_sampling_so.so -shared -fPIC -I /usr/local/lib/python2.7/dist-packages/tensorflow/include -I /usr/local/cuda-8.0/include -lcudart -L /usr/local/cuda-8.0/lib64/ -O2 -D_GLIBCXX_USE_CXX11_ABI=0

# TF1.4
# g++ -std=c++11 tf_sampling.cpp tf_sampling_g.cu.o -o tf_sampling_so.so -shared -fPIC -I /usr/local/lib/python2.7/dist-packages/tensorflow/include -I /usr/local/cuda-8.0/include -I /usr/local/lib/python2.7/dist-packages/tensorflow/include/external/nsync/public -lcudart -L /usr/local/cuda-8.0/lib64/ -L/usr/local/lib/python2.7/dist-packages/tensorflow -ltensorflow_framework -O2 -D_GLIBCXX_USE_CXX11_ABI=0

(这里我增加了-ltensorflow_framework,是因为我编译时报错 undefined symbol: _ZTIN10tensorflow8OpKernelE了。)

也可以使用作者的全英ReadMe文档中推荐的方式


To compile the operators in TF version >=1.4, you need to modify the compile scripts slightly.

First, find Tensorflow include and library paths.

        TF_INC=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_include())')
        TF_LIB=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_lib())')
        
Then, add flags of `-I$TF_INC/external/nsync/public -L$TF_LIB -ltensorflow_framework` to the `g++` commands.

编译完成
编译完成后,每个子文件夹中会有对应的.so文件,如下图所示:
在这里插入图片描述

2. 修改Python版本、TF版本不一致带来的差异

由于原作者用的python版本为2, 我用的是3, 因此所有print后面需要加括号, xrange也要改为range

原作者使用的是TF1.x,我用的是TF2.X, 因此直接在开头import tensorflow.compat.v1 as tf了

(或许还有其他差异,如果编译或运行报错,也可以优先考虑一下是不是版本差异导致的问题)

3. 下载训练数据

我是用normal数据训练的,用wget下载一下就好,

wget https://shapenet.cs.stanford.edu/media/modelnet40_normal_resampled.zip

4. 模型训练

最后,使用python train.py --normal ,就可以训练了。

我直接进行训练时,由于使用normal的数据,维度是6的, 在shape方面报了个不匹配的错,于是做了如下修改,保障代码可运行

    # cur_batch_data = np.zeros((BATCH_SIZE,NUM_POINT,TRAIN_DATASET.num_channel()))
    cur_batch_data = np.zeros((BATCH_SIZE,NUM_POINT,3))
    
    # 略去...
    
    # 改为只取前3列
    cur_batch_data[0:bsize,...] = batch_data[:,:,0:3]
    # cur_batch_data[0:bsize,...] = batch_data

(改的比较暴力,还没来得及细看,有可能其实是应该指定其他参数来解决这个问题的,后续如果发现了,再来矫正。)

最后,模型就可以训起来啦,如下~
在这里插入图片描述

  • 23
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

steptoward

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值