PointNET 点云深度学习
https://github.com/charlesq34/pointnet
-
环境
conda create --name pointnet python=3.6
activate pointnet
conda install tensorflow-gpu=1.12
conda install matplotlib
conda install plyfile
conda install pillow
conda create --name pointnet2 python=2.7 (windows不支持tensorflow-gpu=1.2)
activate pointnet2
conda install tensorflow-gpu=1.2(没有)
-
数据
-
modelnet40
点云数据 http://modelnet.cs.princeton.edu/
hdf5数据 https://shapenet.cs.stanford.edu/media/modelnet40_ply_hdf5_2048.zip
-
局部数据ShapeNetPart
点云数据 http://web.stanford.edu/~ericyi/project_page/part_annotation/index.html
https://shapenet.cs.stanford.edu/ericyi/shapenetcore_partanno_v0.zip
hdf5数据 https://shapenet.cs.stanford.edu/media/shapenet_part_seg_hdf5_data.zip
-
室内3D语义分割
hdf5数据 https://shapenet.cs.stanford.edu/media/indoor3d_sem_seg_hdf5_data.zip
点云数据 https://blog.csdn.net/zhulf0804/article/details/108609629
-
运行
off点云数据---------->>>>>>>>hdf5文件---------->>>>>>>>训练---------->>>>>>>>model
//pointnet-master目录下 识别 modelnet40
python train.py
python train.py -h
tensorboard --logdir log
python evaluate.py --visu
(part_seg) Part Segmentation
//pointnet-master/part_seg目录下 分割 ShapeNetPart
python train.py
python test.py
(sem_seg) Semantic Segmentation
数据---------->>>>>>>>修改indoor3d_util---------->>>>>>>>预处理collect_indoor3d_data,生成npy文件---------->>>>>>>>gen_indoor3d_h5---------->>>>>>>>hdf5文件
点云数据:23585个场景,每个场景4096个点,每个点9维向量(X,Y,Z,R,G,B,所在房间的归一化位置)
标签数据:23585个场景,每个场景4096个点,每个点对应不同的标签(桌子、椅子、沙发、书架和木板等3个语义标签)
训练:hdf5文件---------->>>>>>>>train.py---------->>>>>>>>模型
- 增加3个del代码,不然内存会爆(内存足够大可以忽略,我16G反正爆了)
-
可以适当修改num_point的大小,但是注意train_one_epoch、eval_one_epoch函数里面也要改
-
可以tqdm.tqdm查看进度,但是记得安装conda install tqdm、引用import tqdm
预测:数据---------->>>>>>>>修改indoor3d_util---------->>>>>>>>预处理collect_indoor3d_data,生成npy文件---------->>>>>>>>预测batch_inference
python batch_inference.py --model_path log6/model.ckpt --dump_dir log6/dump --o
有个地方需要修改,不然会报错
现在对含背景的物体进行检测
![](https://i-blog.csdnimg.cn/blog_migrate/4f816c33ce44bde05f759573090b32f6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0b5a5ddd10f0809243ecafaa3e49dea6.png)
如图,对模型进行训练,基本过程(文件内地址修改不做说明了):
- 点云ply文件
- 点云txt文件
- collect_indoor3d_data.py转成npy文件(如果自己的点云数据是xyz信息,没有rgb信息,在indoor3d_util的collect_point_label函数中添加颜色)
if points.shape[1] == 3: # 没有颜色 color = np.zeros((points.shape[0], 3)) color[:, 1] = 255 points_list.append(np.concatenate([points, color, labels], 1)) # Nx7
-
得到npy文件,则就可以开始训练了(我这边就用了一个样本进行训练,所以很快4-5步就够了)
-
开始检测:将含背景的点云文件也放进去,生成npy文件,颜色任意就行
-
修改batch_inference文件的eval_one_epoch,这边用到预测得分,舍去评分小于0(不一定是0,可以自己设定阈值)的点云:
loss_val, pred_val, pred_softmax_val = sess.run([ops['loss'], ops['pred'], ops['pred_softmax']], feed_dict=feed_dict) # 计算
if pred_val[0, i, pred[i]] > 0: # 如果预测值大于0 则有分类 color = a_my_util.g_label2color[pred[i]] # 预测标签对应的颜色分类 else: color = [255, 255, 255] # 如果预测值小于0 则啥也不是,白色 color_gt = a_my_util.g_label2color[current_label[start_idx + b, i]] # 实际标签对应的颜色分类
if pred_val[0][i][pred[i]] > 0: # 如果预测值大于0 则有分类 fout_data_label.write('%f %f %f %d %d %d %f %d\n' % ( pts[i, 6], pts[i, 7], pts[i, 8], pts[i, 3], pts[i, 4], pts[i, 5], pred_softmax_val[b, i, pred[i]], pred[i])) # 预测标签,(pred_val的第几个批次、第几个点、的标签概率),标签 else: # 如果预测值小于0 则啥也不是,白色 fout_data_label.write('%f %f %f %d %d %d %f %d\n' % ( pts[i, 6], pts[i, 7], pts[i, 8], pts[i, 3], pts[i, 4], pts[i, 5], pred_val[0, i, pred[i]], -1)) # 预测标签,(pred_val的第几个批次、第几个点、的标签概率),标签
- 运行测试,效果图(绿色部分则问检测到的结果)点云可视化软件:MeshLab、CloudCompare
![](https://i-blog.csdnimg.cn/blog_migrate/5ebe6346f04e44080af5784be68fd866.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d0a82bdd18a43374750f3f570ce07bba.png)