Rangkaian saraf gambar. Menggayakan imej menggunakan rangkaian saraf: tiada mistik, hanya matan

rumah / bekas

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

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

Pada mulanya, projek itu disiarkan dalam bentuk sumber terbuka, dan kemudian perkhidmatan dalam talian muncul di Internet, dibuat mengikut prinsip yang sama. 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?

Dengan reka bentuk mereka, rangkaian saraf meniru rangkaian saraf sebenar organisma hidup, tetapi mereka melakukannya menggunakan algoritma matematik. Sebaik sahaja anda telah mencipta struktur asas, anda boleh melatihnya menggunakan teknik pembelajaran mesin. Jika kita bercakap tentang pengecaman corak, maka beribu-ribu imej perlu melalui rangkaian saraf. Jika tugas rangkaian saraf berbeza, maka latihan latihan akan berbeza.

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

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

    YouTube juga mempunyai siri yang mudah dibaca penggelek tentang cara rangkaian saraf berfungsi.

Satu lagi perkhidmatan popular ialah Dreamscope, yang bukan sahaja boleh mengimpikan 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 yang serupa melakukan lebih kurang baik dalam tugas mereka, dan ia dianggap sebagai pencapaian yang hebat jika sekurang-kurangnya 20% orang tidak dapat membezakan gambar sebenar daripada imej berwarna komputer.

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

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

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

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

Salam, Habr! Anda mungkin perasan bahawa tema penggayaan foto untuk pelbagai gaya seni dibincangkan secara aktif di laman Internet anda ini. Membaca semua artikel popular ini, anda mungkin berfikir bahawa keajaiban berlaku di bawah hud aplikasi ini, dan rangkaian saraf benar-benar membayangkan dan melukis semula imej dari awal. Kebetulan pasukan kami menghadapi tugas yang sama: sebagai sebahagian daripada hackathon korporat dalaman, kami membuat penggayaan video, kerana permohonan untuk foto telah pun. Dalam siaran ini, kami akan memikirkan bagaimana rangkaian ini "melukis semula" imej, dan kami akan menganalisis artikel yang memungkinkan ini. Saya mengesyorkan anda membaca catatan terakhir sebelum membaca bahan ini dan secara umum dengan asas rangkaian saraf konvolusi. Anda akan menemui beberapa formula, beberapa kod (saya akan memberikan contoh pada Theano dan Lasagne), serta banyak gambar. Jawatan ini terbina dalam susunan kronologi penampilan artikel dan, dengan itu, idea itu sendiri. Kadang-kadang saya akan mencairkannya dengan pengalaman baru-baru ini. Berikut adalah seorang budak dari neraka untuk 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 lapisan tersembunyi, untuk ini mereka menggunakan rangkaian neural deconvolution (deconvnet), yang dicadangkan beberapa tahun sebelumnya (dengan cara itu, oleh Seiler dan Fergus yang sama, yang merupakan pengarang ini. penerbitan). Rangkaian dekonvolusi sebenarnya adalah rangkaian yang sama dengan belitan dan kumpulan, tetapi digunakan dalam susunan terbalik. Dalam kerja asal pada deconvnet, rangkaian telah digunakan dalam mod pembelajaran tanpa pengawasan untuk menjana imej. Kali ini, penulis mengaplikasikannya semata-mata untuk hantaran ke belakang daripada ciri yang diperolehi selepas hantaran ke hadapan melalui rangkaian kepada imej asal. Hasilnya, imej diperoleh yang boleh ditafsirkan sebagai isyarat yang menyebabkan pengaktifan ini pada neuron. Sememangnya, persoalan timbul: bagaimana untuk membuat laluan terbalik melalui konvolusi dan tidak linear? Dan lebih-lebih lagi melalui pengumpulan maksimum, ini pastinya bukan operasi terbalik. Mari kita lihat ketiga-tiga komponen tersebut.

Songsang ReLu

Dalam rangkaian konvolusi, fungsi pengaktifan sering digunakan ReLu (x) = maks (0, x) yang menjadikan semua pengaktifan pada lapisan bukan negatif. Sehubungan itu, apabila meneruskan semula ketaklinieran, ia juga perlu untuk mendapatkan hasil bukan negatif. Untuk ini, penulis mencadangkan menggunakan ReLu yang sama. Dari sudut pandangan seni bina Theano, anda perlu mengatasi fungsi kecerunan operasi (buku nota yang tidak terhingga berharga ada dalam resipi lasagna, dari situ anda akan mendapatkan butiran tentang kelas ModifiedBackprop).

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

