Arte neuronale | Arte generata dall'intelligenza artificiale

Contenuti

introduzione

L'arte ha sempre trasceso eoni di esistenza umana. Possiamo vedere le loro tracce dalla preistoria, come l'arte harappana nella civiltà della valle dell'Indo, all'arte contemporanea nei tempi moderni.. Soprattutto, l'arte è stata un mezzo per esprimere la propria creatività, opinioni su come percepiamo il mondo. Come ha detto il mitico Leonardo Da Vinci,

"La pittura è poesia che si vede più di quanto si senta".

Quello che a volte dimentichiamo è che la maggior parte dell'arte segue uno schema. Uno schema che ci piace e ha un senso nel nostro cervello. La prossima volta che vedo un dipinto, prova a notare le pennellate su di esso. Vedrai un motivo emergere dalla vernice. NOI, come gli esseri umani, siamo esperti nel riconoscere questi modelli. I nostri meccanismi neurali si sono evoluti per essere eccezionalmente freddi nel corso degli anni nel riconoscere i modelli in natura..

Ora potresti chiedere perché sto blaterando sull'arte e sui modelli. Questo perché ti mostrerò come creare arte con l'aiuto di cervelli artificiali!! In questo articolo, costruiremo una rete neurale artificiale che estrarrà lo stile da un'immagine e lo replicherà nell'altra. Così sei pronto?

Sommario

  • Cos'è l'arte neurale??
  • Conoscere il punto cruciale
  • Codificarlo
  • Dove andare da qui??
  • Risorse addizionali

Cos'è l'arte neurale??

Proviamo a capire questo argomento con un esempio.

la-notte-stellata-18891-jpglarge-6178391

Fonte [1]

L'immagine sopra è la famosa “La notte stellata” il Vincent Van Gogh. Basta guardare il dipinto per qualche minuto. Vedi? Noti le pennellate? Vedi le curve e i bordi che definiscono ogni singolo oggetto?, cosa ti rende così facile riconoscerli?

Ora facciamo un compito veloce. Cerca di ricordare gli schemi che vedi. Basta riempirti il ​​cervello con ogni piccolo dettaglio. Fatto? Ok, ora dai un'occhiata alla seguente immagine.

tubingen-2640255

Fonte [2]

Questa è una fotografia scattata da una città chiamata "Tubigen" situata in Germania. Per il prossimo passo del compito, chiudi gli occhi e prova a replicare lo stile di una notte stellata con questa immagine. Chiedilo a te stesso, se sei van gogh (Ipoteticamente, Certo!) E ti chiedono di disegnare questa fotografia tenendo conto degli stili che hai memorizzato prima, Come lo faresti?

Pensare

.

.

.

.

l'hai fatto? Eccellente! Hai appena creato arte neurale!

.

.

.

Vuoi vedere cosa può fare una rete neurale artificiale?
tubingen_starry_night-3736448

Fonte [2]

Potresti chiedere come una macchina ha svolto un compito del genere. È semplice una volta compresa l'essenza!

Quello che fa la rete neurale è cercare di estrarre il “Punti importanti” di entrambe le immagini, vale a dire, prova a riconoscere quali attributi definiscono l'immagine e impara da essa. Questi attributi appresi sono una rappresentazione interna della rete neurale, che puoi vedere qui sotto.

arte-neurale-1-1302146Fonte [2]

Quindi hai avuto modo di conoscere i concetti teorici coinvolti nell'arte neurale, ora conosciamo gli aspetti pratici della sua attuazione.

Entra nel cervello di un artista artificiale:

L'arte neurale funziona come segue:

  • Definiamo prima le funzioni di perdita necessarie per generare il nostro risultato, vale a dire, perdita di stile, perdita di contenuto e totale perdita di variazione.
  • Definiamo la nostra funzione di ottimizzazione, vale a dire, algoritmo di retropropagazione. Qui usiamo L-BFGS perché è più veloce ed efficiente per i dati più piccoli.
  • Quindi impostiamo il nostro stile e gli attributi di contenuto del nostro modello.
  • Poi passiamo un'immagine al nostro modello (preferibilmente la nostra immagine di base) e lo ottimizziamo per ridurre al minimo tutte le perdite che abbiamo definito sopra.

Conosceremo alcuni dei punti importanti che dovresti sapere prima di iniziare. Mentre la maggior parte dei fondamenti delle reti neurali sono trattati in questo articolo, Ne ripeterò alcuni e spiegherò alcune cose aggiuntive.

  • Che cos'è una funzione di perdita?? La funzione di perdita è una funzione che calcola la differenza tra i valori previsti e i valori originali.. Fondamentalmente, indica quanti errori si sono verificati in un calcolo. In qualsiasi algoritmo di apprendimento automatico, la funzione di perdita viene utilizzata per stimare le prestazioni del modello sui dati. Ciò è particolarmente utile nel caso delle reti neurali, dove provi in ​​modo iterativo a far funzionare meglio il tuo modello. Quando si implementa l'arte neurale, deve controllare tre funzioni di perdita, vale a dire:
    • Perdita di contenuto, vale a dire, la differenza tra “contenuto” dell'immagine risultante e dell'immagine di base. Questo viene fatto per garantire che il tuo modello non si discosti troppo dall'immagine di base..
    • Perdita di stile, vale a dire, la differenza tra “stile” dell'immagine risultante e dell'immagine di base. Per fare questo, devi prima calcolare la matrice di grammi di entrambe le immagini e poi trovare la loro differenza. La matrice di Gram non è altro che trovare la covarianza di un'immagine con se stessa. Questo viene fatto per mantenere lo stile nell'immagine risultante.
    • Perdita totale di convalida, vale a dire, la differenza tra un pixel nell'immagine risultante e il pixel adiacente. Questo viene fatto in modo che l'immagine rimanga visivamente coerente..
  • Che cos'è una funzione di ottimizzazione?? Quando abbiamo calcolato la funzione di perdita, cerchiamo di ridurre al minimo le nostre perdite modificando i parametri. La funzione di ottimizzazione ci aiuta a scoprire quanto cambiamento è necessario per migliorare il nostro modello “ottimizzato”. Qui implementiamo un metodo di ottimizzazione chiamato algoritmo Broyden-Fletcher-Goldfarb-Shanno (BFGS). BFGS è una variante dell'algoritmo di discesa del gradiente in cui viene eseguita una differenziazione del secondo ordine per trovare il minimo locale. Leggi Questo articolo per avere una prospettiva matematica dell'algoritmo.

Ora che abbiamo capito quale sarà il nostro flusso per costruire un'arte neurale, Scendiamo e iniziamo a hackerare roba!

Codificarlo!

Questo Diwali è stato interessante per me. Ho deciso di fare qualche ricerca sull'arte neurale e su come l'India si illumina il giorno del Diwali. mi sono imbattuta in questa foto “India nella notte di Diwali”. E ho pensato di creare qualcosa di simile sulla stessa linea. Fare quello, uniremo le due immagini sotto con l'aiuto dell'arte neurale.

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

Fonte [3]

Quindi prima getteremo le basi.

passo 0: Installa su PC Duro e le sue dipendenze. Per questo, useremo un backend Theano. Cambia il tuo backend seguendo i passaggi menzionati qui. Cosa c'è di più, dovresti anche impostare l'ordine corretto per l'immagine. Nel file keras.json, dove è cambiato il backend?, sostituisci image_dim_ordering con 'tr'. Quindi dovrebbe assomigliare a questo,

"image_dim_ordering": "th"

passo 1: Quindi vai alla tua directory di lavoro e configura la struttura della directory come mostrato di seguito

|-- keras_NeuralStyle                 # questa è la tua directory di lavoro
|   |-- base_immagine.jpg                # questa è la tua immagine di base
|   |-- reference_image.jpg           # questa è la tua immagine di riferimento

passo 2: Avvia un taccuino jupyter nella tua directory di lavoro digitando jupyter notebook e implementare il seguente codice. Ti fornirò solo una panoramica passo passo di ciò che fa ogni blocco.

  • Primo, devi importare tutti i moduli necessari per implementare il codice

