Skip to main content

Spline-Based Convolution Operator of SplineCNN

PyPI Version Testing Status Linting Status Code Coverage


This is a PyTorch implementation of the spline-based convolution operator of SplineCNN, as described in our paper:

Matthias Fey, Jan Eric Lenssen, Frank Weichert, Heinrich Müller: SplineCNN: Fast Geometric Deep Learning with Continuous B-Spline Kernels (CVPR 2018)

The operator works on all floating point data types and is implemented both for CPU and GPU.

Installation

Anaconda

Update: You can now install pytorch-spline-conv via Anaconda for all major OS/PyTorch/CUDA combinations 🤗 Given that you have pytorch >= 1.8.0 installed, simply run

conda install pytorch-spline-conv -c pyg

Binaries

We alternatively provide pip wheels for all major OS/PyTorch/CUDA combinations, see here.

PyTorch 2.4

To install the binaries for PyTorch 2.4.0, simply run

pip install torch-spline-conv -f https://data.pyg.org/whl/torch-2.4.0+${CUDA}.html

where ${CUDA} should be replaced by either cpu, cu118, cu121, or cu124 depending on your PyTorch installation.

cpu cu118 cu121 cu124
Linux
Windows
macOS

PyTorch 2.3

To install the binaries for PyTorch 2.3.0, simply run

pip install torch-spline-conv -f https://data.pyg.org/whl/torch-2.3.0+${CUDA}.html

where ${CUDA} should be replaced by either cpu, cu118, or cu121 depending on your PyTorch installation.

cpu cu118 cu121
Linux
Windows
macOS

Note: Binaries of older versions are also provided for PyTorch 1.4.0, PyTorch 1.5.0, PyTorch 1.6.0, PyTorch 1.7.0/1.7.1, PyTorch 1.8.0/1.8.1, PyTorch 1.9.0, PyTorch 1.10.0/1.10.1/1.10.2, PyTorch 1.11.0, PyTorch 1.12.0/1.12.1, PyTorch 1.13.0/1.13.1, PyTorch 2.0.0/2.0.1, PyTorch 2.1.0/2.1.1/2.1.2, and PyTorch 2.2.0/2.2.1/2.2.2 (following the same procedure). For older versions, you need to explicitly specify the latest supported version number or install via pip install --no-index in order to prevent a manual installation from source. You can look up the latest supported version number here.

From source

Ensure that at least PyTorch 1.4.0 is installed and verify that cuda/bin and cuda/include are in your $PATH and $CPATH respectively, e.g.:

$ python -c "import torch; print(torch.__version__)"
>>> 1.4.0

$ echo $PATH
>>> /usr/local/cuda/bin:...

$ echo $CPATH
>>> /usr/local/cuda/include:...

Then run:

pip install torch-spline-conv

When running in a docker container without NVIDIA driver, PyTorch needs to evaluate the compute capabilities and may fail. In this case, ensure that the compute capabilities are set via TORCH_CUDA_ARCH_LIST, e.g.:

export TORCH_CUDA_ARCH_LIST = "6.0 6.1 7.2+PTX 7.5+PTX"

Usage

from torch_spline_conv import spline_conv

out = spline_conv(x,
                  edge_index,
                  pseudo,
                  weight,
                  kernel_size,
                  is_open_spline,
                  degree=1,
                  norm=True,
                  root_weight=None,
                  bias=None)

Applies the spline-based convolution operator

over several node features of an input graph. The kernel function is defined over the weighted B-spline tensor product basis, as shown below for different B-spline degrees.

Parameters

  • x (Tensor) - Input node features of shape (number_of_nodes x in_channels).
  • edge_index (LongTensor) - Graph edges, given by source and target indices, of shape (2 x number_of_edges).
  • pseudo (Tensor) - Edge attributes, ie. pseudo coordinates, of shape (number_of_edges x number_of_edge_attributes) in the fixed interval [0, 1].
  • weight (Tensor) - Trainable weight parameters of shape (kernel_size x in_channels x out_channels).
  • kernel_size (LongTensor) - Number of trainable weight parameters in each edge dimension.
  • is_open_spline (ByteTensor) - Whether to use open or closed B-spline bases for each dimension.
  • degree (int, optional) - B-spline basis degree. (default: 1)
  • norm (bool, optional): Whether to normalize output by node degree. (default: True)
  • root_weight (Tensor, optional) - Additional shared trainable parameters for each feature of the root node of shape (in_channels x out_channels). (default: None)
  • bias (Tensor, optional) - Optional bias of shape (out_channels). (default: None)

Returns

  • out (Tensor) - Out node features of shape (number_of_nodes x out_channels).

Example

import torch
from torch_spline_conv import spline_conv

x = torch.rand((4, 2), dtype=torch.float)  # 4 nodes with 2 features each
edge_index = torch.tensor([[0, 1, 1, 2, 2, 3], [1, 0, 2, 1, 3, 2]])  # 6 edges
pseudo = torch.rand((6, 2), dtype=torch.float)  # two-dimensional edge attributes
weight = torch.rand((25, 2, 4), dtype=torch.float)  # 25 parameters for in_channels x out_channels
kernel_size = torch.tensor([5, 5])  # 5 parameters in each edge dimension
is_open_spline = torch.tensor([1, 1], dtype=torch.uint8)  # only use open B-splines
degree = 1  # B-spline degree of 1
norm = True  # Normalize output by node degree.
root_weight = torch.rand((2, 4), dtype=torch.float)  # separately weight root nodes
bias = None  # do not apply an additional bias

