escnn
escnn 是一个基于 PyTorch 的开源扩展库,专为构建“等变可操纵卷积神经网络”而设计。作为 e2cnn 的升级版,它不再局限于平面几何变换,而是全面支持二维及三维空间中的平移、旋转和反射等所有等距变换,甚至提供了等变多层感知机(MLP)的实现。
在传统深度学习中,模型往往需要大量数据才能学会识别不同角度的物体。escnn 通过数学原理将这种“旋转不变性”直接嵌入网络结构,确保输入图像发生旋转或翻转时,特征图也会随之进行对应的精确变换。这种机制让模型天生具备几何理解能力,显著减少了对训练数据的依赖,提升了小样本场景下的泛化效率和鲁棒性。
该工具特别适合从事计算机视觉、医学影像分析、3D 点云处理等领域的研究人员与开发者。其核心技术亮点在于引入了“特征场”概念,用户只需定义标量场或矢量场等类型,即可利用 R2conv 和 R3conv 模块自动构建最通用的等变卷积层。此外,escnn 还配套了完整的非线性激活、批归一化等组件,并支持从像素网格到点云等多种数据形式,帮助专业人士高效搭建符合几何物理规律的先进 AI 模型。
使用场景
某医疗影像初创团队正在开发一套自动分析 3D 肺部 CT 扫描的 AI 系统,旨在检测不同体位下的微小肿瘤结节。
没有 escnn 时
- 数据依赖严重:由于传统 CNN 无法天然理解旋转不变性,团队必须对同一份 CT 数据进行大量人工旋转增强(如翻转、多角度旋转),导致训练数据量膨胀数倍,存储与预处理成本高昂。
- 泛化能力不足:当患者扫描姿势发生非标准倾斜时,模型往往将熟悉的病灶误判为背景,因为其特征提取器未能适应空间几何变换,漏诊率显著上升。
- 模型冗余低效:为了强行让网络“记住”各种角度的特征,不得不堆叠更深的网络层数和更多的通道数,导致显存占用高企,推理速度难以满足临床实时性要求。
使用 escnn 后
- 数据效率飞跃:利用 escnn 构建的 E(3)-等变卷积网络,天生具备对 3D 旋转和平移的数学一致性,无需额外数据增强即可覆盖所有空间姿态,训练数据集缩减了 70%。
- 鲁棒性显著提升:无论患者以何种角度躺入扫描仪,escnn 都能保证特征图随输入同步变换,确保肿瘤结节在任何视角下都被稳定识别,大幅降低了漏诊风险。
- 架构轻量精准:通过定义标量场和向量场等几何特征类型,escnn 用更少的参数实现了更强的几何表达能力,模型体积缩小一半的同时,推理延迟降低了 40%。
escnn 通过将几何对称性直接嵌入神经网络底层,用数学确定性取代了暴力数据增强,让 3D 医疗影像分析更高效、更可靠。
运行环境要求
- 未说明
未说明 (作为 PyTorch 扩展,支持 CPU 和 GPU,具体取决于 PyTorch 环境配置)
未说明

快速开始
E(n)等变可导向CNNs (escnn)
escnn 是一个用于等变深度学习的 PyTorch 扩展。 escnn 是 e2cnn 库的后继者,后者仅支持平面等距变换。 相比之下,escnn 支持对 2D 和 3D 等距变换都具有等变性的可导向 CNN,以及等变的 MLP。
如果您更喜欢使用 Jax,请查看我们库的这个分支 escnn_jax!
等变神经网络 保证其特征空间在输入发生变换时表现出特定的变换行为。 例如,经典的卷积神经网络(CNN)在设计上对其输入的平移具有等变性。 这意味着图像的平移会导致网络特征图的相应平移。 本包提供了在图像平面 (\mathbb{R}^2) 的所有 等距变换 (\mathrm{E}(2)) 以及 3D 空间 (\mathbb{R}^3) 的所有 等距变换 (\mathrm{E}(3)) 下——即在 平移、旋转 和 反射 下——具有等变性的神经网络模块实现(并且理论上可以扩展到 (\mathbb{R}^n) 的所有等距变换 (\mathrm{E}(n)))。 与传统 CNN 不同,(\mathrm{E}(n)) 等变模型能够保证在这些变换上的泛化能力,因此数据效率更高。
(\mathrm{E}(n)) 等变可导向 CNN 的特征空间被定义为 特征场 空间,其特点是由它们在旋转和反射下的变换规律所决定。 典型的例子包括标量场(如灰度图像或温度场)或矢量场(如光流或电磁场)。

