Rangkaian saraf melukis gambar. Ostagram: perkhidmatan berasaskan rangkaian saraf yang menggabungkan foto dan perhiasan menjadi karya seni

Sejak penyelidik Jerman dari Universiti Tübingen membentangkan kajian mereka tentang kemungkinan pemindahan gaya pada Ogos 2015 artis terkenal kepada foto lain, perkhidmatan mula muncul yang mengewangkan peluang ini. Ia dilancarkan di pasaran Barat, dan salinan lengkapnya dilancarkan di pasaran Rusia.

Kepada penanda buku

Walaupun fakta bahawa Ostagram dilancarkan pada bulan Disember, ia mula mendapat populariti dengan cepat di rangkaian sosial pada pertengahan April. Pada masa yang sama, pada 19 April, terdapat kurang daripada seribu orang dalam projek di VKontakte.

Untuk menggunakan perkhidmatan ini, anda perlu menyediakan dua imej: foto yang perlu diproses dan gambar dengan contoh gaya untuk tindanan pada foto asal.

Perkhidmatan ini mempunyai versi percuma: ia mencipta imej dalam resolusi minimum sehingga 600 piksel di sepanjang sisi terpanjang gambar. Pengguna menerima hasil hanya satu daripada lelaran menggunakan penapis pada foto.

Terdapat dua versi berbayar: Premium menghasilkan imej sehingga 700 piksel di sepanjang sisi terpanjang dan menggunakan 600 lelaran pemprosesan rangkaian saraf pada imej (semakin banyak lelaran, pemprosesan yang lebih menarik dan intensif). Satu foto sedemikian akan berharga 50 rubel.

Dalam versi HD, anda boleh menyesuaikan bilangan lelaran: 100 akan berharga 50 rubel, dan 1000 akan berharga 250 rubel. Dalam kes ini, imej akan mempunyai resolusi sehingga 1200 piksel pada bahagian terpanjang, dan ia boleh digunakan untuk mencetak pada kanvas: Ostagram menawarkan perkhidmatan sedemikian dengan penghantaran bermula dari 1800 rubel.

Pada bulan Februari, wakil Ostagram mengumumkan bahawa mereka tidak akan menerima permintaan untuk pemprosesan imej daripada pengguna "dari negara dengan kapitalisme maju," tetapi kemudian akses kepada pemprosesan foto untuk pengguna VKontakte dari seluruh dunia. Berdasarkan kod Ostagram yang diterbitkan di GitHub, ia dibangunkan oleh Sergey Morugin, seorang penduduk Nizhny Novgorod berusia 30 tahun.

TJ menghubungi pengarah komersial projek, yang memperkenalkan dirinya sebagai Andrey. Menurutnya, Ostagram muncul sebelum Instapainting, tetapi diilhamkan oleh projek serupa bernama Vipart.

Ostagram dibangunkan oleh sekumpulan pelajar dari NSTU. Alekseeva: selepas ujian awal pada kumpulan rakan yang sempit, pada akhir tahun 2015 mereka memutuskan untuk membuat projek itu kepada umum. Pada mulanya, pemprosesan imej adalah percuma sepenuhnya, dan rancangannya adalah untuk membuat wang dengan menjual lukisan bercetak. Menurut Andrey, percetakan ternyata menjadi masalah terbesar: gambar orang yang diproses oleh rangkaian saraf jarang kelihatan menyenangkan kepada mata manusia, dan pelanggan akhir memerlukan masa yang lama untuk menyesuaikan hasilnya sebelum menggunakannya pada kanvas, yang memerlukan sumber mesin yang besar.

Pencipta Ostagram ingin menggunakan pelayan awan Amazon untuk memproses imej, tetapi selepas kemasukan pengguna, menjadi jelas bahawa kos akan melebihi seribu dolar setiap hari dengan pulangan pelaburan yang minimum. Andrey, yang juga pelabur dalam projek itu, menyewa kapasiti pelayan di Nizhny Novgorod.

Penonton projek itu kira-kira seribu orang sehari, tetapi pada beberapa hari ia mencecah 40 ribu orang kerana rujukan dari media asing, yang telah melihat projek itu sebelum projek domestik (Ostagram bahkan berjaya bekerjasama dengan DJ Eropah). Pada waktu malam, apabila trafik rendah, pemprosesan imej boleh mengambil masa 5 minit dan pada siang hari ia boleh mengambil masa sehingga satu jam.

Jika akses awal kepada pemprosesan imej sengaja dihadkan kepada pengguna asing (mereka berfikir tentang memulakan pengewangan di Rusia), kini Ostagram bergantung lebih kepada penonton Barat.

Hari ini, prospek untuk mendapatkan semula adalah bersyarat. Jika setiap pengguna membayar 10 rubel untuk pemprosesan, maka mungkin ia akan membuahkan hasil. […]

