{"id":33,"date":"2016-03-03T10:58:29","date_gmt":"2016-03-03T10:58:29","guid":{"rendered":"http:\/\/liipetti.net\/retkia\/?p=33"},"modified":"2016-03-03T14:33:29","modified_gmt":"2016-03-03T14:33:29","slug":"kuinka-neural-style-toimii","status":"publish","type":"post","link":"https:\/\/liipetti.net\/retkia\/kuinka-neural-style-toimii\/","title":{"rendered":"Kuinka neural-style toimii?"},"content":{"rendered":"<p>Olen useassa postauksessa kertonut kuvien luomisesta <a href=\"https:\/\/github.com\/jcjohnson\/neural-style\" target=\"_blank\">neural-style<\/a>n avulla. Yrit\u00e4n nyt v\u00e4h\u00e4n valottaa kuinka se toimii.<\/p>\n<p>Neural-stylen ytimen\u00e4 on neuroverkko, joka on valmiiksi opetettu tunnistamaan kuvista piirteit\u00e4 ja hahmoja. T\u00e4llaiset neuroverkot on laajoja kokonaisuuksia, joissa yleens\u00e4 on kahdenlaisia kerroksia:<\/p>\n<ul>\n<li><strong>Konvoluutiokerrokset<\/strong>, jotka tarkastelevat kuvaa ik\u00e4\u00e4nkuin pienen liikkuvan ikkunan kautta, ja n\u00e4in havainnoivat kuvasta paikallisia piirteit\u00e4. Kun konvoluutiokerroksia kytket\u00e4\u00e4n\u00a0per\u00e4kk\u00e4in, alemmat kerrokset havaitsevat kuvasta alkeellisia peruspiirteit\u00e4, kuten viivan p\u00e4tki\u00e4. Ylemm\u00e4t kerrokset, sopivasti koulutettuna, oppivat havaitsemaan suurempi kokonaisuuksia kuten esineit\u00e4 ja muita hahmoja.<\/li>\n<li><strong>T\u00e4ysin kytketyt kerrokset<\/strong>, joilla konvoluutiokerrosten havaitsemista hahmoista jalostetaan lopullinen tieto mit\u00e4 verkko kuvassa n\u00e4kee. Toisin kuin konvoluutiokerroksissa, joissa &#8221;neurosolut&#8221; kytkeytyv\u00e4t vain l\u00e4himpiin naapureihinsa, t\u00e4ysin kytketyiss\u00e4 kerroksissa jokainen input-kerroksen solu vaikuttaa jokaiseen output-kerroksen soluun.<\/li>\n<\/ul>\n<p>Vaikka t\u00e4ysin kytketyt kerrokset ovat v\u00e4ltt\u00e4m\u00e4tt\u00f6mi\u00e4 kuvien sis\u00e4ll\u00f6n tunnistamisessa ja luokittelussa, \u00a0neural-style ei tarvitse niit\u00e4 vaan toimii l\u00e4hinn\u00e4 konvoluutiokerrosten pohjalta. Mutta kuinka? Neuroverkon lis\u00e4ksi tarvitaan kuva S sis\u00e4lt\u00f6malliksi ja kuva T tyylimalliksi. Sitten\u00a0neural-style l\u00e4htee satunnaisesta kuvasta (&#8221;lumisadetta&#8221;) joka sy\u00f6tet\u00e4\u00e4n neuroverkkoon ja verrataan lopputulosta haluttuun sis\u00e4lt\u00f6\u00f6n S ja tyyliin T. Neuroverkkoa ohjataan sopivalla optimointialgoritmilla minimoimaan sek\u00e4 sis\u00e4ll\u00f6n ett\u00e4 tyylin poikkeamien summa. T\u00e4t\u00e4 toistetaan tarpeeksi kauan, satoja tai tuhansia kertoja jotta saadaan lopullinen kuva.<\/p>\n<p>Sis\u00e4lt\u00f6\u00e4 ja tyyli\u00e4 voidaan painottaa eri tavoin painokertoimilla, joilla suoraan vaikutetaan poikkeaman laskentaan. Lumisadekuvan sijaan voidaan my\u00f6s l\u00e4hte\u00e4 sis\u00e4lt\u00f6kuvasta. Lumisadekuvan kanssa neural-style pyrkii koko ajan minimoimaan sek\u00e4 sis\u00e4ll\u00f6n ett\u00e4 tyylin poikkeamaa, sis\u00e4lt\u00f6kuvasta l\u00e4hdett\u00e4ess\u00e4 sis\u00e4ll\u00f6n poikkeama on tietysti aluksi nolla, ja sen pit\u00e4\u00e4 antaa kasvaa jotta tyylin poikkeama saadaan pienemm\u00e4ksi, optimointi l\u00e4hestyy lopputulosta siis eri puolelta, tyylin poikkeama pienenee samalla kuin sis\u00e4ll\u00f6n poikkeama kasvaa. Toimintaan voidaan my\u00f6s vaikuttaa sill\u00e4 milt\u00e4 kerroksilta poikkeamaa mitataan.<\/p>\n<p>Mutta miten tyyli\u00e4 mitataan? T\u00e4ss\u00e4 on k\u00e4yt\u00f6ss\u00e4 menetelm\u00e4 jonka esittiv\u00e4t\u00a0Leon A. Gatys, Alexander S. Ecker ja\u00a0Matthias Bethge artikkelissaan\u00a0\u00a0<a href=\"http:\/\/arxiv.org\/abs\/1508.06576\">A Neural Algorithm of Artistic Style<\/a>\u00a0. Kytkem\u00e4ll\u00e4 konvoluutiokerroksen per\u00e4\u00e4n Gramianin matriisi saadaan kuvasta eristetty\u00e4 siin\u00e4 toistuvasti esiintyvi\u00e4 tyylillisi\u00e4 piirteit\u00e4. Tyyli pit\u00e4\u00e4 t\u00e4ss\u00e4 ymm\u00e4rt\u00e4\u00e4 aika suppeassa merkityksess\u00e4, l\u00e4hinn\u00e4 v\u00e4rien ja tekstuurin k\u00e4ytt\u00f6n\u00e4. Neural-style ei ymm\u00e4rr\u00e4 yht\u00e4\u00e4n mit\u00e4\u00e4n taiteilijan tyylist\u00e4 syvemm\u00e4ss\u00e4 merkityksess\u00e4.\u00a0Neural-stylen kyky hahmottaa kuvia ja tyylipiirteit\u00e4 on my\u00f6s vahvasti sidoksissa siihen mill\u00e4 aineistoilla ja kuinka hyvin neuroverkko on opetettu.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Olen useassa postauksessa kertonut kuvien luomisesta neural-stylen avulla. Yrit\u00e4n nyt v\u00e4h\u00e4n valottaa kuinka se toimii. Neural-stylen ytimen\u00e4 on neuroverkko, joka on valmiiksi opetettu tunnistamaan kuvista piirteit\u00e4 ja hahmoja. T\u00e4llaiset neuroverkot on laajoja kokonaisuuksia, joissa yleens\u00e4 on kahdenlaisia kerroksia: Konvoluutiokerrokset, jotka tarkastelevat kuvaa ik\u00e4\u00e4nkuin pienen liikkuvan ikkunan kautta, ja n\u00e4in havainnoivat\u2026<\/p>\n<p class=\"continue-reading-button\"> <a class=\"continue-reading-link\" href=\"https:\/\/liipetti.net\/retkia\/kuinka-neural-style-toimii\/\">Continue reading<i class=\"crycon-right-dir\"><\/i><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,2],"tags":[],"class_list":["post-33","post","type-post","status-publish","format-standard","hentry","category-kuvataide","category-neuroverkot"],"_links":{"self":[{"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/posts\/33","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/comments?post=33"}],"version-history":[{"count":4,"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/posts\/33\/revisions"}],"predecessor-version":[{"id":37,"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/posts\/33\/revisions\/37"}],"wp:attachment":[{"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/media?parent=33"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/categories?post=33"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/tags?post=33"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}