out = spline_conv(x, edge_index, pseudo, weight, kernel_size,
                  is_open_spline, degree, norm, root_weight, bias)

print(out.size())
torch.Size([4, 4])  # 4 nodes with 4 features each

Cite

Please cite our paper if you use this code in your own work:

@inproceedings{Fey/etal/2018,
  title={{SplineCNN}: Fast Geometric Deep Learning with Continuous {B}-Spline Kernels},
  author={Fey, Matthias and Lenssen, Jan Eric and Weichert, Frank and M{\"u}ller, Heinrich},
  booktitle={IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
  year={2018},
}

Running tests

pytest

C++ API

torch-spline-conv also offers a C++ API that contains C++ equivalent of python models.

mkdir build
cd build
# Add -DWITH_CUDA=on support for the CUDA if needed
cmake ..
make
make install

Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

torch_spline_conv_rocm-1.2.2.post6-cp314-cp314-manylinux_2_32_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.32+ x86-64

torch_spline_conv_rocm-1.2.2.post6-cp313-cp313-manylinux_2_32_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.32+ x86-64

torch_spline_conv_rocm-1.2.2.post6-cp312-cp312-manylinux_2_32_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.32+ x86-64

torch_spline_conv_rocm-1.2.2.post6-cp311-cp311-manylinux_2_32_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.32+ x86-64

torch_spline_conv_rocm-1.2.2.post6-cp310-cp310-manylinux_2_32_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.32+ x86-64

File details

Details for the file torch_spline_conv_rocm-1.2.2.post6-cp314-cp314-manylinux_2_32_x86_64.whl.

File metadata

File hashes

Hashes for torch_spline_conv_rocm-1.2.2.post6-cp314-cp314-manylinux_2_32_x86_64.whl
Algorithm Hash digest
SHA256 bb9c31ff76c3bfb9efaec98d8bebe8a33bed03cc09e271905fbbdafdc7a8412d
MD5 dc24bf41c274a04575306741878165f6
BLAKE2b-256 7590161aab89847457facf816ed8eb5a1b2e4158eb6faca6f15debc120c5b99f

See more details on using hashes here.

File details

Details for the file torch_spline_conv_rocm-1.2.2.post6-cp313-cp313-manylinux_2_32_x86_64.whl.

File metadata

File hashes

Hashes for torch_spline_conv_rocm-1.2.2.post6-cp313-cp313-manylinux_2_32_x86_64.whl
Algorithm Hash digest
SHA256 a976fc56ea85aaef2e2b79c3f63ac534a4bbaa30c442f02c936e2f0461a019f3
MD5 f1522345b7a0689fc82e6fd29a87af04
BLAKE2b-256 5685ddf4b32bfaefc88275b55805e177fe7139175a46f6bbe5db66a57d6e1505

See more details on using hashes here.

File details

Details for the file torch_spline_conv_rocm-1.2.2.post6-cp312-cp312-manylinux_2_32_x86_64.whl.

File metadata

File hashes

Hashes for torch_spline_conv_rocm-1.2.2.post6-cp312-cp312-manylinux_2_32_x86_64.whl
Algorithm Hash digest
SHA256 b26d7858ea722e6060697fb66979a1842842ca4bcfaea2d0ffd85413f3458a38
MD5 af1e08ec57cbfa1d5b161f31ce0deb8c
BLAKE2b-256 7a52b6b32a14fea573642cfd9f22f8add918e6b7b0f288605b33c79a1ddc25bd

See more details on using hashes here.

File details

Details for the file torch_spline_conv_rocm-1.2.2.post6-cp311-cp311-manylinux_2_32_x86_64.whl.

File metadata

File hashes

Hashes for torch_spline_conv_rocm-1.2.2.post6-cp311-cp311-manylinux_2_32_x86_64.whl
Algorithm Hash digest
SHA256 26da246a1fd0642a1f9096262d8e96f9f349fc539751c88a44dfe74770e4ad57
MD5 c9af226aefe1a45b9a91b55c8488d239
BLAKE2b-256 29ca950cf3ee9c0dacbfb5276aa6e18810880cb6b2256cd7522a62f6ca32bfde

See more details on using hashes here.

File details

Details for the file torch_spline_conv_rocm-1.2.2.post6-cp310-cp310-manylinux_2_32_x86_64.whl.

File metadata

File hashes

Hashes for torch_spline_conv_rocm-1.2.2.post6-cp310-cp310-manylinux_2_32_x86_64.whl
Algorithm Hash digest
SHA256 d6801291dc5c6afaedcd08f23a32a6d9e63c3d356308650750b9ce19d572db29
MD5 468cc5449dd1975c01a05a4409914933
BLAKE2b-256 1b59f174fe6b504d78b8a2083de1658dbd840659b50e70a8f896ffc79a56bde5

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.2.2.post6 This release

5 files

1.2.2.post5

5 files

1.2.2.post4

5 files

1.2.2.post3

5 files

1.2.2.post2

5 files

1.2.2.post1

5 files

1.2.2

5 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page