Sangat sukar untuk mengewangkan di negara kita: rakyat kita bersedia menunggu seminggu, tetapi tidak akan membayar sesen pun untuknya. Orang Eropah lebih menyukai ini - dari segi membayar untuk mempercepatkan, meningkatkan kualiti - jadi mereka menyasarkan pasaran itu.

Andrey, wakil Ostagram

Menurut Andrey, pasukan Ostagram sedang berusaha versi baru tapak dengan tumpuan kuat pada sosialiti: "Ia akan serupa dengan satu perkhidmatan yang terkenal, tetapi apa yang perlu dilakukan." Wakil-wakil Facebook di Rusia sudah berminat dengan projek itu, tetapi rundingan mengenai penjualan masih belum mencapai titik jualan.

Contoh kerja perkhidmatan

Dalam suapan di laman web Ostagram, anda juga boleh melihat gabungan imej yang menghasilkan foto akhir: selalunya ini lebih menarik daripada hasilnya sendiri. Dalam kes ini, penapis - gambar yang digunakan sebagai kesan untuk pemprosesan - boleh disimpan untuk kegunaan masa hadapan.

Salam, Habr! Anda mungkin perasan bahawa topik penggayaan gambar mengikut kesesuaian berbeza gaya seni dibincangkan secara aktif di Internet anda ini. Membaca semua artikel popular ini, anda mungkin berfikir bahawa di bawah hud aplikasi ini sihir sedang berlaku, dan rangkaian saraf benar-benar membayangkan dan melukis semula imej dari awal. Kebetulan pasukan kami berhadapan dengan tugas yang sama: sebagai sebahagian daripada hackathon korporat dalaman, kami membuat penggayaan video, kerana... Sudah ada apl untuk foto. Dalam siaran ini, kami akan memikirkan bagaimana rangkaian "melukis semula" imej, dan kami akan menganalisis artikel yang memungkinkan ini. Saya mengesyorkan agar anda membaca catatan sebelumnya sebelum membaca bahan ini dan, secara umum, asas rangkaian saraf konvolusi. Anda akan menemui beberapa formula, beberapa kod (saya akan memberikan contoh pada Theano dan Lasagne), dan juga banyak gambar. Catatan ini adalah berdasarkan susunan kronologi penampilan artikel dan, dengan itu, idea itu sendiri. Kadang-kadang saya akan mencairkannya dengan pengalaman baru-baru ini. Berikut adalah budak dari neraka untuk menarik perhatian anda.


Mengvisualkan dan Memahami Rangkaian Konvolusi (28 Nov 2013)

Pertama sekali, adalah bernilai menyebut artikel di mana pengarang dapat menunjukkan bahawa rangkaian saraf bukanlah kotak hitam, tetapi perkara yang boleh ditafsirkan sepenuhnya (dengan cara ini, hari ini ini boleh dikatakan bukan sahaja mengenai rangkaian konvolusi untuk komputer. penglihatan). Penulis memutuskan untuk belajar bagaimana untuk mentafsir pengaktifan neuron dalam lapisan tersembunyi; untuk ini mereka menggunakan rangkaian neural deconvolutional (deconvnet), yang dicadangkan beberapa tahun sebelumnya (by the way, oleh Seiler dan Fergus yang sama, yang merupakan pengarang ini. penerbitan). Rangkaian dekonvolusi sebenarnya adalah rangkaian yang sama dengan lilitan dan pengumpulan, tetapi digunakan dalam susunan terbalik. Kerja asal pada deconvnet menggunakan rangkaian dalam mod pembelajaran tanpa pengawasan untuk menjana imej. Kali ini, pengarang menggunakannya semata-mata untuk mengundur daripada ciri yang diperolehi selepas melalui rangkaian ke hadapan ke imej asal. Hasilnya ialah imej yang boleh ditafsirkan sebagai isyarat yang menyebabkan pengaktifan ini dalam neuron. Sememangnya, persoalan timbul: bagaimana untuk membuat laluan terbalik melalui lilitan dan tidak linear? Dan lebih-lebih lagi melalui pengumpulan maksimum, ini pastinya bukan operasi boleh terbalik. Mari kita lihat ketiga-tiga komponen.

Songsang ReLu

Dalam rangkaian konvolusi, fungsi pengaktifan sering digunakan ReLu(x) = maks(0, x), yang menjadikan semua pengaktifan pada lapisan bukan negatif. Oleh itu, apabila kembali melalui ketaklinieran, ia juga perlu untuk mendapatkan keputusan bukan negatif. Untuk ini, penulis mencadangkan menggunakan ReLu yang sama. Dari perspektif seni bina, Theano perlu mengatasi fungsi operasi kecerunan (buku nota yang tidak terhingga bernilai dalam Resipi Lasagna, dari situ anda akan mendapat butiran tentang kelas ModifiedBackprop).

