radames patrickvonplaten commited on
Commit
79862d9
·
0 Parent(s):

Duplicate from patrickvonplaten/instruct-pix2pix

Browse files

Co-authored-by: Patrick von Platen <patrickvonplaten@users.noreply.huggingface.co>

Files changed (8) hide show
  1. .gitattributes +34 -0
  2. README.md +14 -0
  3. app.py +200 -0
  4. nsfw.png +0 -0
  5. requirements.txt +10 -0
  6. statue.jpg +0 -0
  7. style.css +24 -0
  8. utils.py +6 -0
.gitattributes ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tflite filter=lfs diff=lfs merge=lfs -text
29
+ *.tgz filter=lfs diff=lfs merge=lfs -text
30
+ *.wasm filter=lfs diff=lfs merge=lfs -text
31
+ *.xz filter=lfs diff=lfs merge=lfs -text
32
+ *.zip filter=lfs diff=lfs merge=lfs -text
33
+ *.zst filter=lfs diff=lfs merge=lfs -text
34
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Instruct Pix2Pix Web-UI
3
+ emoji: 🎯
4
+ colorFrom: blue
5
+ colorTo: pink
6
+ sdk: gradio
7
+ sdk_version: 3.15.0
8
+ app_file: app.py
9
+ pinned: true
10
+ license: mit
11
+ duplicated_from: patrickvonplaten/instruct-pix2pix
12
+ ---
13
+
14
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,200 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from diffusers import DiffusionPipeline, EulerAncestralDiscreteScheduler
2
+ import gradio as gr
3
+ import torch
4
+ from PIL import Image
5
+ import time
6
+ import psutil
7
+ import random
8
+ # from diffusers.pipelines.stable_diffusion.safety_checker import StableDiffusionSafetyChecker
9
+
10
+
11
+ start_time = time.time()
12
+ current_steps = 15
13
+
14
+ pipe = DiffusionPipeline.from_pretrained("timbrooks/instruct-pix2pix", torch_dtype=torch.float16, safety_checker=None)
15
+ pipe.scheduler = EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config)
16
+
17
+ device = "GPU 🔥" if torch.cuda.is_available() else "CPU 🥶"
18
+
19
+ if torch.cuda.is_available():
20
+ pipe = pipe.to("cuda")
21
+
22
+
23
+ def error_str(error, title="Error"):
24
+ return (
25
+ f"""#### {title}
26
+ {error}"""
27
+ if error
28
+ else ""
29
+ )
30
+
31
+
32
+ def inference(
33
+ prompt,
34
+ text_guidance_scale,
35
+ image_guidance_scale,
36
+ image,
37
+ steps,
38
+ neg_prompt="",
39
+ width=512,
40
+ height=512,
41
+ seed=0,
42
+ ):
43
+ print(psutil.virtual_memory()) # print memory usage
44
+
45
+ if seed == 0:
46
+ seed = random.randint(0, 2147483647)
47
+
48
+ generator = torch.Generator("cuda").manual_seed(seed)
49
+
50
+ try:
51
+ ratio = min(height / image.height, width / image.width)
52
+ image = image.resize((int(image.width * ratio), int(image.height * ratio)), Image.LANCZOS)
53
+
54
+ result = pipe(
55
+ prompt,
56
+ negative_prompt=neg_prompt,
57
+ image=image,
58
+ num_inference_steps=int(steps),
59
+ image_guidance_scale=image_guidance_scale,
60
+ guidance_scale=text_guidance_scale,
61
+ generator=generator,
62
+ )
63
+
64
+ # return replace_nsfw_images(result)
65
+ return result.images, f"Done. Seed: {seed}"
66
+ except Exception as e:
67
+ return None, error_str(e)
68
+
69
+
70
+ def replace_nsfw_images(results):
71
+ for i in range(len(results.images)):
72
+ if results.nsfw_content_detected[i]:
73
+ results.images[i] = Image.open("nsfw.png")
74
+ return results.images
75
+
76
+
77
+ with gr.Blocks(css="style.css") as demo:
78
+ gr.HTML(
79
+ f"""
80
+ <div class="finetuned-diffusion-div">
81
+ <div>
82
+ <h1>Instruct-Pix2Pix Diffusion</h1>
83
+ </div>
84
+ <p>
85
+ Demo for Instruct-Pix2Pix Diffusion: https://github.com/timothybrooks/instruct-pix2pix
86
+ </p>
87
+ <p>
88
+ Running on <b>{device}</b>
89
+ </p>
90
+ <p>You can also duplicate this space and upgrade to gpu by going to settings:<br>
91
+ <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>
92
+ </div>
93
+ """
94
+ )
95
+ with gr.Row():
96
+ with gr.Column(scale=55):
97
+ with gr.Group():
98
+ with gr.Box(visible=False) as custom_model_group:
99
+ gr.HTML(
100
+ "<div><font size='2'>Custom models have to be downloaded first, so give it some time.</font></div>"
101
+ )
102
+
103
+ with gr.Row():
104
+ prompt = gr.Textbox(
105
+ label="Prompt",
106
+ show_label=False,
107
+ max_lines=2,
108
+ placeholder="Enter prompt.",
109
+ ).style(container=False)
110
+ generate = gr.Button(value="Generate").style(
111
+ rounded=(False, True, True, False)
112
+ )
113
+
114
+ # image_out = gr.Image(height=512)
115
+ gallery = gr.Gallery(
116
+ label="Generated images", show_label=False, elem_id="gallery"
117
+ ).style(grid=[2], height="auto")
118
+
119
+ state_info = gr.Textbox(label="State", show_label=False, max_lines=2).style(
120
+ container=False
121
+ )
122
+ error_output = gr.Markdown()
123
+
124
+ with gr.Column(scale=45):
125
+ with gr.Tab("Options"):
126
+ with gr.Group():
127
+ neg_prompt = gr.Textbox(
128
+ label="Negative prompt",
129
+ placeholder="What to exclude from the image",
130
+ )
131
+
132
+ n_images = gr.Slider(
133
+ label="Images", value=1, minimum=1, maximum=4, step=1
134
+ )
135
+
136
+ with gr.Row():
137
+ steps = gr.Slider(
138
+ label="Steps",
139
+ value=current_steps,
140
+ minimum=2,
141
+ maximum=75,
142
+ step=1,
143
+ )
144
+
145
+ with gr.Row():
146
+ width = gr.Slider(
147
+ label="Width", value=512, minimum=64, maximum=1024, step=8
148
+ )
149
+ height = gr.Slider(
150
+ label="Height", value=512, minimum=64, maximum=1024, step=8
151
+ )
152
+
153
+ seed = gr.Slider(
154
+ 0, 2147483647, label="Seed (0 = random)", value=0, step=1
155
+ )
156
+
157
+ with gr.Group():
158
+ image = gr.Image(
159
+ label="Image", height=256, tool="editor", type="pil"
160
+ )
161
+ text_guidance_scale = gr.Slider(
162
+ label="Text Guidance Scale", minimum=1.0, value=5.5, maximum=15, step=0.1
163
+ )
164
+ image_guidance_scale = gr.Slider(
165
+ label="Image Guidance Scale",
166
+ minimum=1.0,
167
+ maximum=15,
168
+ step=0.1,
169
+ value=1.5,
170
+ )
171
+
172
+ inputs = [
173
+ prompt,
174
+ text_guidance_scale,
175
+ image_guidance_scale,
176
+ image,
177
+ steps,
178
+ neg_prompt,
179
+ width,
180
+ height,
181
+ seed,
182
+ ]
183
+ outputs = [gallery, error_output]
184
+ prompt.submit(inference, inputs=inputs, outputs=outputs)
185
+ generate.click(inference, inputs=inputs, outputs=outputs)
186
+
187
+ ex = gr.Examples(
188
+ [
189
+ ["turn him into a cyborg", 7.5, 1.2, "./statue.jpg", 20]
190
+ ],
191
+ inputs=[prompt, text_guidance_scale, image_guidance_scale, image, steps],
192
+ outputs=outputs,
193
+ fn=inference,
194
+ cache_examples=True,
195
+ )
196
+
197
+ print(f"Space built in {time.time() - start_time:.2f} seconds")
198
+
199
+ demo.queue(concurrency_count=1)
200
+ demo.launch()
nsfw.png ADDED
requirements.txt ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ --extra-index-url https://download.pytorch.org/whl/cu113
2
+ torch
3
+ torchvision==0.13.1+cu113
4
+ git+https://github.com/huggingface/diffusers.git
5
+ git+https://github.com/huggingface/transformers
6
+ scipy
7
+ ftfy
8
+ psutil
9
+ accelerate
10
+ safetensors
statue.jpg ADDED
style.css ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .finetuned-diffusion-div div{
2
+ display:inline-flex;
3
+ align-items:center;
4
+ gap:.8rem;
5
+ font-size:1.75rem
6
+ }
7
+ .finetuned-diffusion-div div h1{
8
+ font-weight:900;
9
+ margin-bottom:7px
10
+ }
11
+ .finetuned-diffusion-div p{
12
+ margin-bottom:10px;
13
+ font-size:94%
14
+ }
15
+ a{
16
+ text-decoration:underline
17
+ }
18
+ .tabs{
19
+ margin-top:0;
20
+ margin-bottom:0
21
+ }
22
+ #gallery{
23
+ min-height:20rem
24
+ }
utils.py ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ def is_google_colab():
2
+ try:
3
+ import google.colab
4
+ return True
5
+ except:
6
+ return False