add scannet instruction

This commit is contained in:
Thang Vu
2022-03-04 09:04:27 +00:00
parent 4a158e1a24
commit 10ff6cc51d
9 changed files with 1684 additions and 42 deletions

4
.gitignore vendored
View File

@@ -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

View File

@@ -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

View 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

View File

@@ -97,4 +97,4 @@ if opt.data_split == 'test':
else:
p.map(f, files)
p.close()
p.join()
p.join()

View 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

File diff suppressed because it is too large Load Diff

View 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

View 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')

View File

@@ -2,6 +2,6 @@ torch==1.1
cmake>=3.13.2
plyfile
tensorboardX
pyyaml
pyyaml==5.4.1
scipy
six