Kelas ZeilerBackprop(ModifiedBackprop): def grad(self, inputs, out_grads): (inp,) = inputs (grd,) = out_grads #return (grd * (grd > 0).astype(inp.dtype),) # perbetulkan secara eksplisit return (self.nonlinearity(grd),) # gunakan nonlinearity yang diberikan

Konvolusi terbalik

Ini sedikit lebih rumit, tetapi semuanya adalah logik: cukup untuk menggunakan versi transposed kernel lilitan yang sama, tetapi kepada output dari ReLu terbalik dan bukannya lapisan sebelumnya yang digunakan dalam hantaran hadapan. Tetapi saya takut bahawa ini tidak begitu jelas dalam perkataan, mari kita lihat visualisasi prosedur ini (anda akan mendapati lebih banyak visualisasi belitan).


Konvolusi dengan langkah=1

Konvolusi dengan langkah=1 Versi terbalik

Konvolusi dengan langkah=2

Konvolusi dengan langkah=2 Versi terbalik

Pengumpulan terbalik

Operasi ini (tidak seperti yang sebelumnya) biasanya tidak boleh diterbalikkan. Tetapi kami masih ingin melalui cara maksimum semasa laluan pulang. Untuk melakukan ini, pengarang mencadangkan menggunakan peta tempat maksimum semasa laluan terus (suis lokasi maks). Semasa hantaran terbalik, isyarat input ditukar kepada unpooling sedemikian rupa untuk mengekalkan struktur isyarat asal; di sini adalah lebih mudah untuk dilihat daripada diterangkan.



Hasilnya

Algoritma visualisasi sangat mudah:

  1. Buat hantaran lurus.
  2. Pilih lapisan yang kita minati.
  3. Rekod pengaktifan satu atau lebih neuron dan tetapkan semula yang lain.
  4. Buat kesimpulan yang bertentangan.

Setiap segi empat sama kelabu dalam imej di bawah sepadan dengan visualisasi penapis (yang digunakan untuk konvolusi) atau berat satu neuron, dan setiap satu gambar berwarna- ini adalah bahagian imej asal yang mengaktifkan neuron yang sepadan. Untuk kejelasan, neuron dalam satu lapisan dikelompokkan ke dalam kumpulan tematik. Secara umum, tiba-tiba ternyata rangkaian saraf mengetahui dengan tepat apa yang ditulis oleh Hubel dan Weisel dalam kerja mereka mengenai struktur sistem visual, yang mana mereka telah dianugerahkan. hadiah Nobel pada tahun 1981. Terima kasih kepada artikel ini, kami mendapat gambaran visual tentang perkara yang dipelajari oleh rangkaian saraf konvolusi dalam setiap lapisan. Pengetahuan inilah yang kemudiannya akan memungkinkan untuk memanipulasi kandungan imej yang dihasilkan, tetapi ini masih jauh; beberapa tahun akan datang telah dibelanjakan untuk memperbaiki kaedah rangkaian saraf "trepanning". Di samping itu, pengarang artikel mencadangkan kaedah untuk menganalisis cara terbaik untuk membina seni bina rangkaian saraf konvolusi untuk mencapai hasil terbaik(walaupun mereka tidak memenangi ImageNet 2013, tetapi mereka berjaya ke puncak; UPD: ternyata mereka menang, Clarifai adalah mereka).


Visualisasi ciri


Berikut ialah contoh memvisualisasikan pengaktifan menggunakan deconvnet, hari ini keputusan ini kelihatan begitu-begitu, tetapi kemudian ia adalah satu kejayaan.


Peta Saliency menggunakan deconvnet

Rangkaian Konvolusi Dalaman Dalam: Memvisualisasikan Model Klasifikasi Imej dan Peta Saliency (19 Apr 2014)

Artikel ini ditumpukan kepada kajian kaedah untuk menggambarkan pengetahuan yang terkandung dalam rangkaian saraf konvolusi. Penulis mencadangkan dua kaedah visualisasi berdasarkan keturunan kecerunan.

Visualisasi Model Kelas

Jadi, bayangkan bahawa kita mempunyai rangkaian saraf terlatih untuk menyelesaikan masalah pengelasan kepada beberapa kelas tertentu. Mari kita nyatakan nilai pengaktifan neuron output, yang sepadan dengan kelas c. Kemudian masalah pengoptimuman berikut memberikan kita tepat imej yang memaksimumkan kelas yang dipilih:



Masalah ini boleh diselesaikan dengan mudah menggunakan Theano. Biasanya kami meminta rangka kerja untuk mengambil derivatif berkenaan dengan parameter model, tetapi kali ini kami menganggap bahawa parameter adalah tetap dan derivatif diambil berkenaan dengan imej input. Fungsi berikut memilih nilai maksimum lapisan keluaran dan mengembalikan fungsi yang mengira derivatif imej input.


