hysts HF staff commited on
Commit
a17d56c
1 Parent(s): 0481263
Files changed (2) hide show
  1. app.py +64 -4
  2. model.py +0 -78
app.py CHANGED
@@ -7,16 +7,15 @@ import random
7
 
8
  import gradio as gr
9
  import numpy as np
 
10
  import torch
11
-
12
- from model import Model
13
 
14
  DESCRIPTION = "# [UniDiffuser](https://github.com/thu-ml/unidiffuser)"
15
 
16
  if not torch.cuda.is_available():
17
  DESCRIPTION += "\n<p>Running on CPU 🥶</p>"
18
 
19
- model = Model()
20
 
21
  MAX_SEED = np.iinfo(np.int32).max
22
 
@@ -27,6 +26,67 @@ def randomize_seed_fn(seed: int, randomize_seed: bool) -> int:
27
  return seed
28
 
29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  def create_demo(mode_name: str) -> gr.Blocks:
31
  with gr.Blocks() as demo:
32
  with gr.Row():
@@ -82,7 +142,7 @@ def create_demo(mode_name: str) -> gr.Blocks:
82
  outputs=seed,
83
  queue=False,
84
  ).then(
85
- fn=model.run,
86
  inputs=[
87
  mode,
88
  prompt,
 
7
 
8
  import gradio as gr
9
  import numpy as np
10
+ import PIL.Image
11
  import torch
12
+ from diffusers import UniDiffuserPipeline
 
13
 
14
  DESCRIPTION = "# [UniDiffuser](https://github.com/thu-ml/unidiffuser)"
15
 
16
  if not torch.cuda.is_available():
17
  DESCRIPTION += "\n<p>Running on CPU 🥶</p>"
18
 
 
19
 
20
  MAX_SEED = np.iinfo(np.int32).max
21
 
 
26
  return seed
27
 
28
 
29
+ device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
30
+ if torch.cuda.is_available():
31
+ pipe = UniDiffuserPipeline.from_pretrained("thu-ml/unidiffuser-v1", torch_dtype=torch.float16)
32
+ pipe.to(device)
33
+
34
+
35
+ def run(
36
+ mode: str,
37
+ prompt: str,
38
+ image: PIL.Image.Image | None,
39
+ seed: int = 0,
40
+ num_steps: int = 20,
41
+ guidance_scale: float = 8.0,
42
+ ) -> tuple[PIL.Image.Image | None, str]:
43
+ generator = torch.Generator(device=device).manual_seed(seed)
44
+ if mode == "t2i":
45
+ pipe.set_text_to_image_mode()
46
+ sample = pipe(prompt=prompt, num_inference_steps=num_steps, guidance_scale=guidance_scale, generator=generator)
47
+ return sample.images[0], ""
48
+ elif mode == "i2t":
49
+ pipe.set_image_to_text_mode()
50
+ sample = pipe(image=image, num_inference_steps=num_steps, guidance_scale=guidance_scale, generator=generator)
51
+ return None, sample.text[0]
52
+ elif mode == "joint":
53
+ pipe.set_joint_mode()
54
+ sample = pipe(num_inference_steps=num_steps, guidance_scale=guidance_scale, generator=generator)
55
+ return sample.images[0], sample.text[0]
56
+ elif mode == "i":
57
+ pipe.set_image_mode()
58
+ sample = pipe(num_inference_steps=num_steps, guidance_scale=guidance_scale, generator=generator)
59
+ return sample.images[0], ""
60
+ elif mode == "t":
61
+ pipe.set_text_mode()
62
+ sample = pipe(num_inference_steps=num_steps, guidance_scale=guidance_scale, generator=generator)
63
+ return None, sample.text[0]
64
+ elif mode == "i2t2i":
65
+ pipe.set_image_to_text_mode()
66
+ sample = pipe(image=image, num_inference_steps=num_steps, guidance_scale=guidance_scale, generator=generator)
67
+ pipe.set_text_to_image_mode()
68
+ sample = pipe(
69
+ prompt=sample.text[0],
70
+ num_inference_steps=num_steps,
71
+ guidance_scale=guidance_scale,
72
+ generator=generator,
73
+ )
74
+ return sample.images[0], ""
75
+ elif mode == "t2i2t":
76
+ pipe.set_text_to_image_mode()
77
+ sample = pipe(prompt=prompt, num_inference_steps=num_steps, guidance_scale=guidance_scale, generator=generator)
78
+ pipe.set_image_to_text_mode()
79
+ sample = pipe(
80
+ image=sample.images[0],
81
+ num_inference_steps=num_steps,
82
+ guidance_scale=guidance_scale,
83
+ generator=generator,
84
+ )
85
+ return None, sample.text[0]
86
+ else:
87
+ raise ValueError
88
+
89
+
90
  def create_demo(mode_name: str) -> gr.Blocks:
91
  with gr.Blocks() as demo:
92
  with gr.Row():
 
142
  outputs=seed,
143
  queue=False,
144
  ).then(
145
+ fn=run,
146
  inputs=[
147
  mode,
148
  prompt,
model.py DELETED
@@ -1,78 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import PIL.Image
4
- import torch
5
- from diffusers import UniDiffuserPipeline
6
-
7
-
8
- class Model:
9
- def __init__(self):
10
- self.device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
11
- if self.device.type == "cuda":
12
- self.pipe = UniDiffuserPipeline.from_pretrained("thu-ml/unidiffuser-v1", torch_dtype=torch.float16)
13
- self.pipe.to(self.device)
14
- else:
15
- self.pipe = UniDiffuserPipeline.from_pretrained("thu-ml/unidiffuser-v1")
16
-
17
- def run(
18
- self,
19
- mode: str,
20
- prompt: str,
21
- image: PIL.Image.Image | None,
22
- seed: int = 0,
23
- num_steps: int = 20,
24
- guidance_scale: float = 8.0,
25
- ) -> tuple[PIL.Image.Image | None, str]:
26
- generator = torch.Generator(device=self.device).manual_seed(seed)
27
- if mode == "t2i":
28
- self.pipe.set_text_to_image_mode()
29
- sample = self.pipe(
30
- prompt=prompt, num_inference_steps=num_steps, guidance_scale=guidance_scale, generator=generator
31
- )
32
- return sample.images[0], ""
33
- elif mode == "i2t":
34
- self.pipe.set_image_to_text_mode()
35
- sample = self.pipe(
36
- image=image, num_inference_steps=num_steps, guidance_scale=guidance_scale, generator=generator
37
- )
38
- return None, sample.text[0]
39
- elif mode == "joint":
40
- self.pipe.set_joint_mode()
41
- sample = self.pipe(num_inference_steps=num_steps, guidance_scale=guidance_scale, generator=generator)
42
- return sample.images[0], sample.text[0]
43
- elif mode == "i":
44
- self.pipe.set_image_mode()
45
- sample = self.pipe(num_inference_steps=num_steps, guidance_scale=guidance_scale, generator=generator)
46
- return sample.images[0], ""
47
- elif mode == "t":
48
- self.pipe.set_text_mode()
49
- sample = self.pipe(num_inference_steps=num_steps, guidance_scale=guidance_scale, generator=generator)
50
- return None, sample.text[0]
51
- elif mode == "i2t2i":
52
- self.pipe.set_image_to_text_mode()
53
- sample = self.pipe(
54
- image=image, num_inference_steps=num_steps, guidance_scale=guidance_scale, generator=generator
55
- )
56
- self.pipe.set_text_to_image_mode()
57
- sample = self.pipe(
58
- prompt=sample.text[0],
59
- num_inference_steps=num_steps,
60
- guidance_scale=guidance_scale,
61
- generator=generator,
62
- )
63
- return sample.images[0], ""
64
- elif mode == "t2i2t":
65
- self.pipe.set_text_to_image_mode()
66
- sample = self.pipe(
67
- prompt=prompt, num_inference_steps=num_steps, guidance_scale=guidance_scale, generator=generator
68
- )
69
- self.pipe.set_image_to_text_mode()
70
- sample = self.pipe(
71
- image=sample.images[0],
72
- num_inference_steps=num_steps,
73
- guidance_scale=guidance_scale,
74
- generator=generator,
75
- )
76
- return None, sample.text[0]
77
- else:
78
- raise ValueError