Stilizzazione di immagini che utilizzano reti neurali: nessun misticismo, solo Mattan. Ostagram: Servizio neurale basato sulla rete, combinando foto e ornamenti in Art Masterpieces Neury Network Artist

Stilizzazione di immagini che utilizzano reti neurali: nessun misticismo, solo Mattan. Ostagram: Servizio neurale basato sulla rete, combinando foto e ornamenti in Art Masterpieces Neury Network Artist
Stilizzazione di immagini che utilizzano reti neurali: nessun misticismo, solo Mattan. Ostagram: Servizio neurale basato sulla rete, combinando foto e ornamenti in Art Masterpieces Neury Network Artist

Dall'agosto 2015, i ricercatori tedeschi dell'Università di Tubingen hanno presentato la loro scelta dello stile di artisti famosi ad altre foto, i servizi hanno iniziato a sembrare che questa opportunità sia stata monetizzata. Nel mercato occidentale è stato lanciato, e in russo - la sua copia completa.

Ai segnalibri

Nonostante il fatto che l'Ostagramma è rimasto tornato a dicembre, ha iniziato a ottenere rapidamente popolarità nei social network a metà aprile. Allo stesso tempo, c'erano meno di mille persone nel progetto a Vkontakte il 19 aprile.

Per utilizzare il servizio, è necessario preparare due immagini: una foto da elaborare e un'immagine con un esempio di stile per sovrapposizione sull'immagine originale.

Il servizio ha una versione gratuita: crea un'immagine in una risoluzione minima fino a 600 pixel lungo il lato più lungo dell'immagine. L'utente riceve il risultato di una sola leterazioni del filtro applicato alla foto.

Versioni a pagamento due: Premium fornisce un'immagine fino a 700 pixel lungo il lato più lungo e si applica all'immagine di 600 iterazioni della rete neurale di elaborazione (più iterazioni, la lavorazione più interessante e più intensiva). Uno di questi snapshot sarà di 50 rubli.

Nella versione HD, è possibile impostare il numero di iterazioni: 100 costerà 50 rubli e 1000 - 250 rubli. In questo caso, l'immagine avrà una risoluzione fino a 1200 pixel lungo il lato più lungo, e può essere utilizzato per stampare su tela: Ostagram offre un tale servizio con consegna da 1800 rubli.

A febbraio, i rappresentanti dell'Ostagram che non accettano richieste per l'elaborazione delle immagini da parte degli utenti da "da paesi con capitalismo sviluppato", ma quindi accedere all'elaborazione di foto per gli utenti "Vkontakte" da tutto il mondo. A giudicare dal codice di Ostagram pubblicato su GitHub, Sergei Morugin, un residente di 30 anni di Nizhny Novgorod è stato impegnato nel suo sviluppo.

TJ ha contattato il direttore commerciale del progetto introdotto da Andrey. Secondo lui, l'Ostagram è apparso prima di installare, ma è stato ispirato da un progetto simile chiamato Vipart.

Lo sviluppo dell'Ostagram era impegnato in un gruppo di studenti di Nstu. Alekseeva: Dopo il test iniziale su uno stretto gruppo di amici alla fine del 2015, il progetto è stato deciso di rendere pubblico. Inizialmente, l'elaborazione delle immagini era completamente gratuita, ed è stato progettato per guadagnare denaro sulla vendita di dipinti stampati. Secondo Andrei, il sigillo si è rivelato il problema più grande: Foto Le persone trattate con veicoli neurali sono raramente belle per gli occhi umani, e il cliente finale ha bisogno di personalizzare il risultato per un lungo periodo prima di applicare su tela, che richiede grandi risorse della macchina .

Per l'elaborazione delle immagini, i creatori di Ostagram volevano utilizzare i server di Amazon Cloud, ma dopo l'afflusso di utenti è diventato chiaro che i costi di loro supereranno un migliaio di dollari al giorno con un minimo ritorno di investimento. Andrei, contemporaneamente un investitore del progetto, ha noleggiato il server Power in Nizhny Novgorod.

Il pubblico del progetto è di circa un migliaio di persone al giorno, tuttavia, ad alcuni giorni ha raggiunto 40 mila persone a scapito delle transizioni dai media stranieri che erano già riusciti a notare il progetto prima del domestico (Ostagramma è riuscito ad aumentare con i DJ europei) . Di notte, quando il traffico è basso, l'elaborazione delle immagini può avvenire in 5 minuti e giorno da occupare fino a un'ora.