def compile_saliency_function(net): """ Menyusun fungsi untuk mengira peta saliency dan kelas ramalan untuk kumpulan mini imej input tertentu. """ inp = net["input"].input_var outp = lasagne.layers.get_output(net ["fc8"], deterministic=Benar) max_outp = T.max(outp, axis=1) saliency = theano.grad(max_outp.sum(), wrt=inp) max_class = T.argmax(outp, axis=1) kembalikan theano.function(, )

Anda mungkin pernah melihat imej aneh dengan wajah anjing di Internet - DeepDream. Dalam artikel asal, penulis menggunakan proses seterusnya untuk menjana imej yang memaksimumkan kelas yang dipilih:

  1. Mulakan imej awal dengan sifar.
  2. Kira nilai terbitan daripada imej ini.
  3. Tukar imej dengan menambah imej yang terhasil daripada derivatif.
  4. Kembali ke titik 2 atau keluar dari gelung.

Imej yang terhasil ialah:




Bagaimana jika kita memulakan imej pertama dengan gambar sebenar dan memulakan proses yang sama? Tetapi pada setiap lelaran kami akan memilih kelas rawak, menetapkan semula yang lain dan mengira nilai terbitan, maka kami akan mendapat sesuatu seperti impian yang mendalam ini.


Awas 60 mb


Mengapa terdapat begitu banyak muka dan mata anjing? Ia mudah: terdapat hampir 200 anjing daripada 1000 kelas dalam imagenet, mereka mempunyai mata. Dan juga banyak kelas di mana terdapat hanya orang.

Pengekstrakan Kelas Salience

Jika proses ini dimulakan dengan gambar sebenar, dihentikan selepas lelaran pertama dan nilai derivatif dilukis, maka kita akan mendapat imej sedemikian, menambah yang mana kepada yang asal, kita akan meningkatkan nilai pengaktifan kelas yang dipilih.


Peta Saliency menggunakan derivatif


Sekali lagi hasilnya adalah "begitu-begitu". Adalah penting untuk diperhatikan bahawa ini cara baru visualisasi pengaktifan (tiada yang menghalang kita daripada menetapkan nilai pengaktifan bukan pada lapisan terakhir, tetapi secara umum pada mana-mana lapisan rangkaian dan mengambil derivatif berkenaan dengan imej input). Artikel seterusnya akan menggabungkan kedua-dua pendekatan sebelumnya dan memberi kami alat tentang cara menyediakan pemindahan gaya, yang akan diterangkan kemudian.

Berusaha untuk Kesederhanaan: The All Convolutional Net (13 Apr 2015)

Artikel ini secara amnya bukan mengenai visualisasi, tetapi tentang fakta bahawa menggantikan pengumpulan dengan lilitan dengan langkah yang besar tidak membawa kepada kehilangan kualiti. Tetapi sebagai hasil sampingan penyelidikan mereka, pengarang mencadangkan cara baharu untuk menggambarkan ciri, yang mereka gunakan untuk menganalisis dengan lebih tepat perkara yang dipelajari oleh model. Idea mereka adalah seperti berikut: jika kita hanya mengambil derivatif, maka semasa penyahkonvolusian ciri-ciri yang kurang daripada sifar dalam imej input tidak diteruskan (menggunakan ReLu untuk imej input). Dan ini membawa kepada nilai negatif yang muncul pada imej yang disebarkan kembali. Sebaliknya, jika anda menggunakan deconvnet, maka ReLu lain diambil daripada derivatif ReLu - ini membolehkan anda tidak mengembalikan nilai negatif, tetapi seperti yang anda lihat, hasilnya adalah "begitu-begitu". Tetapi bagaimana jika anda menggabungkan kedua-dua kaedah ini?




kelas 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),)

Kemudian anda akan mendapat imej yang bersih dan boleh ditafsir sepenuhnya.


Peta Saliency menggunakan Propagasi Belakang Berpandu

Pergi lebih dalam

Sekarang mari kita fikirkan apa yang diberikan kepada kita? Biar saya ingatkan anda bahawa setiap lapisan konvolusi ialah fungsi yang menerima tensor tiga dimensi sebagai input dan juga menghasilkan tensor tiga dimensi sebagai output, mungkin dari dimensi yang berbeza. d x w x h; d epth ialah bilangan neuron dalam lapisan, setiap daripadanya menghasilkan peta ciri saiz w igth x h lapan.


Mari cuba percubaan berikut pada rangkaian VGG-19:



penukaran1_2

Ya, anda hampir tidak melihat apa-apa, kerana... kawasan penerimaan adalah sangat kecil, ini adalah lilitan kedua 3x3, masing-masing, jumlah kawasan ialah 5x5. Tetapi mengezum masuk, kita melihat bahawa ciri itu hanyalah pengesan kecerunan.




conv3_3


conv4_3


conv5_3


kolam5


