Skip to main content

Differentiable and gpu enabled fast wavelet transforms in PyTorch

Project description

GitHub Actions PyPI Versions PyPI - Project PyPI - License Documentation Status Black code style

Welcome to the PyTorch wavelet toolbox. This package implements:

  • the fast wavelet transform (fwt) implemented in wavedec.

  • the inverse fwt can be used by calling waverec.

  • the 2d fwt is called wavedec2

  • and inverse 2d fwt waverec2.

  • 1d sparse-matrix fast wavelet transforms with boundary filters.

  • 2d sparse-matrix transforms with boundary filters (experimental).

  • single and two-dimensional wavelet packet forward transforms.

  • adaptive wavelet support (experimental).

This toolbox supports pywt-wavelets. Complete documentation is available: https://pytorch-wavelet-toolbox.readthedocs.io/en/latest/ptwt.html

Installation

Install the toolbox via pip or clone this repository. In order to use pip, type:

$ pip install ptwt

You can remove it later by typing pip uninstall ptwt.

Example usage:

import torch
import numpy as np
import pywt
import ptwt  # use " from src import ptwt " if you cloned the repo instead of using pip.

# generate an input of even length.
data = np.array([0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0])
data_torch = torch.from_numpy(data.astype(np.float32))
wavelet = pywt.Wavelet('haar')

# compare the forward fwt coefficients
print(pywt.wavedec(data, wavelet, mode='zero', level=2))
print(ptwt.wavedec(data_torch, wavelet, mode='zero', level=2))

# invert the fwt.
print(ptwt.waverec(ptwt.wavedec(data_torch, wavelet, mode='zero', level=2), wavelet))

Sparse-Matrices

In addition to convolution and padding approaches, sparse-matrix-based code with boundary wavelet support is available. Generate 1d sparse matrix forward and backward transforms with the MatrixWavedec and MatrixWaverec classes. Continuing the example above try for example:

# forward
matrix_wavedec = ptwt.MatrixWavedec(wavelet, level=2)
coeff = matrix_wavedec(data_torch)
print(coeff)
# backward
matrix_waverec = ptwt.MatrixWaverec(wavelet, level=2)
rec = matrix_waverec(coeff)
print(rec)

The process for the 2d transforms MatrixWavedec2d, MatrixWaverec2d, works similarly.

Adaptive Wavelets

Experimental code to train an adaptive wavelet layer in PyTorch is available in the examples folder. In addition to static wavelets from pywt,

  • Adaptive product-filters

  • and optimizable orthogonal-wavelets are supported.

See https://github.com/v0lta/PyTorch-Wavelet-Toolbox/tree/main/examples for a complete implementation.

Testing

The tests folder contains multiple tests to allow independent verification of this toolbox. After cloning the repository, and moving into the main directory, and installing tox with pip install tox run:

$ tox -e py

📖 Citation

If you find this work useful, please consider citing:

@phdthesis{handle:20.500.11811/9245,
  urn: https://nbn-resolving.org/urn:nbn:de:hbz:5-63361,
  author = {{Moritz Wolter}},
  title = {Frequency Domain Methods in Recurrent Neural Networks for Sequential Data Processing},
  school = {Rheinische Friedrich-Wilhelms-Universität Bonn},
  year = 2021,
  month = jul,
  url = {https://hdl.handle.net/20.500.11811/9245}
}

Project details


Download files

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

Source Distribution

ptwt-0.0.14.tar.gz (29.9 kB view details)

Uploaded Source

Built Distribution

ptwt-0.0.14-py3-none-any.whl (32.6 kB view details)

Uploaded Python 3

File details

Details for the file ptwt-0.0.14.tar.gz.

File metadata

  • Download URL: ptwt-0.0.14.tar.gz
  • Upload date:
  • Size: 29.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.5

File hashes

Hashes for ptwt-0.0.14.tar.gz
Algorithm Hash digest
SHA256 3b3dbc8195d7c42d231bf3f2ce5f3ad7308b0ac0b7fef3b8636be4273c7c04e8
MD5 eefc040a237bc90eb28dfcb6d03bcb8c
BLAKE2b-256 81e66c17b7b845c7ab0476efcb4ad78bb64aa22ae636d37e2460d4f765e10b83

See more details on using hashes here.

File details

Details for the file ptwt-0.0.14-py3-none-any.whl.

File metadata

  • Download URL: ptwt-0.0.14-py3-none-any.whl
  • Upload date:
  • Size: 32.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.5

File hashes

Hashes for ptwt-0.0.14-py3-none-any.whl
Algorithm Hash digest
SHA256 73abfb2c53740fb2dd3700484d70c2fcca2f55bf699bcd782ee42a1931727f37
MD5 38cde9a3935291294f0b3492aa6e8eea
BLAKE2b-256 5e03fe0a5c947e25e727bb236fb6ada027cab10f2f792541e17c549b56418cb9

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page