Se gli utenti estranei precedenti hanno accesso consapevolmente limitato all'elaborazione delle immagini (per avviare la monetizzazione per iniziare con la Russia), ora Ostagram sta già contando sul pubblico occidentale.

Ad oggi, le prospettive per il recupero sono condizionali. Se ogni utente aveva pagato per elaborare 10 rubli, allora forse sarebbe bollente. [...]

Siamo molto difficili da monetizzare nel nostro paese: siamo pronti ad aspettare una settimana, ma non pagherà un centesimo per questo. Gli europei per questo sono più favorevoli - in termini di pagamento per un sollevamento, miglioramento della qualità - quindi, l'orientamento va al mercato.

Andrei, rappresentante dell'ostagramma

Secondo Andrei, il team di Ostagram sta lavorando a una nuova versione del sito con un grande pregiudizio nella socialità: "Sarà simile a un servizio ben noto, ma cosa fare". Il progetto era già interessato a rappresentanti di Facebook in Russia, ma prima dei negoziati sulla vendita non ha raggiunto il servizio.

Esempi di servizio

Nel nastro sul sito Web di Ostagram, è anche possibile vedere la combinazione di quali immagini è risultato le immagini finali: spesso è ancora più interessante del risultato. Allo stesso tempo, i filtri sono utilizzati come effetto per l'elaborazione - possono essere salvati per ulteriori utili.

Saluti a te, habr! Sicuramente hai notato che il tema delle foto dello styling per vari stili artistici è discutibile attivamente in questi. Leggendo tutti questi articoli popolari, potresti pensare che sotto il cofano di queste applicazioni, la magia sta succedendo, e la rete neurale veramente fantasie e ridisegna l'immagine da zero. È successo che il nostro team è stato di fronte a un compito simile: nel quadro del Hackaton aziendale interno abbiamo fatto una stilizzazione video, perché L'applicazione per le foto era già stata. In questo post, capiremo come questa rete "ridisegna" le immagini, e analizzeremo gli articoli, grazie a cui è diventato possibile. Raccomando di conoscere l'ultimo post prima di leggere questo materiale e in generale con le fondamenta delle reti neurali concoluzionali. Stai aspettando una piccola formula, un piccolo codice (esempi porterò a Theano e Lasagne), così come molte foto. Questo post è costruito nella procedura cronologica per l'aspetto degli articoli e, di conseguenza, idee stesse. A volte lo diluirò alla nostra recente esperienza. Ecco un ragazzo dell'inferno per attirare l'attenzione.


Visualizzazione e comprensione delle reti convoluzionali (28 nov 2013)

Prima di tutto, vale la pena ricordare l'articolo in cui gli autori sono stati in grado di dimostrare che la rete neurale non è una scatola nera, ma una cosa abbastanza interpretabile (a proposito, oggi può essere detto non solo sulle reti convoluzionarie per il computer visione). Gli autori hanno deciso di imparare a interpretare l'attivazione dei neuroni degli strati nascosti, per questo ha usato la reti neurali deconvoluzionari (DeConvnet) proposti da diversi anni prima (a proposito, lo stesso Zayler e Fergus, che sono autori e questo pubblicazione). La rete deconvoluzionaria è infatti la stessa rete con convulsioni e blog, ma applicato in ordine inverso. Nel funzionamento originale DeConvnet, la rete è stata utilizzata nella modalità di allenamento senza un insegnante per generare immagini. Questa volta, gli autori hanno applicato semplicemente il passaggio opposto dei segni ottenuti dopo il passaggio diretto sulla rete, all'immagine originale. Di conseguenza, risulta un'immagine che può essere interpretata come un segnale che ha causato questa attivazione sui neuroni. Naturalmente, sorge la domanda: come rendere il passaggio opposto attraverso una convoluzione e la non linearità? E soprattutto attraverso il max-tirando, non è certamente un'operazione invertita. Considera tutti e tre i componenti.

Retromarcia retro.

Nelle reti convoluzionali come funzione di attivazione viene spesso utilizzata Relu (x) \u003d max (0, x)che rende tutte le attivazioni sul livello non negativo. Di conseguenza, quando il passaggio attraverso la non linearità, è anche necessario ottenere risultati negativi. Per questo, gli autori offrono di utilizzare lo stesso relatore. Dal punto di vista dell'architettura di Theano, è necessario scavalcare la funzione del gradiente dell'operazione (un laptop infinitamente prezioso è nelle ricette di Lazagan, da lì gestirai i dettagli di ciò che è per la classe ModifiedBackProp).