Sekarang mari kita bayangkan bahawa bukannya maksimum ke atas blok, kita akan mengambil terbitan nilai jumlah semua elemen blok ke atas imej input. Maka jelas kawasan penerimaan sekumpulan neuron akan meliputi keseluruhan imej input. Untuk lapisan awal kita akan melihat peta terang, dari mana kita membuat kesimpulan bahawa ini adalah pengesan warna, kemudian kecerunan, kemudian tepi, dan seterusnya ke arah corak yang lebih kompleks. Semakin dalam lapisan, semakin malap imej itu. Ini dijelaskan oleh fakta bahawa lapisan yang lebih dalam mempunyai corak yang lebih kompleks yang dikesannya, dan corak yang kompleks kelihatan kurang kerap daripada yang mudah, jadi peta pengaktifan pudar. Kaedah pertama sesuai untuk memahami lapisan dengan corak yang kompleks, dan yang kedua hanya untuk yang mudah.


penukaran1_1


penukaran2_2


conv4_3


Anda boleh memuat turun pangkalan data pengaktifan yang lebih lengkap untuk beberapa imej dan .

Algoritma Neural Gaya Artistik (2 Sep 2015)

Jadi, beberapa tahun telah berlalu sejak trepana pertama yang berjaya bagi rangkaian saraf. Kami (dalam erti kata kemanusiaan) mempunyai alat yang berkuasa yang membolehkan kami memahami perkara yang dipelajari oleh rangkaian saraf, serta mengalih keluar perkara yang kami tidak mahu ia belajar. Pengarang artikel ini sedang membangunkan kaedah yang membolehkan satu imej menjana peta pengaktifan yang serupa kepada beberapa imej sasaran, dan mungkin lebih daripada satu - ini adalah asas penggayaan. Kami menggunakan hingar putih pada input, dan menggunakan proses berulang yang serupa seperti dalam mimpi dalam, kami mengurangkan imej ini kepada imej yang peta cirinya serupa dengan imej sasaran.

Kehilangan Kandungan

Seperti yang telah disebutkan, setiap lapisan rangkaian saraf menghasilkan tensor tiga dimensi bagi beberapa dimensi.




Mari kita nyatakan jalan keluar i lapisan ke- dari input sebagai . Kemudian jika kita meminimumkan jumlah berwajaran baki antara imej input dan beberapa imej yang kami sasarkan c, maka anda akan mendapat apa yang anda perlukan. Mungkin.



Untuk mencuba artikel ini, anda boleh menggunakan komputer riba ajaib ini, tempat pengiraan berlaku (kedua-dua pada GPU dan CPU). GPU digunakan untuk mengira ciri rangkaian saraf dan nilai fungsi kos. Theano menghasilkan fungsi yang boleh mengira kecerunan fungsi objektif eval_grad dengan imej input x. Ini kemudian dimasukkan ke dalam lbfgs dan proses lelaran bermula.


# Mulakan dengan imej hingar 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) # Optimumkan, menyimpan hasil secara berkala untuk i dalam julat(8): print(i) scipy.optimize.fmin_l_bfgs_b(eval_loss, x0.flatten(), fprime=eval_grad, maxfun=40) x0 = generated_image.get_value().astype("float64") xs.append(x0)

Jika kita menjalankan pengoptimuman fungsi sedemikian, kita akan cepat mendapat imej yang serupa dengan sasaran. Kini kita boleh menggunakan white noise untuk mencipta semula imej yang serupa dengan sesetengah imej kandungan.


Kehilangan Kandungan: conv4_2



Proses pengoptimuman




Adalah mudah untuk melihat dua ciri imej yang terhasil:

  • warna hilang - ini adalah hasil daripada fakta bahawa dalam contoh khusus hanya lapisan conv4_2 digunakan (atau, dengan kata lain, berat w untuknya adalah bukan sifar, dan untuk lapisan lain adalah sifar); seperti yang anda ingat, ia adalah lapisan awal yang mengandungi maklumat tentang warna dan peralihan kecerunan, dan yang kemudiannya mengandungi maklumat tentang butiran yang lebih besar, yang kami perhatikan - warna hilang, tetapi kandungannya tidak;
  • beberapa rumah telah "berpindah", i.e. garis lurus sedikit melengkung - ini kerana semakin dalam lapisan, semakin kurang maklumat tentang kedudukan spatial ciri yang terkandung di dalamnya (hasil daripada penggunaan lilitan dan pengumpulan).

Menambah lapisan awal segera membetulkan keadaan warna.


Kehilangan Kandungan: conv1_1, conv2_1, conv4_2


Mudah-mudahan sekarang anda berasa seperti anda mempunyai kawalan ke atas perkara yang dilukis semula pada imej hingar putih.

Kehilangan Gaya

