Vaizdų stiliavimas naudojant neuroninius tinklus: ne misticizmas, tiesiog Mattan. Ostagram: Skaičius pagrįsta paslauga, derinant nuotraukas ir papuošalus meniniais šedevais Neurallet traukia nuotraukas

Vaizdų stiliavimas naudojant neuroninius tinklus: ne misticizmas, tiesiog Mattan. Ostagram: Skaičius pagrįsta paslauga, derinant nuotraukas ir papuošalus meniniais šedevais Neurallet traukia nuotraukas
Vaizdų stiliavimas naudojant neuroninius tinklus: ne misticizmas, tiesiog Mattan. Ostagram: Skaičius pagrįsta paslauga, derinant nuotraukas ir papuošalus meniniais šedevais Neurallet traukia nuotraukas

Daugelyje paprastų nuotraukų atsiranda daugybė ir ne visiškai išskirtini esencijos. Dažniausiai dėl kokių nors priežasčių šunims. Šis interneto vaizdas prasidėjo 2015 m. Birželio mėn., Kai buvo pradėtas "DeepRream" iš "Google" - viena iš pirmųjų atvirų paslaugų, pagrįstų nervų tinklais ir skirti vaizdo apdorojimui.

Tai vyksta maždaug taip: algoritmas analizuoja nuotraukas, randa fragmentus, kurie jam primena bet kokius pažįstamus objektus - ir iškraipo vaizdą pagal šiuos duomenis.

Iš pradžių projektas buvo paskelbtas kaip atviro kodo, o tada interneto paslaugos, sukurtos internete, sukurta tais pačiais principais. Vienas iš patogiausių ir populiariausių yra giliai svajonių generatorius: mažas nuotraukų apdorojimas čia trunka tik apie 15 sekundžių (ankstesni vartotojai turėjo laukti daugiau nei valandą).

Kaip neuroniniai tinklai mokosi sukurti tokius vaizdus? Ir kodėl, beje, ar jie vadinami?

Neuroniniai tinklai savo prietaise imituoja realius gyvenvietės nervų tinklus, tačiau jie tai daro su matematinių algoritmų pagalba. Sukūrus pagrindinę struktūrą, galite jį mokyti pagal mašinų mokymosi metodus. Jei kalbame apie atpažinimo atpažinimą, tada tūkstančiai vaizdų reikia praleisti per neuroninį tinklą. Jei neurosetės užduotis yra kitokia, tada mokymo pratybos bus kitokios.

Algoritmai žaisti šachmatų, pavyzdžiui, analizuoti šachmatų žaidimus. Ta pati algoritmas Algoritmas iš "Google Deepmind" kinų žaidimo metu - kuris buvo suvokiamas kaip proveržis, nes tai yra daug sunkiau ir verta daugiau nei šachmatai.

    Žaidžia supaprastintą neuroninio tinklo modelį ir geriau suprasti savo principus.

    "YouTube" taip pat turi daug asmeninės rankos volai. \\ T Apie tai, kaip veikia neuroniniai tinklai.

Kita populiari paslauga yra "DreamScope", kuris gali ne tik svajoti šunims, bet ir imituoja įvairius vaizdingus stilius. Vaizdo apdorojimas čia taip pat vyksta labai paprastas ir greitai (apie 30 sekundžių).

Matyt, algoritminė tarnybos dalis yra neuroninio stiliaus programos pakeitimas, kurį mes jau esame.

Pastaruoju metu buvo programa, kuri realiai dažo juoda ir balta vaizdai. Ankstesnėse versijose panašios programos susidorojau su savo užduotimi daug toli, ir buvo laikoma dideliu pasiekimu, jei ne mažiau kaip 20 proc. Žmonių negali atskirti tikros nuotraukos iš kompiuterio dažytų vaizdų.

Be to, spalvos čia trunka tik apie 1 minutę.

Ta pati plėtros įmonė taip pat pradėjo paslaugą, kuri atpažįsta įvairių tipų objektus nuotraukose.

Šios paslaugos gali atrodyti tik juokinga pramogos, tačiau iš tikrųjų viskas yra daug įdomesnė. Naujos technologijos yra įtrauktos į žmonių menininkų praktiką ir pakeisti mūsų idėjas apie meną. Tikriausiai netrukus žmonės turės konkuruoti su automobiliais ir kūrybiškumo srityje.

Išmokykite algoritmus, kad atpažintumėte vaizdus - užduotį, kurią dirbtinio intelekto kūrėjai jau seniai kovojo. Todėl programos, kurios yra senų nuotraukų spalvų šunų danguje, gali būti laikoma didesnio ir intriguojančio proceso dalimi.

Sveikinimai jums, Habr! Žinoma, pastebėjote, kad šiose tie aktyviai aptariama įvairių meno stilių stiliaus nuotraukų tema. Skaitydami visus šiuos populiarius straipsnius, galite manyti, kad po šių programų gaubtu, magija vyksta, o neuroninis tinklas tikrai fantazijas ir perrašo vaizdą nuo nulio. Taip atsitiko, kad mūsų komanda susidūrė su panašia užduotimi: vidiniame korporacijos "Hackaton" sistemoje mes padarėme vaizdo stilizaciją, nes Nuotraukų paraiška jau buvo. Šiame pranešime mes suprasime, kaip šis tinklas "redraws" vaizdai, ir mes analizuosime straipsnius, dėl kurių jis tapo įmanoma. Prieš skaitydamas šią medžiagą, rekomenduoju susipažinti su paskutiniu pranešimu ir apskritai su konvoliucinės nervų tinklų pagrindais. Jūs laukiate šiek tiek formulės, šiek tiek kodo (pavyzdžiai, kuriuos aš nuvesiu į Theano ir Lasagne), taip pat daug nuotraukų. Šis pranešimas yra pastatytas chronologine tvarka straipsnių išvaizdos ir, atitinkamai idėjų patys. Kartais aš atstumsiu jį į mūsų naujausią patirtį. Čia yra berniukas nuo pragaro, kad pritrauktų dėmesį.


Vizualizuoti ir suprasti konvoliucinius tinklus (2013 m. Lapkričio 28 d.)

Visų pirma, verta paminėti straipsnį, kuriame autoriai galėjo parodyti, kad neuroninis tinklas nėra juodas langelis, bet gana aiškinamas dalykas (beje, šiandien galima pasakyti ne tik apie kompiuterio konvoliucinius tinklus vizija). Autoriai nusprendė sužinoti, kaip interpretuoti paslėptų sluoksnių neuronų aktyvavimą, nes jie naudojo deconvoliucinį neuroninį tinklą (DeconVnet) pasiūlė kelerius metus (beje, tas pats Zayleris ir Fergus, kurie yra autoriai ir tai Leidinys). DeconVolutionary tinklas iš tikrųjų yra tas pats tinklas su traukuliais ir dienoraščiais, tačiau taikoma atvirkštine tvarka. Pradiniame DeconVnet operacijoje tinklas buvo naudojamas treniruočių režime be mokytojo generuoti vaizdus. Šį kartą autoriai taikė jį tiesiog priešingu perdavimu nuo požymių, gautų po tiesioginio perėjimo prie tinklo, į pradinį vaizdą. Dėl to paaiškėja vaizdą, kuris gali būti aiškinamas kaip signalas, kuris sukėlė šį aktyvavimą neuronuose. Žinoma, kyla klausimas: kaip padaryti priešingą kelią per konvoliuciją ir netiesybę? Ir ypač per maksimalų traukimą, tai tikrai nėra apversta operacija. Apsvarstykite visus tris komponentus.

Grįžtamieji relu.

Konvoliucinėse tinkluose kaip dažnai naudojama aktyvinimo funkcija Rele (x) \u003d max (0, x)todėl visi aktyvystė ant sluoksnio nėra neigiama. Atitinkamai, kai ištrauka per netiesinį atvejį taip pat būtina gauti neigiamus rezultatus. Už tai autoriai siūlo naudoti tą patį relu. Nuo Atsižvelgiant į theano architektūros tašką, būtina panaikinti operacijos gradiento funkciją (be galo vertingas nešiojamas kompiuteris yra Lazagano receptuose, iš ten tvarkysite informaciją apie tai, kas yra modifikuotackProp klasei).

Class ZEILERBACKPROP (MODIFIKACKAGWAPROP): DEF grads (savarankiškai, įėjimai, Out_Grads): (INP,) \u003d įėjimai (GRD,) \u003d Out_grads #Recturn (GRD * (GRD * (GRD * (GRD * (GRD * (INP.Dype),) # Aiškiai ištaisyti Grįžti (self.nonlinearity (GRD),) # Naudokite tam tikrą netiesiškumą

Atvirkštinis gręžimas

Čia yra šiek tiek sudėtingesnė, tačiau viskas yra logiška: pakanka taikyti perkeltą tos pačios kailio branduolio versiją, bet į iš Reelu rezultatų, o ne ankstesniu sluoksniu, naudojamu tiesioginiu leidimu. Bet aš bijau, kad žodžiais tai nėra taip akivaizdu, mes pažvelgsime į šios procedūros vizualizaciją (rasite dar daugiau paketo vizualizacijų).


Supjaustyti su stride \u003d 1

Supjaustyti su stride \u003d 1 Grįžtamoji versija

Supjaustyti su stride \u003d 2

Supjaustyti su stride \u003d 2 Grįžtamoji versija

Atvirkštinis traukimas

Tai yra ši operacija (skirtingai nei ankstesnė) apskritai kalbama ne atvirkščiai. Bet mes vis dar norėjome eiti per maksimalų priešingą kelią. Dėl to autoriai siūlo naudoti žemėlapį, kuriame buvo daugiau tiesioginio perdavimo (maksimalus vietos jungikliai). Kai atvirkštinė ištrauka, įvesties signalas į pasirodo konvertuojamas į maždaug išsaugoti šaltinio signalo struktūrą, tai tikrai lengviau pamatyti, ką apibūdinti.



Rezultatas

Vizualizacijos algoritmas yra labai paprastas:

  1. Padaryti tiesioginį leidimą.
  2. Pasirinkite mums palūkanų sluoksnį.
  3. Saugokite vieno ar daugiau neuronų aktyvavimą ir iš naujo nustatykite poilsį.
  4. Padarykite atvirkštinę išvestį.

Kiekvienas pilka aikštė žemiau atitinka filtro vizualizaciją (kuri yra naudojama konvoliucijai) arba vieno neurono svoriai, ir kiekviena spalvų paveikslėlis yra originalaus vaizdo dalis, kuri suaktyvina atitinkamą neuroną dalis. Siekiant aiškumo, neuronai viename sluoksnyje yra sugrupuoti į temines grupes. Apskritai, tai buvo staiga, kad neuroninis tinklas sužinojo, ką Hewubel ir Weizel parašė apie vizualinės sistemos struktūrą, už kurią Nobelio premija 1981 buvo pagerbtas. Šio straipsnio dėka mes gavome vizualinį vaizdą apie tai, kas mokosi konvoliucinės neuroninio tinklo kiekviename sluoksnyje. Tai yra šios žinios, kad leis jums manipuliuoti susidariusio vaizdo turinį vėliau, bet prieš tai, šie kelerius metus išlaikė "išdavimo" nervų tinklų metodus. Be to, Straipsnio autoriai pasiūlė analizuoti, kaip geriau statyti konvoliucinę nervų tinklo architektūrą, kad pasiektų geriausius rezultatus (nors, Imagenet 2013 jie ne laimėjo, bet pateko į viršų; Atnaujinti.: Taki pasirodo laimėti, Clarifai yra jie, jie yra).


Vizualizacija


Čia yra vizualizavimo aktyvavimo pavyzdys naudojant DeconVnet, šiandien šis rezultatas jau yra toks, bet tada tai buvo proveržis.


Kovų savybingumo planas naudojant DeconVnet

Giliai viduje convoliucinės tinklai: vizualizuoti vaizdo klasifikavimo modelius ir savyb ÷ s atlyginimus (2014 m. Balandžio 19 d.)

Šis straipsnis skirtas metodų vizualizavimo žinių, pridedamų prievyriausybinio neuroninio tinklo tyrimas. Autoriai siūlo du vizualizacijos būdus, pagrįstus gradiento nusileidimu.

Klasės modelio vizualizacija

Taigi, įsivaizduokite, kad turime mokytą neuroninį tinklą, kad išspręstume klasifikavimo užduotį tam tikram klasių skaičiui. Žymi išėjimo neurono aktyvavimo vertę, atitinkančią klasę c.. Tada kita užduotis optimizavimo suteikia mums tiksliai vaizdą, kuris maksimaliai padidina pasirinktą klasę:



Ši užduotis yra lengva nuspręsti naudojant THEANO. Paprastai mes prašome sistemos imtis darinio pagal modelio parametrus, tačiau šį kartą manome, kad parametrai yra fiksuoti, o išvestinė priemonė yra priimtas per įvesties vaizdą. Ši funkcija pasirenka maksimalią išvesties sluoksnio vertę ir grąžina funkciją, kuri apskaičiuoja įvesties vaizdo darinį.


DEF Compile_Salnumas_funkcija: "" "kompiliuoja funkciją, kad apskaičiuotų derybų žemėlapius ir numatė klases tam tikram įvesties vaizdų minifaitui." "INP \u003d grynasis [" įvestis "]. Input_var umpp \u003d lasagne.layers.ge_output (neto [" FC8 "], deterministinis \u003d tiesa) max_outp \u003d t.max (Outp, ašis \u003d 1) Suderinamumas \u003d theano.grad (max_outp.sum (), wrt \u003d inp) max_class \u003d t.argmax (Outp, ašis \u003d 1) Grįžti Theano. funkcija ()

Jūs tikriausiai pamačiau stačias keistus vaizdus su šunų šunimis - Deepdream. Pradiniame straipsnyje autoriai naudoja tokį procesą, kad būtų galima kurti vaizdus, \u200b\u200bkurie padidina pasirinktą klasę:

  1. Inicijuoti pradinį Zeros vaizdą.
  2. Apskaičiuokite darinio vertę šiam vaizdui.
  3. Pakeiskite vaizdą pridėdami gautą vaizdą iš darinio.
  4. Atgal į 2 punktą arba išeiti iš ciklo.

Tokie tokie vaizdai gaunami:




Ir jei inicijuojate pirmąjį tikros nuotraukos vaizdą ir paleiskite tą patį procesą? Bet kiekvienoje iteracijoje pasirinksime atsitiktinę klasę, iš naujo nustatysime poilsio ir apskaičiuotų išvestinių finansinių priemonių vertę, tai bus tokia giliai svajonė.


ATSARGIAI 60 MB.


Kodėl tiek daug veido šunų ir akių? Viskas yra paprasta: beveik 200 šunų atveju nuo 1000 klasių, jie turi akis. Taip pat daugelis klasių, kuriose tiesiog turi žmonių.

KLASĖS PRIEŽIŪROS PRIEDAS. \\ T

Jei šis procesas yra inicijuotas pagal realią nuotrauką, sustoti po pirmojo iteracijos ir paneigti išvestinės vertę, tada mes gausime tokį vaizdą pridedant, kuris į originalą, mes padidinsime pasirinktos klasės aktyvavimo vertę .


Vaikovių tiekimo dariniai naudojant darinį


Dar kartą rezultatas "SO-SO". Svarbu pažymėti, kad tai yra naujas būdas vizualizuoti aktyvinimus (niekas neleidžia mums nustatyti aktyvinimo vertes ne paskutiniame sluoksnyje, bet apskritai ant bet kurio tinklo sluoksnio ir pasiimkite įvesties vaizdo darinį). Kitas straipsnis derins abu ankstesnius metodus ir suteikia mums įrankį pritaikyti pervežimo paslaugą į stilių, kuris bus aprašytas vėliau.

Paprastumo eilutė: visos konvoliucinės tinklas (2015 m. Balandžio 13 d.)

Šis straipsnis apskritai kalbėjo ne apie vizualizaciją, tačiau, kad PULEA konvoliucijos pakeitimas su dideliu šiaudais nesukelia kokybės praradimo. Tačiau kaip šalutinis jų tyrimų produktas, autoriai pasiūlė naują būdą vizualizuoti funkciją, kurią jie kreipėsi į tikslesnę analizę, kas mokosi modelio. Jų idėja yra tokia: jei mes tiesiog pasiimsime darinį, tada su deconvolutions, tos funkcijos, kurios buvo ant įvesties įvaizdis yra mažesnis nei nulis (NAUDOTI NAUDOJIMAS įvesties vaizdui) nėra atgal deconvolution. Ir tai lemia tai, kad neigiamos reikšmės atsiranda ant prevencijos atgal. Kita vertus, jei naudojate DeconVnet, tada dar vienas RELU yra paimtas iš "LuV" darinio - tai leidžia jums nepalikti neigiamų verčių, bet kaip matėte rezultatą, jis pasirodo "SO-SO". Bet ką daryti, jei derinsite šiuos du metodus?




Klasės GuidedbackProP (ModifiedBackProP): DEF Grad (savarankiškai, įėjimai, Out_Grads): (INP,) \u003d įėjimai (GRD,) \u003d Out_grads Dtipe \u003d INP.Dype Grįžti (GRD * (INP\u003e 0) .paspe (DYPE) * (GRD \u003e 0) .tasype (dtype),)

Tada paaiškėja visiškai švarus ir aiškinamas vaizdas.


Kovų savyb ÷ s žemėlapiai naudojant vadovaujamą backpropagaciją

Eikite giliau.

Dabar manau apie tai galvojame, ką mums suteikia? Leiskite jums priminti, kad kiekvienas instruktavimo sluoksnis yra funkcija, kuri gauna trimatį tzorą ir išvestį į išėjimą, taip pat suteikia trimatį tzorą, galbūt kitą dimensiją d. X. w. X. h.; d.epth yra sluoksnio neuronų skaičius, kiekvienas iš jų sukuria plokštelę (funkcijų žemėlapį) w.igth X. h.aštuoni.


Pabandykime surengti šį eksperimentą VG-19 tinkle:



conv1_2.

Taip, jūs beveik nematote nieko, nes Receptų plotas yra labai mažas, tai yra antroji konvoliucija 3x3, atitinkamai, bendras plotas yra 5x5. Bet didėjant, pamatysime, kad funkcija yra tik gradiento detektorius.




conv3_3.


conv4_3.


conv5_3.


pool5.


Ir dabar mes įsivaizduojame, kad vietoj maksimalaus ant RAID, mes imsimės visų kauliukų elementų išvestinę vertę įvesties paveikslėlyje. Tada akivaizdu, kad neuronų grupės receptų sritis apims visą įvesties vaizdą. Dėl ankstyvųjų sluoksnių pamatysime ryškias korteles, iš kurios mes darome išvadą, kad tai yra gėlių detektoriai, tada gradientai, tada sienos ir pan. Gilesnis sluoksnis, tuo labiau nuobodu vaizdas paaiškėja. Tai paaiškinama tuo, kad gilesni sluoksniai, sudėtingesnis modelis, kurį jie aptinka, ir sudėtingas modelis atrodo rečiau, paprastas, todėl aktyvinimo žemėlapis tvirtėja. Pirmasis metodas tinka suprasti sluoksnius su sudėtingais modeliais, o antra yra tik paprasta.


conv1_1.


conv2_2.


conv4_3.


Galite atsisiųsti išsamesnę aktyvinimo duomenų bazę keliems vaizdams ir.

Neuroninis meninio stiliaus algoritmas (2015 m. Rugsėjo 2 d.)

