Neuronska mreža crta slike. Ostagram: usluga temeljena na neuronskoj mreži koja kombinira fotografije i ukrase u umjetnička remek-djela

Budući da su u kolovozu 2015. njemački istraživači sa Sveučilišta u Tübingenu predstavili svoje o mogućnosti prijenosa stila poznati umjetnici na drugim su se fotografijama počele pojavljivati ​​usluge koje unovčavaju ovu priliku. Lansiran je na zapadno tržište, a na rusko tržište - njegova potpuna kopija.

Na oznake

Unatoč činjenici da je Ostagram lansiran u prosincu, sredinom travnja počeo je brzo dobivati ​​popularnost na društvenim mrežama. U isto vrijeme, od 19. travnja, u projektu na VKontakteu bilo je manje od tisuću ljudi.

Za korištenje usluge potrebno je pripremiti dvije slike: fotografiju koju je potrebno obraditi i sliku s primjerom stila koju ćete staviti na originalnu sliku.

Usluga ima besplatnu verziju: stvara sliku u minimalnoj rezoluciji do 600 piksela duž najdulje strane slike. Korisnik dobiva rezultat samo jedne od iteracija primjene filtra na fotografiju.

Postoje dvije inačice koje se plaćaju: Premium proizvodi sliku do 700 piksela po najdužoj strani i na sliku primjenjuje 600 iteracija obrade neuronske mreže (što više iteracija, to je obrada zanimljivija i intenzivnija). Jedna takva slika koštat će 50 rubalja.

U HD verziji možete podesiti broj ponavljanja: 100 će koštati 50 rubalja, a 1000 - 250 rubalja. U ovom slučaju, slika će imati razlučivost do 1200 piksela na najdužoj strani, a može se koristiti za ispis na platnu: Ostagram nudi ovu uslugu s dostavom od 1800 rubalja.

U veljači predstavnici Ostagrama neće prihvaćati zahtjeve za obradu slika od korisnika "iz zemalja s razvijenim kapitalizmom", ali tada pristup obradi fotografija za korisnike VKontakte iz cijelog svijeta. Sudeći prema kodu Ostagrama objavljenom na GitHubu, razvio ga je Sergey Morugin, 30-godišnji stanovnik Nižnjeg Novgoroda.

TJ kontaktirao komercijalni direktor projekt, koji je predstavio Andrey. Prema njegovim riječima, Ostagram se pojavio prije Instapaintinga, ali je inspiriran sličnim projektom Vipart.

Ostagram je razvila grupa studenata NNSTU-a. Alekseeva: nakon inicijalnog testiranja na uskoj grupi prijatelja krajem 2015., odlučili su javno objaviti projekt. U početku je obrada slika bila potpuno besplatna, a planirano je zaraditi prodajom tiskanih slika. Prema Andreyu, ispis se pokazao kao najveći problem: fotografije ljudi obrađene neuronskom mrežom rijetko izgledaju ugodno ljudskom oku, a krajnji klijent treba dugo prilagođavati rezultat prije nego što ga primijeni na platno, što zahtijeva mnogo resursa stroja.

Za obradu slika tvorci Ostagrama željeli su koristiti Amazonove poslužitelje u oblaku, no nakon priljeva korisnika postalo je jasno da će troškovi za njih premašiti tisuću dolara dnevno uz minimalan povrat ulaganja. Andrey, koji je također investitor u projektu, unajmio je servere u Nižnjem Novgorodu.

Publika projekta je oko tisuću ljudi dnevno, no u nekim je danima dosezala i 40 tisuća ljudi zbog prijelaza stranih medija koji su projekt već uočili prije domaćih (Ostagram je čak uspio surađivati ​​s europskim DJ-ima). Noću, kada je promet slab, obrada slike može trajati 5 minuta, a danju i do sat vremena.

Ako je ranijim stranim korisnicima bio namjerno ograničen pristup obradi slika (smatralo se da će monetizacija započeti iz Rusije), sada se Ostagram već više oslanja na zapadnu publiku.

Do danas su izgledi za povrat uvjetni. Kad bi svaki korisnik platio 10 rubalja za obradu, možda bi se isplatilo. […]