Classe ZeilerbackProp (ModifiedBackProp): def Grads (Self, Inputs, Out_grads): (INP,) \u003d Ingressi (GRD,) \u003d OUT_GRADS #Return (GRD * (GRD\u003e 0) .Astype (INP.DTYPE),) # corretto esplicitamente Ritorno (Self.nonlinearità (GRD),) # Utilizzare la non linearità data

Drill reverse.

È un po 'più complicato qui, ma tutto è logico: è sufficiente applicare la versione trasposta dello stesso kernel del rivestimento, ma alle uscite dal reelu invece del livello precedente utilizzato sul passaggio diretto. Ma temo che in parole non sia così ovvio, guarderemo la visualizzazione di questa procedura (troverai ancora più visualizzazioni del pacchetto).


Tagliare con stride \u003d 1

Tagliare con stride \u003d 1 Versione inversa

Tagliare con stride \u003d 2

Tagliare con stride \u003d 2 Versione inversa

Retromarcia

Questa è questa operazione (a differenza del precedente) in generale non ha invertito. Ma volevamo ancora passare attraverso un massimo nel passaggio opposto. Per questo, gli autori offrono di utilizzare una mappa di dove c'era un massimo di Direct Pass (interruttori di posizione massima). Quando il passaggio inverso, il segnale di ingresso in apparenza viene convertito in approssimativamente salvare la struttura del segnale sorgente, è davvero più facile vedere cosa descrivere.



Risultato

L'algoritmo di visualizzazione è estremamente semplice:

  1. Fare un passaggio diretto.
  2. Seleziona lo strato di interesse per noi.
  3. Attivazione sicura di uno o più neuroni e ripristinare il resto.
  4. Effettuare l'output inverso.

Ogni quadrato grigio nell'immagine qui sotto corrisponde alla visualizzazione del filtro (che viene utilizzata per una convoglia) oi pesi di un neurone, e ogni immagine a colori è la parte dell'immagine originale che attiva il neurone corrispondente. Per chiarezza, i neuroni all'interno di un livello sono raggruppati in gruppi tematici. In generale, è stato improvvisamente che la rete neurale apprenda esattamente ciò che Hewubel e Weizel hanno scritto sulla struttura del sistema visivo, per il quale il premio Nobel nel 1981 è stato onorato. Grazie a questo articolo, abbiamo ricevuto una rappresentazione visiva di ciò che impara una rete neurale convolutaria su ciascun livello. È queste conoscenze che ti permetteranno di manipolare il contenuto dell'immagine generata in seguito, ma in precedenza, i seguenti anni hanno superato il miglioramento dei metodi delle reti neurali "tra station". Inoltre, gli autori dell'articolo hanno proposto un modo per analizzare come è meglio costruire un'architettura di rete neurale connovocativa per ottenere i migliori risultati (però, Imagenet 2013 non hanno vinto, ma siamo entrati in cima; UPD.: TAKI risulta essere vinto, ClariFai è loro, sono).


Visualizzazione fich.


Ecco un esempio di visualizzazione di attivazione usando DeConvnet, oggi questo risultato è già così così, ma poi è stato una svolta.


Mappe di ricaricità utilizzando DeConvnet

Reti profonde all'interno delle reti convoluzionali: visualizzazione di immagini di classificazione delle immagini e mappe di ricaricità (19 apr 2014)

Questo articolo è dedicato allo studio dei metodi per visualizzare le conoscenze racchiuse in una rete neurale contorta. Gli autori offrono due modi di visualizzazione in base alla discesa del gradiente.

Visualizzazione del modello di classe

Quindi, immagina di avere una rete neurale addestrata per risolvere il compito di classificazione per un certo numero di classi. Denota del valore dell'attivazione del neurone di uscita, che corrisponde alla classe c.. Quindi il prossimo compito di ottimizzazione ci dà esattamente l'immagine che massimizza la classe selezionata:



Questo compito è facile da decidere usando theano. Di solito chiediamo al quadro di prendere un derivato in base ai parametri del modello, ma questa volta riteniamo che i parametri siano fissi e il derivato viene portato attraverso l'immagine di input. La seguente funzione seleziona il valore massimo del livello di uscita e restituisce una funzione che calcola il derivatore dell'immagine di input.