Konvolusi terbalik

Ia adalah sedikit lebih rumit di sini, tetapi segala-galanya adalah logik: ia 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 dalam kata-kata ia tidak begitu jelas, mari kita lihat visualisasi prosedur ini (anda akan mendapati lebih banyak visualisasi konvolusi).


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), secara amnya, tidak boleh diterbalikkan. Tetapi kami masih ingin mencapai tahap maksimum dalam beberapa cara semasa laluan pulang. Untuk ini, penulis mencadangkan menggunakan peta tempat maksimum semasa laluan terus (suis lokasi maks). Semasa hantaran terbalik, isyarat input dicabut supaya lebih kurang mengekalkan struktur isyarat asal, ia benar-benar lebih mudah untuk dilihat daripada menerangkannya.



Hasilnya

Algoritma visualisasi adalah sangat mudah:

  1. Buat hantaran lurus.
  2. Pilih lapisan yang menarik minat kami.
  3. Betulkan pengaktifan satu atau beberapa neuron dan tetapkan semula yang lain.
  4. Buat kesimpulan yang bertentangan.

Setiap segi empat sama kelabu dalam imej di bawah sepadan dengan pemaparan penapis (yang digunakan untuk konvolusi) atau pemberat 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 pada setiap lapisan. Pengetahuan inilah yang akan membolehkan kemudiannya memanipulasi kandungan imej yang dijana, tetapi ini masih jauh; beberapa tahun akan datang dihabiskan untuk menambah baik kaedah rangkaian saraf "trepanning". Di samping itu, pengarang artikel mencadangkan cara untuk menganalisis cara terbaik untuk membina seni bina rangkaian saraf konvolusi untuk mencapai hasil yang lebih baik(namun, mereka tidak pernah memenangi ImageNet 2013, tetapi mereka berjaya mencapai puncak; UPD: ternyata mereka menang, Clarifai 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 rendering berdasarkan keturunan kecerunan.

Visualisasi Model Kelas

Jadi, bayangkan bahawa kita mempunyai rangkaian saraf yang terlatih untuk menyelesaikan masalah klasifikasi bagi sebilangan kelas. 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:



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


def compile_saliency_function (net): "" "Mengkompil fungsi untuk mengira peta kepentingan dan kelas ramalan untuk kumpulan mini imej input yang diberikan." "" inp = net ["input"]. input_var outp = lasagne.layers.get_output (net ["fc8"], deterministik = 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 wajah anjing pelik di internet - DeepDream. Dalam artikel asal, pengarang menggunakan proses berikut 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 terbitan kepadanya.
  4. Kembali ke langkah 2 atau keluar dari gelung.

Imej yang terhasil ialah:




Dan jika anda memulakan imej pertama foto sebenar dan mulakan proses yang sama? Tetapi pada setiap lelaran, kami akan memilih kelas rawak, menetapkan semula yang lain dan mengira nilai derivatif, kemudian kami mendapat impian yang begitu mendalam.


Awas 60 MB


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

Pengekstrakan Saliency Kelas

Jika proses ini dimulakan dengan foto 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 ambil perhatian bahawa ini adalah cara baharu untuk menggambarkan pengaktifan (tiada apa yang menghalang kita daripada menetapkan nilai pengaktifan bukan pada lapisan terakhir, tetapi secara umum pada mana-mana lapisan rangkaian dan mengambil terbitan daripada imej input) . Artikel seterusnya akan menggabungkan kedua-dua pendekatan sebelumnya dan memberi kami alat tentang cara menyesuaikan pemindahan gaya, yang akan diterangkan kemudian.

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

Secara umumnya, artikel ini bukan mengenai visualisasi, tetapi mengenai fakta bahawa menggantikan pengumpulan dengan lilitan dengan langkah yang besar tidak membawa kepada kehilangan kualiti. Tetapi sebagai hasil sampingan penyelidikan mereka, penulis mencadangkan cara baharu untuk menggambarkan ciri, yang mereka gunakan untuk lebih banyak analisis yang tepat apa yang model belajar. Idea mereka adalah seperti berikut: jika kita hanya mengambil derivatif, maka semasa penyahkonvolusi ciri-ciri yang ada dalam imej input tidak akan kembali kurang daripada sifar(menggunakan ReLu pada imej input). Dan ini membawa kepada fakta bahawa nilai negatif muncul pada imej belakang yang disebarkan. 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 (diri, input, out_grads): (inp,) = input (grd,) = out_grads dtype = inp.dtype return (grd * (inp> 0) .astype (dtype) * (grd > 0) .astype (dtype),)

Kemudian anda mendapat imej yang bersih dan boleh ditafsir sepenuhnya.


Peta Kepentingan Menggunakan Rambatan Belakang Berpandu

Pergi lebih dalam

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


Mari cuba percubaan berikut pada rangkaian VGG-19:



penukaran1_2

Anda tidak nampak apa-apa, tk. kawasan penerimaan adalah sangat kecil, ini adalah lilitan kedua 3x3, masing-masing, jumlah kawasan ialah 5x5. Tetapi jika kita zum masuk, kita dapat melihat bahawa ciri itu hanyalah pengesan kecerunan.




conv3_3


conv4_3


conv5_3


kolam5


Sekarang mari kita bayangkan bahawa bukannya maksimum atas plat, kita akan mengambil derivatif nilai jumlah semua elemen plat daripada imej input. Kemudian kawasan yang jelas menerima kumpulan neuron akan meliputi keseluruhan imej input. Untuk lapisan awal, kita akan melihat peta yang terang, dari mana kita membuat kesimpulan bahawa ini adalah pengesan warna, kemudian kecerunan, kemudian sempadan, dan seterusnya ke arah corak yang merumitkan. 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, dan oleh itu 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 kejayaan pertama trepanning rangkaian saraf. Kita (dalam erti kata kemanusiaan) ada di tangan kita alat yang berkuasa, yang membolehkan kita memahami perkara yang dipelajari oleh rangkaian saraf, dan juga untuk mengalih keluar perkara yang tidak kita benar-benar mahu ia pelajari. Penulis artikel ini sedang membangunkan kaedah yang membolehkan satu imej dijana peta serupa pengaktifan untuk beberapa imej sasaran, dan mungkin lebih daripada satu - ini adalah asas penggayaan. Kami membekalkan hingar putih kepada input, dan melalui proses berulang yang serupa seperti dalam mimpi dalam, kami membawa imej ini kepada satu dengan peta ciri yang serupa dengan imej sasaran.

Kehilangan kandungan

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




Mari kita nyatakan output i-lapisan ke- dari input sebagai. Kemudian jika kita meminimumkan jumlah wajaran baki antara imej input dan beberapa imej yang kami sasarkan c, kemudian anda mendapat apa yang anda perlukan. Mungkin.



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


# 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.tambah (x0) # Optimumkan, simpan hasil secara berkala untuk i dalam julat (8): cetak (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, maka kita akan cepat mendapat imej yang serupa dengan sasaran. Kini kami dapat mencipta semula imej daripada hingar putih yang kelihatan seperti beberapa imej kandungan.


Kehilangan Kandungan: conv4_2



Proses pengoptimuman




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 dengannya adalah bukan sifar dan sifar untuk lapisan lain); 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 "menghalau", iaitu, garis lurus sedikit melengkung - ini kerana semakin dalam lapisan, semakin dalam kurang maklumat tentang kedudukan spatial ciri yang terkandung di dalamnya (hasil penggunaan lilitan dan kolam).

Menambah lapisan awal segera membetulkan keadaan warna.


Kehilangan Kandungan: conv1_1, conv2_1, conv4_2


Semoga pada ketika ini, anda merasakan anda boleh mengawal perkara yang dilukis semula pada imej hingar putih.

Kehilangan gaya

Dan sekarang kita sampai kepada perkara 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 dilakukan ialah mengalih keluar maklumat ini daripada pandangan yang diterima pada setiap lapisan.


Penulis mencadangkan kaedah berikut. Ambil tensor di pintu keluar dari lapisan tertentu, buka lipatan 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 berapa kerap ciri di dalam plat ditemui secara berpasangan, atau, dengan kata lain, kita menganggarkan taburan ciri dalam plat dengan taburan normal multivariate.




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



Mari cuba untuk Vincent? Pada dasarnya, kita akan mendapat sesuatu yang diharapkan - bunyi dalam gaya Van Gogh, maklumat tentang susunan ruang ciri hilang sepenuhnya.


Vincent




Tetapi bagaimana jika bukannya imej yang digayakan anda meletakkan foto? Anda akan mendapat ciri yang sudah biasa, warna yang biasa, tetapi kedudukan spatial hilang sepenuhnya.


Foto pada kehilangan gaya


Pasti anda tertanya-tanya mengapa kami mengira matriks kovarians, dan bukan sesuatu yang lain? Lagipun, terdapat banyak cara untuk mengagregat ciri supaya koordinat ruang 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 Kombo

Sememangnya, terdapat keinginan untuk mencampurkan kedua-dua fungsi kos ini. Kemudian kami akan menjana imej sedemikian daripada hingar putih yang ciri daripada imej kandungan (yang mempunyai pengikatan kepada koordinat ruang) akan disimpan di dalamnya, dan terdapat juga ciri "gaya" yang tidak terikat dengan koordinat ruang, i.e. semoga butiran imej kandungan kekal utuh, tetapi dilukis semula dengan gaya yang kita mahukan.



Malah, terdapat juga regularizer, tetapi kami akan meninggalkannya untuk kesederhanaan. Ia kekal untuk menjawab soalan seterusnya: Apakah lapisan (berat) yang harus digunakan untuk pengoptimuman? Dan saya takut bahawa saya tidak mempunyai jawapan untuk soalan ini, dan begitu juga pengarang artikel itu. Mereka mempunyai cadangan untuk menggunakan yang berikut, tetapi ini tidak bermakna sama sekali kombinasi lain akan bekerja lebih teruk juga ruang yang besar cari. Satu-satunya peraturan yang mengikuti daripada memahami model: tidak ada gunanya mengambil lapisan bersebelahan, kerana tanda mereka tidak akan banyak berbeza antara satu sama lain, oleh itu, 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")) # kehilangan 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_ss1" ) losses.append (0.2e6 * style_loss (art_features, gen_features, "conv5_1")) # jumlah penalti variasi.append (0.1e-7 * total_variation_loss (generated_images)) total_loss = jumlah (kerugian)