Dan sekarang kita sampai ke bahagian yang paling menarik: bagaimana kita boleh menyampaikan gaya? Apakah gaya? Jelas sekali, gaya bukanlah sesuatu yang kami optimumkan dalam Kehilangan Kandungan, kerana ia mengandungi banyak maklumat tentang kedudukan spatial ciri. Jadi perkara pertama yang perlu kami lakukan ialah mengalih keluar maklumat ini daripada pandangan yang diterima pada setiap lapisan.


Penulis mencadangkan kaedah berikut. Mari kita ambil tensor pada output lapisan tertentu, kembangkannya di sepanjang koordinat ruang dan hitung matriks kovarians antara dadu. Mari kita nyatakan transformasi ini sebagai G. Apa yang telah kita lakukan sebenarnya? Kita boleh mengatakan bahawa kita mengira kekerapan ciri dalam tampung berlaku secara berpasangan, atau, dengan kata lain, kita menganggarkan taburan ciri dalam tampalan dengan taburan normal berbilang variasi.




Kemudian Style Loss dimasukkan seperti berikut, di mana s- ini adalah beberapa imej dengan gaya:



Bolehkah kita mencubanya untuk Vincent? Kami mendapat, pada dasarnya, sesuatu yang diharapkan - bunyi dalam gaya Van Gogh, maklumat tentang susunan ruang ciri hilang sepenuhnya.


Vincent




Bagaimana jika anda meletakkan gambar dan bukannya imej gaya? Anda akan mendapat ciri biasa, warna biasa, tetapi kedudukan spatial hilang sepenuhnya.


Foto dengan kehilangan gaya


Anda mungkin tertanya-tanya mengapa kami mengira matriks kovarians dan bukan sesuatu yang lain? Lagipun, terdapat banyak cara untuk mengagregatkan ciri supaya koordinat spatial hilang. Ini benar-benar soalan terbuka, dan jika anda mengambil sesuatu yang sangat mudah, hasilnya tidak akan berubah secara mendadak. Mari kita periksa ini, kita tidak akan mengira matriks kovarians, tetapi hanya nilai purata setiap plat.




kehilangan gaya mudah

Kehilangan gabungan

Sememangnya, terdapat keinginan untuk mencampurkan kedua-dua fungsi kos ini. Kemudian kami akan menjana imej daripada hingar putih supaya ia akan mengekalkan ciri daripada imej kandungan (yang dikaitkan dengan koordinat ruang), dan juga akan mengandungi ciri "gaya" yang tidak dikaitkan dengan koordinat ruang, i.e. kami berharap butiran imej kandungan akan kekal utuh dari tempat mereka, tetapi akan dilukis semula dengan gaya yang diingini.



Malah, terdapat juga regularizer, tetapi kami akan meninggalkannya untuk kesederhanaan. Ia kekal untuk menjawab soalan berikut: lapisan (berat) yang manakah harus digunakan semasa pengoptimuman? Dan saya khuatir bahawa saya tidak mempunyai jawapan kepada soalan ini, dan begitu juga pengarang artikel itu. Mereka mempunyai cadangan untuk menggunakan yang berikut, tetapi ini tidak bermakna sama sekali kombinasi lain akan berfungsi lebih teruk, ruang carian terlalu besar. Satu-satunya peraturan yang mengikuti daripada memahami model: tidak ada gunanya mengambil lapisan bersebelahan, kerana ciri mereka tidak akan banyak berbeza antara satu sama lain, jadi lapisan daripada setiap kumpulan penukaran*_1 ditambahkan pada gaya.


# Tentukan kehilangan fungsi kehilangan = # kehilangan kehilangan kandungan.tambah(0.001 * kehilangan_kandungan(ciri_foto, ciri_gen, "conv4_2")) # kerugian kehilangan gaya.tambah(0.2e6 * kehilangan_gaya(ciri_seni, ciri_gen, "conv1_1")) kerugian.tambah (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"), "conv4_features" ) losses.append(0.2e6 * style_loss(art_features, gen_features, "conv5_1")) # jumlah kerugian penalti variasi.append(0.1e-7 * total_variation_loss(generated_images)) total_loss = jumlah(kerugian)

Model akhir boleh dibentangkan seperti berikut.




Dan inilah hasil rumah dengan Van Gogh.



Cuba mengawal proses

Mari kita ingat bahagian sebelumnya, sudah dua tahun sebelum artikel semasa, saintis lain sedang meneliti apa yang sebenarnya dipelajari oleh rangkaian saraf. Berbekalkan semua artikel ini, anda boleh menjana visualisasi ciri pelbagai gaya, pelbagai imej, resolusi dan saiz yang berbeza, dan cuba fahami lapisan mana yang perlu diambil dengan berat apa. Tetapi walaupun menimbang semula lapisan tidak memberikan kawalan sepenuhnya ke atas apa yang berlaku. Masalahnya di sini lebih konseptual: kami sedang mengoptimumkan fungsi yang salah! Bagaimana, anda bertanya? Jawapannya mudah: fungsi ini meminimumkan percanggahan... baik, anda mendapat idea itu. Tetapi apa yang kita mahukan adalah untuk kita menyukai imej itu. Gabungan cembung fungsi kandungan dan kehilangan gaya bukanlah ukuran yang dianggap indah oleh fikiran kita. Adalah diperhatikan bahawa jika anda meneruskan penggayaan terlalu lama, fungsi kos secara semula jadi turun lebih rendah dan lebih rendah, tetapi keindahan estetik hasil menurun dengan mendadak.