用户无需指定通道数,而是需要通过指定场的 类型 和它们的 重数 来定义特征空间。
给定指定的输入和输出特征空间,我们的 R2conv 和 R3conv 模块会实例化两者之间最一般的卷积映射。
我们的库还提供了许多其他等变操作来处理特征场,包括非线性层、生成不变特征的映射、批归一化和丢弃层。
理论上,特征场定义在连续空间 (\mathbb{R}^n) 上。
实际上,它们要么被采样在 像素网格 上,要么以 点云 的形式给出。
escnn 使用 GeometricTensor 对象来表示特征场,这些对象将一个 torch.Tensor 包装起来,并附加相应的变换规律。
所有等变操作都会进行动态类型检查,以确保对特征场的几何处理是合理的。
为了参数化对任意紧致群 (G) 具有等变性的可导向核空间, 我们在 论文 中,在 Group Equivariant Convolution Kernels 的 Wigner-Eckart 定理 的基础上,将该定理从 (G)-齐次空间推广到了承载 (G)-作用的一般空间 (X)。 简而言之,我们的方法利用一个 (G)-可导向基底,针对整个欧几里得空间 (\mathbb{R}^n) 上的无约束标量滤波器,生成具有任意输入和输出场 类型 的可导向核空间。 例如,下图左侧展示了两个 (\mathrm{SO}(2))-可导向基底元素,它们用于定义 (\mathbb{R}^2) 上的函数,进而生成右侧两个 (\mathrm{SO}(2))-等变可导向核的基底元素。 具体来说,这些可导向核将一个频率 (l=1) 的矢量场(2 个通道)映射到一个频率 (J=2) 的矢量场(2 个通道)。

(\mathrm{E}(n)) 等变可导向 CNN 将一系列等距变换等变的 CNN 统一并推广到一个单一框架中。 示例包括:
- Group Equivariant Convolutional Networks
- Harmonic Networks: Deep Translation and Rotation Equivariance
- Steerable CNNs
- Rotation equivariant vector field networks
- Learning Steerable Filters for Rotation Equivariant CNNs
- HexaConv
- Roto-Translation Covariant Convolutional Networks for Medical Image Analysis
- 3D Steerable CNNs
- Tensor Field Networks
- Cormorant: Covariant Molecular Neural Networks
- 3D GCNNs for Pulmonary Nodule Detection
更多细节请参阅我们在 ICLR 2022 发表的论文 A Program to Build E(N)-Equivariant Steerable CNNs 以及我们在 NeurIPS 2019 发表的论文 General E(2)-Equivariant Steerable CNNs。
该库由四个子包组成,每个子包具有不同的高级功能:
| 组件 | 描述 |
|---|---|
| escnn.group | 实现了群和表示论的基本概念 |
| escnn.kernels | 求解等变卷积核空间 |
| escnn.gspaces | 定义欧几里得空间及其对称性 |
| escnn.nn | 包含用于构建深度神经网络的等变模块 |
警告: escnn.kernels 在 1.0.0 版本中进行了重大重构,与库的旧版本不兼容。这些更改不会影响库其他部分提供的接口,但有时使用旧版本训练的网络权重可能无法正确加载到新实例化的模型中。 为了向后兼容,我们建议使用 v0.1.9 版本。
演示
由于 $\mathrm{E}(2)$-可导向 CNN 对旋转和反射具有等变性,因此其推理结果与图像方向的选择无关。 下面的可视化演示了这一特性:我们将旋转后的图像输入到一个随机初始化的 $\mathrm{E}(2)$-可导向 CNN 中(左图)。 中间的图表展示了经过几层网络后,由一个标量场(颜色编码)和一个矢量场(箭头)组成的特征空间的等变变换。 在右图中,我们通过将响应场反向旋转,将其转换为随动参考系(稳定视图)。

在随动参考系中特征的不变性从实验上验证了 $\mathrm{E}(2)$-可导向 CNN 的旋转等变性。 请注意,响应的波动是由于图像在像素网格上的采样导致的离散化误差,这使得精确的连续旋转无法实现。
作为对比,我们展示了传统 CNN 在不同图像方向下的特征图响应:

由于传统 CNN 不具备旋转等变性,其响应会随着图像方向的变化而随机变化。这阻碍了 CNN 自动地在不同参考系之间泛化已学习的模式。
实验结果
$\mathrm{E}(n)$-可导向卷积可以作为 CNN 中传统卷积的直接替代品。 在使用相同基础架构(内存和计算成本相近)的情况下, 与 CNN 基线相比,性能得到了显著提升(数值为测试准确率,单位:%)。
| 模型 | 旋转后的 ModelNet10 |
|---|---|
| CNN 基线 | 82.5 ± 1.4 |
| SO(2)-CNN | 86.9 ± 1.9 |
| Octa-CNN | 89.7 ± 0.6 |
| Ico-CNN | 90.0 ± 0.6 |
| SO(3)-CNN | 89.5 ± 1.0 |
所有模型的架构和宽度大致相同。 更多细节请参阅我们的论文。
本库支持我们在先前的 e2cnn 库中实现的 $\mathrm{E}(2)$-可导向 CNN 作为特例; 我们在此列出了一些来自那里的二维场景中的代表性结果:
| 模型 | CIFAR-10 | CIFAR-100 | STL-10 |
|---|---|---|---|
| CNN 基线 | 2.6 ± 0.1 | 17.1 ± 0.3 | 12.74 ± 0.23 |
| E(2)-CNN * | 2.39 ± 0.11 | 15.55 ± 0.13 | 10.57 ± 0.70 |
| E(2)-CNN | 2.05 ± 0.03 | 14.30 ± 0.09 | 9.80 ± 0.40 |
在采用与 CNN 基线相同的训练设置(未进行额外的超参数调优)的情况下,等变模型取得了显著更好的结果(数值为测试错误率,单位:%)。 为了公平比较,未带 * 号的模型设计时尽量保持与基线模型参数数量相近,而带 * 号的模型则保留了通道数,从而保证计算量相当。 更多详情请参阅我们之前的 e2cnn 论文。
入门
escnn 使用起来非常方便,因为它提供了一个高层次的用户界面,将群论和表示论中的大部分复杂细节都抽象掉了。 下面的代码片段展示了如何从一张 RGB 图像执行到 10 个 正则 特征场的等变卷积(对应于 群卷积)。
from escnn import gspaces # 1
from escnn import nn # 2
import torch # 3
# 4
r2_act = gspaces.rot2dOnR2(N=8) # 5
feat_type_in = nn.FieldType(r2_act, 3*[r2_act.trivial_repr]) # 6
feat_type_out = nn.FieldType(r2_act, 10*[r2_act.regular_repr]) # 7
# 8
conv = nn.R2Conv(feat_type_in, feat_type_out, kernel_size=5) # 9
relu = nn.ReLU(feat_type_out) # 10
# 11
x = torch.randn(16, 3, 32, 32) # 12
x = feat_type_in(x) # 13
# 14
y = relu(conv(x)) # 15
第 5 行指定了网络应保持等变性的图像平面 $\mathbb{R}^2$ 上的对称群作用。 我们选择了 循环群 $\mathrm{C}_8$,它描述了以 $2\pi/8$ 的倍数进行的离散旋转。 第 6 行指定了输入特征场的类型。 RGB 图像的三个颜色通道被识别为三个独立的标量场,它们按照 $\mathrm{C}_8$ 的 平凡表示 进行变换(当输入图像旋转时,RGB 值不会改变;可参考上方第一张图中的标量场和向量场)。 类似地,第 7 行中指定的输出特征空间由 10 个按照 $\mathrm{C}_8$ 的 正则表示 进行变换的特征场组成。 然后通过将输入和输出类型以及卷积核大小传递给构造函数来实例化 $\mathrm{C}_8$-等变卷积(第 9 行)。 第 10 行实例化了一个作用于输出场的等变 ReLU 非线性层,因此传入了输出场的类型。
第 12 和 13 行生成了一个随机的 RGB 图像小批量,并将其包装成一个 nn.GeometricTensor,以便将其与正确的场类型 feat_type_in 关联起来。
等变模块在第 15 行处理该几何张量。
每个模块都会检查传入的几何张量是否满足预期的变换规律。
由于在测试时不再需要更新参数,训练完成后,任何等变网络都可以转换为纯 PyTorch 模型,且与传统 CNN 相比没有任何额外的计算开销。
目前,代码支持通过 .export() 方法自动转换一些常用的模块;更多详细信息请参阅
文档。
为了帮助您入门,我们提供了一些示例和教程:
- 入门教程 介绍了该库的基本功能。
- 第二个 教程 讲述了如何在旋转后的 MNIST 数据集上构建并训练一个等变模型。
- 请注意,escnn 也支持等变 MLP;请参阅 这些示例。
- 此外,请查看阿姆斯特丹大学 深度学习 2 课程中使用本库的关于可导向 CNN 的 教程。
更复杂的 2D 等变 Wide Resnet 模型已在 e2wrn.py 中实现。 要尝试一个在反射下等变的模型,请运行:
cd examples
python e2wrn.py
而同时在反射和 90 度整数倍旋转下等变的同一模型版本,则可通过以下命令运行:
python e2wrn.py --rot90
您可以在 examples 文件夹中找到更多示例。 例如,se3_3Dcnn.py 实现了一个在 3D 空间中对旋转和平移等变的 3D CNN。您可以尝试运行:
cd examples
python se3_3Dcnn.py
学习等变性和可导向 CNN 的有用资料
如果您想更好地理解等变和可导向神经网络背后的理论,可以查阅以下参考资料:
- Erik Bekkers 在阿姆斯特丹大学 深度学习 2 课程中关于 几何深度学习 的 讲座。
- 该课程的教材还包括一个关于 群卷积 的 教程,以及另一个使用 本库 讲解可导向 CNN 的 教程。
- Gabriele 的 硕士论文 简要概述了理解可导向 CNN 所需的关键数学知识。
- Maurice 的 博士论文 发展了可导向 CNN 的表示理论,推导出其中最主要的几层,并解释了规范场论的观点。
- Gabriele 演讲的 幻灯片 和 录像 对理解可导向卷积及其滤波器的推导过程非常有帮助,并包含了该研究领域的最新进展。
- Lars Veefkind 的 硕士论文 以非常清晰的方式涵盖了群论、表示论和可导向卷积;特别是,其中还包含了一种新颖的 可导向滤波器的构造性和直观推导方法。
依赖项
该库基于 Python 3.7。
torch>=1.3
numpy
scipy
lie_learn
joblib
py3nj
可选依赖:
torch-geometric
pymanopt>=1.0.0
autograd
警告:
py3nj提供了快速计算 Clebsch-Gordan 系数的功能。如果未安装此包,我们的库将依赖数值方法来估计这些系数。这种数值方法不能保证返回与py3nj计算得到的相同系数(它们可能仅相差一个符号)。因此,使用和不使用py3nj构建的模型可能不兼容。
要成功安装
py3nj,您可能需要在环境中安装 Fortran 编译器。
安装
您可以安装最新的 release:
pip install escnn
或者您可以克隆此仓库并手动安装:
pip install git+https://github.com/QUVA-Lab/escnn
贡献
您想为 escnn 做出贡献吗?太好了!
请查看 CONTRIBUTING.md 中的说明,帮助我们改进这个库!
您有任何疑问吗?或者有一些想法想要讨论吗?欢迎在 Discussions 中开启新话题!
引用
本库的开发是我们论文工作的一部分,包括 A Program to Build E(N)-Equivariant Steerable CNNs 和 General E(2)-Equivariant Steerable CNNs。 如果您使用我们的代码,请引用以下文献:
@inproceedings{cesa2022a,
title={A Program to Build {E(N)}-Equivariant Steerable {CNN}s },
author={Gabriele Cesa and Leon Lang and Maurice Weiler},
booktitle={International Conference on Learning Representations},
year={2022},
url={https://openreview.net/forum?id=WE4qe9xlnQw}
}
@inproceedings{e2cnn,
title={{General E(2)-Equivariant Steerable CNNs}},
author={Weiler, Maurice and Cesa, Gabriele},
booktitle={Conference on Neural Information Processing Systems (NeurIPS)},
year={2019},
url={https://arxiv.org/abs/1911.08251}
}
欢迎随时 联系我们。
许可证
escnn 采用 BSD Clear 许可证进行分发。详情请参阅 LICENSE 文件。
常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。