Kod nas je jako teško unovčiti: naši su ljudi spremni čekati tjedan dana, ali za to neće platiti ni lipe. Europljani su tome skloniji - što se tiče plaćanja ubrzanja, poboljšanja kvalitete - pa se orijentacija ide na to tržište.

Andrey, predstavnik Ostagrama

Prema Andreyu, tim Ostagrama radi na tome nova verzija stranica s jakim fokusom na društvenost: “Izgledat će kao jedan poznati servis, ali što da se radi.” Predstavnici Facebooka u Rusiji već su se zainteresirali za projekt, ali do dogovora o prodaji još nije došlo.

Primjeri rada servisa

U feedu na web stranici Ostagram također možete vidjeti kakva je kombinacija slika rezultirala konačnim kadrovima: često je to čak i zanimljivije od samog rezultata. Istodobno, filteri - slike koje se koriste kao efekt za obradu - mogu se spremiti za daljnju upotrebu.

Pozdrav, Habr! Sigurno ste primijetili da je tema styling fotografija za razne umjetnički stilovi aktivno raspravljalo na ovim vašim internetskim stranicama. Čitajući sve ove popularne članke, mogli biste pomisliti da se ispod haube ovih aplikacija događa magija, a neuronska mreža stvarno mašta i iscrtava sliku ispočetka. Slučajno se naš tim našao pred sličnim zadatkom: u sklopu internog korporativnog hackathona napravili smo video stajling, jer. već je postojala aplikacija za fotografije. U ovom postu ćemo pogledati kako mreža "precrtava" slike i pogledati članke koji su to omogućili. Preporučujem da se prije čitanja ovog materijala upoznate s posljednjim postom i općenito s osnovama konvolucijskih neuronskih mreža. Naći ćete neke formule, neki kod (navest ću primjere za Theano i Lasagne), kao i puno slika. Ovaj post je ugrađen Kronološki red izgled članaka i shodno tome samih ideja. Ponekad ću to razrijediti našim nedavnim iskustvom. Evo dječaka iz pakla za pozornost.


Vizualizacija i razumijevanje konvolucijskih mreža (28. studenog 2013.)

Prije svega, vrijedi spomenuti članak u kojem su autori uspjeli pokazati da neuronska mreža nije crna kutija, već prilično interpretabilna stvar (usput, danas se to može reći ne samo o konvolucijskim mrežama za računala vizija). Autori su odlučili naučiti kako protumačiti aktivacije neurona skrivenog sloja, za to su koristili dekonvolucionu neuronsku mrežu (deconvnet) predloženu nekoliko godina ranije (usput, isti Zeiler i Fergus, koji su autori ove publikacije kao i dobro). Dekonvolucijska mreža zapravo je ista mreža s konvolucijama i skupovima primijenjenim obrnutim redoslijedom. Izvorni rad na deconvnetu koristio je mrežu u nenadziranom načinu učenja za generiranje slika. Ovaj put, autori su ga koristili jednostavno za obrnuti prijelaz od značajki dobivenih nakon prolaska naprijed kroz mrežu do izvorne slike. Rezultat je slika koja se može protumačiti kao signal koji je izazvao ovu aktivaciju na neuronima. Naravno, postavlja se pitanje: kako napraviti obrnuti prolaz kroz konvoluciju i nelinearnost? I još više zbog max-poolinga, ovo sigurno nije obrnuta operacija. Pogledajmo sve tri komponente.

Obrnuti ReLu

U konvolucijskim mrežama često se koristi aktivacijska funkcija ReLu(x) = max(0, x), što sve aktivacije na sloju čini nenegativnima. Sukladno tome, kada se prolazi kroz nelinearnost, također je potrebno dobiti nenegativne rezultate. U tu svrhu autori predlažu korištenje istog ReLu-a. Sa stajališta Theano arhitekture, potrebno je nadjačati funkciju gradijenta operacije (beskonačno vrijedna bilježnica nalazi se u receptima za lazanje, odatle ćete saznati detalje o tome što je klasa ModifiedBackprop).

Klasa ZeilerBackprop(ModifiedBackprop): def grad(self, inputs, out_grads): (inp,) = inputs (grd,) = out_grads #return (grd * (grd > 0).astype(inp.dtype),) # eksplicitno ispravi return (self.nonlinearity(grd),) # koristi zadanu nelinearnost

Obrnuta konvolucija

