wangqinghehe commited on
Commit
f4c47e0
•
1 Parent(s): 3c67a84

0516_fix_errors

Browse files
app.py CHANGED
@@ -10,6 +10,7 @@ import gradio as gr
10
  import requests
11
  import time
12
  import random
 
13
  import numpy as np
14
  import torch
15
  import os
@@ -26,6 +27,7 @@ from models.celeb_embeddings import embedding_forward
26
  import models.embedding_manager
27
  import importlib
28
  import time
 
29
  import os
30
  # os.environ['GRADIO_TEMP_DIR'] = 'qinghewang/tmp'
31
 
@@ -128,30 +130,13 @@ woman_Embedding_Manager = models.embedding_manager.EmbeddingManagerId_adain(
128
  loss_type = embedding_manager_config.model.personalization_config.params.loss_type,
129
  vit_out_dim = input_dim,
130
  )
 
131
  text_encoder.text_model.embeddings.forward = original_forward
132
 
 
133
  DEFAULT_STYLE_NAME = "Watercolor"
134
  MAX_SEED = np.iinfo(np.int32).max
135
 
136
- def remove_tips():
137
- return gr.update(visible=False)
138
-
139
- def response(choice, gender_GAN):
140
- c = ""
141
- e = ""
142
- if choice == "Create a new character":
143
- c = "create"
144
- elif choice == "Still use this character":
145
- c = "continue"
146
-
147
- if gender_GAN == "Normal":
148
- e = "normal_GAN"
149
- elif gender_GAN == "Man":
150
- e = "man_GAN"
151
- elif gender_GAN == "Woman":
152
- e = "woman_GAN"
153
-
154
- return c, e
155
 
156
  def replace_phrases(prompt):
