Spaces:
Running
on
Zero
Running
on
Zero
File size: 8,585 Bytes
b2ab83e ba05f1b 886c072 ba05f1b 886c072 9bf6ab3 886c072 ba05f1b af85adf fa6b193 2ab7eb4 ba05f1b 34c0280 ba05f1b af85adf ba05f1b af85adf ba05f1b 886c072 ba05f1b 886c072 ba05f1b 886c072 ba05f1b 886c072 ba05f1b 886c072 ef9dee0 ba05f1b 886c072 ba05f1b 886c072 ba05f1b ef9dee0 ba05f1b f64d68f ba05f1b af85adf ba05f1b af85adf ba05f1b af85adf ba05f1b af85adf ba05f1b af85adf ba05f1b 7309113 af85adf 7309113 af85adf ba05f1b af85adf ba05f1b af85adf ecf4090 af85adf ecf4090 af85adf 0a4be24 ba05f1b af85adf ba05f1b af85adf ba05f1b 886c072 ba05f1b af85adf ba05f1b af85adf ba05f1b fa6b193 ba05f1b 497fd1e c489da2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 |
import spaces
from diffusers import (
StableDiffusionPipeline,
DPMSolverMultistepScheduler,
DiffusionPipeline,
)
import gradio as gr
import torch
from PIL import Image
import time
import psutil
import random
from diffusers.pipelines.stable_diffusion.safety_checker import StableDiffusionSafetyChecker
start_time = time.time()
current_steps = 25
SAFETY_CHECKER = StableDiffusionSafetyChecker.from_pretrained("CompVis/stable-diffusion-safety-checker", torch_dtype=torch.float16)
UPSCALER = DiffusionPipeline.from_pretrained("stabilityai/sd-x2-latent-upscaler", torch_dtype=torch.float16)
UPSCALER.to("cuda")
# UPSCALER.enable_xformers_memory_efficient_attention()
class Model:
def __init__(self, name, path=""):
self.name = name
self.path = path
if path != "":
self.pipe_t2i = StableDiffusionPipeline.from_pretrained(
path, torch_dtype=torch.float16, safety_checker=SAFETY_CHECKER
)
self.pipe_t2i.scheduler = DPMSolverMultistepScheduler.from_config(
self.pipe_t2i.scheduler.config
)
else:
self.pipe_t2i = None
models = [
#Model("Stable Diffusion v1-4", "CompVis/stable-diffusion-v1-4"),
# Model("Stable Diffusion v1-5", "runwayml/stable-diffusion-v1-5"),
Model("anything-v4.0", "xyn-ai/anything-v4.0"),
]
MODELS = {m.name: m for m in models}
device = "GPU 🔥" if torch.cuda.is_available() else "CPU 🥶"
def error_str(error, title="Error"):
return (
f"""#### {title}
{error}"""
if error
else ""
)
@spaces.GPU
def inference(
prompt,
neg_prompt,
guidance,
steps,
seed,
model_name,
):
print(psutil.virtual_memory()) # print memory usage
if seed == 0:
seed = random.randint(0, 2147483647)
generator = torch.Generator("cuda").manual_seed(seed)
try:
low_res_image, up_res_image = txt_to_img(
model_name,
prompt,
neg_prompt,
guidance,
steps,
generator,
)
return low_res_image, up_res_image, f"Done. Seed: {seed}",
except Exception as e:
return None, None, error_str(e)
def txt_to_img(
model_name,
prompt,
neg_prompt,
guidance,
steps,
generator,
):
pipe = MODELS[model_name].pipe_t2i
if torch.cuda.is_available():
pipe = pipe.to("cuda")
pipe.enable_xformers_memory_efficient_attention()
low_res_latents = pipe(
prompt,
negative_prompt=neg_prompt,
num_inference_steps=int(steps),
guidance_scale=guidance,
generator=generator,
output_type="latent",
).images
with torch.no_grad():
low_res_image = pipe.decode_latents(low_res_latents)
low_res_image = pipe.numpy_to_pil(low_res_image)
up_res_image = UPSCALER(
prompt=prompt,
negative_prompt=neg_prompt,
image=low_res_latents,
num_inference_steps=20,
guidance_scale=0,
generator=generator,
).images
pipe.to("cpu")
torch.cuda.empty_cache()
return low_res_image[0], up_res_image[0]
def replace_nsfw_images(results):
for i in range(len(results.images)):
if results.nsfw_content_detected[i]:
results.images[i] = Image.open("nsfw.png")
return results.images
with gr.Blocks(css="style.css") as demo:
gr.HTML(
f"""
<div class="finetuned-diffusion-div">
<div style="text-align: center">
<h1>Anything v4 model + <a href="https://huggingface.co/stabilityai/sd-x2-latent-upscaler">Stable Diffusion Latent Upscaler</a></h1>
<p>
Demo for the <a href="https://huggingface.co/andite/anything-v4.0">Anything v4</a> model hooked with the ultra-fast <a href="https://huggingface.co/stabilityai/sd-x2-latent-upscaler">Latent Upscaler</a>
</p>
</div>
<!--
<p>To skip the queue, you can duplicate this Space<br>
<a style="display:inline-block" href="https://huggingface.co/spaces/patrickvonplaten/finetuned_diffusion?duplicate=true"><img src="https://img.shields.io/badge/-Duplicate%20Space-blue?labelColor=white&style=flat&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAP5JREFUOE+lk7FqAkEURY+ltunEgFXS2sZGIbXfEPdLlnxJyDdYB62sbbUKpLbVNhyYFzbrrA74YJlh9r079973psed0cvUD4A+4HoCjsA85X0Dfn/RBLBgBDxnQPfAEJgBY+A9gALA4tcbamSzS4xq4FOQAJgCDwV2CPKV8tZAJcAjMMkUe1vX+U+SMhfAJEHasQIWmXNN3abzDwHUrgcRGmYcgKe0bxrblHEB4E/pndMazNpSZGcsZdBlYJcEL9Afo75molJyM2FxmPgmgPqlWNLGfwZGG6UiyEvLzHYDmoPkDDiNm9JR9uboiONcBXrpY1qmgs21x1QwyZcpvxt9NS09PlsPAAAAAElFTkSuQmCC&logoWidth=14" alt="Duplicate Space"></a></p>
-->
</div>
"""
)
with gr.Column(scale=100):
with gr.Group(visible=False):
model_name = gr.Dropdown(
label="Model",
choices=[m.name for m in models],
value=models[0].name,
visible=False
)
with gr.Row(elem_id="prompt-container"):
with gr.Column():
prompt = gr.Textbox(
label="Enter your prompt",
show_label=False,
max_lines=1,
placeholder="Enter your prompt",
elem_id="prompt-text-input",
container=False,
)
neg_prompt = gr.Textbox(
label="Enter your negative prompt",
show_label=False,
max_lines=1,
placeholder="Enter a negative prompt",
elem_id="negative-prompt-text-input",
container=False,
)
generate = gr.Button("Generate image", scale=0)
with gr.Accordion("Advanced Options", open=False):
with gr.Group():
with gr.Row():
guidance = gr.Slider(
label="Guidance scale", value=7.5, maximum=15
)
steps = gr.Slider(
label="Steps",
value=current_steps,
minimum=2,
maximum=75,
step=1,
)
seed = gr.Slider(
0, 2147483647, label="Seed (0 = random)", value=0, step=1
)
with gr.Column(scale=100):
with gr.Row():
with gr.Column(scale=75):
up_res_image = gr.Image(label="Upscaled 1024px Image", width=1024, height=1024)
with gr.Column(scale=25):
low_res_image = gr.Image(label="Original 512px Image", width=512, height=512)
error_output = gr.Markdown()
inputs = [
prompt,
neg_prompt,
guidance,
steps,
seed,
model_name,
]
outputs = [low_res_image, up_res_image, error_output]
prompt.submit(inference, inputs=inputs, outputs=outputs)
generate.click(inference, inputs=inputs, outputs=outputs)
ex = gr.Examples(
[
["a mecha robot in a favela", "low quality", 7.5, 25, 33, models[0].name],
["the spirit of a tamagotchi wandering in the city of Paris", "low quality, bad render", 7.5, 50, 85, models[0].name],
],
inputs=[prompt, neg_prompt, guidance, steps, seed, model_name],
outputs=outputs,
fn=inference,
cache_examples=True,
)
ex.dataset.headers = [""]
gr.HTML(
"""
<div style="border-top: 1px solid #303030;">
<br>
<p>Space by 🤗 Hugging Face, models by Stability AI, andite, linaqruf and others ❤️</p>
<p>This space uses the <a href="https://github.com/LuChengTHU/dpm-solver">DPM-Solver++</a> sampler by <a href="https://arxiv.org/abs/2206.00927">Cheng Lu, et al.</a>.</p>
<p>This is a Demo Space For:<br>
<a href="https://huggingface.co/stabilityai/sd-x2-latent-upscaler">Stability AI's Latent Upscaler</a>
</div>
"""
)
print(f"Space built in {time.time() - start_time:.2f} seconds")
demo.queue(api_open=False)
demo.launch(show_api=False)
|