Ovdje je malo kompliciranije, ali sve je logično: dovoljno je primijeniti transponiranu verziju iste konvolucijske jezgre, ali na izlaze iz obrnutog ReLu-a umjesto prethodnog sloja korištenog u prolazu naprijed. Ali bojim se da riječima to nije tako očito, pogledajmo vizualizaciju ovog postupka (naći ćete još više vizualizacija vijuga).


Konvolucija kada je korak=1

Konvolucija kada je korak=1 obrnuta verzija

Konvolucija kada je korak=2

Konvolucija kada je korak=2 obrnuta verzija

Obrnuto udruživanje

Ova operacija (za razliku od prethodnih) općenito nije invertibilna. No, ipak bismo željeli na neki način proći kroz maksimum tijekom obrnutog prolaza. Kako bi to učinili, autori predlažu korištenje karte gdje je bio maksimum tijekom izravnog prolaska (prekidači maksimalne lokacije). Tijekom obrnutog prolaza, ulazni signal se transformira u unpooling na takav način da se približno očuva struktura originalnog signala, što je stvarno lakše vidjeti nego opisati ovdje.



Proizlaziti

Algoritam vizualizacije je vrlo jednostavan:

  1. Napravite ravno dodavanje.
  2. Odaberite sloj koji nas zanima.
  3. Popravite aktivaciju jednog ili više neurona i resetirajte ostale.
  4. Izvedite zaključak.

Svaki sivi kvadrat na slici ispod odgovara vizualizaciji filtra (koji se primjenjuje za konvoluciju) ili težine jednog neurona, a svaki slika u boji je onaj dio originalne slike koji aktivira odgovarajući neuron. Radi jasnoće, neuroni unutar jednog sloja grupirani su u tematske grupe. Općenito, iznenada se pokazalo da neuronska mreža uči upravo ono o čemu su pisali Hubel i Weisel u svom radu o strukturi vidnog sustava, za koji su nagrađeni Nobelova nagrada 1981. godine. Zahvaljujući ovom članku dobili smo vizualni prikaz onoga što konvolucijska neuronska mreža uči na svakom sloju. To je znanje koje će kasnije omogućiti manipuliranje sadržajem generirane slike, ali to je još daleko, sljedećih nekoliko godina otišlo je na poboljšanje metoda "trepanacije" neuronskih mreža. Osim toga, autori članka predložili su način analize kako najbolje izgraditi arhitekturu konvolucijske neuronske mreže za postizanje najbolje rezultate(međutim, nisu osvojili ImageNet 2013, ali su ušli u vrh; UPD: ispada da su pobijedili, Clarifai je ono što jesu).


Vizualizacija značajki


Evo primjera vizualizacije aktivacija pomoću deconvneta, danas ovaj rezultat izgleda već tako-tako, ali tada je to bio proboj.


Saliency Maps koristeći deconvnet

Duboko u konvolucijske mreže: vizualiziranje modela klasifikacije slika i mapa značajnosti (19. travnja 2014.)

Ovaj je članak posvećen proučavanju metoda vizualizacije znanja sadržanih u konvolucijskoj neuronskoj mreži. Autori predlažu dvije metode vizualizacije temeljene na gradijentnom spuštanju.

Vizualizacija modela klase

Dakle, zamislite da imamo obučenu neuronsku mrežu za rješavanje problema klasifikacije u određeni broj klasa. Označite kao vrijednost aktivacije izlaznog neurona koji odgovara klasi c. Tada nam sljedeći optimizacijski problem daje točno sliku koja maksimizira odabranu klasu:



Ovaj zadatak je lako riješiti pomoću Theano-a. Obično od okvira tražimo da uzme derivaciju parametara modela, ali ovaj put pretpostavljamo da su parametri fiksni i derivaciju uzimamo iz ulazne slike. Sljedeća funkcija odabire maksimalnu vrijednost izlaznog sloja i vraća funkciju koja izračunava derivaciju u odnosu na ulaznu sliku.


def compile_saliency_function(net): """ Sastavlja funkciju za izračunavanje mapa istaknutosti i predviđenih klasa za danu minibatch ulaznih slika. """ inp = net["input"].input_var outp = lasagne.layers.get_output(net ["fc8"], deterministic=True) max_outp = T.max(outp, axis=1) saliency = theano.grad(max_outp.sum(), wrt=inp) max_class = T.argmax(outp, axis=1) vrati theano.function(, )

