Unverified Commit 6f150263 authored by Nan Liu's avatar Nan Liu Committed by GitHub
Browse files

update composable diffusion for an updated diffuser library (#1697)

* update composable diffusion for an updated diffuser library

* fix style/quality for code

* Revert "fix style/quality for code"

This reverts commit 71f23497639fe69de00d93cf91edc31b08dcd7a4.

* update style

* reduce memory usage by computing score sequentially
parent a5edb981
...@@ -355,43 +355,45 @@ out = pipe( ...@@ -355,43 +355,45 @@ out = pipe(
import torch as th import torch as th
import numpy as np import numpy as np
import torchvision.utils as tvu import torchvision.utils as tvu
from diffusers import DiffusionPipeline from diffusers import DiffusionPipeline
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--prompt", type=str, default="mystical trees | A magical pond | dark",
help="use '|' as the delimiter to compose separate sentences.")
parser.add_argument("--steps", type=int, default=50)
parser.add_argument("--scale", type=float, default=7.5)
parser.add_argument("--weights", type=str, default="7.5 | 7.5 | -7.5")
parser.add_argument("--seed", type=int, default=2)
parser.add_argument("--model_path", type=str, default="CompVis/stable-diffusion-v1-4")
parser.add_argument("--num_images", type=int, default=1)
args = parser.parse_args()
has_cuda = th.cuda.is_available() has_cuda = th.cuda.is_available()
device = th.device('cpu' if not has_cuda else 'cuda') device = th.device('cpu' if not has_cuda else 'cuda')
prompt = args.prompt
scale = args.scale
steps = args.steps
pipe = DiffusionPipeline.from_pretrained( pipe = DiffusionPipeline.from_pretrained(
"CompVis/stable-diffusion-v1-4", args.model_path,
use_auth_token=True,
custom_pipeline="composable_stable_diffusion", custom_pipeline="composable_stable_diffusion",
).to(device) ).to(device)
pipe.safety_checker = None
def dummy(images, **kwargs):
return images, False
pipe.safety_checker = dummy
images = [] images = []
generator = torch.Generator("cuda").manual_seed(0) generator = th.Generator("cuda").manual_seed(args.seed)
for i in range(args.num_images):
image = pipe(prompt, guidance_scale=scale, num_inference_steps=steps,
weights=args.weights, generator=generator).images[0]
images.append(th.from_numpy(np.array(image)).permute(2, 0, 1) / 255.)
grid = tvu.make_grid(th.stack(images, dim=0), nrow=4, padding=0)
tvu.save_image(grid, f'{prompt}_{args.weights}' + '.png')
seed = 0
prompt = "a forest | a camel"
weights = " 1 | 1" # Equal weight to each prompt. Can be negative
images = []
for i in range(4):
res = pipe(
prompt,
guidance_scale=7.5,
num_inference_steps=50,
weights=weights,
generator=generator)
image = res.images[0]
images.append(image)
for i, img in enumerate(images):
img.save(f"./composable_diffusion/image_{i}.png")
``` ```
### Imagic Stable Diffusion ### Imagic Stable Diffusion
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment