Arte neuronal | Art généré par l'IA

Contenu

introduction

L'art a toujours transcendé les éons de l'existence humaine. Nous pouvons voir leurs traces des temps préhistoriques tels que l'art harappéen dans la civilisation de la vallée de l'Indus à l'art contemporain des temps modernes.. Surtout, l'art a été un moyen d'exprimer sa créativité, vues sur la façon dont nous percevons le monde. Comme l'a dit le légendaire Léonard de Vinci,

"La peinture est une poésie qui se voit plus qu'elle ne se sent".

Ce que nous oublions parfois, c'est que la plupart des œuvres d'art suivent un modèle. Un schéma qui nous plaît et fait sens dans notre cerveau. La prochaine fois que je vois un tableau, essayez de remarquer les coups de pinceau dessus. Vous verrez un motif émerger de la peinture. NOUS, comme des êtres humains, nous sommes experts dans la reconnaissance de ces modèles. Nos mécanismes neuronaux ont évolué pour être exceptionnellement cool au fil des ans pour reconnaître les modèles dans la nature..

Maintenant, vous pouvez demander pourquoi je fulmine sur l'art et les motifs. C'est parce que je vais vous montrer comment créer de l'art à l'aide de cerveaux artificiels !! Dans cet article, nous allons construire un réseau de neurones artificiels qui extraira le style d'une image et le reproduira dans l'autre. Alors es-tu prêt?

Table des matières

  • Qu'est-ce que l'art neuronal?
  • Familiarisez-vous avec le nœud
  • Le coder
  • Où aller en partant d'ici?
  • Ressources additionnelles

Qu'est-ce que l'art neuronal?

Essayons de comprendre ce sujet avec un exemple.

la-nuit-étoilée-18891-jpglarge-6178391

La source [1]

L'image ci-dessus est la célèbre “La nuit étoilée” le Vincent Van Gogh. Il suffit de regarder la peinture pendant quelques minutes. Que vois-tu? Remarquez-vous les coups de pinceau? Voyez-vous les courbes et les bords qui définissent chaque objet, ce qui vous permet de les reconnaître si facilement?

Faisons maintenant une tâche rapide. Essayez de vous souvenir des modèles que vous voyez. Bourrez juste votre cerveau avec chaque petit détail. Fait? D'accord, regardez maintenant l'image suivante.

tubingen-2640255

La source [2]

Il s'agit d'une photographie prise d'une ville appelée "Tubingen" située en Allemagne. Pour la prochaine étape de la tâche, fermez simplement les yeux et essayez de reproduire le style d'une nuit étoilée avec cette image. Demande toi, si tu es van gogh (Hypothétiquement, bien sûr!) Et ils vous demandent de dessiner cette photo en tenant compte des styles que vous avez mémorisés auparavant, comment le ferais-tu?

Penser

.

.

.

.

Vous l'avez fait? Excellent! Tu viens de faire de l'art neuronal!

.

.

.

Vous voulez voir ce qu'un réseau de neurones artificiels peut faire?
tubingen_starry_night-3736448

La source [2]

Vous pouvez demander comment une machine a accompli une telle tâche. C'est simple une fois que vous comprenez l'essence!

Le réseau de neurones essaie d'extraire le “points importants” des deux images, c'est-à-dire, essayer de reconnaître les attributs qui définissent l'image et en tirer des leçons. Ces attributs appris sont une représentation interne du réseau de neurones, que l'on peut voir ci-dessous.

art-neural-1-1302146La source [2]

Vous avez donc appris à connaître les concepts théoriques impliqués dans l'art neuronal, voyons maintenant les aspects pratiques de sa mise en œuvre.

Entrez dans le cerveau d'un artiste artificiel:

L'art neuronal fonctionne comme suit:

  • Nous définissons d'abord les fonctions de perte nécessaires pour générer notre résultat, c'est-à-dire, perte de style, perte de contenu et perte totale de variation.
  • Nous définissons notre fonction d'optimisation, c'est-à-dire, algorithme de rétropropagation. Ici, nous utilisons L-BFGS car il est plus rapide et plus efficace pour les données plus petites.
  • Ensuite, nous définissons nos attributs de style et de contenu de notre modèle.
  • Ensuite, nous passons une image à notre modèle (de préférence notre image de base) et nous l'optimisons pour minimiser toutes les pertes que nous avons définies ci-dessus.

Nous connaîtrons certains des points importants que vous devez savoir avant de commencer. Alors que la plupart des principes fondamentaux des réseaux de neurones sont couverts dans cet article, Je vais réitérer certains d'entre eux et expliquer certaines choses supplémentaires.

  • Qu'est-ce qu'une fonction de perte? La fonction de perte est une fonction qui calcule la différence entre les valeurs prédites et les valeurs d'origine.. Essentiellement, indique combien d'erreur s'est produite dans un calcul. Dans n'importe quel algorithme d'apprentissage automatique, la fonction de perte est utilisée pour estimer la performance du modèle sur les données. Ceci est particulièrement utile dans le cas des réseaux de neurones, où vous essayez itérativement d'améliorer le fonctionnement de votre modèle. Lors de la mise en œuvre de l'art neuronal, doit contrôler trois fonctions de perte, a savoir:
    • Perte de contenu, c'est-à-dire, la différence entre le “Contenu” de l'image résultante et de l'image de base. Ceci est fait pour s'assurer que votre modèle ne s'écarte pas trop de l'image de base..
    • Perte de style, c'est-à-dire, la différence entre le “style” de l'image résultante et de l'image de base. Pour faire ceci, vous devez d'abord calculer la matrice de gramme des deux images, puis trouver leur différence. La matrice de Gram n'est rien de plus que de trouver la covariance d'une image avec elle-même. Ceci est fait pour maintenir le style dans l'image résultante.
    • Perte totale de validation, c'est-à-dire, la différence entre un pixel de l'image résultante et son pixel voisin. Ceci est fait pour que l'image reste visuellement cohérente..
  • Qu'est-ce qu'une fonction d'optimisation? Lorsque nous avons calculé la fonction de perte, nous essayons de minimiser nos pertes en changeant les paramètres. La fonction d'optimisation nous aide à déterminer la quantité de changement nécessaire pour améliorer notre modèle “optimisé”. Ici, nous implémentons une méthode d'optimisation appelée algorithme de Broyden-Fletcher-Goldfarb-Shanno (BFGS). BFGS est une variante de l'algorithme de descente de gradient dans lequel une différenciation du second ordre est effectuée pour trouver le minimum local. Lire Cet article pour avoir une perspective mathématique de l'algorithme.

Maintenant que nous avons compris quel sera notre flux pour construire un art neuronal, Descendons et commençons à pirater des trucs!

Le coder!

Ce Diwali était intéressant pour moi. J'ai décidé de faire des recherches sur l'art neuronal et sur la façon dont l'Inde s'illumine le jour de Diwali. je suis tombé sur cette photo “Inde la nuit de Diwali”. Et j'ai pensé à créer quelque chose de similaire dans le même sens. Pour faire ça, nous allons combiner les deux images ci-dessous à l'aide de l'art neuronal.

reference_image-300x250-1827801 base_image-300x289-6507695

La source [3]

Alors nous allons d'abord jeter les bases.

Paso 0: Installer sur pc Dur et ses dépendances. Pour ca, nous utiliserons un backend Theano. Modifiez votre backend en suivant les étapes mentionnées ici. En outre, vous devez également définir le bon ordre pour l'image. Dans le fichier keras.json, où le backend a-t-il changé, remplacer image_dim_ordering par 'tr'. Donc ça devrait ressembler à ça,

"image_dim_ordering": "th"

Paso 1: Ensuite, allez dans votre répertoire de travail et configurez votre structure de répertoire comme indiqué ci-dessous

|-- keras_NeuralStyle                 # c'est votre répertoire de travail
|   |-- base_image.jpg                # c'est votre image de base
|   |-- reference_image.jpg           # c'est votre image de référence

Paso 2: Démarrez un bloc-notes jupyter dans votre répertoire de travail en tapant jupyter notebook et implémenter le code suivant. Je vais juste vous fournir un aperçu étape par étape de ce que fait chaque bloc.

  • Premier, vous devez importer tous les modules nécessaires pour implémenter le code

1-2511823

  • Ensuite, définir les chemins des images sur lesquelles vous souhaitez réaliser le projet.

2-6414563

  • Définissez les variables requises et donnez-leur des valeurs comme indiqué ci-dessous. Notez que ces valeurs peuvent être modifiées, mais cela peut changer radicalement la sortie. En outre, assurez-vous que la valeur de la variable img_nrows est la même que img_ncols. Ceci est nécessaire pour que la matrice de gramme fonctionne.

3-2951367

  • Ensuite, nous définissons des fonctions d'assistance. Ceux-ci sont responsables de la gestion du prétraitement des images.

4-1823015

  • Créer des espaces réservés d'entrée pour transmettre des images au modèle

5-7504910

  • Charger un modèle de réseau de neurones pré-entraîné (si vous ne savez pas ce qu'est la pré-formation, voir cette discussion)

6-8079076

  • Imprimez le résumé du modèle pour voir quel modèle est

7-8892636

  • Stockez les noms de toutes les couches du réseau de neurones sous forme de dictionnaire avec leurs sorties

8-9153125

  • Tel que défini ci-dessus, nous configurons les fonctions de perte

9-8252856

  • Ensuite, nous définissons les attributs de contenu et de style …

10-8537718 11-6494202

  • Et définissez les dégradés et la fonction de sortie finale pour l'art neuronal

12-9883910 13-7323961

  • Nous définissons les fonctions pour calculer les pertes et les gradients

14-3047388 15-2092703

  • Maintenant, nous prenons l'image de base en entrée et l'itérons pour obtenir notre image finale. Sur ma machine locale, il faut une minute pour obtenir le résultat en une seule itération. Selon vos ressources (et patience), prendrait au plus 5 minutes obtenir le résultat. Vous pouvez également augmenter le nombre d'itérations pour optimiser davantage le résultat.

16-606928317-4977750

  • Et après une longue attente, nous obtiendrons cette belle image!

at_iteration_0-4036308

REMARQUE: Le fichier de code peut être vu sur github ici.

Où aller en partant d'ici?

Nous avons vu une petite démonstration d'une découverte importante dans le monde de l'art. De nombreuses modifications ont été apportées à cette méthode pour la rendre esthétique. Par exemple, J'aime beaucoup cette mise en oeuvre dans lequel ils ont pris différents styles et les ont appliqués à différentes régions.

02270_mask_face-150x150-7370341 02270_mask_face_inv-150x150-8755619 okeffe_red_canna-150x150-1180782okeffe_iris-150x150-767286002270-150x150-9543488

Les deux premières images sont les masques, qui aident à déterminer quelle partie doit être stylisée. Les deux images suivantes représentent les styles à utiliser. La dernière image est l'image de base à styliser.

Ci-dessous se trouve la sortie générée par l'art neuronal.

02270_sortie-225x300-9317939

ça a l'air incroyable, non? Je suis sûr que, comme moi, vous aimez aussi essayer l'art neuronal. Pour vous aider à démarrer, J'ai couvert les bases de l'art neuronal et comment vous pouvez créer votre première image. Je suis sûr que vous êtes impatient d'explorer plus et, donc, J'ajoute quelques ressources supplémentaires juste pour vous.

Ressources additionnelles

Ce sont quelques-unes des meilleures ressources que j'ai trouvées sur l'art neuronal. Allez-y et entrez dans le monde fascinant de l'art neuronal.

Les références

Sources d'images

[1] https://www.wikiart.org/en/vincent-van-gogh/the-starry-night-1889
[2] https://arxiv.org/abs/1508.06576
[3] Google

Remarques finales

J'espère que cet article a été inspirant.. Il est maintenant temps pour vous de le vérifier et de faire de l'art vous-même!! Un art se crée, partager avec la communauté. Si vous avez des questions, J'aimerais interagir avec vous dans les commentaires.. Et pour acquérir de l'expérience de travail dans les réseaux de neurones, n'oubliez pas d'essayer notre problème de pratique d'apprentissage en profondeur: Identifier les chiffres.

Vous pouvez mettre vos compétences et vos connaissances à l'épreuve. Vérifier Compétitions en direct et rivaliser avec les meilleurs data scientists du monde entier.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.