DEF Compile_Salrancy_Function: "" "Compila una funzione per calcolare le mappe di ricaricità e le classi previste per un dato minibatch di immagini di input." "" INP \u003d rete ["Input"]. ingresso_var outp \u003d lasagne.layers.get_output (net ["fc8 "], Deterministic \u003d true) max_outp \u003d t.max (utp, asse \u003d 1) Salienza \u003d theano.grad (max_outp.sum (), wrt \u003d inp) max_class \u003d t.argmax (outp, axis \u003d 1) return theano. funzione ()

Probabilmente hai visto stagisti strane immagini con cani di cani - Feaddream. Nell'articolo originale, gli autori utilizzano il seguente processo per generare immagini che massimizzano la classe selezionata:

  1. Inizializza l'immagine iniziale degli zeri.
  2. Calcola il valore del derivato su questa immagine.
  3. Cambia l'immagine aggiungendo l'immagine risultante dal derivativo.
  4. Torna al punto 2 o uscire da un ciclo.

Tali immagini sono ottenute:




E se inizializza la prima immagine di una foto reale ed esegui lo stesso processo? Ma su ogni iterazione, sceglieremo una classe casuale, ripristineremo il resto e calcola il valore del derivato, quindi sarà un sogno così profondo.


Attenzione 60 MB


Perché così tanto faccia a faccia e occhi? Tutto è semplice: in caso di quasi 200 cani da 1000 classi, hanno occhi. Così come molte lezioni in cui le persone hanno solo.

Estrazione di ricarietà di classe

Se questo processo è inizializzato dalla foto reale, fermarsi dopo la prima iterazione e negare il valore del derivato, riceveremo un'immagine del genere aggiungendo quale a quella originale, aumenteremo il valore dell'attivazione della classe selezionata .


Mappe di ricaricità utilizzando derivati


Di nuovo il risultato "SO-SO". È importante notare che questo è un nuovo modo di visualizzare le attivazioni (nulla impedisce di fissare i valori di attivazione non sull'ultimo livello, ma in generale su qualsiasi livello della rete e prendere un derivato dell'immagine di input). Il prossimo articolo combinerà entrambi gli approcci precedenti e ci dà uno strumento per personalizzare il servizio navetta allo stile che verrà descritto in seguito.

String for Semplicity: The All Contorlutional Net (13 apr 2015)

Questo articolo in generale non parlava della visualizzazione, ma che la sostituzione della convocazione del pulea con una grande paglia non porta alla perdita di qualità. Ma come sottoprodotto della loro ricerca, gli autori hanno offerto un nuovo modo di visualizzare la funzione, che hanno applicato a un'analisi più accurata di ciò che impara il modello. La loro idea è la seguente: se prendiamo solo un derivato, quindi con le deconvolvezioni, quelle caratteristiche che erano sull'immagine di input sono inferiori a zero (l'uso di RELU per l'immagine in ingresso) non è tornata durante la deconvoluzione. E questo porta al fatto che i valori negativi appaiono sull'immagine posteriore prevocata. D'altra parte, se si utilizza DeConvnet, allora un altro RELU è prelevato dal Relu Derivati: consente di non superare i valori negativi, ma come hai visto il risultato, risulta "Allora". Ma cosa succede se combini questi due metodi?




CLASS GUIDEDBACKPROP (ModifiedBackProp): def grad (auto, input, out_grads): (INP,) \u003d Ingressi (GRD,) \u003d OUT_GRADS DTYPE \u003d INP.DTYPE RETURN (GRD * (INP\u003e 0) .Astype (DTYPE) * (GRD \u003e 0) .Astype (DTYPE),)

Quindi scopre un'immagine completamente pulita e interpretabile.


Mappe di ricaricità utilizzando backpropagazione guidata

Vai più a fondo.

Ora ci pensiamo, cosa ci dà? Permettetemi di ricordarti che ogni strato di coaching è una funzione che riceve un tensore tridimensionale e un'uscita all'uscita fornisce anche un tensore tridimensionale, forse un'altra dimensionalità d. X. w. X. h.; d.epth è il numero di neuroni nel livello, ognuno di essi genera una piastra (mappa delle funzioni) w.iGT X. h.oTTO.


Proviamo a tenere il seguente esperimento sulla rete VGG-19:



conv1_2.

