GAN Çalışma Kılavuzu: İlkelerin tanıtımından Demo üretimine

Yazar: HE, Fudan Üniversitesi Uygulamalı Bilgisayar Bilimleri Yüksek Lisansının kaynağı, okuma, yapay zeka ve makine öğreniminin araştırma yönünü.

Generative Adversarial Network (GAN), son yıllarda çok popüler hale gelen derin bir öğrenme modelidir. Son zamanlarda, bu alanda bazı makaleler okudum ve bir GAN kodu çalıştırdım, bu yüzden bu makaleyi GAN'ı tanıtmak için yazdım.

Bu makale esas olarak üç bölüme ayrılmıştır:

  • Orijinal GAN ilkesini tanıtın

  • DCGAN ilkesi de çok önemlidir

  • Başlık resminde gösterildiği gibi bir veri seti eklenmiş olarak anime avatarları oluşturmak için Tensorflow'da DCGAN kodu nasıl çalıştırılır.

GAN ilkesine giriş

GAN'ın okunacak ilk makalesinden bahsetmişken, tabii ki Ian Goodfellow'un Generative Adversarial Networks (arxiv: https://arxiv.org/abs/1406.2661), bu makale bu alandaki öncü çalışma olarak kabul edilebilir.

GAN'ın temel ilkesi aslında çok basittir, işte resim oluşturmanın bir örneği. İki ağımız olduğunu varsayalım, G (Jeneratör) ve D (Ayırıcı). Adından da anlaşılacağı gibi işlevleri şunlardır:

  • G, resimler üreten bir ağdır, rastgele bir z gürültüsü alır ve G (z) olarak belirtilen bu gürültü aracılığıyla resimler üretir.

  • D, bir resmin "gerçek" olup olmadığını belirleyen ayırt edici bir ağdır. Giriş parametresi x'tir, x bir resmi temsil eder ve çıktı D (x), x'in gerçek bir resim olma olasılığını temsil eder.1 ise,% 100'ün gerçek bir resim olduğu ve çıkışın 0 olduğu anlamına gelir, bu da gerçek olamayacağı anlamına gelir. resmi.

Eğitim sürecinde, G ağını oluşturmanın amacı, D ağını aldatmak ve ayırt etmek için mümkün olduğunca gerçek resimler oluşturmaktır. D'nin amacı, G'nin oluşturduğu resimleri gerçek resimlerden olabildiğince ayırmaktır. Bu şekilde G ve D dinamik bir "oyun süreci" oluşturur.

Final oyununun sonucu nedir? En ideal durumda, G, "gerçek ve sahte" olan bir G (z) resmi oluşturabilir. D için, G tarafından üretilen resmin gerçek olup olmadığını belirlemek zordur, bu nedenle D (G (z)) = 0.5.

Bu şekilde hedefimize ulaşılır: resimler oluşturmak için kullanılabilecek üretken bir G modeli elde ederiz.

Yukarıdakiler, GAN'ın temel ilkelerine genel bir bakış niteliğindedir. Bunu matematiksel dilde nasıl tanımlayabilirim? Makaledeki formülden doğrudan bir alıntı:

Bu formülü basitçe analiz edin:

  • Formülün tamamı iki maddeden oluşur. x gerçek resmi temsil eder, z G ağına gürültü girişini temsil eder ve G (z) G ağı tarafından üretilen resmi temsil eder.

  • D (x), D ağının gerçek resmin gerçek olup olmadığına karar verme olasılığını temsil eder (çünkü x gerçek, dolayısıyla D için, bu değer 1'e ne kadar yakınsa o kadar iyidir). Ve D (G (z)), D ağının G tarafından oluşturulan resmin gerçek olup olmadığına karar verme olasılığıdır.

  • G'nin Amacı: Yukarıda belirtildiği gibi, D (G (z)), D ağının G tarafından üretilen resmin gerçek olup olmadığına karar verme olasılığıdır ve G, ürettiği resmin "resim ne kadar yakınsa o kadar iyi" olmasını ummalıdır. Başka bir deyişle, G, D (G (z)) 'nin olabildiğince büyük olmasını ister ve V (D, G) bu zamanda küçülecektir. Böylece formülün ön işaretinin min_G olduğunu görüyoruz.

  • D'nin amacı: D'nin yeteneği ne kadar güçlüyse, D (x) o kadar büyük olmalı ve D (G (x)) küçülmelidir. Şu anda, V (D, G) büyüyecek. Bu nedenle, D'nin formülü maksimize etmektir (maks_D)

Aşağıdaki resim bu süreci iyi açıklamaktadır:

Peki, stokastik gradyan inişini kullanarak D ve G'yi nasıl eğitebilirim? Algoritma ayrıca makalede verilmiştir:

Kırmızı kutu içinde daire içine alınmış kısım, daha fazla dikkat etmemiz gereken şeydir. İlk adımda, D.'yi eğitiyoruz. D, V (G, D) ne kadar büyükse, o kadar iyi olacağını umuyor, bu yüzden gradyan (artan) ekliyoruz. İkinci adımda G eğitimi alırken, V (G, D) mümkün olduğu kadar küçüktür, bu nedenle gradyan çıkarılır. Tüm eğitim süreci değişiyor.

DCGAN ilkesine giriş

Derin öğrenmede görüntü işleme için en iyi modelin CNN olduğunu biliyoruz, öyleyse CNN ile GAN nasıl birleştirilir? DCGAN, bu konudaki en iyi girişimlerden biridir (kağıt adresi: Derin Evrişimli Üretken Çekişmeli Ağlar ile Denetimsiz Temsil Öğrenimi)

DCGAN'ın prensibi GAN ile aynıdır, bu yüzden burada tekrar etmeyeceğim. Sadece yukarıdaki G ve D'yi iki evrişimli sinir ağıyla (CNN) değiştirir. Ancak doğrudan değiştirmek yeterli değildir. DCGAN, örneğin kalitesini ve yakınsama hızını iyileştirmek için evrişimli sinir ağının yapısında bazı değişiklikler yaptı. Bu değişiklikler şunlardır:

  • Tüm havuzlama katmanlarını iptal edin. G ağında, üst örnekleme için aktarılmış evrişimli katman, D ağında havuzlama yerine adımla evrişim kullanılır.

  • Hem D hem de G'de toplu normalleştirme kullanın

  • FC katmanını kaldırın ve ağı tamamen evrişimli bir ağ yapın

  • G ağı, aktivasyon işlevi olarak ReLU kullanır ve son katman tanh kullanır

  • D ağında aktivasyon işlevi olarak LeakyReLU kullanın

DCGAN'daki G ağı şunları gösterir:

Tensorflow'da DCGAN

Yukarıda bahsedilen bir ilke, aşağıdaki bazı ilginç pratik kısımdır.

DCGAN'ın orijinal yazarı, özellikle ilginç olmayan LSUN yatak odası resimleri oluşturmak için DCGAN'ı kullandı. İnternette anime karakter avatarları oluşturmak için DCGAN kullanan "Chainer Automatic Generation-Qiita" adlı bir makale gördüm. Etkisi şu şekildedir:

Bu çok ilginç pratik bir içerik. Orijinal metnin Chainer ile yapılmış olması üzücü ve pek çok insan bu çerçeveyi kullanmıyor. Bu sonucu Tensorflow'da yeniden oluşturalım.

Orijinal veri setlerinin toplanması

Öncelikle, bir tarayıcı ile çok sayıda animasyon resmini taramamız gerekiyor Orijinal metin bu web sitesinde taranıyor: Bunu denediğimde, bu web sitesine ağ ortamım altında erişemediğimi fark ettim, bu yüzden basit bir tarayıcı yazdım ve başka bir ünlü anime galerisi web sitesini taradım: konachan.net-Konachan.com Anime Duvar Kağıtları.

Tarayıcı kodu aşağıdaki gibidir:

ithalat istekleri

Bu tarayıcı 120.000 resim tarayarak yaklaşık bir gün koştu, şöyle görünüyor:

Buradaki resimlerin çoğunun oldukça dağınık olduğu ve doğrudan eğitim için veri olarak kullanılamayacağı görülebilir.Eğitim için karakterlerin portrelerini kesmek için uygun araçlar kullanmamız gerekiyor.

Avatar müdahalesi

Avatarın ekran görüntüsü orijinal metinle aynıdır, doğrudan github'da açıklık tabanlı bir araç kullanın: nagadomi / lbpcascade_animeface.

Kodu sarmalamanız yeterlidir:

Resmi çektikten sonra karakter verileri:

Bu eğitim için kullanılabilir!

Resmi sıfırdan taramak istemezseniz, taradığım avatar verilerini (275M, yaklaşık 50.000 resim), Baidu ağ disk adresini doğrudan kullanabilirsiniz: https://pan.baidu.com/s/1eSifHcA, çıkarma kodu: g5qa.

Eğitim

DCGAN'ın Tensorflow'da yapay tekerlekleri var: carpedm20 / DCGAN-tensorflow, bu kodu doğrudan kullanabiliriz.

Ancak, orijinal kodda yalnızca sınırlı sayıda veritabanı sağlanmıştır Kendi verilerinizi nasıl eğitirsiniz? Model.py'de verileri okumak için birkaç satır kod buluyoruz:

config.dataset == 'mnist' ise: data_X, data_y = self.load_mnist

Bu şekilde veri okuma mantığı çok net, data klasöründe yeni bir anime klasörü oluşturup resimleri direkt olarak bu klasöre koyuyoruz ve çalışırken dataset anime belirliyoruz.

Run komutu (parametre anlamı: oluşturulan resmin boyutunu belirtin 48x48, resmimizin boyutu 96x96, 300 epoch çalıştırın):

python main.py --image_size 96 --output_size 48 --dataset anime --is_crop True --is_train True --epoch 300

sonuç

İlk dönemi bitirdi (sadece küçük bir taslak):

5. çağdan sonraki sonuç:

10. çağ:

200 dönem, bazı resimlere yakından bakmak gerçekten de sahte olmak için yeterlidir:

Başlık resmi, benim tarafımdan 300. çağdan üretildi.

Özet ve takip

Kısaca GAN ve DCGAN prensiplerini tanıtın. Ve resimler oluşturmak için basit bir demo yapmak için Tensorflow'un nasıl kullanılacağı.

  • Ian Goodfellowun GAN'ın çalışma özeti bölümlerinin özeti gerçekten harika. "Exclusive | GAN's Father NIPS 2016 Speech Live Direct: A Comprehensive Interpretation of the Principles and Future of Generative Adversarial Networks (PPT ile)

  • Kod dahil olmak üzere GAN belgelerinin bir özeti: https://github.com/zhangqianhui/AdversarialNetsPapers.

HAY, lamba kolu ve lamba kaynağının dengesiyle oynayan yeni lambaları piyasaya sürüyor Bu tasarım harika
önceki
1 Nisan Şaka Günü resmi olarak şaka yapılabilir, ancak çoğu pazarlamada bazı sürprizler yok
Sonraki
Yetişkin film yıldızı: Guendoz bir yılda benden daha çok yalan söyledi
Baojun 530 satın almaya değer mi? 3000 kilometre sürdükten sonra, sahibi gerçek itirafta bulundu!
Alibaba dağıtılmış veritabanı hizmeti DRDS geliştirme geçmişi
Norveç binası, dünyanın en yüksek ahşap yapısı olarak adlandırıldı. Daha fazla benzer yüksek binalar olacak mı?
Atmasız ve tuzlu balık arasındaki fark nedir, Tuon 380 amiral gemisi arabadan bahsedin
Yıl sonu planlama maratonu "Gök gürültüsüne basmaktan" kaçınmak ister misiniz Bu on maraton kesinlikle katılımınıza değer
Irak 3-0 Yemen grubu erken elemeye, 00'dan sonra genç gol attı
Yeni Venus T90 casus fotoğrafları ortaya çıktı ve bu yaz satışta olan 6 ileri manuel şanzımanın yerini aldı
React Native'deki iş parçacıklarının iOS perspektifinden şifresini çözme
hatırlatmak! Kaiping Yolu ile Jiujiang Yolu ile Pingxiang Yolu ve Pingxiang Şubesi Yolu'nun kesişme noktasındaki trafik değişti. Bu konuda iyimsersiniz ~
Gerçek ortaya çıktı! Wenzhou, temas halinde olan çocuğu kaybetti ama annesi yüzünden "mutlu değil"
4 yaşında bir kız yolun karşısına geçerken ezildi ve beklenmedik bir şekilde, bu son kez büyükleriyle el ele tutuştu!
To Top