Skipeat commited on
Commit
c128931
1 Parent(s): 7579f6a

image demo

Browse files
Files changed (4) hide show
  1. app.py +61 -0
  2. assets/logo.png +0 -0
  3. requiremets.txt +5 -0
  4. utils.py +18 -0
app.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ##source .venv/bin/activate
2
+
3
+ import streamlit as st
4
+
5
+ from utils import carga_modelo, genera
6
+
7
+ ## Página principal
8
+ st.title("Butterfly GAN (GAN de mariposas)")
9
+ st.write(
10
+ "Modelo Light-GAN entrenado con 1000 imágenes de mariposas tomadas de la colección del Museo Smithsonian."
11
+ )
12
+
13
+ ## Barra lateral
14
+ st.sidebar.subheader("¡Esta mariposa no existe! Ni en América Latina 🤯.")
15
+ st.sidebar.image("assets/logo.png", width=200)
16
+ st.sidebar.caption(
17
+ f"[Modelo](https://huggingface.co/ceyda/butterfly_cropped_uniq1K_512) y [Dataset](https://huggingface.co/datasets/huggan/smithsonian_butterflies_subset) usados."
18
+ )
19
+ st.sidebar.caption(f"*Disclaimers:*")
20
+ st.sidebar.caption(
21
+ "* Este demo es una versión simplificada del creado por [Ceyda Cinarel](https://github.com/cceyda) y [Jonathan Whitaker](https://datasciencecastnet.home.blog/) ([link](https://huggingface.co/spaces/huggan/butterfly-gan)) durante el hackathon [HugGan](https://github.com/huggingface/community-events). Cualquier error se atribuye a [Omar Espejel](https://twitter.com/espejelomar)."
22
+ )
23
+ st.sidebar.caption(
24
+ "* Modelo basado en el [paper](https://openreview.net/forum?id=1Fqg133qRaI) *Towards Faster and Stabilized GAN Training for High-fidelity Few-shot Image Synthesis*."
25
+ )
26
+
27
+ ## Cargamos modelo
28
+ repo_id = "ceyda/butterfly_cropped_uniq1K_512"
29
+ version_modelo = "57d36a15546909557d9f967f47713236c8288838"
30
+ modelo_gan = carga_modelo(repo_id, version_modelo)
31
+
32
+ ## Generamos 4 mariposas
33
+ n_mariposas = 4
34
+
35
+ ## Función que genera mariposas y lo guarda como un estado de la sesión
36
+ def corre():
37
+ with st.spinner("Generando, espera un poco..."):
38
+ ims = genera(modelo_gan, n_mariposas)
39
+ st.session_state["ims"] = ims
40
+
41
+
42
+ ## Si no hay una imagen generada entonces generala
43
+ if "ims" not in st.session_state:
44
+ st.session_state["ims"] = None
45
+ corre()
46
+
47
+ ## ims contiene las imágenes generadas
48
+ ims = st.session_state["ims"]
49
+
50
+ ## Si la usuaria da click en el botón entonces corremos la función genera()
51
+ corre_boton = st.button(
52
+ "Genera mariposas, porfa.",
53
+ on_click=corre,
54
+ help="Estamos en pleno vuelo, puede tardar.",
55
+ )
56
+
57
+ if ims is not None:
58
+ cols = st.columns(n_mariposas)
59
+ for j, im in enumerate(ims):
60
+ i = j % n_mariposas
61
+ cols[i].image(im, use_column_width=True)
assets/logo.png ADDED
requiremets.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ git+https://github.com/huggingface/community-events.git@3fea10c5d5a50c69f509e34cd580fe9139905d04#egg=huggan
2
+ transformers
3
+ faiss-cpu
4
+ paddlehub
5
+ paddlepaddle
utils.py ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import torch
3
+ from huggan.pytorch.lightweight_gan.lightweight_gan import LightweightGAN
4
+
5
+
6
+ ## Cargamos el modelo desde el Hub de Hugging Face
7
+ def carga_modelo(model_name="ceyda/butterfly_cropped_uniq1K_512", model_version=None):
8
+ gan = LightweightGAN.from_pretrained(model_name, version=model_version)
9
+ gan.eval()
10
+ return gan
11
+
12
+
13
+ ## Usamos el modelo GAN para generar imágenes
14
+ def genera(gan, batch_size=1):
15
+ with torch.no_grad():
16
+ ims = gan.G(torch.randn(batch_size, gan.latent_dim)).clamp_(0.0, 1.0) * 255
17
+ ims = ims.permute(0, 2, 3, 1).detach().cpu().numpy().astype(np.uint8)
18
+ return ims