Vjerojatno ste vidjeli čudne slike pasa na internetu - DeepDream. U izvornom članku autori koriste sljedeći proces za generiranje slika koje maksimiziraju odabranu klasu:

  1. Inicijalizirajte početnu sliku nulama.
  2. Izračunajte vrijednost derivacije iz ove slike.
  3. Promijenite sliku dodavanjem dobivene slike iz izvedenice.
  4. Vratite se na korak 2 ili izađite iz petlje.

Rezultirajuće slike su:




Ali što ako prvu sliku inicijalizirate pravom fotografijom i pokrenete isti postupak? Ali u svakoj ćemo iteraciji izabrati slučajnu klasu, ostatak postaviti na nulu i izračunati vrijednost derivacije, tada dobivamo tako dubok san.


Oprez 60 mb


Zašto ima toliko lica i očiju pasa? Jednostavno je: postoji gotovo 200 pasa na mreži slika od 1000 klasa, oni imaju oči. I također puno predavanja gdje su samo ljudi.

Ekstrakcija istaknutosti klase

Ako se ovaj proces inicijalizira s pravom fotografijom, zaustavi nakon prve iteracije i iscrtavanja vrijednosti derivata, tada ćemo dobiti takvu sliku, dodajući je izvornoj, povećat ćemo aktivacijsku vrijednost odabrane klase.


Karte istaknutosti korištenjem izvedenice


Opet je rezultat "tako-tako". Važno je napomenuti da ovo novi put vizualizacija aktivacija (ništa nas ne sprječava da fiksiramo vrijednosti aktivacija ne na zadnjem sloju, već općenito na bilo kojem sloju mreže i uzimamo derivat s obzirom na ulaznu sliku). Sljedeći članak kombinirat će oba prethodna pristupa i dati nam alat za postavljanje prijenosa stila, koji će biti opisan kasnije.

Težnja ka jednostavnosti: The All Convolutional Net (13. travnja 2015.)

Ovaj članak općenito nije o vizualizaciji, već o činjenici da zamjena udruživanja s konvolucijom s velikim korakom ne dovodi do gubitka kvalitete. No, kao nusprodukt svog istraživanja, autori su predložili novi način vizualizacije značajki, koji su primijenili za točniju analizu onoga što model uči. Njihova ideja je sljedeća: ako jednostavno uzmemo derivaciju, tada se one značajke koje su bile manje od nule na ulaznoj slici ne vraćaju natrag tijekom dekonvolucije (koristeći ReLu za ulaznu sliku). A to dovodi do činjenice da se negativne vrijednosti pojavljuju na propagiranoj stražnjoj slici. S druge strane, ako koristite deconvnet, tada se drugi ReLu uzima iz derivata ReLu - to vam omogućuje da ne preskačete negativne vrijednosti, ali kao što ste vidjeli, rezultat je "tako-tako". Ali što ako kombiniramo ove dvije metode?




class GuidedBackprop(ModifiedBackprop): def grad(self, inputs, out_grads): (inp,) = inputs (grd,) = out_grads dtype = inp.dtype return (grd * (inp > 0).astype(dtype) * (grd > 0).astype(dtype),)

Tada dobivate potpuno čistu i razumljivu sliku.


Karte istaknutosti pomoću vođene povratne propagande

Idi dublje

Sada razmislimo, što nam to daje? Dopustite mi da vas podsjetim da je svaki konvolucijski sloj funkcija koja prima trodimenzionalni tenzor kao ulaz i također proizvodi trodimenzionalni tenzor kao izlaz, možda druge dimenzije d x w x h; d epth je broj neurona u sloju, svaki od njih generira mapu značajki s veličinom w igth x h osam.


Pokušajmo sljedeći eksperiment na VGG-19 mreži:



konv1_2

Da, ne vidite gotovo ništa, jer. receptivno područje je vrlo malo, ovo je druga konvolucija 3x3, odnosno ukupna površina je 5x5. Ali zumiranjem vidimo da je značajka samo detektor gradijenta.




conv3_3


conv4_3


conv5_3


bazen5


