DyCo3d
DyCo3d: 通过动态卷积实现3D点云的鲁棒实例分割(CVPR 2021)
论文《DyCo3D: 通过动态卷积实现3D点云的鲁棒实例分割》(CVPR 2021)的代码。
作者: Tong He, Chunhua Shen, Anton van den Hengel
简介
以往点云实例分割的顶级方法采用自下而上的策略,通常包括低效的操作或复杂的流程,如对过度分割的组件进行分组、引入额外的细化步骤或设计复杂的损失函数。实例尺度的不可避免变化可能导致自下而上的方法对超参数值特别敏感。为此,我们提出了一种动态的、无提议的、数据驱动的方法,该方法根据实例的性质生成适当的卷积核。为了使卷积核具有区分性,我们通过收集共享相同语义类别并对几何中心投票接近的同质点来探索大范围上下文。然后通过几个简单的卷积层解码实例。由于稀疏卷积引入的感受野有限,我们还设计了一个小型轻量级的transformer来捕捉点样本之间的长程依赖和高层交互。所提出的方法在ScanNetV2和S3DIS数据集上都取得了有希望的结果,并且这种性能对所选择的特定超参数值具有鲁棒性。与当前最先进的方法相比,它还将推理速度提高了25%以上。
安装
要求
- Python 3.7.0
- Pytorch 1.1.0
- CUDA 10.1
虚拟环境
conda create -n dyco3d python==3.7
conda activate dyco3d
安装 DyCo3d
(按照PointGroup的安装步骤进行)
(1) 克隆DyCo3d仓库。
git clone https://github.com/aim-uofa/DyCo3D.git
cd DyCo3D
(2) 安装依赖库。
pip install -r requirements.txt
conda install -c bioconda google-sparsehash
(3) 对于SparseConv,我们使用PointGroup的仓库
- 要编译
spconv
,首先安装依赖库。
conda install libboost
conda install -c daleydeng gcc-5 # 需要gcc-5.4用于sparseconv
在lib/spconv/CMakeLists.txt
中添加包含boost
的$INCLUDE_PATH$
。(如果能找到则不需要。)
include_directories($INCLUDE_PATH$)
- 编译
spconv
库。
cd lib/spconv
python setup.py bdist_wheel
- 运行
cd dist
并pip install
生成的.whl
文件。
(4) 编译pointgroup_ops
库。
cd lib/pointgroup_ops
python setup.py develop
如果找不到任何头文件,请运行以下命令。
python setup.py build_ext --include-dirs=$INCLUDE_PATH$
python setup.py develop
$INCLUDE_PATH$
是包含找不到的头文件的文件夹路径。
数据准备
(1) 下载ScanNet v2数据集。
(2) 将数据放入相应的文件夹。
-
根据ScanNet v2训练/验证划分,将文件
[scene_id]_vh_clean_2.ply
、[scene_id]_vh_clean_2.labels.ply
、[scene_id]_vh_clean_2.0.010000.segs.json
和[scene_id].aggregation.json
复制到dataset/scannetv2/train
和dataset/scannetv2/val
文件夹中。 -
根据ScanNet v2测试划分,将文件
[scene_id]_vh_clean_2.ply
复制到dataset/scannetv2/test
文件夹中。 -
将文件
scannetv2-labels.combined.tsv
放在dataset/scannetv2
文件夹中。
数据集文件组织如下。
DyCo3D
├── dataset
│ ├── scannetv2
│ │ ├── train
│ │ │ ├── [scene_id]_vh_clean_2.ply & [scene_id]_vh_clean_2.labels.ply & [scene_id]_vh_clean_2.0.010000.segs.json & [scene_id].aggregation.json
│ │ ├── val
│ │ │ ├── [scene_id]_vh_clean_2.ply & [scene_id]_vh_clean_2.labels.ply & [scene_id]_vh_clean_2.0.010000.segs.json & [scene_id].aggregation.json
│ │ ├── test
│ │ │ ├── [scene_id]_vh_clean_2.ply
│ │ ├── scannetv2-labels.combined.tsv
(3) 为实例分割生成输入文件[scene_id]_inst_nostuff.pth
。
cd dataset/scannetv2
python prepare_data_inst.py --data_split train
python prepare_data_inst.py --data_split val
python prepare_data_inst.py --data_split test
您也可以从这里(约13G)下载数据。 数据集文件组织如下
DyCo3D
├── dataset
│ ├── scannetv2
│ │ ├── train
│ │ ├── val
│ │ ├── test
│ │ ├── val_gt
训练
CUDA_VISIBLE_DEVICES=0,1,2 python -m torch.distributed.launch --nproc_per_node=3 --master_port=$((RANDOM + 10000)) train.py --config config/dyco3d_multigpu_scannet.yaml --output_path OUTPUT_DIR --use_backbone_transformer
推理和评估
要使用预训练模型进行测试,请运行
CUDA_VISIBLE_DEVICES=0 python test.py --config config/dyco3d_multigpu_scannet.yaml --output_path exp/model --resume MODEL --use_backbone_transformer
预训练模型
我们提供了在ScanNet v2数据集上训练的预训练模型。可以从这里下载。它在ScanNet v2验证集上的性能为35.5/57.6/72.9(mAP/mAP50/mAP25)。(掩码头大小为16)
ScanNet基准测试结果
提交时在ScanNet测试集上的定量结果。
引用
如果您在研究中发现这项工作有用,请引用:
@inproceedings{He2021dyco3d,
title = {{DyCo3d}: Robust Instance Segmentation of 3D Point Clouds through Dynamic Convolution},
author = {Tong He and Chunhua Shen and Anton van den Hengel},
booktitle = {Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
year = {2021}
}
致谢
本仓库基于PointGroup、spconv和condinst构建。
联系
如果您对本仓库有任何问题或建议,请随时联系我(tonghe90@gmail.com)。