PointNet学习+训练自己的模型并实际使用测试成功

 

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---------->>>>>>>>模型

  1. 增加3个del代码,不然内存会爆(内存足够大可以忽略,我16G反正爆了)
  2. 可以适当修改num_point的大小,但是注意train_one_epoch、eval_one_epoch函数里面也要改

  3. 可以tqdm.tqdm查看进度,但是记得安装conda install tqdm、引用import tqdm

PointNet学习+训练自己的模型并实际使用测试成功_第1张图片PointNet学习+训练自己的模型并实际使用测试成功_第2张图片

PointNet学习+训练自己的模型并实际使用测试成功_第3张图片

PointNet学习+训练自己的模型并实际使用测试成功_第4张图片

PointNet学习+训练自己的模型并实际使用测试成功_第5张图片

预测:数据---------->>>>>>>>修改indoor3d_util---------->>>>>>>>预处理collect_indoor3d_data,生成npy文件---------->>>>>>>>预测batch_inference

python batch_inference.py --model_path log6/model.ckpt --dump_dir log6/dump --o

有个地方需要修改,不然会报错

PointNet学习+训练自己的模型并实际使用测试成功_第6张图片

现在对含背景的物体进行检测

PointNet学习+训练自己的模型并实际使用测试成功_第7张图片 背景 PointNet学习+训练自己的模型并实际使用测试成功_第8张图片 model

如图,对模型进行训练,基本过程(文件内地址修改不做说明了):

  1. 点云ply文件
  2. 点云txt文件
  3. 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

     

  4. 得到npy文件,则就可以开始训练了(我这边就用了一个样本进行训练,所以很快4-5步就够了)

  5. 开始检测:将含背景的点云文件也放进去,生成npy文件,颜色任意就行

  6. 修改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的第几个批次、第几个点、的标签概率),标签

     

  7. 运行测试,效果图(绿色部分则问检测到的结果)点云可视化软件:MeshLab、CloudCompare

PointNet学习+训练自己的模型并实际使用测试成功_第9张图片

PointNet学习+训练自己的模型并实际使用测试成功_第10张图片 准确率:79.22%
PointNet学习+训练自己的模型并实际使用测试成功_第11张图片 准确率:69.84%

 

你可能感兴趣的:(python,tensorflow,深度学习)