xco2 commited on
Commit
84bd5f3
1 Parent(s): eee3139

分开两个tag,增加examples

Browse files
Files changed (3) hide show
  1. app.py +82 -18
  2. example.jpg +0 -0
  3. requirements.txt +2 -1
app.py CHANGED
@@ -419,7 +419,10 @@ def merge_images(images: np.ndarray):
419
 
420
  def get_models(device):
421
  def modelLoad(model, model_path, data_parallel=False):
422
- model.load_state_dict(torch.load(model_path, map_location='cpu'), strict=True)
 
 
 
423
 
424
  if data_parallel:
425
  model = torch.nn.DataParallel(model)
@@ -461,10 +464,11 @@ def get_models(device):
461
 
462
  def init_webui(unet, vae, normal_t):
463
  # 定义回调函数
464
- def process_image(input_image_value, noise_step, step_value, batch_size, sampler_name, img_size,
465
  progress=gr.Progress()):
466
  progress(0, desc="开始...")
467
 
 
468
  noise_step = float(noise_step)
469
  step_value = int(step_value)
470
  batch_size = int(batch_size)
@@ -481,7 +485,8 @@ def init_webui(unet, vae, normal_t):
481
  if input_image_value is None:
482
  looper = sampler.sample_loop(unet, vae.middle_c, batch_size, step_value, shape=img_size, eta=1.)
483
  else:
484
- input_image_value = Image.fromarray(input_image_value).resize(img_size, Image.ANTIALIAS)
 
485
  input_image_value = np.array(input_image_value, dtype=np.float32) / 255.
486
  input_image_value = np.transpose(input_image_value, (2, 0, 1))
487
  input_image_value = torch.Tensor([input_image_value]).to(device)
@@ -504,34 +509,93 @@ def init_webui(unet, vae, normal_t):
504
 
505
  return output
506
 
507
- with gr.Blocks(title="图片处理") as iface:
508
- with gr.Column():
509
- with gr.Row():
510
- with gr.Column():
511
- # 创建输入组件
512
- input_image = gr.Image(label="输入图片")
513
- # 加噪程度
514
- noise_step = gr.Slider(minimum=0.05, maximum=1, value=0.6, label="加噪程度", step=0.01)
515
- with gr.Column():
 
 
 
516
  # 选择sampler
517
- sampler_name = gr.Dropdown(["DDIM"], label="sampler", value="DDIM") # , "euler a", "dpmpp 2m"
518
  # 创建滑动条组件
519
- step = gr.Slider(minimum=1, maximum=1000, value=40, label="步长", step=1)
520
- batch_size = gr.Slider(minimum=1, maximum=4, label="batch size", step=1)
521
- img_size = gr.Slider(minimum=256, maximum=512, value=256, label="img size", step=64)
 
522
  # 创建开始按钮组件
523
- start_button = gr.Button(label="开始")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
524
  # 创建输出组件
525
  output_images = gr.Gallery(show_label=False, height=400, columns=5)
 
 
 
 
 
 
 
526
 
527
- start_button.click(process_image, [input_image, noise_step, step, batch_size, sampler_name, img_size],
 
528
  [output_images])
 
 
529
 
530
  return iface
531
 
532
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
533
  if __name__ == '__main__':
534
  device = torch.device('cpu')
 
535
  unet, vae, normal_t = get_models(device)
536
 
537
 
 
419
 
420
  def get_models(device):
421
  def modelLoad(model, model_path, data_parallel=False):
422
+ if str(device) == "cuda":
423
+ model.load_state_dict(torch.load(model_path), strict=True)
424
+ else:
425
+ model.load_state_dict(torch.load(model_path, map_location='cpu'), strict=True)
426
 
427
  if data_parallel:
428
  model = torch.nn.DataParallel(model)
 
464
 
465
  def init_webui(unet, vae, normal_t):
466
  # 定义回调函数
467
+ def process_image(input_image_value, noise_step, step_value, batch_size, sampler_name, img_size, random_seed,
468
  progress=gr.Progress()):
469
  progress(0, desc="开始...")
470
 
471
+ setup_seed(int(random_seed))
472
  noise_step = float(noise_step)
473
  step_value = int(step_value)
474
  batch_size = int(batch_size)
 
485
  if input_image_value is None:
486
  looper = sampler.sample_loop(unet, vae.middle_c, batch_size, step_value, shape=img_size, eta=1.)
487
  else:
488
+ input_image_value = Image.fromarray(input_image_value).resize((img_size[0] * 8, img_size[1] * 8),
489
+ Image.ANTIALIAS)
490
  input_image_value = np.array(input_image_value, dtype=np.float32) / 255.
491
  input_image_value = np.transpose(input_image_value, (2, 0, 1))
492
  input_image_value = torch.Tensor([input_image_value]).to(device)
 
509
 
510
  return output
511
 
512
+ def process_image_u(step_value, batch_size, sampler_name, img_size, random_seed,
513
+ progress=gr.Progress()):
514
+ return process_image(None, 0, step_value, batch_size, sampler_name, img_size, random_seed,
515
+ progress)
516
+
517
+ with gr.Blocks() as iface:
518
+ gr.Markdown(
519
+ "This is a diffusion model for generating second-dimensional avatars, which can be used for unconditional generation or image-to-image generation.")
520
+
521
+ with gr.Tab(label="unconditional generation"):
522
+ with gr.Column():
523
+ with gr.Row():
524
  # 选择sampler
525
+ sampler_name_u = gr.Dropdown(["DDIM"], label="sampler", value="DDIM") # , "euler a", "dpmpp 2m"
526
  # 创建滑动条组件
527
+ step_u = gr.Slider(minimum=1, maximum=1000, value=40, label="steps", step=1)
528
+ batch_size_u = gr.Slider(minimum=1, maximum=4, label="batch size", step=1)
529
+ img_size_u = gr.Slider(minimum=256, maximum=512, value=256, label="img size", step=64)
530
+ ramdom_seed_u = gr.Number(value=-1, label="ramdom seed(-1 as random number)")
531
  # 创建开始按钮组件
532
+ start_button_u = gr.Button(label="Run")
533
+ # 创建输出组件
534
+ output_images_u = gr.Gallery(show_label=False, height=400, columns=5)
535
+ gr.Examples(
536
+ examples=[["DDIM", 40, 2, 256, 255395]],
537
+ inputs=[sampler_name_u, step_u, batch_size_u, img_size_u, ramdom_seed_u],
538
+ outputs=output_images_u,
539
+ fn=process_image_u,
540
+ # cache_examples=True,
541
+ )
542
+ with gr.Tab(label="image to image"):
543
+ with gr.Column():
544
+ with gr.Row():
545
+ with gr.Column():
546
+ # 创建输入组件
547
+ input_image = gr.Image(label="image to image")
548
+ # 加噪程度
549
+ noise_step = gr.Slider(minimum=0.05, maximum=1, value=0.6, label="加噪程度", step=0.01)
550
+ with gr.Column():
551
+ # 选择sampler
552
+ sampler_name = gr.Dropdown(["DDIM"], label="sampler", value="DDIM") # , "euler a", "dpmpp 2m"
553
+ # 创建滑动条组件
554
+ step = gr.Slider(minimum=1, maximum=1000, value=40, label="steps", step=1)
555
+ batch_size = gr.Slider(minimum=1, maximum=4, label="batch size", step=1)
556
+ img_size = gr.Slider(minimum=256, maximum=512, value=256, label="img size", step=64)
557
+ ramdom_seed = gr.Number(value=-1, label="ramdom seed(-1 as random number)")
558
+ # 创建开始按钮组件
559
+ start_button = gr.Button(label="Run")
560
+
561
  # 创建输出组件
562
  output_images = gr.Gallery(show_label=False, height=400, columns=5)
563
+ gr.Examples(
564
+ examples=[["./example.jpg", 0.4, "DDIM", 60, 4, 320, 231324]], # 224477,378754
565
+ inputs=[input_image, noise_step, sampler_name, step, batch_size, img_size, ramdom_seed],
566
+ outputs=output_images,
567
+ fn=process_image,
568
+ # cache_examples=True,
569
+ )
570
 
571
+ start_button.click(process_image,
572
+ [input_image, noise_step, step, batch_size, sampler_name, img_size, ramdom_seed],
573
  [output_images])
574
+ start_button_u.click(process_image_u, [step_u, batch_size_u, sampler_name_u, img_size_u, ramdom_seed_u],
575
+ [output_images_u])
576
 
577
  return iface
578
 
579
 
580
+ def setup_seed(seed=0):
581
+ import random
582
+ if seed == -1:
583
+ seed = random.randint(0, 1000000)
584
+ print(seed)
585
+ torch.manual_seed(seed) # 为CPU设置随机种子
586
+ np.random.seed(seed) # Numpy module.
587
+ random.seed(seed) # Python random module.
588
+ if torch.cuda.is_available():
589
+ # torch.backends.cudnn.benchmark = False
590
+ torch.backends.cudnn.deterministic = True
591
+ torch.cuda.manual_seed(seed) # 为当前GPU设置随机种子
592
+ torch.cuda.manual_seed_all(seed) # 为所有GPU设置随机种子
593
+ # os.environ['PYTHONHASHSEED'] = str(seed)
594
+
595
+
596
  if __name__ == '__main__':
597
  device = torch.device('cpu')
598
+ # device = torch.device('cuda')
599
  unet, vae, normal_t = get_models(device)
600
 
601
 
example.jpg ADDED
requirements.txt CHANGED
@@ -5,4 +5,5 @@ numpy==1.23.4
5
  torch
6
  tqdm
7
  diffusers==0.20.1
8
- accelerate
 
 
5
  torch
6
  tqdm
7
  diffusers==0.20.1
8
+ accelerate
9
+ Pillow==9.2.0