Upload 35 files
Browse files- .gitattributes +16 -0
- app.py +33 -0
- requirements.txt +4 -0
- stylegan2-ffhq-config-f.pkl +3 -0
- stylegan2directions/age.jpg +3 -0
- stylegan2directions/age.npy +3 -0
- stylegan2directions/eye_distance.jpg +3 -0
- stylegan2directions/eye_distance.npy +3 -0
- stylegan2directions/eye_eyebrow_distance.jpg +3 -0
- stylegan2directions/eye_eyebrow_distance.npy +3 -0
- stylegan2directions/eye_ratio.jpg +3 -0
- stylegan2directions/eye_ratio.npy +3 -0
- stylegan2directions/eyes_open.jpg +3 -0
- stylegan2directions/eyes_open.npy +3 -0
- stylegan2directions/gender.jpg +3 -0
- stylegan2directions/gender.npy +3 -0
- stylegan2directions/lip_ratio.jpg +3 -0
- stylegan2directions/lip_ratio.npy +3 -0
- stylegan2directions/mouth_open.jpg +3 -0
- stylegan2directions/mouth_open.npy +3 -0
- stylegan2directions/mouth_ratio.jpg +3 -0
- stylegan2directions/mouth_ratio.npy +3 -0
- stylegan2directions/nose_mouth_distance.jpg +3 -0
- stylegan2directions/nose_mouth_distance.npy +3 -0
- stylegan2directions/nose_ratio.jpg +3 -0
- stylegan2directions/nose_ratio.npy +3 -0
- stylegan2directions/nose_tip.jpg +3 -0
- stylegan2directions/nose_tip.npy +3 -0
- stylegan2directions/pitch.jpg +3 -0
- stylegan2directions/pitch.npy +3 -0
- stylegan2directions/roll.jpg +3 -0
- stylegan2directions/roll.npy +3 -0
- stylegan2directions/smile.jpg +3 -0
- stylegan2directions/smile.npy +3 -0
- stylegan2directions/yaw.jpg +3 -0
- stylegan2directions/yaw.npy +3 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,19 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
stylegan2directions/age.jpg filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
stylegan2directions/eye_distance.jpg filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
stylegan2directions/eye_eyebrow_distance.jpg filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
stylegan2directions/eye_ratio.jpg filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
stylegan2directions/eyes_open.jpg filter=lfs diff=lfs merge=lfs -text
|
| 41 |
+
stylegan2directions/gender.jpg filter=lfs diff=lfs merge=lfs -text
|
| 42 |
+
stylegan2directions/lip_ratio.jpg filter=lfs diff=lfs merge=lfs -text
|
| 43 |
+
stylegan2directions/mouth_open.jpg filter=lfs diff=lfs merge=lfs -text
|
| 44 |
+
stylegan2directions/mouth_ratio.jpg filter=lfs diff=lfs merge=lfs -text
|
| 45 |
+
stylegan2directions/nose_mouth_distance.jpg filter=lfs diff=lfs merge=lfs -text
|
| 46 |
+
stylegan2directions/nose_ratio.jpg filter=lfs diff=lfs merge=lfs -text
|
| 47 |
+
stylegan2directions/nose_tip.jpg filter=lfs diff=lfs merge=lfs -text
|
| 48 |
+
stylegan2directions/pitch.jpg filter=lfs diff=lfs merge=lfs -text
|
| 49 |
+
stylegan2directions/roll.jpg filter=lfs diff=lfs merge=lfs -text
|
| 50 |
+
stylegan2directions/smile.jpg filter=lfs diff=lfs merge=lfs -text
|
| 51 |
+
stylegan2directions/yaw.jpg filter=lfs diff=lfs merge=lfs -text
|
app.py
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import gradio as gr
|
| 2 |
+
import numpy as np
|
| 3 |
+
import torch
|
| 4 |
+
import dnnlib
|
| 5 |
+
import legacy
|
| 6 |
+
|
| 7 |
+
# Load pretrained StyleGAN2 model
|
| 8 |
+
with open("stylegan2-ffhq-config-f.pkl", "rb") as f:
|
| 9 |
+
G = legacy.load_network_pkl(f)["G_ema"].to(torch.device("cpu"))
|
| 10 |
+
|
| 11 |
+
# Load gender direction vector
|
| 12 |
+
gender_direction = np.load("stylegan2directions/gender.npy")
|
| 13 |
+
|
| 14 |
+
def edit_gender(seed, strength):
|
| 15 |
+
rnd = np.random.RandomState(seed)
|
| 16 |
+
z = torch.from_numpy(rnd.randn(1, G.z_dim)).to(torch.float32)
|
| 17 |
+
w = G.mapping(z, None, truncation_psi=0.5)
|
| 18 |
+
w += torch.from_numpy(gender_direction).to(torch.float32) * strength
|
| 19 |
+
img = G.synthesis(w, noise_mode="const")
|
| 20 |
+
img = (img.clamp(-1, 1) + 1) * 127.5
|
| 21 |
+
img = img.permute(0, 2, 3, 1)[0].cpu().numpy().astype(np.uint8)
|
| 22 |
+
return img
|
| 23 |
+
|
| 24 |
+
gr.Interface(
|
| 25 |
+
fn=edit_gender,
|
| 26 |
+
inputs=[
|
| 27 |
+
gr.Slider(0, 10000, step=1, label="Random Seed"),
|
| 28 |
+
gr.Slider(-5, 5, step=0.1, label="Gender Strength (← Feminine | Masculine →)")
|
| 29 |
+
],
|
| 30 |
+
outputs=gr.Image(label="Generated Face"),
|
| 31 |
+
title="Gender Editing with StyleGAN2",
|
| 32 |
+
description="Move the slider to masculinize or feminize the face."
|
| 33 |
+
).launch()
|
requirements.txt
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
gradio
|
| 2 |
+
torch
|
| 3 |
+
numpy
|
| 4 |
+
dnnlib
|
stylegan2-ffhq-config-f.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:adf127ea7bb8a7788c8bdeda3c9937f7310b669b09ecf799ca53a631ff46948d
|
| 3 |
+
size 381673535
|
stylegan2directions/age.jpg
ADDED
|
Git LFS Details
|
stylegan2directions/age.npy
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:72095858d9f441494d46742639da43b17c282bbd48add6f5eca143073d725986
|
| 3 |
+
size 73856
|
stylegan2directions/eye_distance.jpg
ADDED
|
Git LFS Details
|
stylegan2directions/eye_distance.npy
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c679f7405f8277ef791aa22fd8cb7c728bd0ac210fcd9664cf57c3138c9c4ef6
|
| 3 |
+
size 73856
|
stylegan2directions/eye_eyebrow_distance.jpg
ADDED
|
Git LFS Details
|
stylegan2directions/eye_eyebrow_distance.npy
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:a13002c0ad517fdcffe1688e3a3b44a1b8fab0a71769e609b6de43a20550edf0
|
| 3 |
+
size 73856
|
stylegan2directions/eye_ratio.jpg
ADDED
|
Git LFS Details
|
stylegan2directions/eye_ratio.npy
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:77a7aa387c857eea20380a530626e48ba63de1ad33621c37319020a823be7446
|
| 3 |
+
size 73856
|
stylegan2directions/eyes_open.jpg
ADDED
|
Git LFS Details
|
stylegan2directions/eyes_open.npy
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:6115c94f42449aaa1f7064171f32bdc6d6c92aba4db7905fdbbd31a1483fde90
|
| 3 |
+
size 73856
|
stylegan2directions/gender.jpg
ADDED
|
Git LFS Details
|
stylegan2directions/gender.npy
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:f1ac40508d9f5b7df499378f60766d93fe4e5f5461b63fff8ed14233e9b15a9e
|
| 3 |
+
size 73856
|
stylegan2directions/lip_ratio.jpg
ADDED
|
Git LFS Details
|
stylegan2directions/lip_ratio.npy
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:a3ee87e7a175666437d722dbb191cd1b73fd5ce02955f058cbe280878bd529b0
|
| 3 |
+
size 73856
|
stylegan2directions/mouth_open.jpg
ADDED
|
Git LFS Details
|
stylegan2directions/mouth_open.npy
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:b4852b360bbc70380f2151e5d7204a895ccf8d22d6a951dbb6f65264774dab39
|
| 3 |
+
size 73856
|
stylegan2directions/mouth_ratio.jpg
ADDED
|
Git LFS Details
|
stylegan2directions/mouth_ratio.npy
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:0a897cc731a213a3ec62869181a30d31d72a2761340c58d0f24e073a5a67be28
|
| 3 |
+
size 73856
|
stylegan2directions/nose_mouth_distance.jpg
ADDED
|
Git LFS Details
|
stylegan2directions/nose_mouth_distance.npy
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:a466d61d2123d64134616656d36ae5f50fa9bf345373f2e51d37fc41d1af30ca
|
| 3 |
+
size 73856
|
stylegan2directions/nose_ratio.jpg
ADDED
|
Git LFS Details
|
stylegan2directions/nose_ratio.npy
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:8866c8cf02f7aad7a13c71c3f6b64f9414a58f43a2d4b8f52982c86b4c1dc2d3
|
| 3 |
+
size 73856
|
stylegan2directions/nose_tip.jpg
ADDED
|
Git LFS Details
|
stylegan2directions/nose_tip.npy
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:aba1e4487b43e8a1389b3c645b83fe032c439f32397c04e24d3dc9c0e63857b0
|
| 3 |
+
size 73856
|
stylegan2directions/pitch.jpg
ADDED
|
Git LFS Details
|
stylegan2directions/pitch.npy
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:28fd460a828f56f83c6c22ce4c5251664dab5d7d5da3ad840517c6df9d07c385
|
| 3 |
+
size 73856
|
stylegan2directions/roll.jpg
ADDED
|
Git LFS Details
|
stylegan2directions/roll.npy
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:b4e0cc381482a79cd8901e0997cb1d4ffdf6c8e597306da32a040f290e0fed88
|
| 3 |
+
size 73856
|
stylegan2directions/smile.jpg
ADDED
|
Git LFS Details
|
stylegan2directions/smile.npy
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:703a67fe070ce1f3c5ad18fc0f5711093756ba1a7048e2e09b2cd6c933032b6e
|
| 3 |
+
size 73856
|
stylegan2directions/yaw.jpg
ADDED
|
Git LFS Details
|
stylegan2directions/yaw.npy
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:600bbadd2569a8382f444498bf995b3484b9151972601ddfacd80dfa4d5740cd
|
| 3 |
+
size 73856
|