{"id":13699096,"url":"https://github.com/QUVA-Lab/escnn","last_synced_at":"2025-05-04T04:31:26.739Z","repository":{"id":41093793,"uuid":"470529658","full_name":"QUVA-Lab/escnn","owner":"QUVA-Lab","description":"Equivariant Steerable CNNs Library for Pytorch https://quva-lab.github.io/escnn/","archived":false,"fork":false,"pushed_at":"2024-09-18T09:29:54.000Z","size":34784,"stargazers_count":356,"open_issues_count":39,"forks_count":47,"subscribers_count":19,"default_branch":"master","last_synced_at":"2024-10-30T02:36:42.285Z","etag":null,"topics":["deep-learning","equivariance","geometric-deep-learning","geometry","invariant","isometries","pytorch","rotations","symmetries"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/QUVA-Lab.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.txt","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-03-16T10:15:02.000Z","updated_at":"2024-10-29T09:25:41.000Z","dependencies_parsed_at":"2023-01-29T17:45:39.897Z","dependency_job_id":"2091913a-b584-4581-aeda-b13e577472df","html_url":"https://github.com/QUVA-Lab/escnn","commit_stats":{"total_commits":192,"total_committers":12,"mean_commits":16.0,"dds":"0.36458333333333337","last_synced_commit":"9ad44cc37d694d9c805c4fef4d16722a254b3bf2"},"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QUVA-Lab%2Fescnn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QUVA-Lab%2Fescnn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QUVA-Lab%2Fescnn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QUVA-Lab%2Fescnn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/QUVA-Lab","download_url":"https://codeload.github.com/QUVA-Lab/escnn/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252288912,"owners_count":21724323,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deep-learning","equivariance","geometric-deep-learning","geometry","invariant","isometries","pytorch","rotations","symmetries"],"created_at":"2024-08-02T19:00:58.103Z","updated_at":"2025-05-04T04:31:21.730Z","avatar_url":"https://github.com/QUVA-Lab.png","language":"Python","funding_links":[],"categories":["Python","Representation Learning"],"sub_categories":[],"readme":"\nE(n)-equivariant Steerable CNNs (*escnn*)\n--------------------------------------------------------------------------------\n\n*escnn* is a [PyTorch](https://pytorch.org/) extension for equivariant deep learning.\n*escnn* is the successor of the [e2cnn](\u003chttps://github.com/QUVA-Lab/e2cnn\u003e) library, which only supported planar isometries.\nInstead, *escnn* supports steerable CNNs equivariant to both 2D and 3D isometries, as well as equivariant MLPs.\n\n\u003cdiv align=\"center\"\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\u003ctd style=\"border: none\"\u003e\n        \u003cb\u003e\u003ca href='https://quva-lab.github.io/escnn/' target='_blank'\u003e\u0026nbsp;\n            Documentation\u003c/a\u003e\u0026nbsp;\u003c/b\u003e\n    \u003c/td\u003e\u003ctd style=\"border: none\"\u003e\n        \u003cb\u003e\u003ca href='https://openreview.net/forum?id=WE4qe9xlnQw' target='_blank'\u003e\u0026nbsp;\n            Paper ICLR 22\u003c/a\u003e\u0026nbsp;\u003c/b\u003e\n    \u003c/td\u003e\u003ctd style=\"border: none\"\u003e\n        \u003cb\u003e\u003ca href='https://gabri95.github.io/Thesis/thesis.pdf' target='_blank'\u003e\u0026nbsp;\n            MSc Thesis Gabriele\u003c/a\u003e\u0026nbsp;\u003c/b\u003e \n    \u003c/td\u003e\u003ctd style=\"border: none\"\u003e\n        \u003cb\u003e\u003ca href='https://github.com/QUVA-Lab/e2cnn' target='_blank'\u003e\u0026nbsp;\n            e2cnn library\u003c/a\u003e\u0026nbsp;\u003c/b\u003e\n    \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd style=\"border: none\"\u003e\n    \u003c/td\u003e\u003ctd style=\"border: none\"\u003e\n        \u003cb\u003e\u003ca href='https://arxiv.org/abs/1911.08251' target='_blank'\u003e\u0026nbsp;\n            Paper NeurIPS 19\u003c/a\u003e\u0026nbsp;\u003c/b\u003e\n    \u003c/td\u003e\u003ctd style=\"border: none\"\u003e\n        \u003cb\u003e\u003ca href='https://maurice-weiler.gitlab.io/#cnn_book' target='_blank'\u003e\u0026nbsp;\n            PhD Thesis Maurice\u003c/a\u003e\u0026nbsp;\u003c/b\u003e\n    \u003c/td\u003e\u003ctd style=\"border: none\"\u003e\n        \u003cb\u003e\u003ca href='https://github.com/QUVA-Lab/e2cnn_experiments' target='_blank'\u003e\u0026nbsp;\n            e2cnn experiments\u003c/a\u003e\u0026nbsp;\u003c/b\u003e\n    \u003c/td\u003e\u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\nIf you prefer using Jax, check our this fork [escnn_jax](https://github.com/emilemathieu/escnn_jax) of our library!\n\n--------------------------------------------------------------------------------\n\n*Equivariant neural networks* guarantee a specified transformation behavior of their feature spaces under transformations of their input.\nFor instance, classical convolutional neural networks (*CNN*s) are by design equivariant to translations of their input.\nThis means that a translation of an image leads to a corresponding translation of the network's feature maps.\nThis package provides implementations of neural network modules which are equivariant under all *isometries* $\\mathrm{E}(2)$ of the image plane $\\mathbb{R}^2$ and all *isometries* $\\mathrm{E}(3)$ of the 3D space $\\mathbb{R}^3$, that is, under *translations*, *rotations* and *reflections* (and can, potentially, be extended to all isometries $\\mathrm{E}(n)$ of $\\mathbb{R}^n$).\nIn contrast to conventional CNNs, $\\mathrm{E}(n)$-equivariant models are guaranteed to generalize over such transformations, and are therefore more data efficient.\n\nThe feature spaces of $\\mathrm{E}(n)$-equivariant Steerable CNNs are defined as spaces of *feature fields*, being characterized by their transformation law under rotations and reflections.\nTypical examples are scalar fields (e.g. gray-scale images or temperature fields) or vector fields (e.g. optical flow or electromagnetic fields).\n\n![feature field examples](https://github.com/QUVA-Lab/escnn/raw/master/visualizations/feature_fields.png)\n\nInstead of a number of channels, the user has to specify the field *types* and their *multiplicities* in order to define a feature space.\nGiven a specified input- and output feature space, our ``R2conv`` and ``R3conv`` modules instantiate the *most general* convolutional mapping between them.\nOur library provides many other equivariant operations to process feature fields, including nonlinearities, mappings to produce invariant features, batch normalization and dropout.\n\nIn theory, feature fields are defined on continuous space $\\mathbb{R}^n$.\nIn practice, they are either sampled on a *pixel grid* or given as a *point cloud*.\nescnn represents feature fields by ``GeometricTensor`` objects, which wrap a ``torch.Tensor`` with the corresponding transformation law.\nAll equivariant operations perform a dynamic type-checking in order to guarantee a geometrically sound processing of the feature fields.\n\n\nTo parameterize steerable kernel spaces, equivariant to an arbitrary compact group $G$,\nin our [paper](https://openreview.net/forum?id=WE4qe9xlnQw), we generalize the Wigner-Eckart theorem in\n[A Wigner-Eckart Theorem for Group Equivariant Convolution Kernels](https://arxiv.org/abs/2010.10952)\nfrom $G$-homogeneous spaces to more general spaces $X$ carrying a $G$-action. \nIn short, our method leverages a $G$-steerable basis for unconstrained scalar filters over the whole Euclidean space $\\mathbb{R}^n$ to generate steerable kernel spaces with arbitrary input and output field *types*.\nFor example, the left side of the next image shows two elements of a $\\mathrm{SO}(2)$-steerable basis for functions on $\\mathbb{R}^2$ which are used to generate two basis elements for $\\mathrm{SO}(2)$-equivariant steerable kernels on the right.\nIn particular, the steerable kernels considered map a frequency $l=1$ vector field (2 channels) to a frequency $J=2$ \nvector field (2 channels).\n\n![we_theorem_example](https://github.com/QUVA-Lab/escnn/raw/master/visualizations/wigner_eckart_theorem_2.png)\n\n\n$\\mathrm{E}(n)$-Equivariant Steerable CNNs unify and generalize a wide range of isometry equivariant CNNs in one single framework.\nExamples include:\n- [Group Equivariant Convolutional Networks](https://arxiv.org/abs/1602.07576)\n- [Harmonic Networks: Deep Translation and Rotation Equivariance](https://arxiv.org/abs/1612.04642)\n- [Steerable CNNs](https://arxiv.org/abs/1612.08498)\n- [Rotation equivariant vector field networks](https://arxiv.org/abs/1612.09346)\n- [Learning Steerable Filters for Rotation Equivariant CNNs](https://arxiv.org/abs/1711.07289)\n- [HexaConv](https://arxiv.org/abs/1803.02108)\n- [Roto-Translation Covariant Convolutional Networks for Medical Image Analysis](https://arxiv.org/abs/1804.03393)\n- [3D Steerable CNNs](https://arxiv.org/abs/1807.02547)\n- [Tensor Field Networks](https://arxiv.org/abs/1802.08219)\n- [Cormorant: Covariant Molecular Neural Networks](https://arxiv.org/abs/1906.04015)\n- [3D GCNNs for Pulmonary Nodule Detection](https://arxiv.org/abs/1804.04656)\n\n\nFor more details, we refer to our ICLR 2022 paper [A Program to Build E(N)-Equivariant Steerable CNNs](https://openreview.net/forum?id=WE4qe9xlnQw)\nand our NeurIPS 2019 paper [General E(2)-Equivariant Steerable CNNs](https://arxiv.org/abs/1911.08251).\n\n--------------------------------------------------------------------------------\n\nThe library is structured into four subpackages with different high-level features:\n\n| Component                                                                         | Description                                                      |\n|-----------------------------------------------------------------------------------|------------------------------------------------------------------|\n| [**escnn.group**](https://github.com/QUVA-Lab/escnn/tree/master/escnn/group/)     | implements basic concepts of *group* and *representation* theory |\n| [**escnn.kernels**](https://github.com/QUVA-Lab/escnn/tree/master/escnn/kernels/) | solves for spaces of equivariant convolution kernels             |\n| [**escnn.gspaces**](https://github.com/QUVA-Lab/escnn/tree/master/escnn/gspaces/) | defines the Euclidean spaces and their symmetries                |\n| [**escnn.nn**](https://github.com/QUVA-Lab/escnn/tree/master/escnn/nn/)           | contains equivariant modules to build deep neural networks       |\n--------------------------------------------------------------------------------------------------------------------------------------------------\n\n\u003e **WARNING**:\n\u003e **escnn.kernels** received major refactoring in version 1.0.0 and it is not compatible with previous versions of the library. These changes do not affect the interface provided in the rest of the library but, sometimes, the weights of a network trained with a previous version might not load correctly in a newly instantiated model.\n\u003e We recommend using version [v0.1.9](https://github.com/QUVA-Lab/escnn/tree/v0.1.9) for backward compatibility.\n\n\n\n## Demo\n\nSince $\\mathrm{E}(2)$-steerable CNNs are equivariant under rotations and reflections, their inference is independent from the choice of image orientation.\nThe visualization below demonstrates this claim by feeding rotated images into a randomly initialized $\\mathrm{E}(2)$-steerable CNN (left).\nThe middle plot shows the equivariant transformation of a feature space, consisting of one scalar field (color-coded) and one vector field (arrows), after a few layers.\nIn the right plot we transform the feature space into a comoving reference frame by rotating the response fields back (stabilized view).\n\n![Equivariant CNN output](https://github.com/QUVA-Lab/escnn/raw/master/visualizations/vectorfield.gif)\n\nThe invariance of the features in the comoving frame validates the rotational equivariance of $\\mathrm{E}(2)$-steerable CNNs empirically.\nNote that the fluctuations of responses are discretization artifacts due to the sampling of the image on a pixel grid, which does not allow for exact continuous rotations.\n\u003c!-- Note that the fluctuations of responses are due to discretization artifacts coming from the  --\u003e\n\nFor comparison, we show a feature map response of a conventional CNN for different image orientations below.\n\n![Conventional CNN output](https://github.com/QUVA-Lab/escnn/raw/master/visualizations/conventional_cnn.gif)\n\nSince conventional CNNs are not equivariant under rotations, the response varies randomly with the image orientation.\nThis prevents CNNs from automatically generalizing learned patterns between different reference frames.\n\n\n## Experimental results\n\n$\\mathrm{E}(n)$-steerable convolutions can be used as a drop in replacement for the conventional convolutions used in CNNs.\nWhile using the same base architecture (with similar memory and computational cost), \nthis leads to significant performance boosts compared to CNN baselines (values are test accuracies in percent).\n\n| model        | Rotated ModelNet10 |\n|--------------|--------------------|\n| CNN baseline | 82.5       ± 1.4   |\n| SO(2)-CNN    | 86.9       ± 1.9   |\n| Octa-CNN     | 89.7       ± 0.6   |\n| Ico-CNN      | 90.0       ± 0.6   |\n| SO(3)-CNN    | 89.5       ± 1.0   |\n\nAll models share approximately the same architecture and width.\nFor more details we refer to our [paper](https://openreview.net/forum?id=WE4qe9xlnQw).\n\nThis library supports $\\mathrm{E}(2)$-steerable CNNs implemented in our previous [e2cnn](\u003chttps://github.com/QUVA-Lab/e2cnn\u003e) library as a special case; \nwe include some representative results in the 2D setting from there:\n\n| model        | CIFAR-10                | CIFAR-100                | STL-10             |\n|--------------|-------------------------|--------------------------|--------------------|\n| CNN baseline | 2.6 \u0026nbsp; ± 0.1 \u0026nbsp; | 17.1 \u0026nbsp; ± 0.3 \u0026nbsp; | 12.74 ± 0.23       |\n| E(2)-CNN *   | 2.39       ± 0.11       | 15.55       ± 0.13       | 10.57 ± 0.70       |\n| E(2)-CNN     | 2.05       ± 0.03       | 14.30       ± 0.09       | \u0026nbsp; 9.80 ± 0.40 |\n\nWhile using the same training setup (*no further hyperparameter tuning*) used for the CNN baselines, the equivariant models achieve significantly better results (values are test errors in percent).\nFor a fair comparison, the models without * are designed such that the number of parameters of the baseline is approximately preserved while models with * preserve the number of channels, and hence compute.\nFor more details we refer to our previous *e2cnn* [paper](https://arxiv.org/abs/1911.08251).\n\n\n## Getting Started\n\n*escnn* is easy to use since it provides a high level user interface which abstracts most intricacies of group and representation theory away.\nThe following code snippet shows how to perform an equivariant convolution from an RGB-image to 10 *regular* feature fields (corresponding to a\n[group convolution](https://arxiv.org/abs/1602.07576)).\n\n```python3\nfrom escnn import gspaces                                          #  1\nfrom escnn import nn                                               #  2\nimport torch                                                       #  3\n                                                                   #  4\nr2_act = gspaces.rot2dOnR2(N=8)                                    #  5\nfeat_type_in  = nn.FieldType(r2_act,  3*[r2_act.trivial_repr])     #  6\nfeat_type_out = nn.FieldType(r2_act, 10*[r2_act.regular_repr])     #  7\n                                                                   #  8\nconv = nn.R2Conv(feat_type_in, feat_type_out, kernel_size=5)       #  9\nrelu = nn.ReLU(feat_type_out)                                      # 10\n                                                                   # 11\nx = torch.randn(16, 3, 32, 32)                                     # 12\nx = feat_type_in(x)                                                # 13\n                                                                   # 14\ny = relu(conv(x))                                                  # 15\n```\n\nLine 5 specifies the symmetry group action on the image plane $\\mathbb{R}^2$ under which the network should be equivariant.\nWe choose the \n[*cyclic group*](https://en.wikipedia.org/wiki/Cyclic_group)\n $\\mathrm{C}_8$, which describes discrete rotations by multiples of $2\\pi/8$.\nLine 6 specifies the input feature field types.\nThe three color channels of an RGB image are thereby to be identified as three independent scalar fields, which transform under the\n[*trivial representation*](https://en.wikipedia.org/wiki/Trivial_representation)\n of $\\mathrm{C}_8$ (when the input image is rotated, the RGB values do not change; compare the scalar and vector fields in the first image above).\nSimilarly, the output feature space in line 7 is specified to consist of 10 feature fields which transform under the\n[*regular representation*](https://en.wikipedia.org/wiki/Regular_representation)\nof $\\mathrm{C}_8$.\nThe $\\mathrm{C}_8$-equivariant convolution is then instantiated by passing the input and output type as well as the kernel size to the constructor (line 9).\nLine 10 instantiates an equivariant ReLU nonlinearity which will operate on the output field and is therefore passed the output field type.\n\nLines 12 and 13 generate a random minibatch of RGB images and wrap them into a `nn.GeometricTensor` to associate them\nwith their correct field type `feat_type_in`.\nThe equivariant modules process the geometric tensor in line 15.\nEach module is thereby checking whether the geometric tensor passed to them satisfies the expected transformation law.\n\nBecause the parameters do not need to be updated anymore at test time, after training, any equivariant network can be \nconverted into a pure PyTorch model with no additional computational overhead in comparison to conventional CNNs.\nThe code currently supports the automatic conversion of a few commonly used modules through the `.export()` method; \ncheck the [documentation](https://quva-lab.github.io/escnn/api/escnn.nn.html) for more details.\n\nTo get started, we provide some examples and tutorials:\n- The [introductory tutorial](https://github.com/QUVA-Lab/escnn/blob/master/examples/introduction.ipynb) introduces the basic functionality of the library.\n- A second [tutorial](https://github.com/QUVA-Lab/escnn/blob/master/examples/model.ipynb) goes through building and training\nan equivariant model on the rotated MNIST dataset.\n- Note that *escnn* also supports equivariant MLPs; see [these examples](https://github.com/QUVA-Lab/escnn/blob/master/examples/mlp.ipynb).\n- Check also the [tutorial](https://uvadlc-notebooks.readthedocs.io/en/latest/tutorial_notebooks/DL2/Geometric_deep_learning/tutorial2_steerable_cnns.html) on Steerable CNNs using our library in the *Deep Learning 2* course at the University of Amsterdam.\n\nMore complex 2D equivariant *Wide Resnet* models are implemented in [e2wrn.py](https://github.com/QUVA-Lab/escnn/blob/master/examples/e2wrn.py).\nTo try a model which is equivariant under reflections call:\n```\ncd examples\npython e2wrn.py\n```\nA version of the same model which is simultaneously equivariant under reflections and rotations of angles multiple of 90 degrees can be run via:\n```\npython e2wrn.py --rot90\n```\nYou can find more examples in the [example](https://github.com/QUVA-Lab/escnn/tree/master/examples) folder.\nFor instance, [se3_3Dcnn.py](https://github.com/QUVA-Lab/escnn/blob/master/examples/se3_3Dcnn.py) implements a 3D CNN equivariant to\nrotations and translations in 3D. You can try it with\n```\ncd examples\npython se3_3Dcnn.py\n```\n\n## Useful material to learn about Equivariance and Steerable CNNs\n\nIf you want to better understand the theory behind equivariant and steerable neural networks, you can check these references:\n- Erik Bekkers' [lectures](https://uvagedl.github.io/) on *Geometric Deep Learning* at in the Deep Learning 2 course at the University of Amsterdam\n- The course material also includes a [tutorial](https://uvadlc-notebooks.readthedocs.io/en/latest/tutorial_notebooks/DL2/Geometric_deep_learning/tutorial1_regular_group_convolutions.html) on *group convolution* and [another](https://uvadlc-notebooks.readthedocs.io/en/latest/tutorial_notebooks/DL2/Geometric_deep_learning/tutorial2_steerable_cnns.html) about Steerable CNNs, using *this library*.\n- Gabriele's [MSc thesis](https://gabri95.github.io/Thesis/thesis.pdf) provides a brief overview of the essential mathematical ingredients needed to understand Steerable CNNs.\n- Maurice's [PhD thesis](https://maurice-weiler.gitlab.io/#cnn_book) develops the representation theory of steerable CNNs, deriving the most prominent layers and explaining the gauge theoretic viewpoint.\n- The [slides](https://people.cmm.minesparis.psl.eu/users/velasco/Cesa.pdf) and the [recording](https://www.youtube.com/watch?v=FUNAh24DEN4\u0026ab_channel=CalistaWorkshopParis2024) from Gabriele's talk can be useful to understand steerable convolution and how the steerable filters are derived, and include some recent advances on this research topics.\n- Lars Veefkind's [MSc thesis](https://uvagedl.github.io/Learning_the_Degree_of_Equivariance_for_Steerable_CNNs_fixed_typo_compressed.pdf) covers group theory, representation theory and steerable convolution in a very clear way; in particular, it also includes a novel *constructive and intuitive derivation of steerable filters*. \n\n## Dependencies\n\nThe library is based on Python3.7\n\n```\ntorch\u003e=1.3\nnumpy\nscipy\nlie_learn\njoblib\npy3nj\n```\nOptional:\n```\ntorch-geometric\npymanopt\u003e=1.0.0\nautograd\n```\n\n\u003e **WARNING**: `py3nj` enables a fast computation of Clebsh Gordan coefficients.\nIf this package is not installed, our library relies on a numerical method to estimate them.\nThis numerical method is not guaranteed to return the same coefficients computed by `py3nj` (they can differ by a sign).\nFor this reason, models built with and without `py3nj` might not be compatible.\n\n\u003e To successfully install `py3nj` you may need a Fortran compiler installed in you environment.\n\n## Installation\n\nYou can install the latest [release](https://github.com/QUVA-Lab/escnn/releases) as\n\n```\npip install escnn\n```\n\nor you can clone this repository and manually install it with\n```\npip install git+https://github.com/QUVA-Lab/escnn\n```\n\n\n## Contributing\n\nWould you like to contribute to **escnn**? That's great!\n\nThen, check the instructions in [CONTRIBUTING.md](https://github.com/QUVA-Lab/escnn/blob/master/CONTRIBUTING.md) and help us to\nimprove the library!\n\n\nDo you have any doubts? Do you have some idea you would like to discuss? \nFeel free to open a new thread under in [Discussions](https://github.com/QUVA-Lab/escnn/discussions)!\n\n## Cite\n\nThe development of this library was part of the work done for our papers\n[A Program to Build E(N)-Equivariant Steerable CNNs](https://openreview.net/forum?id=WE4qe9xlnQw)\nand [General E(2)-Equivariant Steerable CNNs](https://arxiv.org/abs/1911.08251).\nPlease cite these works if you use our code:\n\n```\n\n   @inproceedings{cesa2022a,\n        title={A Program to Build {E(N)}-Equivariant Steerable {CNN}s },\n        author={Gabriele Cesa and Leon Lang and Maurice Weiler},\n        booktitle={International Conference on Learning Representations},\n        year={2022},\n        url={https://openreview.net/forum?id=WE4qe9xlnQw}\n    }\n    \n   @inproceedings{e2cnn,\n       title={{General E(2)-Equivariant Steerable CNNs}},\n       author={Weiler, Maurice and Cesa, Gabriele},\n       booktitle={Conference on Neural Information Processing Systems (NeurIPS)},\n       year={2019},\n       url={https://arxiv.org/abs/1911.08251}\n   }\n```\n\nFeel free to [contact us](mailto:cesa.gabriele@gmail.com,m.weiler.ml@gmail.com).\n\n## License\n\n*escnn* is distributed under BSD Clear license. See LICENSE file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FQUVA-Lab%2Fescnn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FQUVA-Lab%2Fescnn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FQUVA-Lab%2Fescnn/lists"}