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

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

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

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

相关推荐

  1. Pointnet++环境配置(Windows11和ubuntu)及训练教程

    2024-04-11 23:50:02       66 阅读
  2. llama2学习-预训练+SFT指令微调(单机)

    2024-04-11 23:50:02       34 阅读
  3. <span style='color:red;'>pointnet</span>

    pointnet

    2024-04-11 23:50:02      34 阅读
  4. Ubuntu 2x.04 编译FFmpeg 脚本

    2024-04-11 23:50:02       64 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-11 23:50:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-11 23:50:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-11 23:50:02       87 阅读
  4. Python语言-面向对象

    2024-04-11 23:50:02       96 阅读

热门阅读

  1. Frp多端口映射

    2024-04-11 23:50:02       32 阅读
  2. day04-MQ

    day04-MQ

    2024-04-11 23:50:02      28 阅读
  3. 二叉树链式存储详解

    2024-04-11 23:50:02       40 阅读
  4. c++手机通讯录管理系统280

    2024-04-11 23:50:02       39 阅读
  5. [树莓派]树莓派Raspbian系统安装tesseract-ocr实现OCR

    2024-04-11 23:50:02       37 阅读
  6. 基于STM32四轴飞行器方案设计 1

    2024-04-11 23:50:02       40 阅读
  7. 每日一题 第八十八期 洛谷 滑动窗口

    2024-04-11 23:50:02       43 阅读
  8. leetcode26--删除有序数组中的重复项

    2024-04-11 23:50:02       31 阅读