Taigi, praėjo porą metų nuo pirmojo sėkmingo neuroninio tinklo kūrinio momento. Mes (ta prasme - žmonijoje) yra galingas įrankis ant rankų, o tai leidžia suprasti, kas mokosi neuroninio tinklo, taip pat pašalinti tai, ką mes tikrai nebus patinka tai mokytis. Šio straipsnio autoriai kuria metodą, leidžiantį vienam vaizdui generuoti panašią aktyvinimo kortelę už tikslinį vaizdą, ir galbūt net vienas dalykas - tai yra stilizacijos pagrindas. Mes aptarnaujame baltą triukšmą ant įėjimo ir panašaus iteracinio proceso, kaip ir giliai svajonėje, mes pristatome šį vaizdą į tai, kurio požymiai ženklai yra panašūs į tikslinį vaizdą.

Turinio praradimas.

Kaip jau minėta, kiekvienas neuroninio tinklo sluoksnis sukuria trijų matmenų tzorą.




Žymi būdu i.Sluoksnis nuo įėjimo. Tada, jei sumažinsime svertinę sumą skiriasi nuo įvesties vaizdo ir kai kuriam vaizdui, į kurį mes siekiame c., tada tai paaiškėja, ko jums reikia. Tikriausiai.



Eksperimentams su šiuo straipsniu galima naudoti šį magišką nešiojamąjį kompiuterį, skaičiavimai vyksta ten (tiek GPU, tiek CPU). GPU naudojamas norint apskaičiuoti neuroninio tinklo bruožą ir sąnaudų funkcijos vertę. "Theano" suteikia funkciją, kuri gali apskaičiuoti tikslinės funkcijos gradientą eval_grad. Įvesties paveikslėlyje x.. Tada tai yra patiekiami LBFGS ir pradėtas iteracinis procesas.


# Inicijuoti su triukšmo vaizdu generuot_image.set_value (plūduriuojanti (NP.Random.Uniform (-128, 128, (1, 3, image_w, image_w)))) x0 \u003d generuojami_image.get_value (). Astype ("Floap64") xs \u003d xs.append (x0) # optimizuoti, išsaugant rezultatą periodiškai i diapazone (8): spausdinti (i) scipy.optimize.fmin_l_bfgs_b (eval_loss, x0.flatten (), fprime \u003d eval_grad, maxfun \u003d 40) x0 \u003d generavimo_image.get_value (). ASTIPE ("FLOAT64") xs.Append (x0)

Jei pradėsime tokios funkcijos optimizavimą, tada mes greitai gauname panašų į tikslą. Dabar galime atkurti vaizdus, \u200b\u200bpanašius į kai kurių turinio vaizdą.


Turinio praradimas: CONV4_2



Proceso optimizavimas




Lengva pastebėti, kad gaunamo vaizdo funkcijos:

  • spalvos buvo prarastos - tai yra tai, kad tam tikru pavyzdžiu naudojamas tik Conv4_2 sluoksnis (arba, kitaip tariant, su juo buvo naudojamas svoris, ir likusių nulinių sluoksnių); Kaip prisimenate, tai yra ankstyvieji sluoksniai, kuriuose pateikiama informacija apie spalvų ir gradiento perėjimus, o vėliau pateikiama informacija apie didesnius daiktus, kuriuos mes stebime - spalvos yra prarastos, ir nėra turinio;
  • kai kurie namai "nuėjo", t. Y. Tiesios linijos šiek tiek susuktos - tai yra todėl, kad gilesnis sluoksnis, tuo mažiau informacijos apie erdvinės padėties funkcijos yra ribojama (dėl paketo ir uolos naudojimo rezultatas).

Ankstyvų sluoksnių pridėjimas nedelsdamas ištaiso padėtį su gėlėmis.


Turinio praradimas: conv11, conv2_1, conv4_2


Tikiuosi, kad šis taškas manė, kad galite valdyti, kas bus iškreipta ant balto triukšmo.

Stiliaus praradimas.

Ir todėl mes turime įdomiausią: ką apie mus perduoti stilių? Kas yra stilius? Akivaizdu, kad stilius nėra ta, kad mes optimizavome turinio praradimo "E, nes yra informacijos apie erdvinių pozicijų funkcijų daug. Taigi pirmas dalykas, kurį reikia padaryti, yra bet kokiu būdu pašalinti šią informaciją iš gautų atstovybių kiekvienas sluoksnis.


Autorius siūlo tokį kelią. Mes paimsime įtemptą iš kai kurių sluoksnio, mes plečiame erdvinių koordinates ir apsvarstysime kovariacijos matricą tarp mirčių. Žymi šią konversiją kaip G.. Ką mes iš tikrųjų padarėme? Galima sakyti, kad skaičiuojame, kaip dažnai priskiriami kauliukų viduje, yra poromis, arba, kitaip tariant, mes suderiname požymių pasiskirstymą dies su daugialypiu įprastu platinimu.