157
  replacements = {
@@ -174,47 +159,42 @@ def handle_prompts(prompts_array):
174
 
175
 
176
  @spaces.GPU
177
- def generate_image(experiment_name, label, prompts_array, chose_emb):
178
  prompts = handle_prompts(prompts_array)
179
 
180
- print("experiment_name:",experiment_name)
181
 
182
- if experiment_name == "normal_GAN":
183
  steps = 10000
184
  Embedding_Manager = normal_Embedding_Manager
185
- elif experiment_name == "man_GAN":
186
  steps = 7000
187
  Embedding_Manager = man_Embedding_Manager
188
- elif experiment_name == "woman_GAN":
189
  steps = 6000
190
  Embedding_Manager = woman_Embedding_Manager
191
  else:
192
  print("Hello, please notice this ^_^")
193
  assert 0
194
 
195
- embedding_path = os.path.join("training_weight", experiment_name, "embeddings_manager-{}.pt".format(str(steps)))
196
  Embedding_Manager.load(embedding_path)
197
  print("embedding_path:",embedding_path)
198
- print("label:",label)
199
 
200
- index = "0"
201
- save_dir = os.path.join("test_results/" + experiment_name, index)
202
  os.makedirs(save_dir, exist_ok=True)
203
- ran_emb_path = os.path.join(save_dir, "ran_embeddings.pt")
204
- test_emb_path = os.path.join(save_dir, "id_embeddings.pt")
205
 
206
  random_embedding = torch.randn(1, 1, input_dim).to(device)
207
- if label == "create":
208
- print("new")
209
- torch.save(random_embedding, ran_emb_path)
210
  _, emb_dict = Embedding_Manager(tokenized_text=None, embedded_text=None, name_batch=None, random_embeddings = random_embedding, timesteps = None,)
211
- # text_encoder.text_model.embeddings.forward = original_forward
212
  test_emb = emb_dict["adained_total_embedding"].to(device)
213
- torch.save(test_emb, test_emb_path)
214
- elif label == "continue":
215
- print("old")
216
  test_emb = torch.load(chose_emb).cuda()
217
- # text_encoder.text_model.embeddings.forward = original_forward
 
 
218
 
219
  v1_emb = test_emb[:, 0]
220
  v2_emb = test_emb[:, 1]
@@ -229,107 +209,57 @@ def generate_image(experiment_name, label, prompts_array, chose_emb):
229
  text_encoder.get_input_embeddings().weight.data[token_id] = embedding
230
 
231
  total_results = []
 
232
  for prompt in prompts:
233
  image = pipe(prompt, guidance_scale = 8.5).images
234
  total_results = image + total_results
235
- yield total_results, test_emb_path
 
 
 
 
236
 
237
  def get_example():
238
  case = [
239
  [
240
  'demo_embeddings/example_1.pt',
 
241
  "Normal",
242
- "Still use this character",
243
  "a photo of a person\na person as a small child\na person as a 20 years old person\na person as a 80 years old person\na person reading a book\na person in the sunset\n",
244
  ],
245
  [
246
  'demo_embeddings/example_2.pt',
 
247
  "Man",
248
- "Still use this character",
249
  "a photo of a person\na person with a mustache and a hat\na person wearing headphoneswith red hair\na person with his dog\n",
250
  ],
251
  [
252
  'demo_embeddings/example_3.pt',
 
253
  "Woman",
254
- "Still use this character",
255
  "a photo of a person\na person at a beach\na person as a police officer\na person wearing a birthday hat\n",
256
  ],
257
  [
258
  'demo_embeddings/example_4.pt',
 
259
  "Man",
260
- "Still use this character",
261
  "a photo of a person\na person holding a bunch of flowers\na person in a lab coat\na person speaking at a podium\n",
262
  ],
263
  [
264
  'demo_embeddings/example_5.pt',
 
265
  "Woman",
266
- "Still use this character",
267
  "a photo of a person\na person wearing a kimono\na person in Van Gogh style\nEthereal fantasy concept art of a person\n",
268
  ],
269
  [
270
  'demo_embeddings/example_6.pt',
 
271
  "Man",
272
- "Still use this character",
273
  "a photo of a person\na person in the rain\na person meditating\na pencil sketch of a person\n",
274
  ],
275
  ]
276
  return case
277
 
278
- @spaces.GPU
279
- def run_for_examples(example_emb, gender_GAN, choice, prompts_array):
280
- prompts = handle_prompts(prompts_array)
281
- label, experiment_name = response(choice, gender_GAN)
282
- if experiment_name == "normal_GAN":
283
- steps = 10000
284
- Embedding_Manager = normal_Embedding_Manager
285
- elif experiment_name == "man_GAN":
286
- steps = 7000
287
- Embedding_Manager = man_Embedding_Manager
288
- elif experiment_name == "woman_GAN":
289
- steps = 6000
290
- Embedding_Manager = woman_Embedding_Manager
291
- else:
292
- print("Hello, please notice this ^_^")
293
- assert 0
294
-
295
- embedding_path = os.path.join("training_weight", experiment_name, "embeddings_manager-{}.pt".format(str(steps)))
296
- Embedding_Manager.load(embedding_path)
297
- print("embedding_path:",embedding_path)
298
- print("label:",label)
299
-
300
- test_emb = torch.load(example_emb).cuda()
301
- v1_emb = test_emb[:, 0]
302
- v2_emb = test_emb[:, 1]
303
- embeddings = [v1_emb, v2_emb]
304
-
305
- tokens = ["v1*", "v2*"]
306
- tokenizer.add_tokens(tokens)
307
- token_ids = tokenizer.convert_tokens_to_ids(tokens)
308
-
309
- text_encoder.resize_token_embeddings(len(tokenizer), pad_to_multiple_of = 8)
310
- for token_id, embedding in zip(token_ids, embeddings):
311
- text_encoder.get_input_embeddings().weight.data[token_id] = embedding
312
-
313
- total_results = []
314
- i = 0
315
- for prompt in prompts:
316
- image = pipe(prompt, guidance_scale = 8.5).images
317
- total_results = image + total_results
318
- i+=1
319
- if i < len(prompts):
320
- yield total_results, gr.update(visible=True, value="<h3>(Not Finished) Generating ···</h3>")
321
- else:
322
- yield total_results, gr.update(visible=True, value="<h3>Generation Finished</h3>")
323
-
324
-
325
- def set_text_unfinished():
326
- return gr.update(visible=True, value="<h3>(Not Finished) Generating ···</h3>")
327
-
328
- def set_text_finished():
329
- return gr.update(visible=True, value="<h3>Generation Finished</h3>")
330
-
331
-
332
-
333
 
334
  with gr.Blocks(css=css) as demo: # css=css
335
  # binary_matrixes = gr.State([])
@@ -344,17 +274,12 @@ with gr.Blocks(css=css) as demo: # css=css
344
  prompts_array = gr.Textbox(lines = 3,
345
  label="Prompts (each line corresponds to a frame).",
346
  info="Give simple prompt is enough to achieve good face fidelity",
347
- # placeholder="A photo of a person",
348
  value="a photo of a person\na person reading a book\na person wearing a Christmas hat\na Fauvism painting of a person\n",
349
  interactive=True)
350
  choice = gr.Radio(choices=["Create a new character", "Still use this character"], label="Choose your action")
351
 
352
- gender_GAN = gr.Radio(choices=["Normal", "Man", "Woman"], label="Choose your model version")
353
-
354
- label = gr.Text(label="Select the action you want to take", visible=False)
355
- experiment_name = gr.Text(label="Select the GAN you want to take", visible=False)
356
  chose_emb = gr.File(label="Uploaded files", type="filepath", visible=False)
357
- example_emb = gr.File(label="Uploaded files", type="filepath", visible=False)
358
 
359
  generate = gr.Button("Generate!😊", variant="primary")
360
 
@@ -363,33 +288,21 @@ with gr.Blocks(css=css) as demo: # css=css
363
  generated_information = gr.Markdown(label="Generation Details", value="",visible=False)
364
 
365
  generate.click(
366
- fn=set_text_unfinished,
367
- outputs=generated_information
368
- ).then(
369
- fn=response,
370
- inputs=[choice, gender_GAN],
371
- outputs=[label, experiment_name],
372
- ).then(
373
  fn=generate_image,
374
- inputs=[experiment_name, label, prompts_array, chose_emb],
375
- outputs=[gallery, chose_emb]
376
- ).then(
377
- fn=set_text_finished,
378
- outputs=generated_information
379
  )
380
 
 
381
 
382
  gr.Examples(
383
  examples=get_example(),
384
- inputs=[example_emb, gender_GAN, choice, prompts_array],
385
- run_on_click=True,
386
- fn=run_for_examples,
387
- outputs=[gallery, generated_information],
388
  )
389
 
390
  gr.Markdown(article)
391
- # demo.launch(server_name="0.0.0.0", share = False)
392
- # share_link = demo.launch(share=True)
393
- # print("Share this link: ", share_link)
394
 
395
  demo.launch() # share=True
 
10
  import requests
11
  import time
12
  import random
13
+ from style_template import styles
14
  import numpy as np
15
  import torch
16
  import os
 
27
  import models.embedding_manager
28
  import importlib
29
  import time
30
+
31
  import os
32
  # os.environ['GRADIO_TEMP_DIR'] = 'qinghewang/tmp'
33
 
 
130
  loss_type = embedding_manager_config.model.personalization_config.params.loss_type,
131
  vit_out_dim = input_dim,
132
  )
