Skip to main content

Implementation of DeltaConv: an anisotropic operator for geometric deep learning on point clouds (and other discretizations that will be added in the future).

Project description

DeltaConv

[Paper] [Project page]

Code for the SIGGRAPH 2022 paper "DeltaConv: Anisotropic Operators for Geometric Deep Learning on Point Clouds" by Ruben Wiersma, Ahmad Nasikun, Elmar Eisemann, and Klaus Hildebrandt.

Anisotropic convolution is a central building block of CNNs but challenging to transfer to surfaces. DeltaConv learns combinations and compositions of operators from vector calculus, which are a natural fit for curved surfaces. The result is a simple and robust anisotropic convolution operator for point clouds with state-of-the-art results.

Top: unlike images, surfaces have no global coordinate system. Bottom: DeltaConv learns both scalar and vector features using geometric operators.

Contents

Installation

  1. Clone this repository:
git clone https://github.com/rubenwiersma/deltaconv.git
  1. Create a conda environment from the environment.yml:
conda env create -n deltaconv -f environment.yml

Done!

Manual installation

If you wish to install DeltaConv in your own environment, proceed as follows.

  1. Make sure that you have installed:

  2. Install DeltaConv:

pip install deltaconv

Building DeltaConv for yourself

  1. Make sure you clone the repository with submodules:
git clone --recurse-submodules https://github.com/rubenwiersma/deltaconv.git

If you have already cloned the repository without submodules, you can fix it with git submodule update --init --recursive.

  1. Install from folder:
cd [root_folder]
pip install

Replicating the experiments

See the README.md in replication_scripts for instructions on replicating the experiments and using the pre-trained weights (available in experiments/pretrained_weights).

In short, you can run bash scripts to replicate our experiments. For example, evaluating pre-trained weights on ShapeNet:

cd [root_folder]
conda activate deltaconv
bash replication_scripts/pretrained/shapenet.sh

You can also directly run the python files in experiments:

python experiments/train_shapenet.py

Use the -h or --help flag to find out which arguments can be passed to the training script:

python experiments/train_shapenet.py -h

You can keep track of the training process with tensorboard:

tensorboard logdir=experiments/runs/shapenet_all

Anisotropic Diffusion

The code that was used to generate Figure 2 from the paper and Figure 2 and 3 from the supplement is a notebook in the folder experiments/anisotropic_diffusion.

Data

The training scripts assume that you have a data folder in experiments. ModelNet40 and ShapeNet download the datasets from a public repository. Instructions to download the data for human body shape segmentation, SHREC, and ScanObjectNN are given in the training scripts.

Tests

In the paper, we make statements about a number of properties of DeltaConv that are either a result of prior work or due to the implementation. We created a test suite to ensure that these properties hold for the implementation, along with unit tests for each module. For example:

  • Section 3.6, 3.7: Vector MLPs are equivariant to norm-preserving transformations, or coordinate-independent (rotations, reflections)
    • test/nn/test_mlp.py
    • test/nn/test_nonlin.py
  • Section 3.7: DeltaConv is coordinate-independent, a forward pass on a shape with one choice of bases leads to the same output and weight updates when run with different bases
    • test/nn/test_deltaconv.py
  • Introduction, section 3.2: The operators are robust to noise and outliers.
    • test/geometry/test_grad_div.py
  • Supplement, section 1: Vectors can be mapped between points with equation (15).
    • test/geometry/test_grad_div.py

Citations

Please cite our paper if this code contributes to an academic publication:

@Article{Wiersma2022DeltaConv,
  author    = {Ruben Wiersma, Ahmad Nasikun, Elmar Eisemann, Klaus Hildebrandt},
  journal   = {Transactions on Graphics},
  title     = {DeltaConv: Anisotropic Operators for Geometric Deep Learning on Point Clouds},
  year      = {2022},
  month     = jul,
  number    = {4},
  volume    = {41},
  doi       = {10.1145/3528223.3530166},
  publisher = {ACM},
}

The farthest point sampling code relies on Geometry Central:

@misc{geometrycentral,
  title = {geometry-central},
  author = {Nicholas Sharp and Keenan Crane and others},
  note = {www.geometry-central.net},
  year = {2019}
}

And we make use of PyG (and underlying packages) to load point clouds, compute sparse matrix products, and compute nearest neighbors:

@inproceedings{Fey/Lenssen/2019,
  title={Fast Graph Representation Learning with {PyTorch Geometric}},
  author={Fey, Matthias and Lenssen, Jan E.},
  booktitle={ICLR Workshop on Representation Learning on Graphs and Manifolds},
  year={2019},
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

deltaconv-1.0.2.tar.gz (1.7 MB view hashes)

Uploaded Source

Built Distributions

deltaconv-1.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (181.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

deltaconv-1.0.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (182.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

deltaconv-1.0.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (182.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

deltaconv-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (181.9 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

deltaconv-1.0.2-cp39-cp39-win_amd64.whl (89.2 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

deltaconv-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (182.1 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

deltaconv-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (181.9 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

deltaconv-1.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (183.4 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

deltaconv-1.0.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (183.4 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64

deltaconv-1.0.2-1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (182.1 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

deltaconv-1.0.2-1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (182.1 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

deltaconv-1.0.2-1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (182.1 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

deltaconv-1.0.2-1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (182.0 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

deltaconv-1.0.2-1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (182.3 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

deltaconv-1.0.2-1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (182.1 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

deltaconv-1.0.2-1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (183.6 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

deltaconv-1.0.2-1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (183.5 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page