Un guide étape par étape pour la génération d'images de mode à l'aide des GAN dans Vogue

introduire

Cet article explorera les réseaux contradictoires génératifs (GAN) et leurs capacités remarquables en matière de génération d'images. Les GAN ont révolutionné le domaine de la modélisation générative, en fournissant des moyens innovants de créer de nouveaux contenus grâce à des méthodes créatives grâce à l'apprentissage contradictoire.

Dans ce guide, nous vous emmènerons dans un voyage fascinant, en partant des concepts de base des GAN et en approfondissant progressivement les complexités de la génération d'images de mode. À travers des projets concrets et des instructions étape par étape, nous vous guiderons dans la création et la formation de votre propre modèle GAN à l'aide de TensorFlow et Keras.

Préparez-vous à découvrir le potentiel des GAN et à témoigner de la magie de l'intelligence artificielle dans l'industrie de la mode. Que vous soyez un praticien expérimenté de l'IA ou un passionné curieux, Fashion GAN vous fournira les compétences et les connaissances nécessaires pour créer de superbes créations de mode qui repoussent les limites de l'art génératif. Approfondissons le monde fascinant des GAN et libérons votre créativité intérieure !

0ac67b4a867e5dac5540177a1174f062.jpeg

Table des matières

  • introduire

  • En savoir plus sur les réseaux contradictoires génératifs (GAN)

  • Aperçu du projet : Utiliser GAN pour générer des images de mode

  • Construire le GAN

  • Construire une boucle de formation

  • Vérifier les performances et tester les générateurs

  • Autres améliorations et orientations futures

  • en conclusion

  • Problème commun

En savoir plus sur les réseaux contradictoires génératifs (GAN)

Qu’est-ce que le GAN ?

Un réseau contradictoire génératif (GAN) se compose de deux réseaux de neurones : un générateur et un discriminateur. Le générateur est chargé de créer de nouveaux échantillons de données, tandis que la tâche du discriminateur est de faire la distinction entre les données réelles et fausses générées par le générateur. Les deux réseaux sont formés simultanément par le biais d'un processus compétitif, le générateur améliorant sa capacité à créer des échantillons réalistes et le discriminateur devenant meilleur pour identifier les vrais et les faux.

Comment fonctionnent les GAN ?

Les GAN sont basés sur un scénario de jeu dans lequel un générateur et un discriminateur s'affrontent. Le générateur tente de créer des données similaires aux données réelles, tandis que le discriminateur vise à distinguer les données réelles des fausses données. Le générateur apprend à créer des échantillons plus réalistes grâce à ce processus de formation contradictoire.

Composants clés des GAN

Afin de construire un GAN, nous avons besoin de plusieurs composants de base :

  • Générateur : Un réseau de neurones qui génère de nouveaux échantillons de données.

  • Discriminateur : Un réseau de neurones qui classe les données comme vraies ou fausses.

  • Espace latent : L'espace de vecteurs aléatoires que le générateur utilise comme entrée pour générer des échantillons.

  • Boucle de formation : Un processus itératif de formation du générateur et du discriminateur en étapes alternées.

Fonction de perte dans GAN

Le processus de formation GAN repose sur une fonction de perte spécifique. Le générateur tente de minimiser la perte du générateur, l'encourageant à créer des données plus réalistes. Dans le même temps, l’objectif du discriminateur est de minimiser la perte du discriminateur afin de mieux distinguer les données réelles des fausses données.

Aperçu du projet : Utiliser GAN pour générer des images de mode

Objectifs du projet

Dans ce projet, notre objectif est de créer un GAN pour générer de nouvelles images de mode similaires aux images de l'ensemble de données Fashion MNIST. Les images générées doivent capturer les caractéristiques essentielles de divers articles de mode, tels que des robes, des chemises, des pantalons et des chaussures.

2d759e47589c8e477e996408a4d31874.jpeg
Ensemble de données : Mode MNIST

Nous utiliserons l'ensemble de données Fashion MNIST : https://www.tensorflow.org/datasets/catalog/fashion_mnist

Il s'agit d'un ensemble de données de référence populaire contenant des images en niveaux de gris d'articles de mode. Chaque image mesure 28×28 pixels, avec un total de 10 catégories.

Mettre en place l'environnement du projet

Tout d'abord, nous devons configurer l'environnement Python et installer les bibliothèques nécessaires, notamment TensorFlow, Matplotlib et TensorFlow Datasets.

Construire le GAN

Importer des dépendances et des données

Tout d’abord, nous devons installer et importer les bibliothèques nécessaires et charger l’ensemble de données Fashion MNIST contenant une collection d’images de mode. Nous utiliserons cet ensemble de données pour entraîner notre modèle d'IA afin de générer de nouvelles images de mode.

# Install required packages (only need to do this once)
!pip install tensorflow tensorflow-gpu matplotlib tensorflow-datasets ipywidgets
!pip list

# Import necessary libraries
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, Dense, Flatten, Reshape, LeakyReLU, Dropout, UpSampling2D
import tensorflow_datasets as tfds
from matplotlib import pyplot as plt

# Configure TensorFlow to use GPU for faster computation
gpus = tf.config.experimental.list_physical_devices('GPU')
for gpu in gpus:
    tf.config.experimental.set_memory_growth(gpu, True)

# Load the Fashion MNIST dataset
ds = tfds.load('fashion_mnist', split='train')
Visualisez les données et créez des ensembles de données

Ensuite, nous visualiserons des exemples d’images de l’ensemble de données Fashion MNIST et préparerons le pipeline de données. Nous effectuerons la transformation des données et créerons des lots d'images pour entraîner le GAN.

# Data Transformation: Scale and Vizualize Images
import numpy as np

# Setup data iterator
dataiterator = ds.as_numpy_iterator()

# Visualize some images from the dataset
fig, ax = plt.subplots(ncols=4, figsize=(20, 20))

# Loop four times and get images
for idx in range(4):
    # Grab an image and its label
    sample = dataiterator.next()
    image = np.squeeze(sample['image'])  # Remove the single-dimensional entries
    label = sample['label']

    # Plot the image using a specific subplot
    ax[idx].imshow(image)
    ax[idx].title.set_text(label)

# Data Preprocessing: Scale and Batch the Images
def scale_images(data):
    # Scale the pixel values of the images between 0 and 1
    image = data['image']
    return image / 255.0

# Reload the dataset
ds = tfds.load('fashion_mnist', split='train')

# Apply the scale_images preprocessing step to the dataset
ds = ds.map(scale_images)

# Cache the dataset for faster processing during training
ds = ds.cache()

# Shuffle the dataset to add randomness to the training process
ds = ds.shuffle(60000)

# Batch the dataset into smaller groups (128 images per batch)
ds = ds.batch(128)

# Prefetch the dataset to improve performance during training
ds = ds.prefetch(64)

# Check the shape of a batch of images
ds.as_numpy_iterator().next().shape

Dans cette étape, nous utilisons d'abord la bibliothèque matplotlib pour visualiser quatre images de mode aléatoires à partir de l'ensemble de données. Cela nous aide à comprendre à quoi ressemble l’image et ce que nous voulons que notre modèle d’IA apprenne.

Après avoir visualisé les images, nous effectuons un prétraitement des données. Nous mettons à l'échelle les valeurs de pixels de l'image entre 0 et 1, ce qui aide le modèle d'IA à mieux apprendre. Pensez-y comme à ajuster la luminosité d’une image en fonction de l’apprentissage.

Ensuite, nous regroupons les images en groupes de 128 (un lot) pour entraîner notre modèle d'IA. Considérez le traitement par lots comme la division d'une tâche volumineuse en morceaux plus petits et gérables.

Nous avons également mélangé l'ensemble de données pour ajouter un peu de caractère aléatoire afin que le modèle d'IA n'apprenne pas les images dans un ordre fixe.

Enfin, nous pré-récupérons les données pour préparer le modèle d'IA au processus d'apprentissage, le rendant ainsi plus rapide et plus efficace.

fc0af92c6c8f894c3fdb3e2613a067dc.jpeg

A la fin de cette étape, nous avons visualisé quelques images de mode et notre ensemble de données est prêt et organisé pour entraîner le modèle d'IA. Nous sommes désormais prêts à passer à l’étape suivante : construire un réseau neuronal générant de nouvelles images de mode.

Générateur de construction

Le générateur est très important pour GAN, il est responsable de la création de nouvelles images élégantes. Nous utiliserons l'API séquentielle de TensorFlow pour concevoir le générateur, qui comprend des couches telles que Dense, LeakyReLU, Reshape et Conv2DTranspose.

# Import the Sequential API for building models
from tensorflow.keras.models import Sequential

# Import the layers required for the neural network
from tensorflow.keras.layers import (
    Conv2D, Dense, Flatten, Reshape, LeakyReLU, Dropout, UpSampling2D
)
def build_generator():
    model = Sequential()

    # First layer takes random noise and reshapes it to 7x7x128
    # This is the beginning of the generated image
    model.add(Dense(7 * 7 * 128, input_dim=128))
    model.add(LeakyReLU(0.2))
    model.add(Reshape((7, 7, 128)))

    # Upsampling block 1
    model.add(UpSampling2D())
    model.add(Conv2D(128, 5, padding='same'))
    model.add(LeakyReLU(0.2))

    # Upsampling block 2
    model.add(UpSampling2D())
    model.add(Conv2D(128, 5, padding='same'))
    model.add(LeakyReLU(0.2))

    # Convolutional block 1
    model.add(Conv2D(128, 4, padding='same'))
    model.add(LeakyReLU(0.2))

    # Convolutional block 2
    model.add(Conv2D(128, 4, padding='same'))
    model.add(LeakyReLU(0.2))

    # Convolutional layer to get to one channel
    model.add(Conv2D(1, 4, padding='same', activation='sigmoid'))

    return model

# Build the generator model
generator = build_generator()
# Display the model summary
generator.summary()

Le générateur est un réseau neuronal profond chargé de générer de fausses images de mode. Il prend du bruit aléatoire en entrée et sa sortie est une image en niveaux de gris 28×28 qui ressemble à un article de mode. Le but est d'apprendre à générer des images qui ressemblent à de vrais articles de mode.

Plusieurs niveaux du modèle

Le modèle se compose de plusieurs couches :

  1. Couche entièrement connectée (couche dense) : la première couche reçoit un bruit aléatoire de taille 128 et le redimensionne en un tenseur 7x7x128. Cela crée la structure initiale à partir de laquelle l'image est générée.

  2. Blocs de suréchantillonnage : ces blocs augmentent progressivement la résolution de l'image à l'aide de couches UpSampling2D, suivies de couches convolutives et de fonctions d'activation LeakyReLU. La couche UpSampling2D double la résolution de l'image en deux dimensions.

  3. Blocs convolutifs : ces blocs améliorent encore l'image générée. Ils sont constitués de couches convolutives avec fonction d'activation LeakyReLU.

  4. Couche convolutive : la couche convolutive finale réduit les canaux à un seul, créant ainsi une image de sortie avec une fonction d'activation sigmoïde pour mettre à l'échelle les valeurs de pixels entre 0 et 1.

6360b24970d9607295933c92a88dadd6.jpeg

A la fin de cette étape, nous disposerons d’un modèle générateur capable de générer de fausses images de mode. Le modèle est maintenant prêt à être entraîné aux étapes suivantes du processus.

530a11600d322af830ec8e1137b61e3d.jpeg
Construire le discriminateur

Commencez par les concepts de base des réseaux contradictoires génératifs (GAN) et plongez progressivement dans les complexités de la génération d'images de mode. À travers des projets concrets et des instructions étape par étape, nous vous guiderons dans la création et la formation de votre propre modèle GAN à l'aide de TensorFlow et Keras.

Le discriminateur joue un rôle clé en distinguant les images réelles des fausses images. Nous concevrons le discriminateur à l'aide de l'API séquentielle de TensorFlow, qui comprend des couches telles que Conv2D, LeakyReLU, Dropout et Dense.

def build_discriminator():
    model = Sequential()

    # First Convolutional Block
    model.add(Conv2D(32, 5, input_shape=(28, 28, 1)))
    model.add(LeakyReLU(0.2))
    model.add(Dropout(0.4))

    # Second Convolutional Block
    model.add(Conv2D(64, 5))
    model.add(LeakyReLU(0.2))
    model.add(Dropout(0.4))

    # Third Convolutional Block
    model.add(Conv2D(128, 5))
    model.add(LeakyReLU(0.2))
    model.add(Dropout(0.4))

    # Fourth Convolutional Block
    model.add(Conv2D(256, 5))
    model.add(LeakyReLU(0.2))
    model.add(Dropout(0.4))

    # Flatten the output and pass it through a dense layer
    model.add(Flatten())
    model.add(Dropout(0.4))
    model.add(Dense(1, activation='sigmoid'))

    return model

# Build the discriminator model
discriminator = build_discriminator()
# Display the model summary
discriminator.summary()

Le discriminateur est également un réseau neuronal profond qui détermine si l'image d'entrée est réelle ou fausse. Il prend une image en niveaux de gris 28 × 28 et génère une valeur binaire (1 pour vrai, 0 pour faux).

Le modèle se compose de plusieurs couches :

  1. Blocs convolutifs : ces blocs traitent l'image d'entrée à l'aide de couches convolutives, suivies de couches d'activation et d'abandon de LeakyReLU. La couche d'abandon empêche le surapprentissage en supprimant de manière aléatoire certains neurones pendant l'entraînement.

  2. Aplatissement et couches denses : la sortie du dernier bloc convolutif est aplatie en un vecteur 1D et passée à travers une couche dense avec activation sigmoïde. L'activation sigmoïde compresse la sortie entre 0 et 1, indiquant la probabilité que l'image soit une image réelle.

f7c5dc313c846eb0945441642fd865e8.jpeg

A la fin de cette étape, nous disposerons d'un modèle discriminateur capable de classer si l'image d'entrée est réelle ou fausse. Le modèle est maintenant prêt à être intégré à l'architecture GAN et formé dans les étapes suivantes.

Construire une boucle de formation

Mettre en place des pertes et des optimiseurs

Avant de construire la boucle de formation, nous devons définir la fonction de perte et l'optimiseur pour former le générateur et le discriminateur.

# Import the Adam optimizer and Binary Cross Entropy loss function
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.losses import BinaryCrossentropy

# Define the optimizers for the generator and discriminator
g_opt = Adam(learning_rate=0.0001)  # Generator optimizer
d_opt = Adam(learning_rate=0.00001)  # Discriminator optimizer

# Define the loss functions for the generator and discriminator
g_loss = BinaryCrossentropy()  # Generator loss function
d_loss = BinaryCrossentropy()  # Discriminator loss function
  • Nous utilisons l'optimiseur Adam pour le générateur et le discriminateur. Adam est un algorithme d'optimisation efficace qui ajuste le taux d'apprentissage pendant la formation.

  • Pour la fonction de perte, nous utilisons l'entropie croisée binaire. Cette fonction de perte est couramment utilisée dans les problèmes de classification binaire et convient à la tâche de classification binaire de notre discriminateur (réel vs faux).

Construire un modèle de sous-classe

Ensuite, nous créerons un modèle de sous-classe qui combine les modèles générateur et discriminateur en un seul modèle GAN. Ce modèle de sous-classe entraînera le GAN dans la boucle de formation.

from tensorflow.keras.models import Model

class FashionGAN(Model):
    def __init__(self, generator, discriminator, *args, **kwargs):
        # Pass through args and kwargs to the base class
        super().__init__(*args, **kwargs)

        # Create attributes for generator and discriminator models
        self.generator = generator
        self.discriminator = discriminator

    def compile(self, g_opt, d_opt, g_loss, d_loss, *args, **kwargs):
        # Compile with the base class
        super().compile(*args, **kwargs)

        # Create attributes for optimizers and loss functions
        self.g_opt = g_opt
        self.d_opt = d_opt
        self.g_loss = g_loss
        self.d_loss = d_loss

    def train_step(self, batch):
        # Get the data for real images
        real_images = batch
        # Generate fake images using the generator with random noise as input
        fake_images = self.generator(tf.random.normal((128, 128, 1)), training=False)

        # Train the discriminator
        with tf.GradientTape() as d_tape:
            # Pass real and fake images through the discriminator model
            yhat_real = self.discriminator(real_images, training=True)
            yhat_fake = self.discriminator(fake_images, training=True)
            yhat_realfake = tf.concat([yhat_real, yhat_fake], axis=0)

            # Create labels for real and fake images
            y_realfake = tf.concat([tf.zeros_like(yhat_real), tf.ones_like(yhat_fake)], axis=0)

            # Add some noise to the true outputs to make training more robust
            noise_real = 0.15 * tf.random.uniform(tf.shape(yhat_real))
            noise_fake = -0.15 * tf.random.uniform(tf.shape(yhat_fake))
            y_realfake += tf.concat([noise_real, noise_fake], axis=0)

            # Calculate the total discriminator loss
            total_d_loss = self.d_loss(y_realfake, yhat_realfake)

        # Apply backpropagation and update discriminator weights
        dgrad = d_tape.gradient(total_d_loss, self.discriminator.trainable_variables)
        self.d_opt.apply_gradients(zip(dgrad, self.discriminator.trainable_variables))

        # Train the generator
        with tf.GradientTape() as g_tape:
            # Generate new images using the generator with random noise as input
            gen_images = self.generator(tf.random.normal((128, 128, 1)), training=True)

            # Create the predicted labels (should be close to 1 as they are fake images)
            predicted_labels = self.discriminator(gen_images, training=False)

            # Calculate the total generator loss (tricking the discriminator to classify the fake images as real)
            total_g_loss = self.g_loss(tf.zeros_like(predicted_labels), predicted_labels)

        # Apply backpropagation and update generator weights
        ggrad = g_tape.gradient(total_g_loss, self.generator.trainable_variables)
        self.g_opt.apply_gradients(zip(ggrad, self.generator.trainable_variables))

        return {"d_loss": total_d_loss, "g_loss": total_g_loss}

# Create an instance of the FashionGAN model
fashgan = FashionGAN(generator, discriminator)

# Compile the model with the optimizers and loss functions
fashgan.compile(g_opt, d_opt, g_loss, d_loss)
  • Nous créons un modèle de sous-classe FashionGAN étendant la classe tf.keras.models.Model. Cette sous-classe de modèle gérera le processus de formation du GAN.

  • Dans la méthode train_step, nous définissons la boucle de formation GAN :

  • Nous prenons d’abord de vraies images du lot et générons de fausses images à l’aide d’un modèle générateur avec du bruit aléatoire en entrée.

  • Ensuite, nous formons le discriminateur :

    • Nous utilisons des bandes de gradient pour calculer la perte du discriminateur par rapport aux images réelles et fausses. Le but est que le discriminateur classe les images réelles à 1 et les fausses images à 0.

    • Nous ajoutons du bruit à la sortie réelle pour rendre la formation plus robuste et moins sujette au surajustement.

    • La perte totale du discriminateur est calculée comme l'entropie croisée binaire entre les étiquettes prédites et cibles.

    • Nous appliquons la rétropropagation pour mettre à jour les poids du discriminateur en fonction de la perte calculée.

  • Ensuite, nous formons le générateur :

    • Nous utilisons un générateur pour générer de nouvelles fausses images avec du bruit aléatoire en entrée.

    • Nous calculons la perte totale du générateur comme l'entropie croisée binaire entre l'étiquette prédite (image générée) et l'étiquette cible (0, représentant la fausse image).

    • Le but du générateur est de « tromper » le discriminateur en générant des images que le discriminateur classe comme réelles (étiquette proche de 1).

    • Nous appliquons la rétropropagation pour mettre à jour les poids du générateur en fonction de la perte calculée.

  • Enfin, nous restituons la perte totale du discriminateur et du générateur pour cette étape de formation.

Le modèle FashionGAN est maintenant prêt à être entraîné à l'aide de l'ensemble de données d'entraînement lors de l'étape suivante.

Construire une fonction de rappel

Les rappels dans TensorFlow sont des fonctions qui peuvent être exécutées à des moments spécifiques de l'entraînement (comme la fin d'une époque). Nous allons créer un rappel personnalisé appelé ModelMonitor pour générer et enregistrer une image à la fin de chaque époque afin de surveiller la progression du GAN.

import os
from tensorflow.keras.preprocessing.image import array_to_img
from tensorflow.keras.callbacks import Callback

class ModelMonitor(Callback):
    def __init__(self, num_img=3, latent_dim=128):
        self.num_img = num_img
        self.latent_dim = latent_dim

    def on_epoch_end(self, epoch, logs=None):
        # Generate random latent vectors as input to the generator
        random_latent_vectors = tf.random.uniform((self.num_img, self.latent_dim, 1))
        # Generate fake images using the generator
        generated_images = self.model.generator(random_latent_vectors)
        generated_images *= 255
        generated_images.numpy()
        for i in range(self.num_img):
            # Save the generated images to disk
            img = array_to_img(generated_images[i])
            img.save(os.path.join('images', f'generated_img_{epoch}_{i}.png'))
  • Le rappel ModelMonitor prend deux paramètres : num_img (spécifie le nombre d'images à générer et à enregistrer à la fin de chaque époque) et Latent_dim (la dimension du vecteur de bruit aléatoire utilisé comme entrée du générateur).

  • Pendant la méthode on_epoch_end, le rappel génère des vecteurs latents aléatoires num_img et les transmet en entrée au générateur. Le générateur génère ensuite de fausses images basées sur ces vecteurs aléatoires.

  • L'image résultante est mise à l'échelle dans la plage 0-255 et enregistrée sous forme de fichier PNG dans le répertoire « images ». Le nom du fichier inclut le numéro d’époque pour suivre la progression au fil du temps.

Formation GAN

Maintenant que nous avons configuré le modèle GAN et les rappels personnalisés, nous pouvons démarrer le processus de formation en utilisant la méthode fit. Nous entraînerons le GAN pendant suffisamment d'époques pour que le générateur et le discriminateur puissent converger et apprendre les uns des autres.

# Train the GAN model
hist = fashgan.fit(ds, epochs=20, callbacks=[ModelMonitor()])
  • Nous utilisons la méthode d'ajustement du modèle FashionGAN pour entraîner le GAN.

  • Nous fixons le nombre d'époques à 20 (vous aurez peut-être besoin de plus d'époques pour obtenir de meilleurs résultats).

  • Nous sauvegardons l'image générée à la fin de chaque époque via le rappel ModelMonitor.

  • Le processus de formation parcourra l'ensemble de données et, pour chaque lot, il mettra à jour les poids des modèles générateur et discriminateur en utilisant la boucle de formation précédemment définie.

Le processus de formation peut prendre un certain temps, en fonction de votre matériel et du nombre d'époques. Après la formation, nous pouvons examiner les performances du GAN en traçant les pertes du discriminateur et du générateur. Cela nous aidera à comprendre dans quelle mesure le modèle s'entraîne et s'il existe des signes de convergence ou d'effondrement des modes. Passons à l'étape suivante et vérifions les performances du GAN.

Vérifier les performances et tester les générateurs

Examiner les performances

Après avoir entraîné un GAN, nous pouvons examiner ses performances en traçant la perte du discriminateur et du générateur au cours des époques d'entraînement. Cela nous aidera à comprendre dans quelle mesure le GAN apprend et s'il y a des problèmes tels qu'un effondrement de mode ou une formation instable.

import matplotlib.pyplot as plt

# Plot the discriminator and generator losses
plt.suptitle('Loss')
plt.plot(hist.history['d_loss'], label='d_loss')
plt.plot(hist.history['g_loss'], label='g_loss')
plt.legend()
plt.show()
  • Nous utilisons matplotlib pour tracer les pertes du discriminateur et du générateur pendant les époques d'entraînement.

  • L'axe des x représente le numéro de l'époque et l'axe des y représente la perte correspondante.

  • Idéalement, au fur et à mesure que le GAN apprend, la perte du discriminateur (d_loss) et la perte du générateur (g_loss) devraient diminuer progressivement.

e3ddad43a022cc2a12640da7fe171b40.jpeg
générateur de tests

Après avoir entraîné le GAN et vérifié ses performances, nous pouvons tester le générateur en générant et en visualisant de nouvelles images de mode. Tout d’abord, nous allons charger les poids du générateur entraîné et l’utiliser pour générer de nouvelles images.

# Load the weights of the trained generator
generator.load_weights('generator.h5')

# Generate new fashion images
imgs = generator.predict(tf.random.normal((16, 128, 1)))

# Plot the generated images
fig, ax = plt.subplots(ncols=4, nrows=4, figsize=(10, 10))
for r in range(4):
    for c in range(4):
        ax[r][c].imshow(imgs[(r + 1) * (c + 1) - 1])
  • Nous utilisons Generator.load_weights('generator.h5') pour charger les poids du générateur entraîné à partir du fichier enregistré.

  • Nous générons de nouvelles images de mode en transmettant des vecteurs latents aléatoires au générateur. Le générateur interprète ces vecteurs aléatoires et génère les images correspondantes.

  • Nous utilisons matplotlib pour afficher les images résultantes dans une grille 4×4.

5d507ca2132fe27fce30a0619a398b3c.jpeg
Enregistrer le modèle

Enfin, si vous êtes satisfait des performances du GAN, vous pouvez enregistrer les modèles de générateur et de discriminateur pour une utilisation future.

# Save the generator and discriminator models
generator.save('generator.h5')
discriminator.save('discriminator.h5')
  • Nous utilisons la méthode save pour sauvegarder les modèles de générateur et de discriminateur sur le disque.

  • Les modèles seront enregistrés dans le répertoire de travail actuel sous les noms de fichiers "generator.h5" et "discriminator.h5" respectivement.

  • L'enregistrement des modèles vous permet de les utiliser plus tard pour générer des images plus élégantes ou poursuivre le processus de formation.

Ceci conclut le processus de création et de formation d'un GAN pour générer des images élégantes à l'aide de TensorFlow et Keras ! Les GAN sont des modèles puissants pour générer des données du monde réel et peuvent être appliqués à d'autres tâches.

Gardez à l'esprit que la qualité des images générées dépend de l'architecture du GAN, du nombre d'époques de formation, de la taille de l'ensemble de données et d'autres hyperparamètres. N'hésitez pas à expérimenter et à affiner le GAN pour obtenir de meilleurs résultats.

Autres améliorations et orientations futures

Félicitations pour avoir terminé le GAN pour générer des images de mode ! Explorons maintenant d'autres améliorations et orientations futures que vous pouvez envisager pour améliorer les performances des GAN et générer des images de mode plus réalistes et plus diversifiées.

Réglage des hyperparamètres

Le réglage des hyperparamètres peut affecter considérablement les performances des GAN. Expérimentez avec différents taux d'apprentissage, tailles de lots, nombre d'époques de formation et configurations architecturales du générateur et du discriminateur. Le réglage des hyperparamètres est crucial pour la formation GAN car il peut conduire à une meilleure convergence et à des résultats plus stables.

Utiliser la croissance incrémentielle

La technique de croissance progressive commence à entraîner le GAN à l’aide d’images basse résolution et augmente progressivement la résolution de l’image au cours du processus de formation. Cette approche permet de stabiliser la formation et de produire des images de meilleure qualité. La mise en œuvre d’une croissance progressive peut s’avérer plus complexe, mais conduit souvent à de meilleurs résultats.

Implémentation du Wasserstein GAN (WGAN)

Envisagez d'utiliser Wasserstein GAN (WGAN) avec pénalité de gradient au lieu de la perte GAN standard. WGAN peut fournir un entraînement plus stable et de meilleurs gradients lors de l'optimisation. Cela améliore la convergence et réduit l’effondrement des modes.

augmentation des données

Appliquez des techniques d’augmentation des données à l’ensemble de données d’entraînement. Cela peut inclure des rotations aléatoires, des retournements, des traductions et d'autres transformations. L'augmentation des données aide les GAN à mieux généraliser et évite le surajustement de l'ensemble de formation.

Inclure les informations sur l'étiquette

Si votre ensemble de données contient des informations sur l'étiquette (par exemple, la catégorie de vêtements), vous pouvez essayer d'ajuster le GAN en fonction des informations sur l'étiquette pendant l'entraînement. Cela signifie fournir au générateur et au discriminateur des informations supplémentaires sur les types de vêtements, ce qui peut aider le GAN à générer davantage d'images de mode d'une catégorie spécifique.

Utilisez un discriminateur pré-formé

L'utilisation de discriminateurs pré-entraînés permet d'accélérer la formation et de stabiliser les GAN. Vous pouvez utiliser indépendamment l'ensemble de données de mode MNIST pour former un discriminateur sur une tâche de classification, puis utiliser ce discriminateur pré-entraîné comme point de départ pour la formation GAN.

Collectez des ensembles de données plus volumineux et plus diversifiés

Les GAN fonctionnent généralement mieux sur des ensembles de données plus grands et plus diversifiés. Envisagez de collecter ou d'utiliser un ensemble de données plus vaste comprenant une plus grande variété de styles, de couleurs et de motifs de mode. Un ensemble de données plus diversifié produit des images plus diversifiées et réalistes.

Explorez différentes architectures

Essayez différentes architectures de générateur et de discriminateur. Il existe de nombreuses variantes de GAN, telles que DCGAN (Deep Convolutional GAN), CGAN (Conditional GAN) et StyleGAN. Chaque architecture a ses avantages et ses inconvénients, et essayer différents modèles peut fournir des informations précieuses sur ce qui fonctionne le mieux pour vos tâches spécifiques.

Utiliser l'apprentissage par transfert

Si vous avez accès à des modèles GAN pré-entraînés, vous pouvez les utiliser comme point de départ pour les GAN de mode. Le réglage fin des GAN pré-entraînés peut économiser du temps et des ressources informatiques tout en obtenant de bons résultats.

Crash du mode moniteur

L'effondrement du mode se produit lorsqu'un générateur ne produit que quelques types d'images. Observez les échantillons générés pour détecter les signes d'effondrement du modèle et ajustez le processus de formation si nécessaire.

Construire et former un GAN est un processus itératif, et obtenir des résultats impressionnants nécessite souvent des expérimentations et des ajustements. Continuez à explorer, à apprendre et à peaufiner votre GAN pour générer de meilleures images de mode !

Ceci conclut notre parcours de création d'une image GAN élégante à l'aide de TensorFlow et Keras. N'hésitez pas à explorer d'autres applications GAN telles que l'art génératif, les visages ou les objets 3D. Les GAN ont révolutionné le domaine de la modélisation générative et continuent d'être un domaine de recherche et de développement passionnant pour la communauté de l'intelligence artificielle. Bonne chance avec vos futurs projets GAN !

en conclusion

En résumé, les Generative Adversarial Networks (GAN) représentent une technologie de pointe dans le domaine de l’intelligence artificielle qui révolutionne la création d’échantillons de données synthétiques. Avec ce guide, nous avons acquis une compréhension approfondie des GAN et construit avec succès un projet extraordinaire : un GAN pour la génération d'images de mode.

point clé
  1. GAN : GAN se compose de deux réseaux de neurones (générateur et discriminateur) qui utilisent un entraînement contradictoire pour créer de vrais échantillons de données.

  2. Objectif du projet : Notre objectif est de développer un GAN capable de générer des images similaires à celles du jeu de données mode MNIST.

  3. Ensemble de données : L'ensemble de données mode MNIST contient des images en niveaux de gris d'articles de mode et constitue la base de notre générateur d'images de mode.

  4. Construction du GAN : Nous avons utilisé l'API séquentielle de TensorFlow pour créer le générateur et le discriminateur, combinant les couches Dense, Conv2D et LeakyReLU.

  5. Boucle de formation GAN : nous utilisons une boucle de formation soigneusement conçue pour optimiser de manière itérative le générateur et le discriminateur.

  6. Améliorations : nous avons exploré plusieurs techniques pour améliorer les performances du GAN, notamment le réglage des hyperparamètres, la croissance progressive, les GAN de Wasserstein, l'augmentation des données et les GAN conditionnels.

  7. Évaluation : Nous discutons des mesures d'évaluation telles que Inception Score et FID pour évaluer objectivement la qualité des images de mode générées.

  8. Affinement et apprentissage par transfert : en affinant le générateur et en tirant parti des modèles pré-entraînés, nous visons à parvenir à une génération d'images de mode plus diversifiées et plus réalistes.

  9. Orientations futures : il existe d'innombrables opportunités d'amélioration et de recherche sur les GAN, notamment l'optimisation des hyperparamètres, la croissance progressive, les GAN de Wasserstein, et bien plus encore.

En résumé, ce guide complet fournit une base solide pour comprendre les GAN, les complexités de leur formation et comment les appliquer à la génération d'images de mode. Nous démontrons le potentiel de création de données artificielles complexes et réalistes en explorant diverses technologies et avancées. À mesure que les GAN se développent, ils devraient transformer diverses industries, notamment l’art, le design, la santé, etc. Adopter le pouvoir d’innovation des GAN et explorer leurs possibilités infinies est passionnant et façonnera sans aucun doute l’avenir de l’intelligence artificielle.

Problème commun

Q1 : Que sont les GAN et comment fonctionnent-ils ?

A1. GAN (Generative Adversarial Network) est un type de modèle d'intelligence artificielle composé de deux réseaux de neurones (générateur et discriminateur). Le but du générateur est de produire des échantillons de données réelles, tandis que la tâche du discriminateur est de faire la distinction entre les données réelles et les données synthétiques générées par le générateur. Les deux réseaux participent à un processus de formation contradictoire, apprenant mutuellement des erreurs de chacun, permettant au générateur d'améliorer sa capacité à créer des données plus réalistes au fil du temps.

Q2. Comment évaluez-vous la qualité des données générées par le GAN ?

A2. L'évaluation de la qualité des données générées par les GAN peut être difficile. Deux indicateurs standards sont :

  • Inception score (IS) : mesure la qualité et la diversité des images générées.

  • Fréchet Inception Distance (FID) : quantifie la similarité entre les données générées et la distribution réelle des données.

Q3. Quels sont les défis du GAN ?

A3. La formation GAN peut être instable et difficile pour les raisons suivantes :

  • Effondrement des modes : Le générateur peut produire des variations limitées, en se concentrant sur quelques modes de la distribution cible.

  • Vanishing Gradient : Lorsque le générateur et le discriminateur diffèrent trop, le gradient peut disparaître, gênant l'apprentissage.

  • Sensibilité des hyperparamètres : le réglage fin des hyperparamètres est essentiel, de petits changements peuvent affecter considérablement les résultats.

Q4. Le GAN peut-il être utilisé pour la confidentialité ou l'amélioration des données ?

R4 : Oui, les GAN peuvent générer des données synthétiques pour augmenter les ensembles de données, réduisant ainsi le besoin de grandes quantités de données précises. Les données générées par les GAN peuvent également préserver la confidentialité en fournissant des alternatives synthétiques aux données sensibles.

☆ FIN ☆

Si vous voyez ceci, cela signifie que vous aimez cet article, merci de le transmettre et de l'aimer. Recherchez "uncle_pn" sur WeChat. Bienvenue pour ajouter le "woshicver" WeChat de l'éditeur. Un article de blog de haute qualité sera mis à jour quotidiennement dans le cercle d'amis.

Scannez le code QR pour ajouter un éditeur↓

21afffadeb8d5f6e12f68c6bc479f3a3.jpeg

Je suppose que tu aimes

Origine blog.csdn.net/woshicver/article/details/132867666
conseillé
Classement