Skip to main content

Modular Diffusion

Project description

Modular Diffusion

PyPI version Documentation MIT license

Modular Diffusion provides an easy-to-use modular API to design and train custom Diffusion Models with PyTorch. Whether you're an enthusiast exploring Diffusion Models or a hardcore ML researcher, this framework is for you.

Features

  • ⚙️ Highly Modular Design: Effortlessly swap different components of the diffusion process, including noise type, schedule type, denoising network, and loss function.
  • 📚 Growing Library of Pre-built Modules: Get started right away with our comprehensive selection of pre-built modules.
  • 🔨 Custom Module Creation Made Easy: Craft your own original modules by inheriting from a base class and implementing the required methods.
  • 🤝 Integration with PyTorch: Built on top of PyTorch, Modular Diffusion enables you to develop custom modules using a familiar syntax.
  • 🌈 Broad Range of Applications: From generating high-quality images to implementing non-autoregressive text synthesis pipelines, the possiblities are endless.

Installation

Modular Diffusion officially supports Python 3.10+ and is available on PyPI:

pip install modular-diffusion

You also need to install the correct PyTorch distribution for your system.

Note: Although Modular Diffusion works with later Python versions, we currently recommend using Python 3.10. This is because torch.compile, which significantly improves the speed of the models, is not currently available for versions above Python 3.10.

Usage

With Modular Diffusion, you can build and train a custom Diffusion Model in just a few lines. First, load and normalize your dataset. We are using the dog pictures from AFHQ.

x, _ = zip(*ImageFolder("afhq", ToTensor()))
x = resize(x, [h, w], antialias=False)
x = torch.stack(x) * 2 - 1

Next, build your custom model using either Modular Diffusion's prebuilt modules or your custom modules.

model = diffusion.Model(
   data=Identity(x, batch=128, shuffle=True),
   schedule=Cosine(steps=1000),
   noise=Gaussian(parameter="epsilon", variance="fixed"),
   net=UNet(channels=(1, 64, 128, 256)),
   loss=Simple(parameter="epsilon"),
)

Now, train and sample from the model.

losses = [*model.train(epochs=400)]
z = model.sample(batch=10)
z = z[torch.linspace(0, z.shape[0] - 1, 10).long()]
z = rearrange(z, "t b c h w -> c (b h) (t w)")
save_image((z + 1) / 2, "output.png")

Finally, marvel at the results.

Modular Diffusion teaser 

Check out more examples here.

Contributing

We appreciate your support and welcome your contributions! Please fell free to submit pull requests if you found a bug or typo you want to fix. If you want to contribute a new prebuilt module or feature, please start by opening an issue and discussing it with us. If you don't know where to begin, take a look at the open issues.

License

This project is licensed under the MIT License.

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

modular_diffusion-0.0.3.tar.gz (37.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

modular_diffusion-0.0.3-py3-none-any.whl (27.1 kB view details)

Uploaded Python 3

File details

Details for the file modular_diffusion-0.0.3.tar.gz.

File metadata

  • Download URL: modular_diffusion-0.0.3.tar.gz
  • Upload date:
  • Size: 37.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.10

File hashes

Hashes for modular_diffusion-0.0.3.tar.gz
Algorithm Hash digest
SHA256 c02211d29ab3b5d7697bf8e6895cf92cb0775d2d8c5011a9288b90628481a8ee
MD5 538dd22a76d62e619ce7669dc6c62846
BLAKE2b-256 e51f55c41c86c7ea28532059b0cd7fc182ede560496bd60809256067ce38546f

See more details on using hashes here.

File details

Details for the file modular_diffusion-0.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for modular_diffusion-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 8d219df947e79babb97c5826fee9fe2cc4d3a42741c9f17816b753aa3967414d
MD5 689e6ea72743b71118125582a8ecaab2
BLAKE2b-256 136155f085ef1d95ab6ea323adbaff6d6d3259103506b5bb0c55e6d2e15a2dba

See more details on using hashes here.

Supported by

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