当前位置:   article > 正文

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

pointnet训练

 

PointNET 点云深度学习

https://github.com/charlesq34/pointnet

  • 环境

  1. conda create --name pointnet python=3.6
  2. activate pointnet
  3. conda install tensorflow-gpu=1.12
  4. conda install matplotlib
  5. conda install plyfile
  6. conda install pillow
  7. conda create --name pointnet2 python=2.7 (windows不支持tensorflow-gpu=1.2
  8. activate pointnet2
  9. 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

  1. //pointnet-master目录下 识别 modelnet40
  2. python train.py
  3. python train.py -h
  4. tensorboard --logdir log
  5. python evaluate.py --visu

(part_seg) Part Segmentation

  1. //pointnet-master/part_seg目录下 分割 ShapeNetPart
  2. python train.py
  3. 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

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

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

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

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

背景
model

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

  1. 点云ply文件
  2. 点云txt文件
  3. collect_indoor3d_data.py转成npy文件(如果自己的点云数据是xyz信息,没有rgb信息,在indoor3d_util的collect_point_label函数中添加颜色)
    1. if points.shape[1] == 3: # 没有颜色
    2. color = np.zeros((points.shape[0], 3))
    3. color[:, 1] = 255
    4. points_list.append(np.concatenate([points, color, labels], 1)) # Nx7

     

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

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

  6. 修改batch_inference文件的eval_one_epoch,这边用到预测得分,舍去评分小于0(不一定是0,可以自己设定阈值)的点云:

    1. loss_val, pred_val, pred_softmax_val = sess.run([ops['loss'], ops['pred'], ops['pred_softmax']],
    2. feed_dict=feed_dict) # 计算
    1. if pred_val[0, i, pred[i]] > 0: # 如果预测值大于0 则有分类
    2. color = a_my_util.g_label2color[pred[i]] # 预测标签对应的颜色分类
    3. else:
    4. color = [255, 255, 255] # 如果预测值小于0 则啥也不是,白色
    5. color_gt = a_my_util.g_label2color[current_label[start_idx + b, i]] # 实际标签对应的颜色分类
    1. if pred_val[0][i][pred[i]] > 0: # 如果预测值大于0 则有分类
    2. fout_data_label.write('%f %f %f %d %d %d %f %d\n' % (
    3. pts[i, 6], pts[i, 7], pts[i, 8], pts[i, 3], pts[i, 4], pts[i, 5],
    4. pred_softmax_val[b, i, pred[i]],
    5. pred[i])) # 预测标签,(pred_val的第几个批次、第几个点、的标签概率),标签
    6. else: # 如果预测值小于0 则啥也不是,白色
    7. fout_data_label.write('%f %f %f %d %d %d %f %d\n' % (
    8. pts[i, 6], pts[i, 7], pts[i, 8], pts[i, 3], pts[i, 4], pts[i, 5],
    9. pred_val[0, i, pred[i]],
    10. -1)) # 预测标签,(pred_val的第几个批次、第几个点、的标签概率),标签

     

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

准确率:79.22%
准确率:69.84%

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/360309
推荐阅读
相关标签
  

闽ICP备14008679号