This project is about designing efficient point cloud Deep Neural Networks with pure algorithm (software-level) optimizations. We propose a technique named Delayed-Aggregation, which:
- reduces redundant computation to achieve workload efficiency;
- exposes parallelism that can be easily captured by the underlying hardware.
For the background of point cloud neural networks and how our delayed-aggregation helps improves the execution efficiency, see the wiki page.
Delayed-aggregation applies to a wide range of different point cloud networks. This repo has the implementation for the following five networks:
- PointNet++: Classification, Segmentation
- DGCNN: Classification, Segmentation
- LDGCNN: Classification
- F-PointNet: 3D Detection
- DensePoint: Classification
For each network, we have provided three versions:
- Baseline: the original networks with implementation optimizations.
- Limited Delayed-Aggregation: the one with limited delayed-aggregation optimization, which is inspired by some GNNs implementations.
- Fully Delayed-Aggregation: the one with full delayed-aggregation optimization, i.e., our proposed technique.
For the difference between the three versions, again see the wiki page.
We have created a simple PYTHON script to navigate the repository. Run:
$ python launcher.py -h
You will see:
usage: launcher.py [-h] [--compile COMPILE] [--download DOWNLOAD]
[--list_models LIST_MODELS] [--run RUN] [--train TRAIN]
[--use_baseline USE_BASELINE] [--use_limited USE_LIMITED]
[--segmentation SEGMENTATION]
optional arguments:
-h, --help show this help message and exit
--compile COMPILE Compile libraries in the models, to compile a specific
network, use: --compile [NETWORK_NAME] or to compile
all models using, --compile all
--download DOWNLOAD Download the specific dataset for the models, to
download a dataset for a specific network, use:
--download [NETWORK_NAME] or to download all datasets
using, --download all
--list_models LIST_MODELS
List all model names.
--run RUN Evaluate the model with Fully Delayed-Aggregation.
--train TRAIN Train the model with Fully Delayed-Aggregation.
--use_baseline USE_BASELINE
Use the baseline without any kind of Delayed-Aggregation.
--use_limited USE_LIMITED
Use Limited Delayed-Aggregation.
--segmentation SEGMENTATION
Execute the segmentation version.
There is a slight naming difference between the actual model name and the name in the code. Make sure you use names in the second column of this table to run the launcher.py
.
Actual Model Name | Name in Our Code |
---|---|
PointNet++ | pointnet2 |
DGCNN | dgcnn |
LDGCNN | ldgcnn |
F-PointNet | frustum-pointnets |
DensePoint | DensePoint |
Datasets shared by multiple networks are placed in the Datasets
directory, e.g., ModelNet40 and ShapeNet.
Datasets exclusively used by a network are placed in its directory, e.g., KITTI
for F-PointNet
.
Use the following command to download dataset:
$ python launcher.py --download [NETWORK]
- Specify [NETWORK] to the name of a network to download the corresponding dataset or
all
to download all the datasets. - Add
--segmentation True
to download segmentation data forpointnet++
anddgcnn
.
* Make sure to activate the correct environment for each network before running any of the following commands.
Some networks are native Python code and do not need to compile. Others such as pointnet++
, f-pointnet
, and DensePoint
have customized modules that need to be compiled.
To compile, run:
$ python launcher.py --compile [NETWORK]
[NETWORK]
can bepointnet2
(forpointnet++
),frustum-pointnets
(forf-pointnet
),DensePoint
(forDensePoint
), or simply compile all by usingall
.- Please check out the instructions in each network to modify the
CUDA_PATH
if you encounter any compiling issues.
To train the Baseline version, add flag --use_baseline True
:
$ python launcher.py --train [NETWORK] --use_baseline True
To train the Limited Delayed-Aggregation version, add flag --use_limited True
:
$ python launcher.py --train [NETWORK] --use_limited True
To train the Fully Delayed-Aggregation version:
$ python launcher.py --train [NETWORK]
To train the segmentation model of pointnet++
and dgcnn
, add flag --segmentation True
to the above commands:
$ python launcher.py --train [NETWORK] --segmentation True
To evaluate the Baseline version, add flag --use_baseline True
:
$ python launcher.py --run [NETWORK] --use_baseline True
To evaluate the Limited Delayed-Aggregation version, add flag --use_limited True
:
$ python launcher.py --run [NETWORK] --use_limited True
To evaluate the Fully Delayed-Aggregation version:
$ python launcher.py --run [NETWORK]
To evaluate the segmentation model of pointnet++
and dgcnn
, add flag --segmentation True
to the above commands:
$ python launcher.py --run [NETWORK] --segmentation True
This project contains the artifact for our paper Mesorasi: Architecture Support for Point Cloud Analytics via Delayed-Aggregation (MICRO 2020).
@inproceedings{feng2020mesorasi,
title={Mesorasi: Architecture Support for Point Cloud Analytics via Delayed-Aggregation},
author={Feng, Yu and Tian, Boyuan and Xu, Tiancheng and Whatmough, Paul and Zhu, Yuhao},
booktitle={Proceedings of the 53th International Symposium on Microarchitecture},
year={2020},
organization={ACM}
}