Table des matières
1. Préparez l'environnement
2. Modèle de réseau
3. Perte
4. Formation
Maison Périphériques technologiques IA Réseau contradictoire génératif, l'IA transforme les images en style bande dessinée

Réseau contradictoire génératif, l'IA transforme les images en style bande dessinée

Apr 11, 2023 pm 09:58 PM
图片 ai gan

Bonjour à tous.

Tout le monde joue avec la peinture IA récemment. J'ai trouvé un projet open source sur GitHub à partager avec vous.

Réseau contradictoire génératif, lIA transforme les images en style bande dessinée

Le projet partagé aujourd'hui est mis en œuvre à l'aide du GAN​ Generative Adversarial Network. Nous avons déjà partagé de nombreux articles sur les principes et la pratique du GAN. Les amis qui souhaitent en savoir plus peuvent lire des articles historiques.

Le code source et l'ensemble de données sont disponibles à la fin de l'article. Partageons comment former et exécuter le projet.

1. Préparez l'environnement

Installez tensorflow-gpu 1.15.0​, utilisez 2080Ti​ comme carte graphique GPU et cuda version 10.0.

Téléchargez le code source du projet AnimeGANv2 depuis git.

Après avoir configuré l'environnement, vous devez encore préparer l'ensemble de données et vgg19.

Réseau contradictoire génératif, lIA transforme les images en style bande dessinée

Téléchargez le fichier compressé dataset.zip, qui contient 6 000 images réelles et 2 000 images de bandes dessinées pour la formation GAN.

Réseau contradictoire génératif, lIA transforme les images en style bande dessinée

vgg19 est utilisé pour calculer la perte, qui sera présentée en détail ci-dessous.

2. Modèle de réseau

Le réseau antagoniste génératif doit définir deux modèles, l'un est le générateur et l'autre est le discriminateur.

Le réseau générateur est défini comme suit :

with tf.variable_scope('A'):
inputs = Conv2DNormLReLU(inputs, 32, 7)
inputs = Conv2DNormLReLU(inputs, 64, strides=2)
inputs = Conv2DNormLReLU(inputs, 64)

with tf.variable_scope('B'):
inputs = Conv2DNormLReLU(inputs, 128, strides=2)
inputs = Conv2DNormLReLU(inputs, 128)

with tf.variable_scope('C'):
inputs = Conv2DNormLReLU(inputs, 128)
inputs = self.InvertedRes_block(inputs, 2, 256, 1, 'r1')
inputs = self.InvertedRes_block(inputs, 2, 256, 1, 'r2')
inputs = self.InvertedRes_block(inputs, 2, 256, 1, 'r3')
inputs = self.InvertedRes_block(inputs, 2, 256, 1, 'r4')
inputs = Conv2DNormLReLU(inputs, 128)

with tf.variable_scope('D'):
inputs = Unsample(inputs, 128)
inputs = Conv2DNormLReLU(inputs, 128)

with tf.variable_scope('E'):
inputs = Unsample(inputs,64)
inputs = Conv2DNormLReLU(inputs, 64)
inputs = Conv2DNormLReLU(inputs, 32, 7)
with tf.variable_scope('out_layer'):
out = Conv2D(inputs, filters =3, kernel_size=1, strides=1)
self.fake = tf.tanh(out)
Copier après la connexion

Le module principal du générateur est le bloc résiduel inverse

Réseau contradictoire génératif, lIA transforme les images en style bande dessinée

La structure résiduelle (a) et le bloc résiduel inverse (b)

La structure du réseau discriminateur est comme suit :

def D_net(x_init,ch, n_dis,sn, scope, reuse):
channel = ch // 2
with tf.variable_scope(scope, reuse=reuse):
x = conv(x_init, channel, kernel=3, stride=1, pad=1, use_bias=False, sn=sn, scope='conv_0')
x = lrelu(x, 0.2)

for i in range(1, n_dis):
x = conv(x, channel * 2, kernel=3, stride=2, pad=1, use_bias=False, sn=sn, scope='conv_s2_' + str(i))
x = lrelu(x, 0.2)

x = conv(x, channel * 4, kernel=3, stride=1, pad=1, use_bias=False, sn=sn, scope='conv_s1_' + str(i))
x = layer_norm(x, scope='1_norm_' + str(i))
x = lrelu(x, 0.2)

channel = channel * 2