Tada stiliaus praradimas įvedamas taip, kur s. - tai yra kai vaizdas su stiliumi:



Pabandykime Vincent? Iš esmės mes gauname kažką tikėtino yra "Van Gogh" stiliaus triukšmas, informacija apie funkcijų erdvinę vietą yra visiškai prarasta.


Vincent.




Ir ką daryti, jei įdėkite nuotrauką, o ne stilių? Pasirodo jau pažįstamos funkcijos, pažįstamos spalvos, tačiau erdvinė padėtis yra visiškai prarasta.


Nuotrauka su stiliaus praradimu


Žinoma, jums įdomu, kodėl mes apskaičiuojame Covariance Matrix, o ne ką nors kita? Galų gale, yra daug būdų sujungti požymius, kad erdvinės koordinatės yra prarastos. Tai tikrai atviras klausimas, ir jei vartojate kažką labai paprasto, tada rezultatas nesikeis dramatiškai. Patikrinkime, apskaičiuosime Covariance Matrix, bet tiesiog vidutinę kiekvieno kauliukų vertę.




paprastas stiliaus praradimas

Kombinuotas praradimas

Natūralu, kad norumas kyla sumaišyti šias dvi išlaidas. Tada mes sukursime nuo balto triukšmo, kad bus požymių iš turinio-atvaizdo (kuris turi privalomą erdvinių koordinates), ir "stiliaus" ženklai, kurie nėra susieta su erdvinių koordinatais bus, t.y. Tikimės, kad turinio turinio detalės bus nepažeistos iš jų vietų, bet bus perrašyta su norimu stiliumi.



Tiesą sakant, taip pat yra reguliatorius, bet mes jį apibrėžiame paprastumu. Lieka atsakyti į kitą klausimą: kokie sluoksniai (svorio) naudojimas optimizuojant? Ir aš bijau, kad aš neturiu atsakymo į šį klausimą, ir straipsnio autoriai taip pat. Jie turi pasiūlymą naudoti šiuos veiksmus, tačiau tai nereiškia, kad kitas derinys veiks dar blogiau, per daug paieškos vietos. Vienintelė taisyklė, kuri išplaukia iš modelio supratimo: ji neturi prasmės imtis kaimyninių sluoksnių, nes Jie nesiskiria vienas nuo kito, nes stilius pridedamas per kiekvienos grupės konvertavimo sluoksnį * _1.


# Apibrėžti nuostolių funkcijų nuostoliai \u003d # turinio praradimo nuostoliai.Append (0.001 * content_loss (foto_features, gen_features, "Conv4_2")) # stiliaus praradimo nuostoliai ("Art_Features", "Gen_Features", "Conv2_1")) nuostoliai 0.2E6 * style_loss (Art_features, Gen_Features, "Conv5_1")) # Bendras variacijos bausmės nuostoliai

Galutinis modelis gali būti pateikiamas tokia forma.




Tačiau namų su Van Gogh rezultatas.



Bandyti kontroliuoti procesą

Prisiminkime ankstesnes dalis, jau dvejus metus iki dabartinio straipsnio, kiti mokslininkai tiria tai, kas iš tikrųjų sužino neuroninį tinklą. Ginkluoti su visais šiais straipsniais, galite išgydyti įvairių stilių funkcijų, įvairių vaizdų, įvairių leidimų ir dydžių vizualizaciją, ir pabandykite suprasti, kokie sluoksniai su kokia svorio imtis. Tačiau net ir sluoksnių plytelės visiškai kontroliuoja tai, kas vyksta. Problema čia yra daugiau konceptualios: mes nesame optimizuojame šios funkcijos! Kaip paklausti? Atsakymas yra paprastas: ši funkcija sumažina likutinį ... gerai, jūs suprantate. Bet tai, ką mes tikrai norime, yra tai, kad mums patinka vaizdas. Suprauto turinio ir stiliaus nuostolių funkcijų derinys nėra tai, kad mūsų protas mano, kad gražus. Pažymėtina, kad jei ir toliau stilizacija per ilgai, sąnaudų funkcija natūraliai nukrenta žemiau ir žemiau, tačiau estetinis grožis rezultatas smarkiai sumažėja.




