CoolFace
Modelpublic

diffusers/tools

sourceHugging Facecreativeml-openrail-mupdated 3y agoView on Hugging Face
11likes27downloads
parti_prompts.py90 linesDownload Raw Back to root
1#!/usr/bin/env python32from diffusers import DiffusionPipeline, DDIMScheduler3import argparse4from diffusers.pipelines.stable_diffusion import safety_checker5import torch6from datasets import load_dataset7import PIL8 9IMAGE_OUTPUT_SIZE = (256, 256)10NUM_INFERENCE_STEPS = 10011 12def resize(image: PIL.Image):13    return image.resize(IMAGE_OUTPUT_SIZE, resample=PIL.Image.Resampling.LANCZOS)14 15def get_sd_eval(ckpt, guidance_scale=7.5):16    pipe = DiffusionPipeline.from_pretrained(ckpt, torch_dtype=torch.float16, safety_checker=None)17    pipe.to("cuda")18    pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config)19 20    def sd_eval(prompt, generator=None):21        images = pipe(prompt, generator=generator, num_inference_steps=NUM_INFERENCE_STEPS, guidance_scale=guidance_scale).images22        images = [resize(image) for image in images]23        return images24 25    return sd_eval26 27def get_karlo_eval(ckpt):28    pipe = DiffusionPipeline.from_pretrained(ckpt, torch_dtype=torch.float16)29    pipe.to("cuda")30 31    def karlo_eval(prompt, generator=None):32        images = pipe(prompt, prior_num_inference_steps=50, generator=generator, decoder_num_inference_steps=NUM_INFERENCE_STEPS).images33        return images34 35    return karlo_eval36 37def get_if_eval(ckpt):38    pipe_low = DiffusionPipeline.from_pretrained(ckpt, safety_checker=None, watermarker=None, torch_dtype=torch.float16, variant="fp16")39    pipe_low.enable_model_cpu_offload()40 41    pipe_up = DiffusionPipeline.from_pretrained("DeepFloyd/IF-II-L-v1.0", safety_checker=None, watermarker=None, text_encoder=pipe_low.text_encoder, torch_dtype=torch.float16, variant="fp16")42    pipe_up.enable_model_cpu_offload()43 44    def if_eval(prompt, generator=None):45        prompt_embeds, negative_prompt_embeds = pipe_low.encode_prompt(prompt)46        images = pipe_low(prompt_embeds=prompt_embeds, negative_prompt_embeds=negative_prompt_embeds, num_inference_steps=NUM_INFERENCE_STEPS, generator=generator, output_type="pt").images47        images = pipe_up(prompt_embeds=prompt_embeds, negative_prompt_embeds=negative_prompt_embeds, image=images, num_inference_steps=NUM_INFERENCE_STEPS, generator=generator).images48        return images49 50    return if_eval51 52MODELS = {53    "runwayml/stable-diffusion-v1-5": get_sd_eval,54    "stabilityai/stable-diffusion-2-1": get_sd_eval,55    "kakaobrain/karlo-alpha": get_karlo_eval,56    "DeepFloyd/IF-I-XL-v1.0": get_if_eval,57}58 59 60 61 62if __name__ == "__main__":63    parser = argparse.ArgumentParser(description='Run Parti Prompt Evaluation')64    parser.add_argument('model_repo_or_id', type=str, help='ID or URL of the model repository.')65    parser.add_argument('--dataset_repo_or_id', type=str, default='diffusers/prompt_generations', help='ID or URL of the dataset repository (default: "diffusers/prompt_generations")')66    parser.add_argument('--batch_size', type=int, default=8, help="Batch size for the eval function")67    parser.add_argument('--upload_to_hub', action='store_true', help='whether to upload the dataset to the Hugging Face dataset hub')68    parser.add_argument('--seed', type=int, default=0, help='Random seed')69 70    args = parser.parse_args()71 72    dataset = load_dataset("nateraw/parti-prompts")["train"]73    # dataset = dataset.select(range(4))74 75    eval_fn = MODELS[args.model_repo_or_id](args.model_repo_or_id)76 77    def map_fn(batch):78        generators = [torch.Generator(device="cuda").manual_seed(args.seed) for _ in range(args.batch_size)]79        batch["images"] = eval_fn(batch["Prompt"], generator=generators)80        batch["model_name"] = len(batch["images"]) * [args.model_repo_or_id]81        batch["seed"] = len(batch["images"]) * [args.seed]82        return batch83 84    dataset_images = dataset.map(map_fn, batched=True, batch_size=args.batch_size)85 86    if args.upload_to_hub:87        dataset_images.push_to_hub(args.dataset_repo_or_id)88    else:89        dataset_images.save_to_disk(args.dataset_repo_or_id.split("/")[-1])90