x = conv(x, channel * 2, kernel=3, stride=1, pad=1, use_bias=False, sn=sn, scope='last_conv')
x = layer_norm(x, scope='2_ins_norm')
x = lrelu(x, 0.2)

x = conv(x, channels=1, kernel=3, stride=1, pad=1, use_bias=False, sn=sn, scope='D_logit')

return x
Copier après la connexion

3. Perte

Avant de calculer la perte, l'image est vectorisée grâce au réseau VGG19. Ce processus est un peu comme l’opération Embedding en PNL.

Eembedding​ consiste à convertir des mots en vecteurs, et VGG19 consiste à convertir des images en vecteurs.

Réseau contradictoire génératif, lIA transforme les images en style bande dessinée

Définition VGG19

La logique de calcul de la partie perte est la suivante :

def con_sty_loss(vgg, real, anime, fake):

# 真实Réseau contradictoire génératif, lIA transforme les images en style bande dessinée向量化
vgg.build(real)
real_feature_map = vgg.conv4_4_no_activation

# 生成Réseau contradictoire génératif, lIA transforme les images en style bande dessinée向量化
vgg.build(fake)
fake_feature_map = vgg.conv4_4_no_activation

# 漫画风格向量化
vgg.build(anime[:fake_feature_map.shape[0]])
anime_feature_map = vgg.conv4_4_no_activation

# 真实Réseau contradictoire génératif, lIA transforme les images en style bande dessinée与生成Réseau contradictoire génératif, lIA transforme les images en style bande dessinée的损失
c_loss = L1_loss(real_feature_map, fake_feature_map)
# 漫画风格与生成Réseau contradictoire génératif, lIA transforme les images en style bande dessinée的损失
s_loss = style_loss(anime_feature_map, fake_feature_map)

return c_loss, s_loss
Copier après la connexion

Ici, vgg19 est utilisé pour calculer respectivement la perte de l'image réelle (paramètre réel) et de l'image générée (paramètre faux). L'image générée (paramètre faux) et perte du style bande dessinée (paramètre anime).

c_loss, s_loss = con_sty_loss(self.vgg, self.real, self.anime_gray, self.generated)
t_loss = self.con_weight * c_loss + self.sty_weight * s_loss + color_loss(self.real,self.generated) * self.color_weight + tv_loss
Copier après la connexion

Enfin, donnez des poids différents à ces deux pertes, afin que les images générées par le générateur conservent non seulement l'apparence des images réelles, mais migrent également vers le style bande dessinée

4. Formation

Exécutez la commande suivante dans le fichier. répertoire du projet Après avoir démarré la formation

python train.py --dataset Hayao --epoch 101 --init_epoch 10
Copier après la connexion

et exécutée avec succès, vous pouvez voir les données.

Réseau contradictoire génératif, lIA transforme les images en style bande dessinée

En même temps, on constate aussi que les pertes diminuent.

Le code source et l'ensemble de données ont été empaquetés. Si vous en avez besoin, laissez simplement un message dans la zone de commentaires.

Si vous pensez que cet article vous est utile, cliquez et lisez pour m'encourager. Je continuerai à partager d'excellents projets Python+AI à l'avenir.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment ajouter une nouvelle colonne dans SQL Comment ajouter une nouvelle colonne dans SQL Apr 09, 2025 pm 02:09 PM

Ajoutez de nouvelles colonnes à une table existante dans SQL en utilisant l'instruction ALTER TABLE. Les étapes spécifiques comprennent: la détermination des informations du nom de la table et de la colonne, rédaction des instructions de la table ALTER et exécution des instructions. Par exemple, ajoutez une colonne de messagerie à la table des clients (VARCHAR (50)): Alter Table Clients Ajouter un e-mail VARCHAR (50);

Quelle est la syntaxe pour ajouter des colonnes dans SQL Quelle est la syntaxe pour ajouter des colonnes dans SQL Apr 09, 2025 pm 02:51 PM

La syntaxe pour ajouter des colonnes dans SQL est alter table table_name Ajouter Column_name data_type [pas null] [default default_value]; Lorsque Table_Name est le nom de la table, Column_name est le nouveau nom de colonne, DATA_TYPE est le type de données, et non Null Spécifie si les valeurs NULL sont autorisées, et default default_value spécifie la valeur par défaut.

Tableau Clear SQL: Conseils d'optimisation des performances Tableau Clear SQL: Conseils d'optimisation des performances Apr 09, 2025 pm 02:54 PM

