feng2022 commited on
Commit
f63cef0
β€’
1 Parent(s): 141f322
Files changed (5) hide show
  1. .gitattributes +2 -5
  2. .gitmodules +3 -0
  3. README.md +6 -7
  4. app.py +109 -0
  5. requirements.txt +5 -0
.gitattributes CHANGED
@@ -1,6 +1,7 @@
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
  *.ftz filter=lfs diff=lfs merge=lfs -text
6
  *.gz filter=lfs diff=lfs merge=lfs -text
@@ -9,13 +10,9 @@
9
  *.lfs.* filter=lfs diff=lfs merge=lfs -text
10
  *.model filter=lfs diff=lfs merge=lfs -text
11
  *.msgpack filter=lfs diff=lfs merge=lfs -text
12
- *.npy filter=lfs diff=lfs merge=lfs -text
13
- *.npz filter=lfs diff=lfs merge=lfs -text
14
  *.onnx filter=lfs diff=lfs merge=lfs -text
15
  *.ot filter=lfs diff=lfs merge=lfs -text
16
  *.parquet filter=lfs diff=lfs merge=lfs -text
17
- *.pickle filter=lfs diff=lfs merge=lfs -text
18
- *.pkl filter=lfs diff=lfs merge=lfs -text
19
  *.pb filter=lfs diff=lfs merge=lfs -text
20
  *.pt filter=lfs diff=lfs merge=lfs -text
21
  *.pth filter=lfs diff=lfs merge=lfs -text
@@ -27,5 +24,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
  *.wasm filter=lfs diff=lfs merge=lfs -text
28
  *.xz filter=lfs diff=lfs merge=lfs -text
29
  *.zip filter=lfs diff=lfs merge=lfs -text
30
- *.zst filter=lfs diff=lfs merge=lfs -text
31
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
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
+ *.bin.* filter=lfs diff=lfs merge=lfs -text
5
  *.bz2 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
 
10
  *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
  *.model filter=lfs diff=lfs merge=lfs -text
12
  *.msgpack filter=lfs diff=lfs merge=lfs -text
 
 
13
  *.onnx filter=lfs diff=lfs merge=lfs -text
14
  *.ot filter=lfs diff=lfs merge=lfs -text
15
  *.parquet filter=lfs diff=lfs merge=lfs -text
 
 
16
  *.pb filter=lfs diff=lfs merge=lfs -text
17
  *.pt filter=lfs diff=lfs merge=lfs -text
18
  *.pth filter=lfs diff=lfs merge=lfs -text
 
24
  *.wasm filter=lfs diff=lfs merge=lfs -text
25
  *.xz filter=lfs diff=lfs merge=lfs -text
26
  *.zip filter=lfs diff=lfs merge=lfs -text
27
+ *.zstandard filter=lfs diff=lfs merge=lfs -text
28
  *tfevents* filter=lfs diff=lfs merge=lfs -text
.gitmodules ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ [submodule "StyleGAN-Human"]
2
+ path = StyleGAN-Human
3
+ url = https://github.com/stylegan-human/StyleGAN-Human
README.md CHANGED
@@ -1,13 +1,12 @@
1
  ---
2
- title: Styleganhuman Copy
3
- emoji: πŸš€
4
- colorFrom: green
5
- colorTo: gray
6
  sdk: gradio
7
- sdk_version: 3.1.4
8
  app_file: app.py
9
  pinned: false
10
- license: mit
11
  ---
12
 
13
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: StyleGAN-Human
3
+ emoji: 🌍
4
+ colorFrom: purple
5
+ colorTo: yellow
6
  sdk: gradio
7
+ sdk_version: 3.0.5
8
  app_file: app.py