Baiklah, ada satu masalah lagi. Katakan kami menemui lapisan yang mengekstrak ciri yang kami perlukan. Katakan beberapa tekstur adalah segi tiga. Tetapi lapisan ini juga mengandungi banyak ciri lain, seperti bulatan, yang kita benar-benar tidak mahu lihat dalam imej yang terhasil. Secara umumnya, jika kita boleh mengupah sejuta orang Cina, kita boleh memvisualisasikan semua ciri imej gaya, dan dengan kekerasan hanya menandakan yang kita perlukan dan hanya memasukkannya dalam fungsi kos. Tetapi atas sebab yang jelas ia tidak begitu mudah. Tetapi bagaimana jika kita hanya mengalih keluar semua kalangan yang kita tidak mahu lihat dalam hasil daripada imej gaya? Kemudian pengaktifan neuron sepadan yang bertindak balas kepada bulatan tidak akan berfungsi. Dan, secara semula jadi, maka ini tidak akan muncul dalam gambar yang dihasilkan. Begitu juga dengan bunga. Bayangkan imej yang terang dengan banyak warna. Pengedaran warna akan sangat tercemar di seluruh ruang, dan pengedaran imej yang terhasil akan sama, tetapi dalam proses pengoptimuman, puncak yang berada pada asal mungkin akan hilang. Ternyata hanya mengurangkan kedalaman bit palet warna menyelesaikan masalah ini. Ketumpatan pengedaran kebanyakan warna akan menghampiri sifar, dan akan terdapat puncak yang besar di beberapa kawasan. Oleh itu, dengan memanipulasi asal dalam Photoshop, kami memanipulasi ciri yang diekstrak daripada imej. Adalah lebih mudah bagi seseorang untuk menyatakan keinginannya secara visual daripada cuba merumuskannya dalam bahasa matematik. Selamat tinggal. Hasilnya, pereka bentuk dan pengurus, bersenjatakan Photoshop dan skrip untuk menggambarkan ciri, mencapai hasil tiga kali lebih cepat daripada apa yang dilakukan oleh ahli matematik dan pengaturcara.


Contoh memanipulasi warna dan saiz ciri


Atau anda boleh menggunakan imej mudah sebagai gaya



keputusan








Berikut ialah video, tetapi hanya dengan tekstur yang betul

Rangkaian Tekstur: Sintesis Suapan ke hadapan Tekstur dan Imej Bergaya (10 Mac 2016)

Nampaknya kita boleh berhenti di sana, jika tidak untuk satu nuansa. Algoritma penggayaan di atas mengambil masa yang sangat lama untuk diselesaikan. Jika kita mengambil pelaksanaan di mana lbfgs berjalan pada CPU, proses itu mengambil masa kira-kira lima minit. Jika anda menulis semula supaya pengoptimuman pergi ke GPU, maka proses akan mengambil masa 10-15 saat. Ini tidak baik. Mungkin penulis artikel ini dan artikel seterusnya memikirkan perkara yang sama. Kedua-dua penerbitan diterbitkan secara bebas, selang 17 hari, hampir setahun selepas artikel sebelumnya. Pengarang artikel semasa, seperti pengarang sebelumnya, terlibat dalam menghasilkan tekstur (jika anda hanya menetapkan semula Kehilangan Gaya kepada sifar, inilah yang anda akan dapat). Mereka mencadangkan untuk mengoptimumkan bukan imej yang diperoleh daripada hingar putih, tetapi beberapa rangkaian saraf yang menghasilkan imej yang digayakan.




Sekarang, jika proses penggayaan tidak melibatkan sebarang pengoptimuman, anda hanya perlu melakukan hantaran ke hadapan. Dan pengoptimuman diperlukan sekali sahaja untuk melatih rangkaian penjana. Artikel ini menggunakan penjana hierarki, di mana setiap seterusnya z bersaiz lebih besar daripada yang sebelumnya dan diambil sampel daripada bunyi dalam kes penjanaan tekstur, dan daripada beberapa pangkalan data imej untuk melatih stylist. Adalah penting untuk menggunakan sesuatu selain daripada bahagian latihan imagenet, kerana... ciri di dalam rangkaian Kehilangan dikira oleh rangkaian yang dilatih semasa bahagian latihan.