Conseils pour améliorer les performances de compensation de la table SQL: utilisez une table tronquée au lieu de supprimer, libre d'espace et réinitialiser la colonne d'identité. Désactivez les contraintes de clés étrangères pour éviter la suppression en cascade. Utilisez les opérations d'encapsulation des transactions pour assurer la cohérence des données. Supprimer les mégadonnées et limiter le nombre de lignes via Limit. Reconstruisez l'indice après la compensation pour améliorer l'efficacité de la requête.

Comment définir des valeurs par défaut lors de l'ajout de colonnes dans SQL Comment définir des valeurs par défaut lors de l'ajout de colonnes dans SQL Apr 09, 2025 pm 02:45 PM

Définissez la valeur par défaut des colonnes nouvellement ajoutées, utilisez l'instruction ALTER TABLE: Spécifiez des colonnes Ajouter et définissez la valeur par défaut: alter table table_name Ajouter Column_name data_type default_value; Utilisez la clause CONSTRAINT pour spécifier la valeur par défaut: ALTER TABLE TABLE_NAME ADD COLUMN COLUMN_NAME DATA_TYPE CONSTRAINT DEFAULT_CONSTRAINT DEFAULT_VALUE;

Utilisez la déclaration de suppression pour effacer les tables SQL Utilisez la déclaration de suppression pour effacer les tables SQL Apr 09, 2025 pm 03:00 PM

Oui, l'instruction Delete peut être utilisée pour effacer une table SQL, les étapes sont les suivantes: Utilisez l'instruction Delete: Delete de Table_Name; Remplacez Table_Name par le nom de la table à effacer.

Comment gérer la fragmentation de la mémoire redis? Comment gérer la fragmentation de la mémoire redis? Apr 10, 2025 pm 02:24 PM

La fragmentation de la mémoire redis fait référence à l'existence de petites zones libres dans la mémoire allouée qui ne peut pas être réaffectée. Les stratégies d'adaptation comprennent: Redémarrer Redis: effacer complètement la mémoire, mais le service d'interruption. Optimiser les structures de données: utilisez une structure plus adaptée à Redis pour réduire le nombre d'allocations et de versions de mémoire. Ajustez les paramètres de configuration: utilisez la stratégie pour éliminer les paires de valeurs clés les moins récemment utilisées. Utilisez le mécanisme de persistance: sauvegardez régulièrement les données et redémarrez Redis pour nettoyer les fragments. Surveillez l'utilisation de la mémoire: découvrez les problèmes en temps opportun et prenez des mesures.

phpmyadmin crée un tableau de données phpmyadmin crée un tableau de données Apr 10, 2025 pm 11:00 PM

Pour créer un tableau de données à l'aide de PhpMyAdmin, les étapes suivantes sont essentielles: connectez-vous à la base de données et cliquez sur le nouvel onglet. Nommez le tableau et sélectionnez le moteur de stockage (InnODB recommandé). Ajouter les détails de la colonne en cliquant sur le bouton Ajouter une colonne, y compris le nom de la colonne, le type de données, s'il faut autoriser les valeurs nuls et d'autres propriétés. Sélectionnez une ou plusieurs colonnes comme clés principales. Cliquez sur le bouton Enregistrer pour créer des tables et des colonnes.

Comment créer une base de données Oracle Comment créer une base de données Oracle Comment créer une base de données Oracle Comment créer une base de données Oracle Apr 11, 2025 pm 02:33 PM

La création d'une base de données Oracle n'est pas facile, vous devez comprendre le mécanisme sous-jacent. 1. Vous devez comprendre les concepts de la base de données et des SGBD Oracle; 2. Master les concepts de base tels que SID, CDB (base de données de conteneurs), PDB (base de données enfichable); 3. Utilisez SQL * Plus pour créer CDB, puis créer PDB, vous devez spécifier des paramètres tels que la taille, le nombre de fichiers de données et les chemins; 4. Les applications avancées doivent ajuster le jeu de caractères, la mémoire et d'autres paramètres et effectuer un réglage des performances; 5. Faites attention à l'espace disque, aux autorisations et aux paramètres des paramètres, et surveillez et optimisez en continu les performances de la base de données. Ce n'est qu'en le maîtrisant habilement une pratique continue que vous pouvez vraiment comprendre la création et la gestion des bases de données Oracle.

See all articles