A sada zamislimo da ćemo umjesto maksimuma preko ploče uzeti derivaciju vrijednosti zbroja svih elemenata ploče preko ulazne slike. Tada će očito receptivno područje skupine neurona pokriti cijelu ulaznu sliku. Za rane slojeve vidjet ćemo svijetle karte, iz kojih zaključujemo da su to detektori boja, zatim gradijenti, pa granice i tako dalje prema složenijim uzorcima. Što je sloj dublji, dobiva se tamnija slika. To se objašnjava činjenicom da dublji slojevi imaju složeniji uzorak koji detektiraju, a složeni se uzorak pojavljuje rjeđe od jednostavnog, pa se stoga aktivacijska mapa zatamnjuje. Prvi način je prikladan za razumijevanje slojeva sa složenim uzorcima, a drugi je taman za jednostavne.


conv1_1


conv2_2


conv4_3


Možete preuzeti potpuniju bazu podataka aktivacija za nekoliko slika i .

Neuralni algoritam umjetničkog stila (2. rujna 2015.)

Dakle, od prve uspješne trepanacije neuronske mreže prošlo je par godina. Mi (u smislu čovječanstva) imamo moćan alat u našim rukama koji nam omogućuje da razumijemo što neuronska mreža uči, kao i da uklonimo ono što ne bismo baš željeli da nauči. Autori ovog članka razvijaju metodu koja vam omogućuje da jedna slika generira sličnu aktivacijsku mapu kao neka ciljna slika, a možda čak i više od jedne - to je osnova stiliziranja. Na ulaz unosimo bijeli šum i u sličnom iterativnom procesu kao u dubokom snu, ovu sliku dovodimo do one u kojoj su mape značajki slične ciljanoj slici.

gubitak sadržaja

Kao što je već spomenuto, svaki sloj neuronske mreže proizvodi trodimenzionalni tenzor neke dimenzije.




Označimo izlaz ja sloj od ulaza kao . Onda ako minimiziramo ponderirani zbroj reziduala između ulazne slike i neku sliku kojoj težimo c, onda ćete dobiti točno ono što vam je potrebno. Može biti.



Za eksperimentiranje s ovim člankom možete upotrijebiti ovo čarobno prijenosno računalo na kojem se odvijaju izračuni (i na GPU-u i na CPU-u). GPU se koristi za izračunavanje značajki neuronske mreže i vrijednosti funkcije troška. Theano proizvodi funkciju koja može izračunati gradijent funkcije cilja eval_grad prema ulaznoj slici x. To se zatim ubacuje u lbfgs i iterativni proces počinje.


# Inicijaliziraj sa slikom šuma generated_image.set_value(floatX(np.random.uniform(-128, 128, (1, 3, IMAGE_W, IMAGE_W)))) x0 = generated_image.get_value().astype("float64") xs = xs.append(x0) # Optimiziraj, povremeno spremajući rezultat za i u rasponu(8): print(i) scipy.optimize.fmin_l_bfgs_b(eval_loss, x0.flatten(), fprime=eval_grad, maxfun=40) x0 = generirana_slika.get_value().astype("float64") xs.append(x0)

Ako pokrenemo optimizaciju takve funkcije, brzo ćemo dobiti sliku sličnu ciljanoj. Sada možemo ponovno stvoriti slike iz bijelog šuma koje izgledaju kao neka slika sadržaja.


Gubitak sadržaja: conv4_2



Proces optimizacije




Lako je primijetiti dvije značajke rezultirajuće slike:

  • izgubljene boje - to je rezultat činjenice da u konkretan primjer korišten je samo sloj conv4_2 (ili, drugim riječima, težina w je bila različita od nule za njega i nula za ostale slojeve); kao što se sjećate, rani slojevi sadrže informacije o bojama i gradijentnim prijelazima, a kasniji sadrže informacije o većim detaljima, što je ono što opažamo - boje su izgubljene, ali sadržaj nije;
  • neke kuće "ajmo", t j . ravne linije su blago zakrivljene - to je zato što što je sloj dublji, to je manje informacija o prostornom položaju značajke koju sadrži (rezultat primjene zavoja i udruživanja).

Dodavanje ranih slojeva odmah ispravlja situaciju s bojama.


Gubitak sadržaja: conv1_1, conv2_1, conv4_2