Sì, quasi non vedi nulla, perché L'area della ricetta è molto piccola, questa è la seconda convoluzione di 3x3, rispettivamente, l'area totale è 5x5. Ma in aumento, vedremo che la funzione è solo un rilevatore di gradiente.




conv3_3.


conv4_3.


conv5_3.


piscina5.


E ora immagineremo che invece di un massimo di un raid, prenderemo il valore derivato di tutti gli elementi dei dadi nell'immagine di input. Quindi ovviamente l'area della ricetta del gruppo Neuron coprirà tutta l'immagine di input. Per i primi strati, vedremo le carte luminose da cui concludiamo che questi sono rilevatori floreali, poi gradienti, quindi confina e così via nella direzione della complicazione dei modelli. Più profondo lo strato, l'immagine più noiosa risulta. Questo è spiegato dal fatto che i livelli più profondi, un modello più complesso, che rilevano e il modello complesso appare meno frequentemente, il semplice, quindi, la mappa di attivazione si fissa. Il primo metodo è adatto per comprendere gli strati con modelli complessi, e il secondo è solo per semplice.


conv1_1.


cONV2_2.


conv4_3.


È possibile scaricare un database di attivazione più completo per diverse immagini e.

Un algoritmo neurale di stile artistico (2 set 2015)

Quindi, ha passato un paio d'anni dal momento della prima trepanazione di successo della rete neurale. Noi (nel senso - in umanità) ci sono uno strumento potente sulle mani, il che consente di capire cosa imprazza la rete neurale e rimuovi anche ciò che non piacerà veramente da imparare. Gli autori di questo articolo stanno sviluppando un metodo che consente ad un'immagine di generare una scheda di attivazione simile per un'immagine di destinazione, e forse nemmeno una cosa - questa è la base della stilizzazione. Serviamo il rumore bianco all'ingresso e un processo iterativo simile come nel sogno profondo, presentiamo questa immagine a questo i cui segni di segni sono simili all'immagine di destinazione.

Perdita di contenuti.

Come già menzionato, ogni strato della rete neurale produce un tensore tridimensionale di qualche dimensione.




Denotando a titolo iO.Strato dall'ingresso come. Quindi se riduciamo al minimo le differenze di somma ponderata tra l'immagine di input e qualche immagine a cui ci sforziamo c., quindi risulta esattamente ciò di cui hai bisogno. Probabilmente.



Per gli esperimenti con questo articolo, questo laptop magico può essere utilizzato, si verificano calcoli (sia sulla GPU che dalla CPU). La GPU viene utilizzata per calcolare la funzione della rete neurale e il valore della funzione di costo. Theano dà una funzione in grado di calcolare il gradiente della funzione di destinazione eval_grad. Nell'immagine di input x.. Quindi questo è tutto servito in LBFGS e viene lanciato il processo iterativo.


# Inizializza con un'immagine rumorosità generata_image.set_Value (Floatx (np.random.uniform (-128, 128, (1, 3, Image_w, Image_W))))) x0 \u003d generated_image.get_value (). Astivepe ("float64") xs \u003d xs.append (x0) # ottimizzare, salvando il risultato periodicamente per i nel raggio d'azione (8): stampa (i) scipy.optimize.fmin_l_bfgs_b (eval_loss, x0.flattend (), fprime \u003d eval_grad, maxfun \u003d 40) x0 \u003d generated_image.get_value (). Astivepe ("float64") xs.append (x0)

Se iniziamo l'ottimizzazione di tale funzione, quindi otteniamo rapidamente un'immagine simile al bersaglio. Ora possiamo ricreare immagini simili ad alcune immagini di contenuti.


Perdita di contenuti: conv4_2



Ottimizzazione dei processi