Model akhir boleh diwakili seperti berikut.




Dan inilah hasil rumah-rumah dengan Van Gogh.



Cuba mengawal proses

Mari kita ingat bahagian sebelumnya, seawal dua tahun sebelum artikel semasa, saintis lain telah meneliti apa yang sebenarnya dipelajari oleh rangkaian saraf. Berbekalkan semua artikel ini, anda boleh menjana visualisasi ciri gaya yang berbeza, imej yang berbeza, resolusi dan saiz yang berbeza, dan cuba tentukan lapisan mana yang berat untuk diambil. 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 baki ... anda mendapat idea. Tetapi apa yang kita mahukan ialah kita suka imej itu. Gabungan cembung fungsi kandungan dan kehilangan gaya bukanlah ukuran yang difikirkan indah oleh fikiran kita. Adalah diperhatikan bahawa jika anda meneruskan penggayaan terlalu lama, maka fungsi kos secara semula jadi turun lebih rendah dan lebih rendah, tetapi keindahan estetik hasilnya menurun dengan ketara.




Baiklah, ada masalah lain. Katakan kami menemui lapisan yang mengekstrak ciri yang kami perlukan. Katakan beberapa tekstur adalah segi tiga. Tetapi lapisan ini masih mengandungi banyak ciri lain, sebagai contoh, bulatan, yang kita benar-benar tidak mahu melihat dalam imej yang dihasilkan. Secara umumnya, jika ada kemungkinan untuk mengupah sejuta orang Cina, maka adalah mungkin untuk memvisualisasikan semua ciri imej gaya, dan dengan kekerasan hanya tandai yang kita perlukan dan hanya masukkan mereka dalam fungsi kos. Tetapi untuk alasan yang jelas, ia tidak semudah itu. Tetapi bagaimana jika kita hanya mengalih keluar mana-mana kalangan yang kita tidak mahu lihat dalam hasil daripada imej gaya? Kemudian pengaktifan neuron yang sepadan, yang bertindak balas kepada bulatan, tidak akan berfungsi. Dan, sudah tentu, maka ini tidak akan muncul dalam gambar yang dihasilkan. Begitu juga dengan bunga. Bayangkan imej bertenaga dengan banyak warna. Pengedaran warna akan sangat tercemar di seluruh ruang, sama seperti pengedaran imej yang terhasil, tetapi dalam proses pengoptimuman, puncak yang berada pada asal kemungkinan besar akan hilang. Ternyata penurunan mudah dalam kedalaman bit palet warna menyelesaikan masalah ini. Ketumpatan 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 keinginan mereka secara visual daripada cuba merumuskannya dalam bahasa matematik. Sehingga. Akibatnya, 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 mengambil imej ringkas sebagai gaya.



