mirror of
https://github.com/botastic/SoftGroup.git
synced 2026-07-01 16:00:06 +00:00
add scannet instruction
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -64,6 +64,8 @@ dist/
|
||||
*.tsv
|
||||
*.npy
|
||||
*.zip
|
||||
dataset/scannetv2/scans
|
||||
dataset/scannetv2/scans_test
|
||||
dataset/scannetv2/train
|
||||
dataset/scannetv2/val
|
||||
dataset/scannetv2/test
|
||||
@@ -72,5 +74,3 @@ dataset/scannetv2/scannetv2-labels.combined.tsv
|
||||
|
||||
dataset/s3dis/preprocess
|
||||
dataset/s3dis/val_gt
|
||||
|
||||
|
||||
|
||||
61
README.md
61
README.md
@@ -54,35 +54,19 @@ conda install -c bioconda google-sparsehash
|
||||
|
||||
4\) Install spconv
|
||||
|
||||
* Verify the version of spconv.
|
||||
|
||||
spconv 1.0, compatible with CUDA < 11 and pytorch < 1.5, is already recursively cloned in `SoftGroup/lib/spconv` in step 2) by default.
|
||||
|
||||
For higher version CUDA and pytorch, spconv 1.2 is suggested. Replace `SoftGroup/lib/spconv` with this fork of spconv.
|
||||
|
||||
* Install the dependencies.
|
||||
```
|
||||
git clone https://github.com/outsidercsy/spconv.git --recursive
|
||||
```
|
||||
sudo apt-get install libboost-all-dev
|
||||
sudo apt-get install libsparsehash-dev
|
||||
|
||||
Note: In the provided spconv 1.0 and 1.2, spconv\spconv\functional.py is modified to make grad_output contiguous. Make sure you use the modified spconv but not the original one. Or there would be some bugs of optimization.
|
||||
|
||||
|
||||
* Install the dependent libraries.
|
||||
```
|
||||
conda install libboost
|
||||
conda install -c daleydeng gcc-5 # (optional, install gcc-5.4 in conda env)
|
||||
```
|
||||
|
||||
* Compile the spconv library.
|
||||
```
|
||||
cd SoftGroup/lib/spconv
|
||||
python setup.py bdist_wheel
|
||||
```
|
||||
|
||||
* Intall the generated .whl file.
|
||||
```
|
||||
cd SoftGroup/lib/spconv/dist
|
||||
pip install {wheel_file_name}.whl
|
||||
pip install dist/{WHEEL_FILE_NAME}.whl
|
||||
```
|
||||
|
||||
|
||||
@@ -100,35 +84,36 @@ python setup.py build_ext develop
|
||||
|
||||
1\) Download the [ScanNet](http://www.scan-net.org/) v2 dataset.
|
||||
|
||||
2\) Put the data in the corresponding folders.
|
||||
* Copy the files `[scene_id]_vh_clean_2.ply`, `[scene_id]_vh_clean_2.labels.ply`, `[scene_id]_vh_clean_2.0.010000.segs.json` and `[scene_id].aggregation.json` into the `dataset/scannetv2/train` and `dataset/scannetv2/val` folders according to the ScanNet v2 train/val [split](https://github.com/ScanNet/ScanNet/tree/master/Tasks/Benchmark).
|
||||
2\) Put the downloaded ``scans`` and ``scans_test`` folder as follows.
|
||||
|
||||
* Copy the files `[scene_id]_vh_clean_2.ply` into the `dataset/scannetv2/test` folder according to the ScanNet v2 test [split](https://github.com/ScanNet/ScanNet/tree/master/Tasks/Benchmark).
|
||||
|
||||
* Put the file `scannetv2-labels.combined.tsv` in the `dataset/scannetv2` folder.
|
||||
|
||||
The dataset files are organized as follows.
|
||||
```
|
||||
SoftGroup
|
||||
├── 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
|
||||
│ │ ├── scans
|
||||
│ │ ├── scans_test
|
||||
```
|
||||
|
||||
3\) Generate input files `[scene_id]_inst_nostuff.pth` for instance segmentation.
|
||||
3\) Split and preprocess data
|
||||
```
|
||||
cd SoftGroup/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
|
||||
bash prepare_data.sh
|
||||
```
|
||||
|
||||
The script data into train/val/test folder and preprocess the data. After running the script the scannet dataset structure should look like below.
|
||||
```
|
||||
SoftGroup
|
||||
├── dataset
|
||||
│ ├── scannetv2
|
||||
│ │ ├── scans
|
||||
│ │ ├── scans_test
|
||||
│ │ ├── train
|
||||
│ │ ├── val
|
||||
│ │ ├── test
|
||||
│ │ ├── val_gt
|
||||
```
|
||||
|
||||
|
||||
## Training
|
||||
```
|
||||
CUDA_VISIBLE_DEVICES=0 python train.py --config config/softgroup_default_scannet.yaml
|
||||
|
||||
8
dataset/scannetv2/prepare_data.sh
Normal file
8
dataset/scannetv2/prepare_data.sh
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
echo Copy data
|
||||
python split_data.py
|
||||
echo Preprocess data
|
||||
python prepare_data_inst.py --data_split train
|
||||
python prepare_data_inst.py --data_split val
|
||||
python prepare_data_inst.py --data_split test
|
||||
python prepare_data_inst_gttxt.py
|
||||
@@ -97,4 +97,4 @@ if opt.data_split == 'test':
|
||||
else:
|
||||
p.map(f, files)
|
||||
p.close()
|
||||
p.join()
|
||||
p.join()
|
||||
|
||||
100
dataset/scannetv2/scannetv2_test.txt
Normal file
100
dataset/scannetv2/scannetv2_test.txt
Normal file
@@ -0,0 +1,100 @@
|
||||
scene0707_00
|
||||
scene0708_00
|
||||
scene0709_00
|
||||
scene0710_00
|
||||
scene0711_00
|
||||
scene0712_00
|
||||
scene0713_00
|
||||
scene0714_00
|
||||
scene0715_00
|
||||
scene0716_00
|
||||
scene0717_00
|
||||
scene0718_00
|
||||
scene0719_00
|
||||
scene0720_00
|
||||
scene0721_00
|
||||
scene0722_00
|
||||
scene0723_00
|
||||
scene0724_00
|
||||
scene0725_00
|
||||
scene0726_00
|
||||
scene0727_00
|
||||
scene0728_00
|
||||
scene0729_00
|
||||
scene0730_00
|
||||
scene0731_00
|
||||
scene0732_00
|
||||
scene0733_00
|
||||
scene0734_00
|
||||
scene0735_00
|
||||
scene0736_00
|
||||
scene0737_00
|
||||
scene0738_00
|
||||
scene0739_00
|
||||
scene0740_00
|
||||
scene0741_00
|
||||
scene0742_00
|
||||
scene0743_00
|
||||
scene0744_00
|
||||
scene0745_00
|
||||
scene0746_00
|
||||
scene0747_00
|
||||
scene0748_00
|
||||
scene0749_00
|
||||
scene0750_00
|
||||
scene0751_00
|
||||
scene0752_00
|
||||
scene0753_00
|
||||
scene0754_00
|
||||
scene0755_00
|
||||
scene0756_00
|
||||
scene0757_00
|
||||
scene0758_00
|
||||
scene0759_00
|
||||
scene0760_00
|
||||
scene0761_00
|
||||
scene0762_00
|
||||
scene0763_00
|
||||
scene0764_00
|
||||
scene0765_00
|
||||
scene0766_00
|
||||
scene0767_00
|
||||
scene0768_00
|
||||
scene0769_00
|
||||
scene0770_00
|
||||
scene0771_00
|
||||
scene0772_00
|
||||
scene0773_00
|
||||
scene0774_00
|
||||
scene0775_00
|
||||
scene0776_00
|
||||
scene0777_00
|
||||
scene0778_00
|
||||
scene0779_00
|
||||
scene0780_00
|
||||
scene0781_00
|
||||
scene0782_00
|
||||
scene0783_00
|
||||
scene0784_00
|
||||
scene0785_00
|
||||
scene0786_00
|
||||
scene0787_00
|
||||
scene0788_00
|
||||
scene0789_00
|
||||
scene0790_00
|
||||
scene0791_00
|
||||
scene0792_00
|
||||
scene0793_00
|
||||
scene0794_00
|
||||
scene0795_00
|
||||
scene0796_00
|
||||
scene0797_00
|
||||
scene0798_00
|
||||
scene0799_00
|
||||
scene0800_00
|
||||
scene0801_00
|
||||
scene0802_00
|
||||
scene0803_00
|
||||
scene0804_00
|
||||
scene0805_00
|
||||
scene0806_00
|
||||
1201
dataset/scannetv2/scannetv2_train.txt
Normal file
1201
dataset/scannetv2/scannetv2_train.txt
Normal file
File diff suppressed because it is too large
Load Diff
312
dataset/scannetv2/scannetv2_val.txt
Normal file
312
dataset/scannetv2/scannetv2_val.txt
Normal file
@@ -0,0 +1,312 @@
|
||||
scene0568_00
|
||||
scene0568_01
|
||||
scene0568_02
|
||||
scene0304_00
|
||||
scene0488_00
|
||||
scene0488_01
|
||||
scene0412_00
|
||||
scene0412_01
|
||||
scene0217_00
|
||||
scene0019_00
|
||||
scene0019_01
|
||||
scene0414_00
|
||||
scene0575_00
|
||||
scene0575_01
|
||||
scene0575_02
|
||||
scene0426_00
|
||||
scene0426_01
|
||||
scene0426_02
|
||||
scene0426_03
|
||||
scene0549_00
|
||||
scene0549_01
|
||||
scene0578_00
|
||||
scene0578_01
|
||||
scene0578_02
|
||||
scene0665_00
|
||||
scene0665_01
|
||||
scene0050_00
|
||||
scene0050_01
|
||||
scene0050_02
|
||||
scene0257_00
|
||||
scene0025_00
|
||||
scene0025_01
|
||||
scene0025_02
|
||||
scene0583_00
|
||||
scene0583_01
|
||||
scene0583_02
|
||||
scene0701_00
|
||||
scene0701_01
|
||||
scene0701_02
|
||||
scene0580_00
|
||||
scene0580_01
|
||||
scene0565_00
|
||||
scene0169_00
|
||||
scene0169_01
|
||||
scene0655_00
|
||||
scene0655_01
|
||||
scene0655_02
|
||||
scene0063_00
|
||||
scene0221_00
|
||||
scene0221_01
|
||||
scene0591_00
|
||||
scene0591_01
|
||||
scene0591_02
|
||||
scene0678_00
|
||||
scene0678_01
|
||||
scene0678_02
|
||||
scene0462_00
|
||||
scene0427_00
|
||||
scene0595_00
|
||||
scene0193_00
|
||||
scene0193_01
|
||||
scene0164_00
|
||||
scene0164_01
|
||||
scene0164_02
|
||||
scene0164_03
|
||||
scene0598_00
|
||||
scene0598_01
|
||||
scene0598_02
|
||||
scene0599_00
|
||||
scene0599_01
|
||||
scene0599_02
|
||||
scene0328_00
|
||||
scene0300_00
|
||||
scene0300_01
|
||||
scene0354_00
|
||||
scene0458_00
|
||||
scene0458_01
|
||||
scene0423_00
|
||||
scene0423_01
|
||||
scene0423_02
|
||||
scene0307_00
|
||||
scene0307_01
|
||||
scene0307_02
|
||||
scene0606_00
|
||||
scene0606_01
|
||||
scene0606_02
|
||||
scene0432_00
|
||||
scene0432_01
|
||||
scene0608_00
|
||||
scene0608_01
|
||||
scene0608_02
|
||||
scene0651_00
|
||||
scene0651_01
|
||||
scene0651_02
|
||||
scene0430_00
|
||||
scene0430_01
|
||||
scene0689_00
|
||||
scene0357_00
|
||||
scene0357_01
|
||||
scene0574_00
|
||||
scene0574_01
|
||||
scene0574_02
|
||||
scene0329_00
|
||||
scene0329_01
|
||||
scene0329_02
|
||||
scene0153_00
|
||||
scene0153_01
|
||||
scene0616_00
|
||||
scene0616_01
|
||||
scene0671_00
|
||||
scene0671_01
|
||||
scene0618_00
|
||||
scene0382_00
|
||||
scene0382_01
|
||||
scene0490_00
|
||||
scene0621_00
|
||||
scene0607_00
|
||||
scene0607_01
|
||||
scene0149_00
|
||||
scene0695_00
|
||||
scene0695_01
|
||||
scene0695_02
|
||||
scene0695_03
|
||||
scene0389_00
|
||||
scene0377_00
|
||||
scene0377_01
|
||||
scene0377_02
|
||||
scene0342_00
|
||||
scene0139_00
|
||||
scene0629_00
|
||||
scene0629_01
|
||||
scene0629_02
|
||||
scene0496_00
|
||||
scene0633_00
|
||||
scene0633_01
|
||||
scene0518_00
|
||||
scene0652_00
|
||||
scene0406_00
|
||||
scene0406_01
|
||||
scene0406_02
|
||||
scene0144_00
|
||||
scene0144_01
|
||||
scene0494_00
|
||||
scene0278_00
|
||||
scene0278_01
|
||||
scene0316_00
|
||||
scene0609_00
|
||||
scene0609_01
|
||||
scene0609_02
|
||||
scene0609_03
|
||||
scene0084_00
|
||||
scene0084_01
|
||||
scene0084_02
|
||||
scene0696_00
|
||||
scene0696_01
|
||||
scene0696_02
|
||||
scene0351_00
|
||||
scene0351_01
|
||||
scene0643_00
|
||||
scene0644_00
|
||||
scene0645_00
|
||||
scene0645_01
|
||||
scene0645_02
|
||||
scene0081_00
|
||||
scene0081_01
|
||||
scene0081_02
|
||||
scene0647_00
|
||||
scene0647_01
|
||||
scene0535_00
|
||||
scene0353_00
|
||||
scene0353_01
|
||||
scene0353_02
|
||||
scene0559_00
|
||||
scene0559_01
|
||||
scene0559_02
|
||||
scene0593_00
|
||||
scene0593_01
|
||||
scene0246_00
|
||||
scene0653_00
|
||||
scene0653_01
|
||||
scene0064_00
|
||||
scene0064_01
|
||||
scene0356_00
|
||||
scene0356_01
|
||||
scene0356_02
|
||||
scene0030_00
|
||||
scene0030_01
|
||||
scene0030_02
|
||||
scene0222_00
|
||||
scene0222_01
|
||||
scene0338_00
|
||||
scene0338_01
|
||||
scene0338_02
|
||||
scene0378_00
|
||||
scene0378_01
|
||||
scene0378_02
|
||||
scene0660_00
|
||||
scene0553_00
|
||||
scene0553_01
|
||||
scene0553_02
|
||||
scene0527_00
|
||||
scene0663_00
|
||||
scene0663_01
|
||||
scene0663_02
|
||||
scene0664_00
|
||||
scene0664_01
|
||||
scene0664_02
|
||||
scene0334_00
|
||||
scene0334_01
|
||||
scene0334_02
|
||||
scene0046_00
|
||||
scene0046_01
|
||||
scene0046_02
|
||||
scene0203_00
|
||||
scene0203_01
|
||||
scene0203_02
|
||||
scene0088_00
|
||||
scene0088_01
|
||||
scene0088_02
|
||||
scene0088_03
|
||||
scene0086_00
|
||||
scene0086_01
|
||||
scene0086_02
|
||||
scene0670_00
|
||||
scene0670_01
|
||||
scene0256_00
|
||||
scene0256_01
|
||||
scene0256_02
|
||||
scene0249_00
|
||||
scene0441_00
|
||||
scene0658_00
|
||||
scene0704_00
|
||||
scene0704_01
|
||||
scene0187_00
|
||||
scene0187_01
|
||||
scene0131_00
|
||||
scene0131_01
|
||||
scene0131_02
|
||||
scene0207_00
|
||||
scene0207_01
|
||||
scene0207_02
|
||||
scene0461_00
|
||||
scene0011_00
|
||||
scene0011_01
|
||||
scene0343_00
|
||||
scene0251_00
|
||||
scene0077_00
|
||||
scene0077_01
|
||||
scene0684_00
|
||||
scene0684_01
|
||||
scene0550_00
|
||||
scene0686_00
|
||||
scene0686_01
|
||||
scene0686_02
|
||||
scene0208_00
|
||||
scene0500_00
|
||||
scene0500_01
|
||||
scene0552_00
|
||||
scene0552_01
|
||||
scene0648_00
|
||||
scene0648_01
|
||||
scene0435_00
|
||||
scene0435_01
|
||||
scene0435_02
|
||||
scene0435_03
|
||||
scene0690_00
|
||||
scene0690_01
|
||||
scene0693_00
|
||||
scene0693_01
|
||||
scene0693_02
|
||||
scene0700_00
|
||||
scene0700_01
|
||||
scene0700_02
|
||||
scene0699_00
|
||||
scene0231_00
|
||||
scene0231_01
|
||||
scene0231_02
|
||||
scene0697_00
|
||||
scene0697_01
|
||||
scene0697_02
|
||||
scene0697_03
|
||||
scene0474_00
|
||||
scene0474_01
|
||||
scene0474_02
|
||||
scene0474_03
|
||||
scene0474_04
|
||||
scene0474_05
|
||||
scene0355_00
|
||||
scene0355_01
|
||||
scene0146_00
|
||||
scene0146_01
|
||||
scene0146_02
|
||||
scene0196_00
|
||||
scene0702_00
|
||||
scene0702_01
|
||||
scene0702_02
|
||||
scene0314_00
|
||||
scene0277_00
|
||||
scene0277_01
|
||||
scene0277_02
|
||||
scene0095_00
|
||||
scene0095_01
|
||||
scene0015_00
|
||||
scene0100_00
|
||||
scene0100_01
|
||||
scene0100_02
|
||||
scene0558_00
|
||||
scene0558_01
|
||||
scene0558_02
|
||||
scene0685_00
|
||||
scene0685_01
|
||||
scene0685_02
|
||||
36
dataset/scannetv2/split_data.py
Normal file
36
dataset/scannetv2/split_data.py
Normal file
@@ -0,0 +1,36 @@
|
||||
import os
|
||||
import shutil
|
||||
|
||||
# split scans specified in scannetv2_{train/val/test}.txt
|
||||
|
||||
splits = ['train', 'val', 'test']
|
||||
|
||||
for split in splits:
|
||||
print('processing', split)
|
||||
f_name = 'scannetv2_{}.txt'.format(split)
|
||||
f = open(f_name, 'r')
|
||||
scans = f.readlines()
|
||||
os.makedirs(split, exist_ok=True)
|
||||
for scan_name in scans:
|
||||
scan = scan_name.strip() # strip white space
|
||||
if split == 'test':
|
||||
src = 'scans_test/{}/{}_vh_clean_2.ply'.format(scan, scan)
|
||||
dest = '{}/{}_vh_clean_2.ply'.format(split, scan)
|
||||
shutil.copyfile(src, dest)
|
||||
else:
|
||||
src = 'scans/{}/{}_vh_clean_2.ply'.format(scan, scan)
|
||||
dest = '{}/{}_vh_clean_2.ply'.format(split, scan)
|
||||
shutil.copyfile(src, dest)
|
||||
|
||||
src = 'scans/{}/{}_vh_clean_2.labels.ply'.format(scan, scan)
|
||||
dest = '{}/{}_vh_clean_2.labels.ply'.format(split, scan)
|
||||
shutil.copyfile(src, dest)
|
||||
|
||||
src = 'scans/{}/{}_vh_clean_2.0.010000.segs.json'.format(scan, scan)
|
||||
dest = '{}/{}_vh_clean_2.0.010000.segs.json'.format(split, scan)
|
||||
shutil.copyfile(src, dest)
|
||||
|
||||
src = 'scans/{}/{}.aggregation.json'.format(scan, scan)
|
||||
dest = '{}/{}.aggregation.json'.format(split, scan)
|
||||
shutil.copyfile(src, dest)
|
||||
print('done')
|
||||
@@ -2,6 +2,6 @@ torch==1.1
|
||||
cmake>=3.13.2
|
||||
plyfile
|
||||
tensorboardX
|
||||
pyyaml
|
||||
pyyaml==5.4.1
|
||||
scipy
|
||||
six
|
||||
|
||||
Reference in New Issue
Block a user