Na, gerai, yra dar viena problema. Tarkime, mes radome sluoksnį, kuris pašalina jums reikalingus ženklus. Tarkime, kai kurios trikampės tekstūros. Tačiau šis sluoksnis vis dar yra daug kitų ženklų, tokių kaip apskritimai, kurių mes tikrai nenorime matyti dėl gauto vaizdo. Apskritai, jei galėtumėte išsinuomoti milijoną kinų, galite vizualizuoti visas stiliaus stiliaus ypatybes, o visa gerovė tiesiog pažymėkite tuos, kurių mums reikia, ir tik juos įtraukti į sąnaudų funkciją. Tačiau dėl akivaizdžių priežasčių tai nėra taip paprasta. Bet ką daryti, jei mes tiesiog ištrinsime visus apskritimus, kurių mes nenorime matyti rezultato, nuo stiliaus stiliaus? Tada jie tiesiog neveikia aktyvuoti atitinkamus neuronus, kurie reaguoja į apskritimus. Ir, žinoma, tada į gautą vaizdą jis nebus rodomas. Tas pats su gėlėmis. Įsivaizduokite ryškų vaizdą su daug spalvų. Spalvų pasiskirstymas bus labai trūksta visoje erdvėje, tas pats bus gauto įvaizdžio pasiskirstymas, tačiau optimizavimo procese tos viršūnės, kurios buvo originalios, yra tikriausiai prarasti. Paaiškėjo, kad paprastas spalvų paletės spalvos sumažėjimas išsprendžia šią problemą. Daugumos spalvų pasiskirstymo tankis bus nulis, o keliuose skyriuose bus didelių smailių. Taigi, manipuliuojant originalą Photoshop, mes manipuliuoti ženklais, kurie yra gaunami iš įvaizdžio. Asmuo yra lengviau išreikšti savo norus vizualiai nei bandyti juos suformuluoti matematikos kalba. Iki. Kaip rezultatas, dizaineriai ir vadovai, ginkluoti su Photoshop ir scenarijus vizualizuoti ženklus, pasiektus kartus tris kartus rezultatas yra geresnis už tai, ką matematika su programuotojais.


Spalvų manipuliavimo pavyzdys ir funkcijų dydis


Ir jūs galite paimti paprastą vaizdą kaip stilių



Rezultatai.








Ir čia yra valdiklis, bet tik su norima tekstūra

Tekstūros tinklai: tekstūrų ir stilizuotų vaizdų sintezė (2016 m. Kovo 10 d.)

Atrodo, kad tai gali būti sustabdyta, jei ne vienas niuansas. Pirmiau aprašytas stilizavimo algoritmas labai ilgai. Jei gausite realizavimą, kai LBFG prasideda nuo CPU, procesas trunka penkias minutes. Jei perrašote, kad abu optimizavimas eina į GPU, procesas užtruks 10-15 sekundžių. Tai nėra gera niekur. Galbūt šios ir kitos straipsnio autoriai galvojo apie tą patį. Abu leidiniai išėjo savarankiškai su 17 dienų skirtumu po beveik vienerių metų po ankstesnio straipsnio. Dabartinio straipsnio autoriai, taip pat ankstesnio autorių autoriai, dalyvavo tekstūrų kartoje (jei tik iš naujo nustatėte stiliaus nuostolius, tai bus sėkminga). Jie pasiūlė optimizuoti ne iš balto triukšmo, bet kai neuroninis tinklas, kuris generuoja stilizuotą vaizdą.




Dabar, jei stilizacijos procesas neapima bet kokio optimizavimo, reikalingas tik tiesioginis išėjimas. Ir optimizavimas reikalingas tik vieną kartą, kad treniruotės tinklo generatorius. Šis straipsnis naudoja hierarchinį generatorių, kur kas seka z. Dydis yra didesnis nei ankstesnis ir gailestingas nuo triukšmo tekstūros generavimo atveju ir tam tikro stilisto vaizdo bazės. Labai svarbu naudoti kažką skiriasi nuo Imajne mokymo dalies, nes Nuostolių tinklo viduje esančios funkcijos apskaičiuoja tinklą, mokomą tik mokymo dalimi.



Suvokimo nuostoliai realaus laiko stiliaus perdavimo ir super rezoliucijos (27 kovo 2016)

Kaip matyti iš pavadinimo, autoriai, kurie vėlai tik 17 dienų su generuojančio tinklo idėja buvo įdarbinta didinant vaizdo rezoliuciją. Jie akivaizdžiai įkvėpė likutinio mokymosi sėkmės paskutiniame renginyje.




Atitinkamai, likęs blokas ir CONP blokas.



Taigi, dabar mes turime savo rankose, be kontroliuojamos stilizacijos, taip pat yra greitas generatorius (dėka šių dviejų straipsnių, vieno vaizdo kartos laikas matuojamas dešimtys MS).

Pabaiga

Informacija iš nagrinėjamų straipsnių ir autorių kodekso, kurį naudojome kaip pradinį tašką, kad sukurtumėte kitą paraišką dėl pirmojo vaizdo stilizacijos taikymo būdo:



Generuoti kažką panašaus.


Nuo 2015 m. Rugpjūčio mėn. Vamzdžių universiteto Vokietijos mokslininkai pateikė savo pasirinktus garsių menininkų stilių į kitas nuotraukas, paslaugos pradėjo matyti, kad ši galimybė buvo piniginė. Vakarų rinkoje jis buvo pradėtas ir rusų - jo pilną kopiją.

Į žymes

Nepaisant to, kad "Ostagram" pradėjo grįžti gruodį, jis pradėjo greitai įgyti populiarumą socialiniuose tinkluose balandžio viduryje. Tuo pačiu metu balandžio 19 d. Projekte Vkontakte projekte buvo mažiau nei tūkstantis žmonių.