keputusan








Dan di sini adalah vidosik, tetapi hanya dengan tekstur yang diperlukan

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

Nampaknya adalah mungkin untuk berhenti pada ini, jika bukan satu nuansa. Algoritma penggayaan di atas mengambil masa yang sangat lama. Jika anda mengambil pelaksanaan di mana lbfgs dijalankan pada CPU, proses itu mengambil masa kira-kira lima minit. Jika kita menulis semula supaya pengoptimuman pergi ke GPU, maka proses akan mengambil masa 10-15 saat. Ini tidak bagus. Mungkin pengarang 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 penjanaan tekstur (jika anda hanya menetapkan semula Kehilangan Gaya kepada sesuatu seperti ini, anda akan berjaya). Mereka mencadangkan untuk mengoptimumkan bukan imej yang diperoleh daripada hingar putih, tetapi beberapa rangkaian saraf yang menghasilkan imej yang digayakan.




Kini, jika proses penggayaan tidak melibatkan sebarang pengoptimuman, hanya hantaran hadapan perlu dilakukan. Dan pengoptimuman diperlukan sekali sahaja untuk melatih rangkaian penjana. Artikel ini menggunakan penjana hierarki di mana setiap seterusnya z saiz lebih besar daripada yang sebelumnya dan diambil sampel daripada hingar dalam kes penjanaan tekstur, dan daripada beberapa asas imej untuk melatih stylist. Adalah penting untuk menggunakan sesuatu selain daripada bahagian latihan imajnet, kerana ciri di dalam rangkaian Kehilangan dikira oleh rangkaian yang dilatih hanya di bahagian latihan.



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