Kerugian Persepsi untuk Pemindahan Gaya Masa Nyata dan Resolusi Super (27 Mac 2016)

Seperti yang dicadangkan oleh tajuk, penulis, yang hanya lewat 17 hari dengan idea rangkaian generatif, sedang berusaha untuk meningkatkan resolusi imej. Mereka nampaknya diilhamkan oleh kejayaan pembelajaran sisa pada imagenet terkini.




Sehubungan itu, blok sisa dan blok penukaran.



Oleh itu, kini kami mempunyai, sebagai tambahan kepada kawalan ke atas penggayaan, penjana pantas (terima kasih kepada dua artikel ini, masa penjanaan untuk satu imej diukur dalam puluhan ms).

Berakhir

Kami menggunakan maklumat daripada artikel yang disemak dan kod pengarang sebagai titik permulaan untuk mencipta aplikasi lain untuk menggayakan aplikasi penggayaan video pertama:



Menghasilkan sesuatu seperti ini.


Dalam gambar yang paling biasa, banyak dan tidak dapat dibezakan sepenuhnya entiti muncul. Selalunya, atas sebab tertentu, anjing. Internet mula dipenuhi dengan imej sedemikian pada Jun 2015, apabila DeepDream Google dilancarkan - salah satu perkhidmatan terbuka pertama berdasarkan rangkaian saraf dan direka untuk pemprosesan imej.

Ia berlaku seperti ini: algoritma menganalisis gambar, mencari serpihan di dalamnya yang mengingatkannya kepada beberapa objek biasa - dan memesongkan imej mengikut data ini.

Pertama, projek itu diterbitkan sebagai sumber terbuka, dan kemudian perkhidmatan dalam talian yang dibuat mengikut prinsip yang sama muncul di Internet. Salah satu yang paling mudah dan popular ialah Deep Dream Generator: memproses foto kecil di sini hanya mengambil masa kira-kira 15 saat (sebelum ini, pengguna terpaksa menunggu lebih daripada satu jam).

Bagaimanakah rangkaian saraf belajar untuk mencipta imej sedemikian? Dan mengapa, dengan cara itu, mereka dipanggil begitu?

Rangkaian saraf dalam strukturnya meniru rangkaian saraf sebenar organisma hidup, tetapi lakukan ini menggunakan algoritma matematik. Setelah mencipta struktur asas, anda boleh melatihnya menggunakan kaedah pembelajaran mesin. Jika kita bercakap tentang pengecaman imej, maka beribu-ribu imej perlu melalui rangkaian saraf. Jika tugas rangkaian saraf berbeza, maka latihan latihan akan berbeza.

Algoritma untuk bermain catur, contohnya, menganalisis permainan catur. Dengan cara yang sama, algoritma AlphaGo daripada Google DeepMind ke dalam permainan Cina Go - yang dianggap sebagai satu kejayaan, kerana Go jauh lebih kompleks dan tidak linear daripada catur.

    Anda boleh bermain-main dengan model rangkaian saraf yang dipermudahkan dan lebih memahami prinsipnya.

    Terdapat juga satu siri lukisan yang boleh difahami di YouTube penggelek tentang cara rangkaian saraf berfungsi.

Satu lagi perkhidmatan popular ialah Dreamscope, yang bukan sahaja boleh bermimpi tentang anjing, tetapi juga meniru pelbagai gaya lukisan. Pemprosesan imej di sini juga sangat mudah dan pantas (kira-kira 30 saat).

Nampaknya, bahagian algoritma perkhidmatan adalah pengubahsuaian program "Gaya Neural", yang telah kita bincangkan.

Baru-baru ini, satu program telah muncul yang mewarnakan imej hitam dan putih secara realistik. Dalam versi sebelumnya, program serupa melakukan tugas mereka dengan kurang baik, dan ia dianggap sebagai pencapaian yang hebat jika sekurang-kurangnya 20% orang tidak dapat membezakan gambar sebenar daripada imej yang diwarnakan oleh komputer.

Lebih-lebih lagi, pewarnaan di sini hanya mengambil masa kira-kira 1 minit.

Syarikat pembangunan yang sama juga melancarkan perkhidmatan yang mengiktiraf dalam gambar jenis yang berbeza objek.

Perkhidmatan ini mungkin kelihatan seperti hiburan yang menyeronokkan, tetapi sebenarnya semuanya lebih menarik. Teknologi baharu memasuki amalan artis manusia dan mengubah pemahaman kita tentang seni. Kemungkinan orang ramai tidak lama lagi perlu bersaing dengan mesin dalam bidang kreativiti.

Mengajar algoritma untuk mengenali imej ialah tugas yang telah lama digeluti oleh pembangun kecerdasan buatan. Oleh itu, program yang mewarnakan gambar lama dan melukis anjing di langit boleh dianggap sebagai sebahagian daripada proses yang lebih besar dan lebih menarik.


Atas