当前位置: 主页 > 图像 >

Colab上运行pointnet++

时间:2019-05-21  作者:haden   点击:
【摘要】神经网络训练需要强大的计算资源,谷歌刚好提供了免费的Colab,提供Tesla K80显卡使用。PointNet++是一个比较著名的点云分割、分类网络框架。介绍如何在Colab上免费薅羊毛。
Google Colab简介
Google Colaboratory是谷歌开放的一款研究工具,主要用于机器学习的开发和研究。这款工具现在可以免费使用,但是不是永久免费暂时还不确定。Google Colab最大的好处是给广大的AI开发者提供了免费的GPU使用!GPU型号是Tesla K80!你可以在上面轻松地跑例如:Keras、Tensorflow、Pytorch等框架。

中文教程:https://www.jianshu.com/p/000d2a9d36a0


PointNet++简介
PointNet++是PointNet的升级版,PointNet不能很好的捕捉由度量空间引入的局部结构,也就限制了它识别细粒度类别的能力以及对复杂场景的泛化能力,因此提出一个层级的神经网络递归地应用在嵌套划分的输入点云集。通过探索度量空间的距离,PointNet++的网络结构随着上下文尺度的增加可以学习到局部特征。更深的观察发现,点云集的密度一般都是不均匀的,但PointNet是在均匀采样密度的点集上训练的,这会造成很大的性能下降,PointNet++的点集学习方法可以适应性的组合不同尺度的特征。
该算法已经在GitHub上开源。



使用步骤
1. 挂载网盘,下载源码
挂载网盘方法可以见中文教程。
挂载网盘后,从github下载源码:


!mkdir pointnet2
!git clone https://github.com/charlesq34/pointnet2.git

2. 修改程序
如果使用的是Python3.6,程序中的print需要全部加括号,代码中出现 xrange 更改为range。

3. 编译.so 文件
在tf_ops/3d_interpolation  tf_ops/grouping  tf_ops/sampling 文件夹下分别有一个.sh文件和.cpp .cu文件。
.cpp文件是C++代码,.cu是CUDA代码,神经网络部分计算是由C++和显卡完成提高运行速度。.sh文件是编译.cpp和.cu文件的脚本。
写这篇文章时Colab提供的是CUDA-10.0 Python3.6 TensorFlow1.13.1
修改.sh文件使得符合使用环境,以tf_ops/grouping/tf_grouping_compile.sh为例:


github的readme上写出了修改方法,也可以像这样直接修改环境。TF1.4以上都使用TF1.4的配置,注释掉原来的TF1.2配置。
github的issue里有人提到高版本使用时最后的 -D_GLIBCXX_USE_CX11_ABI=0 需要注释掉,我并没有遇到这个问题。
进入运行脚本,生成.so文件:


os.chdir("/content/drive/Colab/pointnet/pointnet2/tf_ops/grouping")
!bash tf_grouping_compile.sh
 

其他两个文件类似。
注意:训练时提示NotFoundError,但是生成的.so文件确实存在,需要注意是否正确编译,加载时是加载函数,如果编译错误python无法找到正确函数也会报错。编译会提示Warning,没有处理返回值,除此之外不应该有别的错误。


4. 训练
之后就可以训练了。


os.chdir("/content/drive/Colab/pointnet/pointnet2")
!python train.py
 

 

顶一下
(1)
100%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
验证码: 点击我更换图片