1. BRNET 的环境配置
工程链接:https://github.com/cheng052/BRNet
改工程是基于MMDetection3D的框架下实现的,所以在配置环境时,需要先安装MMDetection3D相关的内容。
先明确BRnet 使用 MMDetection3D的版本,
配置环境的教程链接:https://github.com/cheng052/BRNet/blob/master/docs/getting_started.md
链接下有详细的 Installation说明。安装的方式如下:
- 1. 使用anoconda安装虚拟环境
conda create -n brnet_env python=3.7 -y conda activate brnet_env
- 2. 安装pytorch和torchvision,这里选择的版本如下:
conda install pytorch==1.5.0 cudatoolkit=10.2 torchvision==0.6.0 -c pytorch 这里需要注意: 1. 可以将安装命令中的 "-c pytorch"去掉,安装时使用的源不一样,安装速度会变快。但自己在本地安装时,去掉"-c pytorch"成功安装了gpu版本,但在服务器上安装的是cpu版本。这里注意一下 2. 该工程会要求 系统环境中安装并使用的cuda版本 与虚拟环境中安装的cudatoolkit的版本相一致。同时与pytorch版本是兼容的。 在工程编译时,会使用到cuda的编译器nvcc,单纯的安装cudatoolkit(无对应的nvcc)是不行的,所以用的是系统环境中的nvcc。
- 3. 安装MMCV
官方提供的命令如下: pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu102/torch1.5.0/index.html- 4. 安装 MMDetection
安装命令:pip install mmdet==2.11.0 官方提供的命令如下,但不推荐: pip install git+https://github.com/open-mmlab/mmdetection.git 这样安装的版本不符合版本要求,也可以使用源码编译合适的版本 git clone https://github.com/open-mmlab/mmdetection.git cd mmdetection pip install -r requirements/build.txt pip install -v -e . # or "python setup.py develop"- 5. 安装 MMDetection3D
这里需要注意一下,对于原生的MMDetection3D的安装和编译,是去MMDetection3D官网上下载源码,然后 cd mmdetection3d pip install -v -e . # or "python setup.py develop" 对于 BRNET工程,不需要安装官方的MMDetection3D。而是将 BRNet工程下载下来,在工程根目录运行 pip install -v -e . # or "python setup.py develop" 我们可以发现MMDetection3D的源码工程和BRNet工程,内部文件结构是相似的。其实BRNet就是按照MMDetection3D的源码格式实现的。所以这里是在BRNet的工程内,进行编译,将该工程安装到当前使用的虚拟环境中。也就是说,一个虚拟环境一个BRNet工程。 因此需要注意的是,如果将该工程拷贝一份,在拷贝分的工程里修改代码运行,这是无效的。 如果想同时修改两个版本的BRNet,并独立运行应该怎么做呢? 1. 重新创建虚拟环境,按照如上流程重新安装一遍,在一个新的brnet工程中 2. 将虚拟环境 brnet_env 拷贝一份并重新命名如 brnet_env2 并激活,获取新的brnet工程 命名为brnet2,并在目录下运行 python setup.py develop,将brnet2安装到brnet_env2中,就可独立使用。 这里需要注意的是,拷贝的虚拟环境中,pip无法使用,需要安装环境,使用conda install即可。
2. 工程效果测试
在工程根目录下运行
CUDA_VISIBLE_DEVICES=0 python demo/pcd_demo.py demo/sunrgbd_000094.bin demo/brnet_8x1_sunrgbd-3d-10class.py checkpoints/brnet_8x1_sunrgbd-3d-10class_trained.pth 运行测试结果,为了看起来更客观,展示的时候将原点云删去了部分,结果如下
3. 训练数据的准备
该工程中使用了两种3D数据集进行训练:SUNRGBD、SCANNET
3.1 SUNRGBD 数据集的准备
1. 在【Index of /data】中,下载 SUNRGBD v2 数据集。然后在brnet工程中的【./data/sunrgbd/】路径下创建文件夹【OFFICIAL_SUNRGBD】,将下载的数据 SUNRGBD.zip、SUNRGBDMeta2DBB_v2.mat、SUNRGBDMeta3DBB_v2.mat 和 SUNRGBDtoolbox.zip 移动到 OFFICIAL_SUNRGBD 文件夹,并解压zip文件 2. 进入文件夹【matlab】,运行脚本来提取点云和标注信息 matlab -nosplash -nodesktop -r 'extract_split;quit;' matlab -nosplash -nodesktop -r 'extract_rgbd_data_v2;quit;' matlab -nosplash -nodesktop -r 'extract_rgbd_data_v1;quit;' 3. 回到工程根路径,运行脚本来生成训练的数据 python tools/create_data.py sunrgbd --root-path ./data/sunrgbd --out-dir ./data/sunrgbd --extra-tag sunrgbd 预处理后的目录结构如下: ------------------------------------ sunrgbd ├── README.md ├── matlab │ ├── extract_rgbd_data_v1.m │ ├── extract_rgbd_data_v2.m │ ├── extract_split.m ├── OFFICIAL_SUNRGBD │ ├── SUNRGBD │ ├── SUNRGBDMeta2DBB_v2.mat │ ├── SUNRGBDMeta3DBB_v2.mat │ ├── SUNRGBDtoolbox ├── sunrgbd_trainval │ ├── calib │ ├── image │ ├── label_v1 │ ├── train_data_idx.txt │ ├── depth │ ├── label │ ├── seg_label │ ├── val_data_idx.txt ├── points ├── sunrgbd_infos_train.pkl ├── sunrgbd_infos_val.pkl3.2 SCANNET的数据预处理
1. 在官方github链接上【GitHub - ScanNet/ScanNet】,介绍了scannet数据集以及数据集的下载方式。然后将下载的文件夹【scans】链接或移动到brnet工程中的【./data/scannet/】路径下 2. 在该路径下,运行脚本来提取点云和相应的标注信息 python batch_load_scannet_data.py 3. 回到根目录,运行脚本生成训练数据 python tools/create_data.py scannet --root-path ./data/scannet --out-dir ./data/scannet --extra-tag scannet 预处理后的目录结构如下: ------------------------------------ scannet ├── scannet_utils.py ├── batch_load_scannet_data.py ├── load_scannet_data.py ├── scannet_utils.py ├── README.md ├── scans ├── scannet_train_instance_data ├── points │ ├── xxxxx.bin ├── instance_mask │ ├── xxxxx.bin ├── semantic_mask │ ├── xxxxx.bin ├── scannet_infos_train.pkl ├── scannet_infos_val.pkl
4. 神经网络的训练
1. scannet数据集的训练 CUDA_VISIBLE_DEVICES=0 python tools/train.py configs/brnet/brnet_8x1_scannet-3d-18class.py --seed 42 2. SUN RGB-D数据集的训练 CUDA_VISIBLE_DEVICES=0 python tools/train.py configs/brnet/brnet_8x1_sunrgbd-3d-10class.py --seed 42 个人训练了SUNRGBD数据集,训练的结果指标与工程提供的指标基本一致。说明该论文是篇质量ok的论文,值得学习