Facile da notare due caratteristiche dell'immagine ricevuta:

  • i colori sono stati persi - Questo è il risultato del fatto che in un esempio specifico ha utilizzato solo uno strato di Conv4_2 (o, in altre parole, il peso w è stato usato con esso, e per i restanti strati zero); Come ti ricordi, sono i primi strati che contengono informazioni sui colori e sulle transizioni del gradiente, e in seguito contengono informazioni sugli elementi più grandi che osserviamo - i colori sono persi, e non ci sono contenuti;
  • alcune case "sono andate", cioè. Le linee rette leggermente attorcigliate - Questo perché lo strato più profondo, meno informazioni sulla posizione spaziale della funzione è contenuta (il risultato dell'uso di pacchetti e scogliere).

L'aggiunta di strati precoci corregge immediatamente la situazione con i fiori.


Perdita di contenuti: conv1_1, conv2_1, conv4_2


Spero per questo punto hai sentito che puoi gestire ciò che sarà pervertito su un'immagine dal rumore bianco.

Perdita di stile.

E così siamo arrivati \u200b\u200bal più interessante: che dire degli Stati Uniti per passare lo stile? Cos'è lo stile? Ovviamente, lo stile non è che abbiamo ottimizzato nella perdita di contenuti "E, perché ci sono molte informazioni sulle posizioni spaziali delle caratteristiche. Quindi la prima cosa da fare è in alcun modo per rimuovere queste informazioni dalle rappresentazioni ottenute ogni strato.


L'autore offre il seguente modo. Prendiamo un tensor all'uscita da qualche strato, si espanderemo sulle coordinate spaziali e prendiamo la matrice di Covariacce tra le stampi. Dennare questa conversione come G.. Cosa abbiamo effettivamente fatto? Si può dire che abbiamo contato quanto spesso i segni all'interno dei dadi si trovano in coppia, o, in altre parole, ci avviciniamo la distribuzione dei segni nelle muore con una distribuzione normale multidimensionale.




Quindi la perdita di stile è inserita come segue, dove s. - Questa è un po 'di immagine con stile:



Proviamo per Vincent? Otteniamo, in linea di principio, qualcosa che ci si aspetta è il rumore nello stile di Van Gogh, le informazioni sulla posizione spaziale delle caratteristiche sono completamente perse.


Vincent.




E se metti una foto invece dello stile? Risulta caratteristiche familiari familiari, colori familiari, ma la posizione spaziale è completamente persa.


Foto con perdita di stile


Sicuramente ti sei chiesto, perché calcoliamo la matrice di Covariacce, e non qualcos'altro? Dopotutto, ci sono molti modi per aggregare i segni in modo che le coordinate spaziali siano perse. Questa è davvero una domanda aperta, e se prendi qualcosa di molto semplice, allora il risultato non cambierà drammaticamente. Controlliamo, calcoleremo la matrice di covarianza, ma semplicemente il valore medio di ciascun dado.




semplice perdita di stile

Perdita combinata

Naturalmente, sorge un desiderio per mescolare queste due funzioni del costo. Quindi genereremo dal rumore bianco che ci saranno segni dall'immagine del contenuto (che hanno un legame alle coordinate spaziali), e "stile" segni non legati alle coordinate spaziali saranno presenti, cioè. Speriamo che i dettagli del contenuto del contenuto rimarranno intatti dai loro luoghi, ma saranno ridisegnati con lo stile desiderato.



In effetti, c'è anche un regolarizzatore, ma lo definiremo per semplicità. Resta per rispondere alla domanda successiva: che tipo di strati (peso) usano quando si ottimizza? E ho paura di non avere una risposta a questa domanda, e anche gli autori dell'articolo. Hanno una proposta di utilizzare quanto segue, ma non significa affatto che un'altra combinazione lavorerà peggio, troppo spazio di ricerca. L'unica regola che segue la comprensione del modello: non ha senso prendere gli strati vicini, perché Non differiscono i segni l'uno dall'altro, perché lo stile viene aggiunto tramite un livello da ciascun gruppo Conv * _1.


# Definisci perdita di perdita perdite \u003d # perdita di perdita di contenuti.Append (0.001 * Content_Loss (Photo_Features, Gen_Features, "Conv4_2")) # perdita di perdita di stile.Append (0.2e6 * style_loss (Art_Features, Gen_Features, "Conv1_1")) Perdite.Append (Art_Features, Gen_Features, "Conv2_1")) Perdite.Append (0.2e6 * style_loss (Art_Features, Gen_Features, "Conv3_1"))) perdite.append (0.2e6 * style_loss (art_features, gen_features, "conv4_1"))) perdite.append ( 0.2e6 * Style_Loss (Art_Features, Gen_Features, "Conv5_1")) # Variazione totale Penalty Losses.Append (0.1e-7 * Total_variation_loss (generated_image)) total_loss \u003d somma (perdite)

Il modello finale può essere rappresentato nel seguente modulo.




Ma il risultato di case con van Gogh.



Tentativo di controllare il processo

Ricordiamo le parti precedenti, già due anni prima dell'articolo attuale, altri scienziati hanno studiato ciò che impara davvero la rete neurale. Armato di tutti questi articoli, è possibile guarire la visualizzazione delle caratteristiche di vari stili, varie immagini, vari permessi e dimensioni e cercare di capire quali livelli con quale peso da prendere. Ma anche la piastrellatura degli strati non controlla completamente su ciò che sta accadendo. Il problema qui è più concettuale: non stiamo ottimizzando questa funzione! Come chiedi? La risposta è semplice: questa funzione riduce al minimo un residuo ... Bene, capisci. Ma quello che vogliamo veramente è che ci piace l'immagine. La combinazione convessa di contenuti e caratteristiche di perdita di stile non è una misura del fatto che la nostra mente ritiene bella. È stato notato che se continui a stilizzare troppo a lungo, la funzione di costo cade naturalmente al di sotto e sotto, ma la bellezza estetica del risultato diminuisce bruscamente.




Bene, ok, c'è un altro problema. Supponiamo di aver trovato uno strato che rimuove i segni di cui hai bisogno. Supponiamo che alcune trame triangolari. Ma questo strato contiene ancora molti altri segni, come i cerchi che non vogliamo veramente vedere sull'immagine risultante. In generale, se potessi assumere un milione di cinesi, potresti visualizzare tutte le caratteristiche dello stile dello stile, e la completa prosperità nota semplicemente quelle di cui abbiamo bisogno, e includendole solo nella funzione di costo. Ma per ovvi motivi, questo non è così semplice. Ma cosa succede se eliminiamo tutti i circoli che non vogliamo vedere il risultato, dallo stile dello stile? Quindi semplicemente non funzionano attivano i corrispondenti neuroni che reagiscono ai cerchi. E, ovviamente, quindi nell'immagine risultante non apparirà. Lo stesso con i fiori. Immagina un'immagine luminosa con un sacco di colori. La distribuzione dei colori sarà molto imperfetta per tutto lo spazio, la stessa sarà la distribuzione dell'immagine risultante, ma nel processo di ottimizzazione, quelle cime che erano all'originale sono probabilmente perse. Si è scoperto che una semplice diminuzione del colore della tavolozza dei colori risolve questo problema. La densità di distribuzione della maggior parte dei colori sarà zero, e ci saranno grandi cime in diverse sezioni. Così, manipolando l'originale in Photoshop, manipolano i segni che vengono recuperati dall'immagine. Una persona è più facile esprimere i suoi desideri visivamente piuttosto che cercare di formularli nel linguaggio della matematica. Fino a. Di conseguenza, designer e manager, armati di Photoshop e script per visualizzare i segni, raggiunti i tempi tre volte il risultato è migliore di ciò che la matematica con i programmatori fatti.


Un esempio di una manipolazione del colore e della dimensione delle caratteristiche


E puoi prendere una semplice immagine come stile



risultati








Ed ecco un widget, ma solo con la consistenza desiderata

Reti di texture: sintesi di avanzamento delle texture e immagini stilizzate (10 mar 2016)

Sembra che questo potesse essere fermato, se non una sfumatura. L'algoritmo di stilizzazione descritto sopra funziona per un tempo molto lungo. Se si prende una realizzazione in cui i LBFGS iniziano sulla CPU, il processo richiede cinque minuti. Se riscriviti in modo che sia l'ottimizzazione va alla GPU, il processo impiegherà 10-15 secondi. Non è buono da nessuna parte. Forse gli autori di questo e il prossimo articolo hanno pensato allo stesso lo stesso. Entrambe le pubblicazioni sono uscite in modo indipendente con la differenza di 17 giorni, dopo quasi un anno dopo il precedente articolo. Gli autori dell'attuale articolo, nonché gli autori dei precedenti, erano impegnati nella generazione di trame (se si ripristinerà la perdita di stile circa avrà successo). Si offrono di ottimizzare non un'immagine ottenuta dal rumore bianco, ma qualche rete neurale che genera un'immagine stilizzata.




Ora se il processo di stilizzazione non include alcuna ottimizzazione, è richiesto solo un passaggio diretto. E l'ottimizzazione è richiesta solo una volta per allenarti un generatore di rete. Questo articolo utilizza un generatore gerarchico, dove ogni prossimo z. La dimensione è maggiore del precedente e sessibile dal rumore nel caso della generazione di texture e da una determinata base di immagini per uno stilista. È fondamentale usare qualcosa di diverso dalla parte di allenamento dell'Imajne, perché Le caratteristiche all'interno della rete di perdita sono calcolate dalla rete addestrata proprio alla parte di allenamento.



Perdite percettive per trasferimento in stile in tempo reale e super-risoluzione (27 mar 2016)

Come si può vedere dal nome, gli autori che erano in ritardo per soli 17 giorni con l'idea della rete generatrice erano impegnati in un aumento della risoluzione dell'immagine. Apparentemente sono stati ispirati dal successo dell'apprendimento residuo nell'ultimo evento.




Di conseguenza, blocco residuo e blocco conv.



Quindi, ora abbiamo nelle tue mani oltre a controllare la stilizzazione c'è anche un generatore rapido (grazie a questi due articoli, il tempo di generazione di un'immagine è misurato con decine di MS).