133
+
134
  text_encoder.text_model.embeddings.forward = original_forward
135
 
136
+ STYLE_NAMES = list(styles.keys())
137
  DEFAULT_STYLE_NAME = "Watercolor"
138
  MAX_SEED = np.iinfo(np.int32).max
139
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
 
141
  def replace_phrases(prompt):
142
  replacements = {
 
159
 
160
 
161
  @spaces.GPU
162
+ def generate_image(chose_emb, choice, gender_GAN, prompts_array):
163
  prompts = handle_prompts(prompts_array)
164
 
165
+ print("gender:",gender_GAN)
166
 
167
+ if gender_GAN == "Normal":
168
  steps = 10000
169
  Embedding_Manager = normal_Embedding_Manager
170
+ elif gender_GAN == "Man":
171
  steps = 7000
172
  Embedding_Manager = man_Embedding_Manager
173
+ elif gender_GAN == "Woman":
174
  steps = 6000
175
  Embedding_Manager = woman_Embedding_Manager
176
  else:
177
  print("Hello, please notice this ^_^")
178
  assert 0
179
 
180
+ embedding_path = os.path.join("training_weight", gender_GAN, "embeddings_manager-{}.pt".format(str(steps)))
181
  Embedding_Manager.load(embedding_path)
182
  print("embedding_path:",embedding_path)
183
+ print("choice:",choice)
184
 
185
+ # index = "0"
186
+ save_dir = os.path.join("test_results/" + gender_GAN) # , index
187
  os.makedirs(save_dir, exist_ok=True)
 
 
188
 
189
  random_embedding = torch.randn(1, 1, input_dim).to(device)
190
+ if choice == "Create a new character":
 
 
191
  _, emb_dict = Embedding_Manager(tokenized_text=None, embedded_text=None, name_batch=None, random_embeddings = random_embedding, timesteps = None,)
 
192
  test_emb = emb_dict["adained_total_embedding"].to(device)
193
+ elif choice == "Still use this character":
 
 
194
  test_emb = torch.load(chose_emb).cuda()
195
+
196
+ test_emb_path = os.path.join(save_dir, "id_embeddings.pt")
197
+ torch.save(test_emb, test_emb_path)
198
 
199
  v1_emb = test_emb[:, 0]
200
  v2_emb = test_emb[:, 1]
 
209
  text_encoder.get_input_embeddings().weight.data[token_id] = embedding
210
 
211
  total_results = []
212
+ i = 0
213
  for prompt in prompts:
214
  image = pipe(prompt, guidance_scale = 8.5).images
215
  total_results = image + total_results
216
+ i+=1
217
+ if i < len(prompts):
218
+ yield total_results, gr.update(visible=True, value="<h3>(Not Finished) Generating ···</h3>"), test_emb_path
219
+ else:
220
+ yield total_results, gr.update(visible=True, value="<h3>Generation Finished</h3>"), test_emb_path
221
 
222
  def get_example():
223
  case = [
224
  [
225
  'demo_embeddings/example_1.pt',
226
+ 'Still use this character',
227
  "Normal",
 
228
  "a photo of a person\na person as a small child\na person as a 20 years old person\na person as a 80 years old person\na person reading a book\na person in the sunset\n",
229
  ],
230
  [
231
  'demo_embeddings/example_2.pt',
232
+ 'Still use this character',
233
  "Man",
 
234
  "a photo of a person\na person with a mustache and a hat\na person wearing headphoneswith red hair\na person with his dog\n",
235
  ],
236
  [
237
  'demo_embeddings/example_3.pt',
238
+ 'Still use this character',
239
  "Woman",
 
240
  "a photo of a person\na person at a beach\na person as a police officer\na person wearing a birthday hat\n",
241
  ],
242
  [
243
  'demo_embeddings/example_4.pt',
244
+ 'Still use this character',
245
  "Man",
 
246
  "a photo of a person\na person holding a bunch of flowers\na person in a lab coat\na person speaking at a podium\n",
247
  ],
248
  [
249
  'demo_embeddings/example_5.pt',
250
+ 'Still use this character',
251
  "Woman",
 
252
  "a photo of a person\na person wearing a kimono\na person in Van Gogh style\nEthereal fantasy concept art of a person\n",
253
  ],
254
  [
255
  'demo_embeddings/example_6.pt',
256
+ 'Still use this character',
257
  "Man",
 
258
  "a photo of a person\na person in the rain\na person meditating\na pencil sketch of a person\n",
259
  ],
260
  ]
261
  return case
262
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
263
 
264
  with gr.Blocks(css=css) as demo: # css=css
265
  # binary_matrixes = gr.State([])
 
274
  prompts_array = gr.Textbox(lines = 3,
275
  label="Prompts (each line corresponds to a frame).",
276
  info="Give simple prompt is enough to achieve good face fidelity",
 
277
  value="a photo of a person\na person reading a book\na person wearing a Christmas hat\na Fauvism painting of a person\n",
278
  interactive=True)
279
  choice = gr.Radio(choices=["Create a new character", "Still use this character"], label="Choose your action")
280
 
281
+ gender_GAN = gr.Radio(choices=["Normal", "Man", "Woman"], label="Choose your model version (Only work for 'Create a new character')") # , disabled=False
 
 
 
282
  chose_emb = gr.File(label="Uploaded files", type="filepath", visible=False)
 
283
 
284
  generate = gr.Button("Generate!😊", variant="primary")
285
 
 
288
  generated_information = gr.Markdown(label="Generation Details", value="",visible=False)
289
 
290
  generate.click(
 
 
 
 
 
 
 
291
  fn=generate_image,
292
+ inputs=[chose_emb, choice, gender_GAN, prompts_array],
293
+ outputs=[gallery, generated_information, chose_emb]
 
 
 
294
  )
295
 
296
+
297
 
298
  gr.Examples(
299
  examples=get_example(),
300
+ inputs=[chose_emb, choice, gender_GAN, prompts_array],
301
+ run_on_click=False,
302
+ fn=generate_image,
303
+ outputs=[gallery, generated_information, chose_emb],
304
  )
305
 
306
  gr.Markdown(article)
 
 
 
307
 
308
  demo.launch() # share=True
training_weight/{man_GAN → Man}/embeddings_manager-7000.pt RENAMED
File without changes
training_weight/{normal_GAN → Normal}/embeddings_manager-10000.pt RENAMED
File without changes
training_weight/{woman_GAN → Woman}/embeddings_manager-6000.pt RENAMED
File without changes