README.md

November 14, 2020 · View on GitHub

Introduction

An unofficial PyTorch Implementation of PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space[NIPS 2017].

Requirements

  • PyTorch, Python3, TensorboardX, tqdm, fire

Classification

  • Start

    • Dataset: ModelNet40, download it from Official Site or Baidu Disk with hi1i.

    • Train

      python train_clss.py --data_root your_data_root --log_dir your_log_dir
      
      eg.
      python train_clss.py --data_root /root/modelnet40_normal_resampled --log_dir cls_ssg_1024
      
    • Evaluate

      python evaluate.py evaluate_cls model data_root checkpoint npoints
      
      eg.
      python evaluate.py evaluate_cls pointnet2_cls_ssg  /root/modelnet40_normal_resampled \
      checkpoints/pointnet2_cls_250.pth 1024
      
      python evaluate.py evaluate_cls pointnet2_cls_msg root/modelnet40_normal_resampled \
      checkpoints/pointnet2_cls_250.pth 1024
      
  • Performance(the first row is the results reported in Paper, the following rows are results reported from this repo.)

    ModelNPointsAugAccuracy(%)
    PointNet2(official)500091.7
    PointNet2_SSG102491.8
    PointNet2_SSG409691.7
    PointNet2_SSG409690.5
    PointNet2_MSG409691.0
    ModelTrain_NPointsDPTest_NPointsAccuracy(%)
    PointNet2_SSG102425667.9
    PointNet2_SSG102425690.8
    PointNet2_SSG1024102491.8
    PointNet2_SSG1024120491.9
  • Train Your own Dataset

    • Prepare the dataset(n classes) in the ModelNet40 structure
      CustomData(dir)
          |- class1(dir)
              | - class1_name11.txt
              | - class1_name12.txt
              ...
          |- class2(dir)
              | - class2_name21.txt
              | - class2_name22.txt
              ...
          |- classn(dir)
          |- shape_names.txt
              | - class1(line1)
              | - class2(line2)
              | - ...
              | - classn(linen)
          |- train.txt
              | - class1_name11
              | - class2_name21
              | - class2_name22
              | - ...
              | - classn_namen1
          |- test.txt
              | - class1_name12
              | - class2_name22
              | - ...
              | - classn_namen2
      
    • Start to train
      python train_custom_cls.py --data_root your_datapath/CustomData --nclasses 2 --npoints 2048
      
    • Start to evaluate
      python evaluate_custom.py evaluate_cls pointnet2_cls_ssg your_datapath/CustomData work_dirs/checkpoints/pointnet2_cls_250.pth 2
      

Part Segmentation

  • Start

    • Dataset: ShapeNet part, download it from Official Site or Baidu Disk with 3e5z.

    • Train

      python train_part_seg.py --data_root your_data_root --log_dir your_log_dir
      
      eg.
      python train_part_seg.py --data_root /root/shapenetcore_partanno_segmentation_benchmark_v0_normal \
      --log_dir seg_ssg --batch_size 64
      
    • Evaluate

      python evaluate.py evaluate_seg data_root checkpoint
      
      eg.
      python evaluate.py evaluate_seg /root/shapenetcore_partanno_segmentation_benchmark_v0_normal \
      seg_ssg/checkpoints/pointnet2_cls_250.pth
      
  • Metrics: Average IoU

    ModelMetricsmeanaerobagcapcarchairear phoneguitarknifelamplaptopmotormugpistolrocketskate boardtable
    PointNet2(official)IoU85.182.479.087.777.390.871.891.085.983.795.371.694.181.358.776.482.6
    PointNet2_SSGIoU84.182.375.080.177.890.273.790.784.182.995.069.393.380.355.676.380.7
    PointNet2_SSGAccuracy93.289.989.085.591.894.493.596.191.189.296.987.496.493.777.295.994.8

Reference