Seperti namanya, penulis, yang hanya lewat 17 hari dengan idea rangkaian penjanaan, sibuk meningkatkan resolusi imej. Mereka nampaknya telah diilhamkan oleh kejayaan pembelajaran sisa pada imagnet terkini.




Masing-masing blok baki dan blok penukaran.



Oleh itu, kini kita ada di tangan, sebagai tambahan kepada kawalan ke atas penggayaan, terdapat juga 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 apl penggayaan lain bagi apl penggayaan video yang pertama:



Menghasilkan sesuatu seperti itu.


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

Kepada penanda buku

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

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

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

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

Dalam versi HD, anda boleh melaraskan bilangan lelaran: 100 akan berharga 50 rubel, dan 1000 - 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 dari 1800 rubel.

Pada bulan Februari, wakil Ostagram, yang 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 dibentangkan oleh Andrey. Menurutnya, Ostagram muncul sebelum Instapainting, tetapi diilhamkan oleh projek serupa bernama Vipart.

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

Untuk pemprosesan imej, pencipta Ostagram ingin menggunakan pelayan awan Amazon, tetapi selepas kemasukan pengguna, menjadi jelas bahawa kos untuk mereka akan melebihi seribu dolar sehari dengan pulangan pelaburan yang minimum. Andrey, yang juga pelabur dalam projek itu, menyewa kemudahan pelayan di Nizhny Novgorod.

Penonton projek itu adalah kira-kira seribu orang sehari, tetapi pada beberapa hari ia mencapai 40 ribu orang kerana peralihan dari media asing yang telah melihat projek itu sebelum projek domestik (Ostagram malah 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 pengguna asing sebelum ini sengaja menghadkan akses kepada pemprosesan imej (mereka berfikir untuk memulakan pengewangan dengan Rusia), kini Ostagram sudah bergantung kepada penonton Barat.

Sehingga kini, prospek untuk mendapatkan semula adalah sewenang-wenangnya. 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 mereka tidak akan membayar satu sen pun untuk itu. Orang Eropah lebih menyokong perkara ini - dari segi membayar untuk mempercepatkan, meningkatkan kualiti - jadi tumpuan diberikan kepada pasaran itu.

Andrey, wakil Ostagram

Menurut Andrey, pasukan Ostagram sedang berusaha versi baru tapak dengan berat sebelah sosial yang kuat: "Ia akan kelihatan seperti satu perkhidmatan yang terkenal, tetapi apa yang perlu dilakukan." Wakil Facebook di Rusia telah pun berminat dengan projek itu, tetapi perjanjian itu belum mencapai rundingan mengenai penjualan.

Contoh kerja perkhidmatan

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

© 2021 skudelnica.ru - Cinta, pengkhianatan, psikologi, perceraian, perasaan, pertengkaran