9
  pinned: false
 
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces#reference
app.py ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+
3
+ from __future__ import annotations
4
+
5
+ import argparse
6
+ import functools
7
+ import os
8
+ import pickle
9
+ import sys
10
+
11
+ import gradio as gr
12
+ import numpy as np
13
+ import torch
14
+ import torch.nn as nn
15
+ from huggingface_hub import hf_hub_download
16
+
17
+ sys.path.insert(0, 'StyleGAN-Human')
18
+
19
+ TITLE = 'StyleGAN-Human'
20
+ DESCRIPTION = '''This is an unofficial demo for https://github.com/stylegan-human/StyleGAN-Human.
21
+
22
+ Expected execution time on Hugging Face Spaces: 0.8s
23
+
24
+ Related App: [StyleGAN-Human (Interpolation)](https://huggingface.co/spaces/hysts/StyleGAN-Human-Interpolation)
25
+ '''
26
+ ARTICLE = '<center><img src="https://visitor-badge.glitch.me/badge?page_id=hysts.stylegan-human" alt="visitor badge"/></center>'
27
+
28
+ TOKEN = os.environ['TOKEN']
29
+
30
+
31
+ def parse_args() -> argparse.Namespace:
32
+ parser = argparse.ArgumentParser()
33
+ parser.add_argument('--device', type=str, default='cpu')
34
+ parser.add_argument('--theme', type=str)
35
+ parser.add_argument('--live', action='store_true')
36
+ parser.add_argument('--share', action='store_true')
37
+ parser.add_argument('--port', type=int)
38
+ parser.add_argument('--disable-queue',
39
+ dest='enable_queue',
40
+ action='store_false')
41
+ parser.add_argument('--allow-flagging', type=str, default='never')
42
+ return parser.parse_args()
43
+
44
+
45
+ def generate_z(z_dim: int, seed: int, device: torch.device) -> torch.Tensor:
46
+ return torch.from_numpy(np.random.RandomState(seed).randn(
47
+ 1, z_dim)).to(device).float()
48
+
49
+
50
+ @torch.inference_mode()
51
+ def generate_image(seed: int, truncation_psi: float, model: nn.Module,
52
+ device: torch.device) -> np.ndarray:
53
+ seed = int(np.clip(seed, 0, np.iinfo(np.uint32).max))
54
+
55
+ z = generate_z(model.z_dim, seed, device)
56
+ label = torch.zeros([1, model.c_dim], device=device)
57
+
58
+ out = model(z, label, truncation_psi=truncation_psi, force_fp32=True)
59
+ out = (out.permute(0, 2, 3, 1) * 127.5 + 128).clamp(0, 255).to(torch.uint8)
60
+ return out[0].cpu().numpy()
61
+
62
+
63
+ def load_model(file_name: str, device: torch.device) -> nn.Module:
64
+ path = hf_hub_download('hysts/StyleGAN-Human',
65
+ f'models/{file_name}',
66
+ use_auth_token=TOKEN)
67
+ with open(path, 'rb') as f:
68
+ model = pickle.load(f)['G_ema']
69
+ model.eval()
70
+ model.to(device)
71
+ with torch.inference_mode():
72
+ z = torch.zeros((1, model.z_dim)).to(device)
73
+ label = torch.zeros([1, model.c_dim], device=device)
74
+ model(z, label, force_fp32=True)
75
+ return model
76
+
77
+
78
+ def main():
79
+ args = parse_args()
80
+ device = torch.device(args.device)
81
+
82
+ model = load_model('stylegan_human_v2_1024.pkl', device)
83
+
84
+ func = functools.partial(generate_image, model=model, device=device)
85
+ func = functools.update_wrapper(func, generate_image)
86
+
87
+ gr.Interface(
88
+ func,
89
+ [
90
+ gr.inputs.Number(default=0, label='Seed'),
91
+ gr.inputs.Slider(
92
+ 0, 2, step=0.05, default=0.7, label='Truncation psi'),
93
+ ],
94
+ gr.outputs.Image(type='numpy', label='Output'),
95
+ title=TITLE,
96
+ description=DESCRIPTION,
97
+ article=ARTICLE,
98
+ theme=args.theme,
99
+ allow_flagging=args.allow_flagging,
100
+ live=args.live,
101
+ ).launch(
102
+ enable_queue=args.enable_queue,
103
+ server_port=args.port,
104
+ share=args.share,
105
+ )
106
+
107
+
108
+ if __name__ == '__main__':
109
+ main()
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ numpy==1.22.3
2
+ Pillow==9.1.0
3
+ scipy==1.8.0
4
+ torch==1.11.0
5
+ torchvision==0.12.0