Nadamo se da ste do sada imali osjećaj da imate kontrolu nad onim što se ponovno iscrtava na slici bijelog šuma.

gubitak stila

A sada smo došli do najzanimljivijeg: kako možemo prenijeti stil? Što je stil? Očito, stil nije ono što smo optimizirali u Content Loss-u, jer sadrži puno informacija o prostornim položajima značajki. Dakle, prva stvar koju treba učiniti jest nekako ukloniti te informacije iz prikaza primljenih na svakom sloju.


Autor predlaže sljedeću metodu. Uzmimo tenzor na izlazu nekog sloja, proširimo ga u prostorne koordinate i izračunajmo matricu kovarijance između ploča. Označimo ovu transformaciju kao G. Što smo zapravo učinili? Može se reći da smo brojali koliko se često značajke unutar ploče pojavljuju u parovima, ili, drugim riječima, aproksimirali smo distribuciju značajki na pločama multivarijatnom normalnom distribucijom.




Zatim se Gubitak stila unosi kako slijedi, gdje s je neka slika sa stilom:



Hoćemo li pokušati za Vincenta? U principu, dobivamo nešto očekivano - buku u stilu Van Gogha, informacije o prostornom rasporedu obilježja potpuno su izgubljene.


Vincent




Što ako stavimo fotografiju umjesto stilske slike? Dobijate već poznate crte, poznate boje, ali se prostorni položaj potpuno gubi.


Fotografija s gubitkom stila


Sigurno ste se pitali zašto izračunavamo matricu kovarijance, a ne nešto drugo? Uostalom, postoji mnogo načina za agregiranje značajki tako da se izgube prostorne koordinate. Ovo je doista otvoreno pitanje, a ako uzmete nešto vrlo jednostavno, rezultat se neće dramatično promijeniti. Provjerimo ovo, nećemo izračunati matricu kovarijance, već jednostavno prosječnu vrijednost svake ploče.




jednostavan gubitak stila

Kombinirani gubitak

Naravno, postoji želja za miješanjem ove dvije troškovne funkcije. Tada ćemo iz bijelog šuma generirati takvu sliku da će zadržati značajke iz slike-sadržaja (koje su vezane za prostorne koordinate), a bit će i "stilskih" značajki koje nisu vezane za prostorne koordinate, tj. nadamo se da ćemo detalje slike sadržaja zadržati netaknutima, ali ponovno iscrtanim s pravim stilom.



Zapravo, postoji i regularizator, ali ćemo ga izostaviti radi jednostavnosti. Ostaje odgovoriti na sljedeće pitanje: koje slojeve (težine) koristiti u optimizaciji? I bojim se da na to pitanje nemam odgovor, a nemaju ga ni autori članka. Imaju prijedlog da se koristi sljedeće, ali to uopće ne znači da će druga kombinacija raditi lošije, prostor za pretraživanje je prevelik. Jedino pravilo koje proizlazi iz razumijevanja modela je da nema smisla uzimati susjedne slojeve, jer njihovi se znakovi neće mnogo razlikovati jedni od drugih, stoga se sloj iz svake skupine conv*_1 dodaje u stil.


# Definirajte gubitke funkcije gubitaka = # gubitak sadržaja losses.append(0.001 * content_loss(photo_features, gen_features, "conv4_2")) # gubitak stila losses.append(0.2e6 * style_loss(art_features, gen_features, "conv1_1")) losses.append (0.2e6 * style_loss(art_features, gen_features, "conv2_1")) losses.append(0.2e6 * style_loss(art_features, gen_features, "conv3_1")) losses.append(0.2e6 * style_loss(art_features, gen_features, "conv4_1") ) losses.append(0.2e6 * style_loss(art_features, gen_features, "conv5_1")) # total variation penalty losses.append(0.1e-7 * total_variation_loss(generated_image)) total_loss = sum(losses)

Konačni model može se prikazati u sljedećem obliku.




A evo i rezultata kuća s Van Goghom.



Pokušajte kontrolirati proces