1-2511823

  • Prossimo, imposta i percorsi delle immagini su cui vuoi proiettare.

2-6414563

  • Definisci le variabili richieste e assegna loro i valori come mostrato di seguito. Nota che questi valori possono essere modificati, ma questo può cambiare drasticamente l'output. Cosa c'è di più, assicurati che il valore della variabile img_nrows sia lo stesso di img_ncols. Ciò è necessario affinché la matrice di grammi funzioni..

3-2951367

  • Quindi definiamo le funzioni di supporto. Questi sono responsabili della gestione della pre-elaborazione delle immagini.

4-1823015

  • Crea segnaposto di input per passare le immagini al modello

5-7504910

  • Carica un modello di rete neurale pre-addestrato (se non sai cos'è il pre-allenamento, vedere questa discussione)

6-8079076

  • Stampa il riepilogo del modello per vedere quale modello è

7-8892636

  • Memorizza i nomi di tutti i livelli della rete neurale come un dizionario insieme ai loro output

8-9153125

  • Come sopra definito, configuriamo le funzioni di perdita

9-8252856

  • Quindi impostiamo gli attributi di contenuto e stile …

10-8537718 11-6494202

  • E imposta i gradienti e la funzione di output finale per l'arte neurale

12-9883910 13-7323961

  • Definiamo le funzioni per calcolare perdite e gradienti

14-3047388 15-2092703

  • Ora prendiamo l'immagine di base come input e la iteriamo per ottenere la nostra immagine finale. Sulla mia macchina locale, ci vuole un minuto per ottenere il risultato in un'iterazione. Secondo le tue risorse (e pazienza), ci vorrebbe al massimo 5 minuti ottieni il risultato. Puoi anche aumentare il numero di iterazioni per ottimizzare ulteriormente il risultato.

16-606928317-4977750

  • E dopo una lunga attesa, avremo questa bellissima immagine!

at_iteration_0-4036308

NOTA: Il file di codice può essere visto su github qui.

Dove andare da qui??

Abbiamo assistito a una piccola dimostrazione di una scoperta significativa nel mondo dell'arte. Molte modifiche sono state apportate a questo metodo per renderlo esteticamente gradevole. Ad esempio, mi piace molto questa implementazione in cui hanno preso stili diversi e li hanno applicati a regioni diverse.

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

Le prime due immagini sono le mascherine, che aiutano a stabilire quale parte dovrebbe essere stilizzata. Le prossime due immagini rappresentano gli stili da utilizzare. L'ultima immagine è l'immagine di base a cui applicare lo stile.

Di seguito è riportato l'output generato dall'arte neurale.

02270_output-225x300-9317939

Sembra incredibile, no? sono sicuro che, come me, ti piace anche provare l'arte neurale. Per aiutarti a iniziare con esso, Ho coperto le basi dell'arte neurale e come puoi creare la tua prima immagine. Sono sicuro che sei desideroso di esplorare di più e, così, Sto aggiungendo alcune risorse aggiuntive solo per te.

Risorse addizionali

Queste sono alcune delle migliori risorse che ho trovato sull'arte neurale. Vai avanti ed entra nell'affascinante mondo dell'arte neurale.

Riferimenti

Fonti di immagini

[1] https://www.wikiart.org/en/vincent-van-gogh/la-notte-stellata-1889
[2] https://arxiv.org/abs/1508.06576
[3] Google

Note finali

Spero che tu abbia trovato questo articolo stimolante.. Ora è il momento per te di dare un'occhiata e fare arte da solo!! Si crea un arte, condividilo con la community. Se hai qualche domanda, Mi piacerebbe interagire con te nei commenti.. E per fare esperienza di lavoro nelle reti neurali, non dimenticare di provare il nostro problema di pratica di apprendimento profondo: Identificare le cifre.

Puoi mettere alla prova le tue abilità e conoscenze. Controllare Competizioni dal vivo e competere con i migliori data scientist di tutto il mondo.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.