Python中的GPU加速小波散度变换
项目描述
Kymatio:Python 中的小波散射 - v0.3.0 “Erdre”
Kymatio 是 Python 编程语言中小波散射变换的实现,适用于信号处理和机器学习中的大规模数值实验。散射变换是平移不变信号表示,作为卷积网络实现,其滤波器未学习,而是固定的(如小波滤波器)。
如果你需要以下库,请使用 Kymatio:
- 支持 1-D、2-D 和 3-D 小波,
- 将小波散射集成到深度学习架构中,
- 无缝运行在 CPU 和 GPU 硬件上,支持主要的深度学习 API,例如 PyTorch、TensorFlow 和 Jax。
Kymatio 环境
灵活性
Kymatio 组织关联了几个现有的小波散射包的开发者,包括 ScatNet
、scattering.m
、PyScatWave
、WaveletScattering.jl
和 PyScatHarm
。
将 Kymatio 集成到深度学习框架中允许程序员反向传播小波散射系数的梯度,从而将它们集成到端到端可训练的管道中,例如深度神经网络。
可移植性
这些算法都是用高级命令式范式编写的,使其能够移植到任何支持复数线性代数和快速傅里叶变换 (FFT) 的 Python 数组操作库。
每个算法都包含前端和后端。前端负责与用户接口。后端定义了计算散射变换所需的函数。
目前,有八个可用的前端-后端对,包括 NumPy(CPU)、scikit-learn(CPU)、纯 PyTorch(CPU 和 GPU)、PyTorch>=1.10(CPU 和 GPU)、PyTorch+scikit-cuda(GPU)、PyTorch>=1.10+scikit-cuda(GPU)、TensorFlow(CPU 和 GPU)、Keras(CPU 和 GPU)以及 Jax(CPU 和 GPU)。
可扩展性
Kymatio 在一个通用的应用程序编程接口下集成了 1D、2D 和 3D 小波滤波器的构建,以及提取小波散射系数的内存高效算法。
在图形处理单元(GPU)上运行 Kymatio 而不是多核传统中央处理单元(CPU)可以在计算散射变换时显著加速。与基于 CPU 的 MATLAB 代码相比,当前的加速在 1D 和 3D 中约为 10 倍,在 2D 中约为 100 倍。
有关更多详细信息,请参阅我们的 官方基准测试。
如何引用
如果你使用此包,请引用我们的论文 Kymatio:Python 中的散射变换
Andreux M.,Angles T.,Exarchakis G.,Leonarduzzi R.,Rochette G.,Thiry L.,Zarka J.,Mallat S.,Andén J.,Belilovsky E.,Bruna J.,Lostanlen V.,Chaudhary M.,Hirn M. J.,Oyallon E.,Zhang S.,Cella C.,Eickenberg M. (2020). Kymatio:Python 中的散射变换。机器学习研究杂志 21(60):1−6,2020. (论文) (bibtex)
安装
依赖项
Kymatio 需要
- Python (>= 3.7)
- SciPy (>= 0.13)
标准安装
我们强烈建议在 Anaconda 环境中运行 Kymatio,因为这简化了其他依赖项的安装。您可以使用包管理器 pip
安装 Kymatio 的最新版本,该工具将自动从 Python 软件包索引(PyPI)下载 Kymatio。
pip install kymatio
Linux 和 macOS 是两个官方支持的操作系统。
前端
NumPy
要显式调用 NumPy 前端,运行
from kymatio.numpy import Scattering2D
scattering = Scattering2D(J=2, shape=(32, 32))
Scikit-learn
您还可以使用以下方式将 Scattering2D
调用为 scikit-learn 的 Transformer
from kymatio.sklearn import Scattering2D
scattering_transformer = Scattering2D(2, (32, 32))
PyTorch
使用 PyTorch,您可以实例化 Scattering2D
为 torch.nn.Module
from kymatio.torch import Scattering2D
scattering = Scattering2D(J=2, shape=(32, 32))
TensorFlow 和 Keras
同样,在 TensorFlow 中,您可以实例化 Scattering2D
为 tf.Module
from kymatio.tensorflow import Scattering2D
scattering = Scattering2D(J=2, shape=(32, 32))
或者,您可以使用Jax调用Scattering2D
作为Keras Layer
。
from tensorflow.keras.layers import Input
from kymatio.keras import Scattering2D
inputs = Input(shape=(32, 32))
scattering = Scattering2D(J=2)(inputs)
Jax
最后,安装了Jax之后,您也可以实例化一个Jax Scattering2D
对象。
from kymatio.jax import Scattering2D
scattering = Scattering2D(J=2, shape=(32, 32))
从源代码安装
假设已经下载了Kymatio源代码,您可以通过运行以下命令进行安装:
pip install -r requirements.txt
python setup.py install
开发者也可以通过以下方式安装Kymatio:
pip install -r requirements.txt
python setup.py develop
GPU加速
某些前端(如numpy
和sklearn
)仅允许在CPU上处理,因此速度较慢。然而,torch
、tensorflow
、keras
和jax
前端也支持GPU处理,这可以显著加速计算。此外,torch
后端支持优化的skcuda
后端,目前提供计算散射变换的最快性能。
要使用它,您必须首先安装scikit-cuda
和cupy
依赖项。
pip install scikit-cuda cupy
然后,您可以使用backend='torch_skcuda'
参数实例化散射对象。
from kymatio.torch import Scattering2D
scattering = Scattering2D(J=2, shape=(32, 32), backend='torch_skcuda')
文档
Kymatio的官方文档托管在kymat.io网站上。
在线资源
从源代码构建文档
文档还可以在GitHub仓库的doc/
子目录中找到。要本地构建文档,请克隆此仓库并运行以下命令:
pip install -r requirements_optional.txt
cd doc; make clean; make html
支持
我们感谢Flatiron研究所的科学研究核心,感谢他们为我们提供测试计算资源。
我们还要感谢École Normale Supérieure的支持。
Kymatio
Kyma(κύμα)在希腊语中意为“波浪”。同样地,Kymatio(κυμάτιο)意为“小波”。
请注意,组织和库的首字母大写(Kymatio),而相应的Python模块以小写编写(import kymatio
)。
Kymatio的推荐发音为kim-ah-tio。换句话说,它与patio押韵,而不是与ratio押韵。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
构建的分发
kymatio-0.3.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e517113bc98a52795144eb80549f0686ee8a57dbbd9839b935f10dbceba0ec6b |
|
MD5 | ffa755091351331ef626c0a7dd403eb6 |
|
BLAKE2b-256 | e0b128bad41e1d44e6f085c5e59d921824e0b2bcaea5b2bdebe4d1647c9e5841 |