Prisjetimo se prethodnih dijelova, već dvije godine prije aktualnog članka drugi su znanstvenici istraživali što neuronska mreža doista uči. Naoružani svim ovim člancima, možete generirati vizualizacije značajki različitih stilova, razne slike, različite razlučivosti i veličine te pokušajte razumjeti koje slojeve s kojom težinom uzeti. Ali čak ni ponovno ponderiranje slojeva ne daje potpunu kontrolu nad onim što se događa. Problem je ovdje više konceptualni: optimiziramo pogrešnu funkciju! Kako to, pitate se? Odgovor je jednostavan: ova funkcija minimizira ostatak ... dobro, shvatili ste. Ali ono što stvarno želimo je da nam se sviđa slika. Konveksna kombinacija funkcija gubitka sadržaja i stila nije mjera onoga što naš um smatra lijepim. Uočeno je da ako se stiliziranje nastavi predugo, troškovna funkcija prirodno pada sve niže i niže, ali estetska ljepota rezultata naglo opada.




U redu, postoji još jedan problem. Recimo da smo pronašli sloj koji izvlači značajke koje su nam potrebne. Recimo da su neke teksture trokutaste. Ali ovaj sloj i dalje sadrži mnoge druge značajke, kao što su krugovi, koje stvarno ne želimo vidjeti na rezultirajućoj slici. Općenito govoreći, kada bismo mogli zaposliti milijun Kineza, mogli bismo vizualizirati sve značajke stilske slike, te iscrpnom pretragom samo označiti one koje su nam potrebne i samo ih uključiti u funkciju troškova. Ali iz očitih razloga, to nije tako jednostavno. Ali što ako samo uklonimo sve krugove za koje ne želimo da se pojave u rezultatu iz stilske tablice? Tada aktivacija odgovarajućih neurona koji reagiraju na krugove jednostavno neće funkcionirati. I, naravno, tada se to neće pojaviti na rezultirajućoj slici. Isto je i sa cvijećem. Predstavite svijetlu sliku s puno boja. Distribucija boja bit će vrlo razmazana po prostoru, distribucija rezultirajuće slike bit će ista, ali će se tijekom procesa optimizacije vrhovi koji su bili na originalu vjerojatno izgubiti. Pokazalo se da jednostavno smanjenje dubine bita paleta boja rješava ovaj problem. Gustoća distribucije većine boja bit će blizu nule, a bit će velikih vrhova u nekoliko područja. Stoga, manipulirajući izvornikom u Photoshopu, manipuliramo značajkama koje su izvučene iz slike. Čovjeku je lakše vizualno izraziti svoje želje nego pokušati ih formulirati jezikom matematike. Pozdrav. Kao rezultat toga, dizajneri i menadžeri, naoružani Photoshopom i skriptama za vizualizaciju značajki, postigli su rezultat tri puta brže nego što su to učinili matematičari i programeri.


Primjer manipuliranja bojom i veličinom značajki


I odmah možete uzeti jednostavnu sliku kao stil



rezultate








I ovdje je vidosik, ali samo s pravom teksturom

Mreže tekstura: napredna sinteza tekstura i stiliziranih slika (10. ožujka 2016.)

Čini se da bi se to moglo zaustaviti, ako ne i jedna nijansa. Gore navedeni algoritam stiliziranja radi jako dugo. Ako uzmemo implementaciju u kojoj se lbfgs izvodi na CPU-u, tada proces traje oko pet minuta. Ako ga prepišete tako da optimizacija ide na GPU, tada će proces trajati 10-15 sekundi. Nije dobro. Možda su o tome razmišljali i autori ovog i sljedećeg članka. Obje su publikacije izašle neovisno u razmaku od 17 dana, gotovo godinu dana nakon prethodnog članka. Autori ovog članka, kao i autori prethodnog, bavili su se generiranjem tekstura (ako samo resetujete Gubitak stila, to je otprilike ono što dobivate). Predložili su optimizaciju ne slike dobivene iz bijelog šuma, već neke neuronske mreže koja generira stiliziranu sliku.




Sada, ako proces oblikovanja ne uključuje nikakvu optimizaciju, potrebno je napraviti samo prolaz naprijed. A optimizacija je potrebna samo jednom za osposobljavanje mreže generatora. Ovaj članak koristi hijerarhijski generator gdje svaki sljedeći z veći od prethodnog i uzorkuje se iz šuma u slučaju generiranja teksture i iz neke baze podataka slika za obuku stilizatora. Kritično je koristiti nešto drugo osim dijela za obuku na imagenetu, jer značajke unutar Loss-mreže izračunava mreža trenirana samo na dijelu obuke.



