跳转到主要内容

Python中的GPU加速小波散度变换

项目描述

Kymatio:Python 中的小波散射 - v0.3.0 “Erdre”

Kymatio 是 Python 编程语言中小波散射变换的实现,适用于信号处理和机器学习中的大规模数值实验。散射变换是平移不变信号表示,作为卷积网络实现,其滤波器未学习,而是固定的(如小波滤波器)。

Build status

如果你需要以下库,请使用 Kymatio:

  • 支持 1-D、2-D 和 3-D 小波,
  • 将小波散射集成到深度学习架构中,
  • 无缝运行在 CPU 和 GPU 硬件上,支持主要的深度学习 API,例如 PyTorch、TensorFlow 和 Jax。

Kymatio 环境

灵活性

Kymatio 组织关联了几个现有的小波散射包的开发者,包括 ScatNetscattering.mPyScatWaveWaveletScattering.jlPyScatHarm

将 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,您可以实例化 Scattering2Dtorch.nn.Module

from kymatio.torch import Scattering2D

scattering = Scattering2D(J=2, shape=(32, 32))

TensorFlow 和 Keras

同样,在 TensorFlow 中,您可以实例化 Scattering2Dtf.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加速

某些前端(如numpysklearn)仅允许在CPU上处理,因此速度较慢。然而,torchtensorflowkerasjax前端也支持GPU处理,这可以显著加速计算。此外,torch后端支持优化的skcuda后端,目前提供计算散射变换的最快性能。

要使用它,您必须首先安装scikit-cudacupy依赖项。

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 (87.6 kB 查看哈希值)

上传时间: Python 3

由以下支持