1. BRNET 的环境配置
改工程是基于MMDetection3D的框架下实现的,所以在配置环境时,需要先安装MMDetection3D相关的内容。
先明确BRnet 使用 MMDetection3D的版本,

配置环境的教程链接:https:///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:///open-mmlab/mmdetection.git 这样安装的版本不符合版本要求,也可以使用源码编译合适的版本 git clone https:///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.pkl4. 神经网络的训练
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的论文,值得学习
















