Skip to content
pointnet2 implemented using keras and tensorflow
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
result_image
tf_ops
train_out
util
.gitattributes
.gitignore
LICENSE
README.md
confusion_matrix.png
eval_cls.py
model_cls.py
modelnet_h5_dataset.py
pointnet2_cls_msg.py
tf_cls.py

README.md

pointnet2-keras

For English readme, please open an issue. I may consider to create one. If I am not, you can just use chrome to translate.

介绍

本项目是基于 pointnet2 的一个衍生项目,主要作用是基于 keras 构建 pointnet2 的神经网络。

由于 pointnet2 使用了 cuda 和 c++ 编写的代码,需要使用者自行编译动态链接库,在 python 代码里面使用tf.load_op_library('some_opration.so')),而这些 op 是对 tf tensor 的一些操作,所以不可能使用keras的Lambda层来包裹这些op(其他非 so 文件的操作是可以包裹的,如:Lambda(lambda x: K.concatenate(x, axis=-1))([grouped_points, grouped_xyz])),使得最终使用 keras 构建的logits或叫pred或叫prediction不能使用Model(input=some_input, output=logits)来构建 model 实例,也就不能使用 keras 高阶 API ,如model.fit(some_params)model.fit_generator(another_params)

综上所述,本项目使用keras仅仅使用其创建层的能力,也就是说,层与层之间,传递的还是 tensorflow 的 tensor,最终也只能使用 tensorflow 的 API 来进行训练。

本项目尽可能多的,使用了 keras 的 API:

from keras import backend as K

K.set_session(sess)
K.max(x, axis=2)
K.permute_dimensions(x, [0, 2, 3, 1])
K.concatenate(x, axis=-1)
K.placeholder(dtype=np.float32, shape=(batch_size, num_point, 3))

等等。

术语提示

术语 全称 说明
tf tensorflow
K keras.backend keras的后台
op opration 操作
ModelNet40 从ShapeNet下载的数据集,包含40个分类,每个数据2048个点
cm confusion matix 混淆矩阵,一看到图您就能明白是什么意思了
cls classification 分类
seg segmentation 分割
h5 h5py,hdf5 一个数据存储的python库,h5作为格式后缀
msg multi-scale-grouping 多尺度分组(详见论文内介绍)
ssg single-scale-grouping 单尺度分组(详见论文内介绍)
mlp multi-layer-perceptron 多层感知器(简单理解就是for循环添加一堆大小不一样的Dense层的意思)
tqdm 一个python进度条展示库
bn batch normalization 批次正则化,有什么作用可自行google
acc accuracy 准确率
val value、validate 值 或者 验证集
eval evaluate 评估、评测、评价
sa set abstraction 系列抽取(详见论文内描述)
nn Neural Network 神经网络
shuffle 打乱、乱序
fp feature propagation 特征传递
model 有时候一个数据叫做一个model,有时候一些神经网络的堆叠叫做model,有时候训练完成后的权重保存的文件叫model
logits 没有softmax的prediction

点云分类

数据集

下载 ModelNet40 数据,解压到本项目根目录的data文件夹下

cuda库

您需要手动编译tf_ops文件夹下所有cuda代码。

具体方法:执行tf_ops/grouping/tf_grouping_compile.shtf_ops/sampling/tf_sampling_compile.sh

如:

$ cd tf_ops/grouping
$ ./tf_grouping_compile.sh

请务必 cd 到相应 op 的目录下面在进行编译,脚本文件里面采用了相对路径,否则编译可能出现问题。

但是能执行成功的前提是您有正确安装 cuda 和 cudnn(相关安装方法,这里不再赘述,如果您还不会在 Linux 环境下安装 GPU 版本的 tensorflow 和其运行环境,建议您先不要着急使用本项目),而且文件里面的路径需要您手动根据实际进行调整。

原作者书写的编译教程:https://github.com/charlesq34/pointnet2#compile-customized-tf-operators

训练

运行:

$ python tf_cls.py

可视化

ckpt 文件保存在summary文件夹下。

运行:

$ tensorboard --logdir summary

性能

  1. 训练集准确率和验证集准确率

训练集准确率和验证集准确率

  1. 训练集损失和验证集损失率

训练集损失和验证集损失

  1. 利用keras构建的神经网络

利用keras构建的神经网络

  1. 训练结果混淆矩阵

confusion matix

TODO

  • part segmentation
  • semantic scene

参考资料

  1. TianzhongSong/PointNet-Keras https://github.com/TianzhongSong/PointNet-Keras
  2. charlesq34/pointnet2 https://github.com/charlesq34/pointnet2
You can’t perform that action at this time.