Norėdami naudotis paslauga, jums reikia paruošti du vaizdus: apdorojamą nuotrauką ir nuotrauką su stiliaus pavyzdžiu, kad būtų galima perduoti originaliame paveikslėlyje.

Paslauga turi nemokamą versiją: jis sukuria vaizdą minimaliai raiška iki 600 pikselių palei ilgiausią nuotraukos pusę. Vartotojas gauna tik vieną iš nuotraukos taikomo filtro iteracijų rezultatą.

Mokamos versijos dvi: Premium suteikia nuotrauką iki 700 pikselių palei ilgiausią pusę ir taikoma 600 Iteracijų perdirbimo neuroninio tinklo (daugiau iteracijų, daugiau įdomesnio ir intensyvesnio apdorojimo). Viena tokia momentinė nuotrauka bus 50 rublių.

HD versijoje galite nustatyti iteracijų skaičių: 100 kainuos 50 rublių ir 1000 - 250 rublių. Tokiu atveju vaizdas turės rezoliuciją iki 1200 pikselių palei ilgiausią pusę, ir jis gali būti naudojamas spausdinti ant drobės: OSTAGRAM siūlo tokią paslaugą su pristatymu nuo 1800 rublių.

Vasario mėn. "Ostagram" atstovai, kurie nepriims prašymus dėl vaizdo tvarkymo iš vartotojų iš "iš išsivysčiusių kapitalizmo šalių", bet tada prieigą prie nuotraukų apdorojimo vartotojams "Vkontakte" iš viso pasaulio. Sprendžiant pagal Github, Sergejus Morugin, 30 metų gyventojas Nizhny Novgorod buvo užsiima savo plėtrą.

TJ kreipėsi į komercinį direktorių projekto, kuris buvo pristatytas Andrey. Pasak jo, ostagram pasirodė prieš intapainting, bet jį įkvėpė panašus projektas, vadinamas VIPART.

Ostagramo plėtra buvo įtraukta į studentų grupę iš NStu. Alekseva: po pirminio bandymo siauroje draugų grupėje 2015 m. Pabaigoje buvo nuspręsta viešai. Iš pradžių vaizdo apdorojimas buvo visiškai nemokamas, ir buvo planuojama uždirbti pinigus spausdintų paveikslų pardavimui. Pasak Andrei, antspaudas pasirodė esanti didžiausia problema: foto žmonės, gydomi neuroniniais transporto priemonėmis, retai atrodo gražiai žmogaus akims, o galutinis klientas turi pritaikyti rezultatus ilgą laiką prieš kreipdamiesi į drobę, kuriai reikia didelių mašinų išteklių .

Vaizdo apdorojimui, Ostagramo kūrėjai norėjo naudoti "Amazon" debesies serverius, tačiau po to, kai naudotojų antplūdis tapo aišku, kad jų išlaidos viršytų tūkstančius dolerių per dieną su minimalia investicijų grąža. Andrejus, tuo pačiu metu yra projekto investuotojas, nuomojamas serverio galia Nizhny Novgorod.

Projekto auditorija yra apie tūkstantį žmonių per dieną, tačiau tam tikromis dienomis ji pasiekė 40 tūkst. Žmonių perėjimų iš užsienio žiniasklaidos sąskaita, kuri jau sugebėjo pastebėti projektą prieš vidaus (Ostagram net pavyko pakilti su Europos DJ) sąskaita . Naktį, kai eismas yra mažas, vaizdo apdorojimas gali vykti per 5 minutes, o diena užima iki valandos.

Jei anksčiau užsienio vartotojai turi sąmoningai ribotą prieigą prie vaizdo apdorojimo (pradėti monetizaciją pradėti nuo Rusijos), dabar OSTAGRAM jau skaičiuoja Vakarų auditoriją.

Iki šiol atsipirkimo perspektyvos yra sąlyginės. Jei kiekvienas vartotojas sumokėjo už 10 rublių perdirbimo, tada galbūt tai būtų verdanti. [...]

Labai sunku mintime mūsų šalyje: esame pasiruošę laukti savaitės, bet nesumokės už jį. EUR europiečiai yra palankesni - mokant už kėlimą, kokybės gerinimą - todėl orientacija eina į rinką.

Andrejai, reprezentatyvūs ostagram

Pasak Andrei, "Ostagram" komanda dirba su nauja versija svetainės su dideliu šališkumu į socialumą: "Jis bus panašus į vieną gerai žinomą aptarnavimą, bet ką daryti." Projektas jau buvo suinteresuotas "Facebook" atstovai Rusijoje, tačiau prieš derybas dėl pardavimo nepasiekė paslaugos.

Paslaugų pavyzdžiai

"Ostagram" svetainėje taip pat galima pamatyti, kokių vaizdų derinys paaiškėjo galutines nuotraukas: dažnai yra dar įdomesnis už rezultatą. Tuo pačiu metu filtrai yra nuotraukos, naudojamos kaip perdirbimo efektas - gali būti išsaugotas tolesniam naudojimui.