pointconv scannet 点云分割 代码运行

文章目录

  • 前言
  • 服务器环境
  • 项目文件和数据集准备
    • 下载项目文件
    • 下载数据集
    • 修改预处理文件文件
    • 运行
      • 上传到服务器
      • 编译
      • 预处理
      • 训练

首先, pointconv有两个github repository, 分别是pointconvpointconv_pytorch, 两者的区别不仅仅在于框架不同, 前者是基于scannet v2数据集的点云分割, 后者是基于modelnet40_resampled数据集的点云分类

本篇所有内容均针对前者pointconv,即在scanent数据集上做点云分割

前言

继上一篇的pointnet++后, 还是需要研究pointconv(躲不掉呀), 没办法只能想办法去运行了.

整个过程中最大的问题在于, 用到的scannet数据集太过于庞大(1.3TB), 我分别尝试过:

  1. 服务器直接运行脚本下载, 结果因为不能的原因, 下载速度巨慢,失败
  2. 特地买了一块2T的硬盘, 想本地下载完之后scp上传到服务器. 结果在测试的时候, 压缩的时候缓存/内存不够用

耗时两个多星期, 整来整去没整出什么结果.

直到我在pointconv作者的github里找到这么一个评论:

在这里插入图片描述

翻译过来就是说"整个项目只需要用到scannet中所有的_vh_clean_2.notes.py(这里他写错了,应该是_vh_clean_2.labels.py)和_vh_clean_2.ply文件就行了,一共大概20G,scannet中其他文件不需要下载"

???感觉自己发现了什么宝藏, 顺着这个思路, 成功运行了pointconv项目代码

服务器环境

  • anaconda3
  • python虚拟环境python2.7
  • cuda10.1
  • g++ 5.4.0
  • Tensorflow-gpu 1.11.0
  • 3 x GTX TITAN X

项目文件和数据集准备

这里我推荐各位先将项目文件下载到自己电脑本地, 数据集直接在服务器上下载, 修改完之后再通过scp命令将项目文件上传到服务器, 因为本地修改起来会比较方便, 像我这种纯靠终端ssh去控制服务器的…那么多文件一个一个vim来修改也太折磨人了

下载项目文件

这里首先需要git环境, 进入桌面后运行git clone https://github.com/DylanWusee/pointconv.git

下载完了之后桌面会多出来pointconv这么个文件夹. 里面的文件我就不一一展示了, 实在太多, 所有的文件夹如下:

pointconv
├── data
├── imgs
├── models
├── scannet
│   └── visualize
├── tf_ops
│   ├── 3d_interpolation
│   ├── grouping
│   │   └── test
│   └── sampling
└── utils

下载数据集

由于版权原因, 这里我不能直接给出数据集下载的链接或者脚本

请各位前往这个链接, 按照README.md里面的步骤, 复制ScanNet Terms of Use.pdf里面的内容到word, 填好之后再转到ScanNet Terms of Use.pdf中, 已附件的形式发送给[email protected], 一周内作者会给你发送一个下载数据集的.py脚本和运行教程

pointconv scannet 点云分割 代码运行_第1张图片

拿到脚本后, 在服务器上创建scannet目录, 在python3环境下依次运行以下命令来下载上述的两种文件

python3 download-scannet.py -o scannet/ --type  _vh_clean_2.labels.ply
python3 download-scannet.py -o scannet/ --type  _vh_clean_2.ply

如果你这里和我一样是通过远程手段连接的服务器, 我建议你使用screen命令, 不然等连接会话断开后, 服务器上这个下载的进程会被杀死, screen可以避免这种情况, 具体怎么使用我就不赘述了, 各位参考其他的博客.

如果下载成功的话, scannet文件夹下应该是这样的(这里只展示到depth=1, 不然文件夹实在太多)

scannet
├── scannetv2-labels.combined.tsv
├── scans
├── scans_test
└── tasks

修改预处理文件文件

进入pointconv/scannet文件夹, 按照README.md里面的步骤, 修改scannetv2_seg_dataset_rgb21c_pointid.py中第82行的路径即可, 改为服务器上刚创建的scannet目录

运行

上传到服务器

进入pointconv文件夹所在的根目录, 我这里是Desktop/, 然后通过scp -r pointconv/ ${__USER__}@${__IP__}:${__PATH__}命令上传到你的服务器.其中:

  • ${__USER__}是用户名
  • ${__IP__}是你服务器的公网IP
  • ${__PATH__}是你要存放的路径

下面的编译,预处理和训练都是在服务器上完成的.

编译

这里请参照我上一篇pointnet++的博客, 对pointconv/tf_ops文件夹下的所有文件夹里的.sh文件进行编译

预处理

进入pointconv/scannet目录, 在python2环境下执行screen python scannetv2_seg_dataset_rgb21c_pointid.py, 之所以使用screen命令是由于整个过程非常耗时, 避免由于连接会话断开导致整个进程被杀死的情况.

预训练结束后, pointconv/scannet下会多出来三个文件: scannet_train_rgb21c_pointid.pickle, scannet_val_rgb21c_pointid.pickle, 和scannet_test_rgb21c_pointid.pickle, 前两个是用于训练的, 第三个是用于测试的.

预处理结束后,pointconv/scannet文件夹下应该是这样的

scannet
├── eulerangles.py
├── eulerangles.pyc
├── pc_util.py
├── pc_util.pyc
├── README.md
├── scannet_dataset_rgb.py
├── scannet_dataset_rgb.pyc
├── scannet_dataset_sw_rgb.py
├── scannet_test_rgb21c_pointid.pickle
├── scannet_train_rgb21c_pointid.pickle
├── scannetv2_seg_dataset_rgb21c_pointid.py
├── scannetv2_test.txt
├── scannetv2_train.txt
├── scannetv2_val.txt
├── scannet_val_rgb21c_pointid.pickle
├── util.py
├── util.pyc
└── visualize

训练

进入pointconv目录, 在python2,tensorflow1.X环境下, 运行

CUDA_VISIBLE_DEVICES=0 screen python train_scannet_IoU.py --model pointconv_weight_density_n16 --log_dir pointconv_scannet_ --batch_size 4

注:

  • 这里建议batch_size尽量给小, 我这里给到batch_size=8时就会爆显存(11G显存), 因此这里我只给到4
  • 如果你是远程连接的服务器, 依然建议用screen命令

运行结果和日志会保存在pointconv/${\__TIME__}下, ${\__TIME__}是你运行时的时间, 如下:

pointconv_scannet_2021_02_11_21_37_50/
├── best_model_epoch_000.ckpt.data-00000-of-00001
├── best_model_epoch_000.ckpt.index
├── best_model_epoch_000.ckpt.meta
├── checkpoint
├── log_train.txt
├── model.ckpt.data-00000-of-00001
├── model.ckpt.index
├── model.ckpt.meta
├── PointConv.py
├── pointconv_util.py
├── pointconv_weight_density_n16.py
├── test
├── train
├── train_scannet_IoU.py
└── whole_scene

你可能感兴趣的:(论文模型,点云,分割,点云分割,pointconv,3D视觉)