Fine

Informazioni dagli articoli considerati e dal codice degli autori che abbiamo utilizzato come punto di partenza per creare un'altra applicazione per lo styling della prima applicazione di stilizione video:



Genera qualcosa del genere.


Le essenze numerose e non completamente distinguibili appaiono nelle fotografie più ordinarie. Molto spesso per qualche motivo cani. Questa immagine di Internet ha iniziato a compilare il giugno 2015, quando è stato lanciato Deepdream da Google - uno dei primi servizi aperti basati su reti neurali e destinati alla lavorazione delle immagini.

Succede approssimativamente come: l'algoritmo analizza le foto, trova frammenti che gli ricordano oggetti familiari e distorcono l'immagine in conformità con questi dati.

All'inizio, il progetto è stato pubblicato come codice aperto, e quindi i servizi online creati su Internet, creati sugli stessi principi. Uno dei più convenienti e più popolari è il generatore di sogno profondo: una piccola elaborazione fotografica qui richiede solo circa 15 secondi (gli utenti precedenti hanno dovuto aspettare più di un'ora).

In che modo le reti neurali imparano a creare tali immagini? E perché, a proposito, sono così chiamati?

Le reti neurali sul loro dispositivo imitano vere reti neurali di un organismo vivente, ma lo fanno con l'aiuto di algoritmi matematici. Creando una struttura di base, è possibile addestrarlo in base ai metodi di apprendimento della macchina. Se stiamo parlando di riconoscere le immagini, allora migliaia di immagini devono essere saltate attraverso la rete neurale. Se il compito della neurosetta è diverso, allora gli esercizi di allenamento saranno diversi.

