Panduan lengkap membangun Generative Adversarial Network (GAN) untuk membuat karakter anime Anda sendiri dengan Keras

Pada postingan kali ini, kita akan belajar mengembangkan generative adversarial network (GAN) untuk menghasilkan karakter manga atau anime yang realistis.

Saya selalu kagum dengan animasi yang hidup, terutama Manga dan tampilan serta guratannya yang berani. Bukankah luar biasa jika bisa menggambar sendiri beberapa, merasakan sensasi menciptakannya dengan bantuan jaringan saraf yang dikembangkan sendiri?!

Jadi apa yang membuat GAN berbeda?

Cara terbaik untuk menguasai suatu keterampilan adalah dengan berlatih dan berimprovisasi sampai Anda puas dengan diri sendiri dan usaha Anda. Untuk mesin atau jaringan saraf, keluaran terbaik yang dapat dihasilkannya adalah keluaran yang setara dengan keluaran yang dihasilkan manusia—atau bahkan membodohi manusia dengan percaya bahwa manusia sebenarnya yang menghasilkan keluaran tersebut. Itulah tepatnya yang dilakukan GAN—setidaknya secara kiasan ;)

Jaringan permusuhan generatif akhir-akhir ini menjadi topik hangat dalam pembelajaran mendalam. Diperkenalkan oleh Ian Goodfellow dkk., mereka memiliki kemampuan untuk menghasilkan keluaran dari awal.

Ikhtisar Singkat Jaringan Adversarial Generatif

Dalam jaringan permusuhan generatif, dua jaringan berlatih dan bersaing satu sama lain, sehingga menghasilkan improvisasi bersama. Generator menyesatkan diskriminator dengan membuat masukan palsu yang menarikdan mencoba mengelabui diskriminator agar menganggap masukan tersebut sebagai masukan nyata. Diskriminator memberi tahu apakah suatu masukan itu asli atau palsu.

Ada 3 langkah utamadalam pelatihan GAN:

  1. Menggunakan generator untuk membuat masukan palsu berdasarkan derau acak atau dalam kasus kami, derau normal acak.
  2. Melatih diskriminator dengan masukan asli dan palsu (baik secara bersamaan dengan menggabungkan masukan asli dan palsu, atau satu demi satu, yang terakhir lebih diutamakan).
  3. Latih seluruh model:model dibuat dengan diskriminator yang digabungkan dengan generator.

Hal penting yang perlu diperhatikan adalah bobot diskriminator dibekukan pada langkah terakhir.

Alasan penggabungan kedua jaringan adalah tidak adanya umpan balik pada keluaran generator. Satu-satunya panduan adalah jika diskriminator menerima keluaran generator.

Bisa dibilang mereka adalah rival yang ditakdirkan untuk satu sama lain. Tokoh utama adalah generator yang berusaha menjadi lebih baik lagi untuk mewujudkan tujuan kita dengan belajar dari pertarungan dengan saingannya, sang diskriminator.

Itulah gambaran singkat tentang arsitektur GAN. Jika itu tidak cukup, Anda dapat merujuk ke pengantar rumit ini.

Pembelajaran mendalam — Untuk para ahli, oleh para ahli. Kami menggunakan pengalaman puluhan tahun kami untuk memberikan sumber daya pembelajaran mendalam terbaik ke kotak masuk Anda setiap minggunya.

GAN kami

Untuk tugas yang ada, kami menggunakan DCGAN (jaringan permusuhan generatif konvolusional dalam)

Beberapa pedoman yang harus diikuti dengan DCGAN:

  1. Ganti semua pengumpulan maksimal dengan langkah konvolusional
  2. Gunakan konvolusi yang dialihkan untuk upsampling.
  3. Hilangkan lapisan yang terhubung sepenuhnya.
  4. Gunakan normalisasi batch kecuali untuk lapisan keluaran untuk generator dan lapisan masukan untuk diskriminator.
  5. Gunakan ReLU pada generator, kecuali outputnya yang menggunakan tanh.
  6. Gunakan LeakyReLU di diskriminator.

Detail Pengaturan

  1. Versi keras==2.2.4
  2. TensorFlow==1.8.0
  3. Buku catatan Jupyter
  4. Matplotlib dan perpustakaan utilitas lainnya seperti NumPy, Pandas.
  5. Python==3.5.7

Kumpulan Data

Kumpulan data untuk wajah anime dapat dihasilkan dengan menelusuri berbagai situs manga dan mengunduh gambar, memotong wajah, dan mengubah ukurannya ke ukuran standar. Diberikan di bawah ini adalah tautan untuk kode Python yang menggambarkan hal yang sama:



Saya cukup beruntung menemukan kumpulan data yang telah diproses sebelumnya (dipotong wajahnya) dari situs berikut:





Sekilas tentang Kumpulan Data-

Model

Sekarang mari kita lihat arsitektur jaringan saraf kita! Ingat poin yang kita bahas sebelumnya tentang DCGAN.

