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
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
- Clone this repository:
git clone https://github.com/rubenwiersma/deltaconv.git
- 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.
-
Make sure that you have installed:
- Numpy -
pip install numpy
- PyTorch - see instructions
- PyG -
conda install pyg -c pyg
- Numpy -
-
Install DeltaConv:
pip install deltaconv
Building DeltaConv for yourself
- 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
.
- 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for deltaconv-1.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7e7ee3f78ec76d23b146de96e7f4c8b5ef0de3f7a681f495a4249c117f5eb2b8 |
|
MD5 | 3b4e9bfecb3386e0fde88694415cb6aa |
|
BLAKE2b-256 | eaa6f3d3dec5a7b9bd93df152b27c026f2b03e051733ffe78a830a02db5aa3bd |
Hashes for deltaconv-1.0.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 21ddb11a89f6512fe82100b6ddb46a52706f0c019edc5a7d5f3b05d636b7108d |
|
MD5 | 325dd7f277ac51eccf3505288f9fd5f5 |
|
BLAKE2b-256 | 5a954575193d7e447275666293a3550204a9c0cfad04f2d8d87ccfa561c674e8 |
Hashes for deltaconv-1.0.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6d8295cb789edbc24f7ebf87b47b55336cfb6f031ff4d4b3b398347592157fd2 |
|
MD5 | 8bb8133c607969810740e4070ce8db15 |
|
BLAKE2b-256 | 1246f8fcbefdf6529ddcf9690d8acb7b140b0a0fca60a4ec5bf1364cf8d6d706 |
Hashes for deltaconv-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 010130e42e568cf273c699ea533dca07932175267f1159c4c6fca0db9c7376a7 |
|
MD5 | 3fa43a76d67cec478ba9cd4c84b3e72e |
|
BLAKE2b-256 | dbe2bdf4f64d454a54a19a73e3941703bc3d95254085795ad095f28eaff1b713 |
Hashes for deltaconv-1.0.2-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1fcfd050f642396a1d8520204ad07c6d17e09757352edb737c6aa2dcb7c8d119 |
|
MD5 | 7ecee2d268098cb18409d66f7e3833c3 |
|
BLAKE2b-256 | 723990a586d95ccc06e4442afebd2d22bf5050a5f50093ba455104cc1ec4080d |
Hashes for deltaconv-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 06f4d86290c4494fefe8348857e44054540dd0b054992acf077435bf5ae917da |
|
MD5 | 1ae50f111837742f5b38c1b4034e5e30 |
|
BLAKE2b-256 | d8cc7fdfacefe7d12cf94324053454ae246b23567b37b427a95164f866a395e5 |
Hashes for deltaconv-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b47a5e6edb98447ef470f84d968476257fe70f21a8b69eaa042bc0544560967a |
|
MD5 | 5a8a235d90d8004892640c9a82d551ee |
|
BLAKE2b-256 | 0bc0a0ae57f31fc56d4715679646b3a4a41cdabb5f37d6892c998af9f88e26b1 |
Hashes for deltaconv-1.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 26733d5feeccaa0c9ce8c31ba6fc94cfa6dfb7fd7dca8143d7e689a34807b4b0 |
|
MD5 | 2098f0e27c362381cb8e21b074af674a |
|
BLAKE2b-256 | 51fafc5a592c23dc19a981e1b1d09a421eab79b448f5cc7856c80e86ec0e684b |
Hashes for deltaconv-1.0.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 17bd2decb6f409a1cd04e288238f80b6a736f54089d991494e8a3fccecf9eb1e |
|
MD5 | b9a59b61dbd8e75a77604ceb9fe9b933 |
|
BLAKE2b-256 | ef68a56dce0a06fe30de91168ce007b75aeebb32ed6ef99af2f820bc2261f8cf |
Hashes for deltaconv-1.0.2-1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e242d1188bc8d123584d5b64993ad946b059d994e38f4f34de4c35753b9c3dc3 |
|
MD5 | 272dea57fd64d2c5d0c505adc2d4c8f0 |
|
BLAKE2b-256 | 0eeea6ec19036ef18ae8529027a8eaa8dd47f6c5fe95ca7c8264d1566c20c712 |
Hashes for deltaconv-1.0.2-1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d65ed388139fab3e57b78d380a1764b400e02fc7bc5b53b3b7ae9594f7e2ca87 |
|
MD5 | 9918d137c179a456d8da6007665bcac9 |
|
BLAKE2b-256 | f0cbb0dd8deb54c49fa7862c741ca2a8f78f320ae51b680675d0825f496371d1 |
Hashes for deltaconv-1.0.2-1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f94f5401d61cfd14a79675177484300b83a744bf1103505e8e8104feea8e8c98 |
|
MD5 | f725e3718a5f1a3bb9de83cb5da91ce5 |
|
BLAKE2b-256 | 6c969b33a5fb4720fd5d39417a602ca12c67c54a39cacffe1fbf671dcffe32c8 |
Hashes for deltaconv-1.0.2-1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2654c28066eb94e520dee4617878059f95967f9aa5027843e2d9c25e8faa3f67 |
|
MD5 | 9ad02f023f18cad1042621e1f8cd2bf7 |
|
BLAKE2b-256 | 9dd51a21ec6f7327de6d784ab2f2861c8303b3721344d07d8ba088129fc885da |
Hashes for deltaconv-1.0.2-1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4be93ad3edd78eabe3dcd554f2a0b3d33972bbe213f8f68f2b5d4263d2b3f65b |
|
MD5 | cf00a8f048f727a7e1ec98d4aed506f8 |
|
BLAKE2b-256 | 8c5165b8ea79b207ef9b3aa454b706cdcf80ae2f5bf8331541c4824493e2d457 |
Hashes for deltaconv-1.0.2-1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8862d9f5775529297d63d0a799c7d616bff731adee75faf3853c573e737d3e16 |
|
MD5 | 5b6b4d806b850f30a377ed418684c7dc |
|
BLAKE2b-256 | 0765b78db7fbb3c2c7cb2a5c82baac6e4c5f4b6e95d10e774ccc333ee81028d0 |
Hashes for deltaconv-1.0.2-1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 24c7220cc58d9777cecebea1fa0eb28999684b9dbc12417d045b91efd64cda9a |
|
MD5 | 6ee097fa14985209a2e840aa2c400a39 |
|
BLAKE2b-256 | 7ba177e2be7061a0b15e5e2a5ec9d0aef64173ae74dd7331ca6e611244ac4ea4 |
Hashes for deltaconv-1.0.2-1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bfa65aea733bbbffde53aea1f504837b2fa32d282a902729e77bc24e27fbcf0f |
|
MD5 | f62107f95a2541ca48ff0d7aa1fe692e |
|
BLAKE2b-256 | a1240452161bdee73f3d165a384617f37496eeacda1177d7ec38bc53232684ec |