Go to file
2022-07-07 08:21:20 -04:00
examples update readme 2022-07-05 13:32:06 -04:00
min_dalle support bfloat16 2022-07-07 08:21:20 -04:00
.gitattributes add gitattributes file 2022-06-29 12:45:41 -04:00
.gitignore update readme 2022-07-02 12:32:54 -04:00
cog.yaml support bfloat16 2022-07-07 08:21:20 -04:00
image_from_text.py update cuda version in replicate docker image 2022-07-05 15:07:32 -04:00
LICENSE license and cleanup 2022-06-27 14:34:10 -04:00
min_dalle.ipynb support bfloat16 2022-07-07 08:21:20 -04:00
README.md support bfloat16 2022-07-07 08:21:20 -04:00
README.rst support bfloat16 2022-07-07 08:21:20 -04:00
replicate_predictor.py support bfloat16 2022-07-07 08:21:20 -04:00
requirements.txt Update requirements.txt 2022-07-02 08:52:05 -04:00
setup.py support bfloat16 2022-07-07 08:21:20 -04:00

min(DALL·E)

Colab   Replicate   Discord

This is a fast, minimal port of Boris Dayma's DALL·E Mega. It has been stripped down for inference and converted to PyTorch. The only third party dependencies are numpy, requests, pillow and torch.

To generate a 4x4 grid of DALL·E Mega images it takes:

  • 89 sec with a T4 in Colab
  • 48 sec with a P100 in Colab
  • 14 sec with an A100 on Replicate

The flax model and code for converting it to torch can be found here.

Install

$ pip install min-dalle

Usage

Load the model parameters once and reuse the model to generate multiple images.

from min_dalle import MinDalle

model = MinDalle(
    models_root='./pretrained',
    dtype=torch.float32,
    is_mega=True, 
    is_reusable=True
)

The required models will be downloaded to models_root if they are not already there. If you have an Ampere architecture GPU you can set the dtype=torch.bfloat16 and save GPU memory. There is still an issue with dtype=torch.float16 that needs to be sorted out. Once everything has finished initializing, call generate_image with some text as many times as you want. Use a positive seed for reproducible results. Higher values for log2_supercondition_factor result in better agreement with the text but a narrower variety of generated images. Every image token is sampled from the top-k most probable tokens.

image = model.generate_image(
    text='Nuclear explosion broccoli',
    seed=-1,
    grid_size=4,
    log2_k=6,
    log2_supercondition_factor=5,
    is_verbose=False
)

display(image)
min-dalle credit: https://twitter.com/hardmaru/status/1544354119527596034

Interactive

If the model is being used interactively (e.g. in a notebook) generate_image_stream can be used to generate a stream of images as the model is decoding. The detokenizer adds a slight delay for each image. Setting log2_mid_count to 3 results in a total of 2 ** 3 = 8 generated images. The only valid values for log2_mid_count are 0, 1, 2, 3, and 4. This is implemented in the colab.

image_stream = model.generate_image_stream(
    text='Dali painting of WALL·E',
    seed=-1,
    grid_size=3,
    log2_mid_count=3,
    log2_k=6,
    log2_supercondition_factor=3,
    is_verbose=False
)

for image in image_stream:
    display(image)
min-dalle

Command Line

Use image_from_text.py to generate images from the command line.

$ python image_from_text.py --text='artificial intelligence' --no-mega
min-dalle