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

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

  • 1. 编译tf_ops文件夹下的三个动态库
  • 2. 修改Python版本、TF版本不一致带来的差异
  • 3. 下载训练数据
  • 4. 模型训练

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/792111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序代码分析工具

文章目录 工具简介和安装DoxygenGraphziv软件安装 工具的运用启动和配置工具分析结果 工具简介和安装 Doxygen Doxygen 是一种用于从 C 、C 、Objective-C 、C# 、Java 和 Python 等语言的源代码中生成文档的工具。它通过解析源代码中的注释来创建详细的 API 文档,…

码农失业倒计时?全球首个大厂AI程序员来了

进入互联网时代,程序员作为高收入职业的代表,长久以来一直是众多求职者梦寐以求的工作方向。程序员们凭借其对计算机科学的深刻理解和技术创新能力,不仅推动了科技的进步,也为自己赢得了可观的经济回报。 然而,随着人…

多叉树题目:N 叉树的层序遍历

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:N 叉树的层序遍历 出处:429. N 叉树的层序遍历 难度 4 级 题目描述 要求 给定一个 N 叉树的根结点 root \texttt{root} root&#xf…

SAP FI学习笔记04 - 基础知识 - 新规会计科目,用 应收账款科目 做个例子

上一章讲了 应付账款 的来源及操作。 SAP FI学习笔记03 - 应付账款-CSDN博客 本章先尝试做一个会计科目,然后再用 应收账款 科目做个例子。 应收账款 和 应付账款 一样,也有两个视图。 1,新建几个会计科目 这一章来尝试着创建会计科目。 …

蓝桥杯嵌入式备考笔记

keil配置 LED-KEY-LCD 留下这几个 按键 创建俩个文件写代码,记得把这两个文件加进工程 led uwTick 1ms执行一次 写错了 不是1000 是100 PD2 SET 表示打开锁存器 可以操作LED LED对应PC引脚拉高是熄灭 key 如果要在main使用需要extern LCD最多21位 …

通讯录(顺序表)保存数据

在通讯录的基础上加上三个函数实现数据的保存。 分别为录入数据,加入数据与保存数据。 加入数据 先检查通讯录空间是否足够,然后将结构体ab中的数据全部放入通讯录mn中。 注意:字符串的拷贝要使用函数strcpy而不能直接用 加入完成之后将通…

深入浅出 -- 系统架构之微服务架构

1.1 微服务的架构特征: 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责 自治:团队独立、技术独立、数据独立,独立部署和交付 面向服务:服务提供统一标准的接口&…

Java数据结构-队列

目录 1. 队列概念2. 模拟实现队列2.1 链式队列2.2 循环队列 3. 双端队列4. 队列的应用4.1 用队列实现栈4.2 用栈实现队列 1. 队列概念 队列是一种只能在一端进行插入数据操作,另一端进行删除数据操作的数据结构,插入数据的叫队尾,删除数据的…

若依框架mysql 搜索中文等于不生效

背景&#xff0c;字段存储的是中文 不生效代码如下 <if test"constellation ! null and constellation ! ">AND u.constellation #{constellation}</if> 正确生效的代码如下 <if test"constellation ! null and constellation ! ">A…

Python搭建编程环境-安装Python3解释器

✅作者简介&#xff1a;CSDN内容合伙人、新星计划第三季Python赛道Top1&#x1f3c5; &#x1f525;本文已收录于Python系列专栏&#xff1a;零基础学Python &#x1f4ac;订阅专栏后可私信博主进入Python学习交流群&#xff0c;进群可领取Python视频教程以及Python相关电子书…

复现k8s黄金票据学习

1.什么是黄金票据 在 Kubernetes 中&#xff0c;"黄金票据"并不是一个常见的术语。可能你想了解的是服务账户&#xff08;Service Account&#xff09;。服务账户是 Kubernetes 中用于身份验证和授权的一种机制。它们允许 Pods 或其他工作负载在 Kubernetes 集群中与…

PAC的架构细节

PAC的架构细节&#xff1f;硬件原理&#xff1f;PAC如何生成&#xff1f;如何检查&#xff1f;指令集&#xff1f;本博客探讨这些问题。

Java集合(个人整理笔记)

目录 1. 常见的集合有哪些&#xff1f; 2. 线程安全的集合有哪些&#xff1f;线程不安全的呢&#xff1f; 3. Arraylist与 LinkedList 异同点&#xff1f; 4. ArrayList 与 Vector 区别&#xff1f; 5. Array 和 ArrayList 有什么区别&#xff1f;什么时候该应 Array而不是…

Prometheus+grafana环境搭建方法及流程两种方式(docker和源码包)(一)

1.选型对比 最近项目上有对项目服务及中间件的监控需求&#xff0c;要做实现方案调研&#xff0c;总结一下自己的成果&#xff0c;目前业界主流可选的方案有&#xff1a; 国外开源&#xff1a; Prometheus&#xff1a;Prometheus - Monitoring system & time series dat…

前端订阅后端推送WebSocket定时任务

0.需求 后端定时向前端看板推送数据&#xff0c;每10秒或者30秒推送一次。 1.前言知识 HTTP协议是一个应用层协议&#xff0c;它的特点是无状态、无连接和单向的。在HTTP协议中&#xff0c;客户端发起请求&#xff0c;服务器则对请求进行响应。这种请求-响应的模式意味着服务器…

【史上最细教程】 Typora+PicGo+Gitee 实现发给别人的Typora笔记也能看到图片

文章目录 问题描述前提准备&#xff1a;操作步骤&#xff1a;1.Gitee新建项目作为图床、获取仓库访问密钥2.PicGo连接Gitee图床3.Typora连接PicGo 问题描述 Typora记录的笔记&#xff0c;图片保存默认在本地&#xff0c;这时候复制出来上传CSDN、或发给别人的时候图片就是空链…

HCIP实验--5

实验要求&#xff1a; 实现过程&#xff1a; &#xff08;一&#xff09;配置IP地址&#xff1a; AR1: [AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 200.1.1.1 24 Apr 3 2024 19:25:38-08:00 AR1 %%01IFNET/4/LINK_STATE(l)[0]:The line protocol IP on the interf…

C++基础13:C++输入输出

此专栏为移动机器人知识体系下的编程语言中的 C {\rm C} C从入门到深入的专栏&#xff0c;参考书籍&#xff1a;《深入浅出 C {\rm C} C》(马晓锐)和《从 C {\rm C} C到 C {\rm C} C精通面向对象编程》(曾凡锋等)。 12.C输入/输出 12.1 C流类 计算机的输入和输出是数据传送的过…

Vue.js---------Vue基础

能够说出Vue的概念和作用能够使用vue/cli脚手架工程化开发能够熟练Vue指令 一.vue基本概念 1.学习vue Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 渐进…

间接调制和带通采样!!(非奈奎斯特采样定理)

1. 直接变频 前面讲解数字调制原理时&#xff0c;直接利用IQ调制将基带信号变换为频带信号&#xff0c;这种频率变换一般被称为直接上变频&#xff1b;解调时&#xff0c;直接利用IQ解调&#xff0c;将频带信号变换回基带信号&#xff0c;这种频率变换一般被称为直接下变频。直…