Implementasi GAN ini menggunakan lapisan deconv di Keras. Saya sudah mencoba berbagai kombinasi lapisan seperti:

  • Konv. + Peningkatan Sampel
  • Konv + bilinear
  • Konv + Peningkatan Subpiksel

Catatan: Anda dapat merujuk ke repositori saya untuk kode lengkapnya.

Pembangkit

Generator terdiri dari lapisan transpos konvolusi diikuti dengan normalisasi batch dan fungsi aktivasi ReLU yang bocor untuk upsampling. Kami akan menggunakan parameter langkah di lapisan konvolusi. Hal ini dilakukan untuk menghindari pelatihan yang tidak stabil. Leaky ReLUs adalah salah satu upaya untuk memperbaiki masalah “ReLU yang sekarat”. Alih-alih fungsinya menjadi nol ketika x ‹ 0, ReLU yang bocor malah akan memiliki kemiringan negatif yang kecil (sekitar 0,01 atau lebih).

Kode

Diskriminator

Diskriminator juga terdiri dari lapisan konvolusi tempat kami menggunakan langkah untuk melakukan downsampling dan normalisasi batch untuk stabilitas.

Kode

GAN yang Dikompilasi

Untuk melakukan propagasi balik pada generator, agar tetap memeriksa keluarannya, kami mengkompilasi jaringan di Keras—generatordiikuti oleh diskriminator.

Dalam jaringan ini, masukannya adalah derau acak untuk generator, dan keluarannya adalah keluaran generator yang diumpankan ke diskriminator, menjaga bobot diskriminator tetap bekuuntuk menghindari keruntuhan permusuhan.Kedengarannya keren, bukan? “Cari!”

Kode

Melatih Model

Konfigurasi Dasar model

  1. Menghasilkan derau normal acak untuk input

2. Menggabungkan sampel data nyata dari kumpulan data dengan noise yang dihasilkan

3. Tambahkan noise pada label masukan

4. Melatih generator saja

5. Hanya melatih diskriminator

6. Latih GAN gabungan

7. Menyimpan contoh generator dan diskriminator

Saya melatih kode ini pada Acer-Predator helios 300 saya, yang membutuhkan waktu hampir setengah jam untuk 10.000 langkah dan sekitar 32.000 gambar, dengan GPU Nvidia GTX GeForce 1050Ti.

Hasil Generator Manga

Setelah berlatih 10.000 langkah, hasilnya terlihat cukup keren dan memuaskan. Coba lihat!

Dalam hal peningkatan model, menurut saya pelatihan dengan durasi yang lebih lama dan kumpulan data yang lebih besar akan lebih meningkatkan hasilnya (Beberapa wajah sangat aneh dan menakutkan! Bukan Manga konvensional, harus saya katakan :D)

Kesimpulan

Tugas menghasilkan wajah bergaya manga tentu menarik.

Namun masih banyak ruang untuk perbaikan dengan pelatihan, model, dan kumpulan data yang lebih baik. Model kami tidak dapat membuat manusia bertanya-tanya apakah wajah-wajah yang dihasilkan ini asli atau palsu; Meski begitu, ia cukup berhasil dalam menghasilkan gambar bergaya manga. Silakan coba ini dengan postur manga lengkap juga.

Gudang

Ini tautan ke repositori GitHub saya. Jangan ragu untuk melihat, mengkloning, atau mengimprovisasinya. Segala macam saran dan kritik dipersilahkan. Silakan upvote jika Anda menyukai konten dan implementasinya.



Sumber

  1. https://towardsdatascience.com/generate-anime-style-face-using-dcgan-and-explore-its-latent-feature-representation-ae0e905f3974
  2. https://github.com/pavitrakumar78/Anime-Face-GAN-Keras
  3. https://medium.com/@jonathan_hui/gan-dcgan-deep-convolutional-generative-adversarial-networks-df855c438f

Saya harap Anda menikmati artikel pertama saya tentang jaringan permusuhan generatif untuk pembuatan wajah manga! Jangan lupa untuk menekan tombol upvote dan follow!

Catatan Editor: Heartbeat adalah publikasi dan komunitas online berbasis kontributor yang berdedikasi untuk menyediakan sumber daya pendidikan utama bagi praktisi ilmu data, pembelajaran mesin, dan pembelajaran mendalam. Kami berkomitmen untuk mendukung dan menginspirasi developer dan engineer dari semua lapisan masyarakat.

Secara editorial independen, Heartbeat disponsori dan diterbitkan oleh Comet, sebuah platform MLOps yang memungkinkan ilmuwan data & tim ML melacak, membandingkan, menjelaskan, & mengoptimalkan eksperimen mereka. Kami membayar kontributor kami, dan kami tidak menjual iklan.

Jika Anda ingin berkontribusi, kunjungi panggilan untuk kontributor kami. Anda juga dapat mendaftar untuk menerima buletin mingguan kami (“Deep Learning Weekly” dan “Comet Newsletter”), bergabunglah dengan kami di “” “Slack”, dan ikuti Comet di “Twitter” dan “LinkedIn” untuk sumber daya, acara, dan masih banyak lagi yang akan membantu Anda membangun model ML yang lebih baik dan lebih cepat.