Perceptualni gubici za prijenos stila u stvarnom vremenu i super rezoluciju (27. ožujka 2016.)

Kao što naziv govori, autori koji su s idejom generiranja mreže kasnili samo 17 dana, bili su zauzeti povećanjem rezolucije slika. Čini se da su bili inspirirani uspjehom zaostalog učenja na najnovijem imagenetu.




Prema tome preostali blok i blok konv.



Tako sada osim kontrole stajlinga u rukama imamo i brzi generator (zahvaljujući ova dva članka vrijeme generiranja jedne slike mjeri se u desecima ms).

Završetak

Podatke iz pregledanih članaka i kod autora koristili smo kao polazište za izradu druge aplikacije za stiliziranje prve aplikacije za stiliziranje videa:



Generirajte nešto poput ovoga.


Na najobičnijim fotografijama pojavljuju se brojni i ne sasvim prepoznatljivi entiteti. Najčešće iz nekog razloga psi. Takve su slike počele puniti internet u lipnju 2015., kada je lansiran Googleov DeepDream - jedan od prvih otvorenih servisa koji se temelji na neuronskim mrežama i dizajniran za obradu slika.

To se događa otprilike ovako: algoritam analizira fotografije, pronalazi u njima fragmente koji ga podsjećaju na neke poznate objekte - i iskrivljuje sliku u skladu s tim podacima.

Prvo je projekt postavljen kao open source, a zatim su se na internetu pojavile online usluge stvorene na istim principima. Jedan od najprikladnijih i najpopularnijih je Deep Dream Generator: ovdje je potrebno samo oko 15 sekundi za obradu male fotografije (ranije su korisnici morali čekati više od sat vremena).

Kako neuronske mreže uče stvarati takve slike? I zašto se, usput, tako zovu?

Neuronske mreže u svom dizajnu oponašaju stvarne neuronske mreže živog organizma, ali to rade uz pomoć matematičkih algoritama. Nakon što ste izradili osnovnu strukturu, možete je trenirati pomoću metoda strojnog učenja. Ako govorimo o prepoznavanju uzoraka, onda kroz neuronsku mrežu treba proći tisuće slika. Ako je zadatak neuronske mreže drugačiji, onda će i vježbe obuke biti drugačije.

Algoritmi za igranje šaha, na primjer, analiziraju šahovske partije. Na istom putu, Googleov DeepMindov AlphaGo algoritam u kinesku igru ​​Go - koja je hvaljena kao otkriće jer je Go mnogo složeniji i nelinearan od šaha.

    Možete se poigrati s pojednostavljenim modelom neuronske mreže i bolje razumjeti njegove principe.

    YouTube također ima niz razumljivih ručno nacrtanih valjci o tome kako funkcioniraju neuronske mreže.

Još jedna popularna usluga je Dreamscope, koja ne samo da može sanjati o psima, već i oponašati različite stilove slikanja. Obrada slike i ovdje je vrlo jednostavna i brza (oko 30 sekundi).

Navodno je algoritamski dio usluge modifikacija programa Neural style, o kojem smo već govorili.

Nedavno se pojavio program koji realistično slika crno-bijele slike. U prijašnjim su verzijama slični programi puno slabije obavljali svoj posao, a smatralo se velikim uspjehom ako barem 20% ljudi nije znalo razlikovati pravu sliku od računalno obojene.

Štoviše, kolorizacija ovdje traje samo oko 1 minute.

Ista razvojna tvrtka pokrenula je i uslugu prepoznavanja na slikama različiti tipovi objekti.

Ove se usluge mogu činiti kao samo zabavna zabava, ali zapravo je sve puno zanimljivije. Nove tehnologije ulaze u praksu ljudskih umjetnika i mijenjaju naše shvaćanje umjetnosti. Možda će se ljudi uskoro morati natjecati sa strojevima na polju kreativnosti.

Podučavanje algoritama za prepoznavanje uzoraka zadatak je s kojim se AI programeri bore već dugo vremena. Stoga se programi koji boje stare fotografije i crtaju pse na nebu mogu smatrati dijelom većeg i intrigantnijeg procesa.


Vrh