En este tutorial, haremos una exploración interactiva en profundidad del modelo de pytorch stylegan2-azada de Nvidia, que muestra sus poderosas capacidades para generar imágenes fotorrealistas. Aprovechando un modelo FFHQ previo al estado previo, los usuarios pueden generar imágenes sintéticas de alta calidad a partir de una sola semilla latente o visualizar transiciones suaves a través de la interpolación del espacio latente entre diferentes semillas. Con una interfaz intuitiva alimentada por widgets interactivos, este tutorial es un recurso valioso para investigadores, artistas y entusiastas que buscan comprender y experimentar con redes adversas generativas avanzadas.

!git clone https://github.com/NVlabs/stylegan2-ada-pytorch.git

Primero, clonamos el repositorio de Nvidia Stylegan2 – Aada Pytorch de GitHub a su espacio de trabajo actual de Colab.

!mkdir -p stylegan2-ada-pytorch/pretrained
!wget https://nvlabs-fi-cdn.nvidia.com/stylegan2-ada-pytorch/pretrained/ffhq.pkl -O stylegan2-ada-pytorch/pretrained/ffhq.pkl

En esta parte del código, el primer comando crea el directorio necesario (si aún no existe) para almacenar modelos previos a la detención. El segundo comando descarga el modelo FFHQ Pretraled y lo guarda en ese directorio para su uso con el modelo StyleGan2 -Aad.

import sys
sys.path.append('stylegan2-ada-pytorch')

En este código, agregamos el directorio «styleGan2-ADA-Pytorch» a la ruta de búsqueda del módulo de Python, asegurando que los módulos del repositorio se puedan importar y utilizar fácilmente.

import torch
import numpy as np
import PIL.Image
import matplotlib.pyplot as plt
import ipywidgets as widgets
from IPython.display import display

Aquí, importamos declaraciones y cargamos bibliotecas esenciales para aprendizaje profundooperaciones numéricas, procesamiento de imágenes, visualización y controles interactivos en su código. Estas bibliotecas aseguran que tenga las herramientas para construir, manipular y mostrar imágenes generadas de manera interactiva.

import legacy
import dnnlib


def generate_image(seed=42, truncation=1.0, network_pkl="stylegan2-ada-pytorch/pretrained/ffhq.pkl"):
    print(f'Generating image with seed {seed} and truncation {truncation}')
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
   
    with dnnlib.util.open_url(network_pkl) as f:                                # Load the pretrained generator network
        G = legacy.load_network_pkl(f)['G_ema'].to(device)
   
    z = torch.from_numpy(np.random.RandomState(seed).randn(1, G.z_dim)).to(device)   # Create a latent vector using the provided seed
    label = None  # FFHQ is unconditional


    with torch.no_grad():                                                             # Generate image
        img = G(z, label, truncation_psi=truncation, noise_mode="const")
   
    # Convert image tensor to uint8 and format for display
    img = (img + 1) * (255/2)
    img = img.clamp(0,255).to(torch.uint8)
    img = img[0].permute(1,2,0).cpu().numpy()
   
    plt.figure(figsize=(4,4))
    plt.imshow(img)
    plt.axis('off')
    plt.show()

En esta parte, definimos una función llamada Generate_Image que carga la red del generador StyleGan2 -ADA previa al detenido de una URL dada. Crea un vector latente basado en una semilla, genera una imagen con un parámetro de truncamiento especificado y luego procesa y muestra la imagen resultante usando matplotlib.

def interpolate_images(seed1=42, seed2=123, steps=10, truncation=1.0, network_pkl="stylegan2-ada-pytorch/pretrained/ffhq.pkl"):
    print(f'Interpolating between seeds {seed1} and {seed2} with {steps} steps and truncation {truncation}')
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
   
    with dnnlib.util.open_url(network_pkl) as f:                              # Load the pretrained generator network
        G = legacy.load_network_pkl(f)['G_ema'].to(device)
   
    # Generate latent vectors for the two seeds
    z1 = torch.from_numpy(np.random.RandomState(seed1).randn(1, G.z_dim)).to(device)
    z2 = torch.from_numpy(np.random.RandomState(seed2).randn(1, G.z_dim)).to(device)
   
    # Create interpolation latent vectors
    alphas = np.linspace(0, 1, steps)
    z_interp = []
    for a in alphas:
        z_interp.append((1 - a) * z1 + a * z2)
    z_interp = torch.cat(z_interp, dim=0)
    label = None


    # Generate images for each interpolated latent vector
    with torch.no_grad():
        imgs = G(z_interp, label, truncation_psi=truncation, noise_mode="const")
   
    imgs = (imgs + 1) * (255/2)
    imgs = imgs.clamp(0,255).to(torch.uint8).cpu().numpy()
   
    plt.figure(figsize=(steps * 2, 2))                                          # Plot images in a row to visualize the interpolation
    for i in range(steps):
        plt.subplot(1, steps, i+1)
        img = np.transpose(imgs[i], (1,2,0))
        plt.imshow(img)
        plt.axis('off')
    plt.show()

Aquí, definimos interpolate_images, que genera imágenes interpolando entre vectores latentes derivados de dos semillas. Carga el generador StyleGan2 -Aads pretranado, calcula una transición suave entre los códigos latentes de las dos semillas en un número especificado de pasos, y luego muestra las imágenes resultantes en fila para visualizar la interpolación.

Imagen de muestra generada

En conclusión, demostramos un enfoque versátil y práctico utilizando el modelo StyleGan2-ADA de NVIDIA para la generación de imágenes estáticas e interpolación dinámica de espacio latente. Al permitir a los usuarios ajustar parámetros como los valores de semillas y los niveles de truncamiento de manera interactiva, este cuaderno proporciona información sobre las complejidades de la síntesis de imágenes basada en GaN y fomenta la creatividad y la innovación.


Aquí está el Cuaderno de colab para el proyecto anterior. Además, no olvides seguirnos Gorjeo y únete a nuestro Canal de telegrama y LinkedIn GRsalpicar. No olvides unirte a nuestro 75k+ ml de subreddit.

🚨 Lectura de lectura recomendada Liberaciones de investigación de IA: un sistema avanzado que integra el sistema de IA del agente y los estándares de cumplimiento de datos para abordar las preocupaciones legales en los conjuntos de datos de IA


Asif Razzaq es el CEO de MarktechPost Media Inc .. Como empresario e ingeniero visionario, ASIF se compromete a aprovechar el potencial de la inteligencia artificial para el bien social. Su esfuerzo más reciente es el lanzamiento de una plataforma de medios de inteligencia artificial, MarktechPost, que se destaca por su cobertura profunda de noticias de aprendizaje automático y de aprendizaje profundo que es técnicamente sólido y fácilmente comprensible por una audiencia amplia. La plataforma cuenta con más de 2 millones de vistas mensuales, ilustrando su popularidad entre el público.

Por automata