Artikel saya sebelumnya memiliki judul yang hampir sama, dengan satu-satunya perbedaan adalah saya membuat lensa untuk Snapchat secara algoritmik menggunakan dlib dan openCV, dan hari ini saya ingin menunjukkan bagaimana Anda dapat mencapai hasil menggunakan pembelajaran mesin. Pendekatan ini akan memungkinkan untuk tidak terlibat dalam desain manual dari algoritma, tetapi untuk mendapatkan gambar akhir langsung dari jaringan saraf.
Inilah yang kami dapatkan:
Apa itu pix2pix?
Ini adalah cara mengubah gambar menjadi gambar menggunakan jaringan pertikaian (umumnya dikenal sebagai pix2pix).
Nama "pix2pix" berarti jaringan dilatih untuk mengubah gambar input menjadi gambar output yang sesuai. Berikut adalah contoh dari transformasi tersebut:
Fitur paling keren dari pix2pix adalah fleksibilitasnya . Alih-alih membuat algoritma baru atau model baru untuk masing-masing tugas di atas, cukup menggunakan set data yang berbeda untuk melatih jaringan.
Berbeda dengan pendekatan yang digunakan sebelumnya, pix2pix belajar untuk memecahkan masalah jauh lebih cepat dan dengan set pelatihan yang lebih kecil. Misalnya, hasil di bawah ini diperoleh saat pelatihan menggunakan GPU Pascal Titan X pada dataset 400 pasang gambar dan dalam waktu kurang dari dua jam.
Bagaimana cara kerja pix2pix?
pix2pix menggunakan dua pembelajaran jaringan saraf secara paralel:
- Generator
- Diskriminator
Generator mencoba untuk menghasilkan gambar output dari data pelatihan input, dan pembeda mencoba untuk menentukan apakah hasilnya nyata atau dihasilkan.
Ketika generator menghasilkan gambar yang tidak bisa dibedakan (pembeda) dari yang asli, kita mulai melatih pembeda pada mereka dan gambar yang sebenarnya. Ketika pembeda berhasil membedakan gambar nyata dari yang dihasilkan, kita kembali melatih generator sehingga lagi belajar menipu pembeda.
Seperti "perlombaan senjata" mengarah pada fakta bahwa menjadi sulit bagi seseorang untuk membedakan gambar nyata dari yang dihasilkan.
Berlatih
Kami akan melatih generator filter kami untuk Snapchat pada 256x256 gambar (ukuran besar akan membutuhkan lebih banyak memori video). Untuk membuat dataset, gunakan kode dari tutorial sebelumnya .
Saya mengunduh banyak gambar wajah dan menerapkan filter "Kacamata Kehidupan" untuk masing-masingnya. Ini akan menghasilkan sesuatu seperti pasangan ini:
Untuk membuat model, ambil repositori pix2pix berdasarkan TensorFlow. Klon dan instal Tensorflow.
Perintah untuk memulai pelatihan adalah sebagai berikut:
python pix2pix.py --mode train --output_dir dir_to_save_checkpoint --max_epochs 200 --input_dir dir_with_training_data --which_direction AtoB
Parameter which_direction menentukan arah pelatihan. AtoB berarti kita ingin mengubah gambar A (kiri, tanpa kacamata) menjadi gambar B (kanan, dengan kacamata). Omong-omong, perhatikan bahwa pix2pix dapat berhasil mempelajari cara mengembalikan gambar asli dari gambar dengan filter, cukup ubah arah pelatihan.
Anda dapat memantau kemajuan pelatihan menggunakan tensorboard, untuk itu Anda perlu menjalankan perintah:
tensorboard --logdir=dir_to_save_checkpoint
Segera setelah Anda melihat bahwa hasil pada data pelatihan telah menjadi cukup baik, Anda dapat menghentikan pelatihan dan menguji model pada data sewenang-wenang. Anda dapat melanjutkan pelatihan dari titik kontrol terakhir sebagai berikut:
python pix2pix.py --mode train --output_dir dir_to_save_checkpoint --max_epochs 200 --input_dir dir_with_training_data --which_direction AtoB --checkpoint dir_of_saved_checkpoint
Kesimpulan
Munculnya jaringan generatif tipe-pix2pix membuka prospek yang bagus untuk solusi universal dan sederhana untuk semua jenis tugas pemrosesan gambar.