Algoritmi per giocare a scacchi, ad esempio, analizzare i giochi di scacchi. Lo stesso algoritmo alfago da Google Deepmind nel gioco cinese Go - che è stato percepito come una svolta, poiché è molto più difficile e ne vale la pena più che gli scacchi.

    Giocare con un modello semplificato di rete neurale ed è meglio capire i suoi principi.

    YouTube ha anche una serie di disegnati a mano personalizzati rulli Su come funzionano le reti neurali.

Un altro servizio popolare è DreamScope, che non può solo sognare di cani, ma imitare anche vari stili pittoreschi. L'elaborazione delle immagini qui si verifica anche molto semplice e rapidamente (circa 30 secondi).

Apparentemente, la parte algoritmica del servizio è una modifica del programma in stile neurale, che siamo già.

Più recentemente c'era un programma che dipinge realisticamente immagini in bianco e nero. Nelle versioni precedenti, i programmi simili hanno affrontato il loro compito molto lontano, ed è stato considerato un grande risultato, se almeno il 20% delle persone non può distinguere una vera immagine dall'immagine dipinta dal computer.

Inoltre, la colorazione qui richiede solo circa 1 minuto.

La stessa società di sviluppo ha anche lanciato un servizio che riconosce diversi tipi di oggetti nelle immagini.

Questi servizi possono sembrare solo divertenti divertimenti, ma in realtà tutto è molto più interessante. Le nuove tecnologie sono incluse nella pratica degli artisti delle persone e cambiano le nostre idee sull'art. Probabilmente, presto la gente dovrà competere con le auto e nel campo della creatività.

Insegna agli algoritmi per riconoscere le immagini - il compito su cui gli sviluppatori di intelligenza artificiale hanno da tempo combattendo. Pertanto, programmi che colorano le vecchie immagini sono disegnate nel cielo dei cani possono essere considerate parte di un processo più grande e intrigante.