Table of Contents
GAN (Generative Adversarial Networks), Ian Goodfellow ve Montreal Üniversitesi’nden diğer araştırmacılar tarafından 2014 yılında tanıtılmıştır. Üretken yapay zeka kümesine ait bir sinir ağıdır. İki sinir ağından oluşmaktadır: Generator (Üretici) ve Discriminator (Ayırıcı). Üretici, yeni örnekleri oluşturur. Ayırıcı, oluşturulan örneklerin gerçekliğini değerlendirir. Üretici tarafından üretilen verileri gerçek ve sahte olarak sınıflandıran ikili bir sınıflandırıcıdır. Eğitim verileri buraya yüklenir.
Bazı GAN türleri:
- DCGAN (Deep Convolutional GAN)
- WGAN (Wasserstein GAN)
- SRGAN (Super Resolution GAN)
- pix2pix (Image to Image)
- CycleGAN (Cycle Generative)
- StackGAN (Stacked GAN)
- ProGAN (Progressive Growing)
- StyleGAN (Style-based GAN)
- VQGAN (Vector Quantized GAN)
- SGAN
- SAGAN
- AC-GAN
- GauGAN
- GFP-GAN (Generative Face Completion)
Çalışma Adımları
Üretici rastgele gürültüden gelen bir girişi kullanarak veri setine benzeyen yeni örnekler üretir. Ayırıcı, bu örnekleri gerçek veya sahte olarak sınıflandırır. İki ağ da birbirine karşıdır. Üretici, ayırıcının sahte veri örneklerini gerçek olarak sınıflandırmasını engellemeye çalışırken, ayırıcı gerçek ve sahte örnekleri daha doğru bir şekilde ayırt etmeye çalışır. Bu sürekli rekabet ve geri besleme döngüsü sonucunda, hem üretici ağ daha gerçekçi veri örnekleri üretmeyi öğrenirken hem de ayırt edici ağ daha hassas bir şekilde gerçek ve sahte örnekleri ayırt etmeyi öğrenir.
Eğitim sırasında üretici ve ayırt edici ağ arasında bir denge sağlanmalıdır. Eğer üretici ağ çok iyi olursa ve ayırt edici ağ sahte verilerle gerçek verileri ayırt edemez hale gelirse model başarısız olabilir.
Farklı GAN Türleri
DCGAN (Deep Convolutional GAN)
2015 yılında Radford ve diğerleri tarafından tanıtılmıştır. GAN’dan farkı FC (tam bağlantılı) katmanlar yerine CNN kullanır. DCGAN, özellikle resimlerin üretilmesi üzerine odaklanmış olduğu için CNN mimarisini kullanır.
WGAN (Wasserstein GAN)
2017 yılında Arjovsky ve diğerleri tarafından tanıtılmıştır. Eğitimin kararlılığını artırmak için Wasserstein mesafesi (Wasserstein Distance) kullanır. Wasserstein mesafesi, üretilen görüntülerin gerçek veri dağılımına ne kadar yakın olduğunu ölçer. Bu daha kararlı ve düzgün bir gradyan akışı sağlar. Wasserstein mesafesi, iki dağılım arasındaki en küçük taşıma maliyetini ölçer. Bu, bir dağılımı diğerine dönüştürmek için gereken minimum ortalama maliyeti ifade eder. Taşıma maliyeti, her bir parçacığın bir noktadan diğerine taşınması için gereken ortalama maliyettir.
WGAN, mod çakışması (mode collapse) ve kaybolan gradyanlar (vanishing gradients) problemini çözmüştür. Mod çakışması, üretici modelin çıktısının gerçek veri dağılımının yalnızca belirli bir alt kümesini yansıtmasıdır. Üretici ağın her yinelemesinde ayırıcı ağın belirli bir alt kümeye aşırı uyum sağlaması sonucu oluşur. Kaybolan gradyanlar, ayırıcı ağ üretici modelin ürettiği örnekleri kolayca ayırt edebilirse üretici ağ daha güvenli örnekler üretmeyi tercih etmesiyle ortaya çıkar. Bu da çeşitlilik eksikliğine neden olur.
WGAN’da modelin üretimindeki kararlılığın artırılması için ayırıcı ağın Lipschitz sürekli olduğunu garanti eden bir kısıtlama getirilebilir. Lipschitz sürekliliği bir fonksiyonun davranışının istikrarlı ve tahmin edilebilir olmasını sağlar. Bir fonksiyon, Lipschitz sürekliliğini sağlıyorsa bu fonksiyonun davranışı belirli bir ölçüde “düzenli” olarak kabul edilir. Ancak bu regülarizasyon yöntemini uygulamak zor olabilir çünkü doğru ayarlanmadığında model düşük kaliteli görüntüler üretebilir.
WGAN-GP (Wasserstein GAN with Gradient Penalty)
Gulrajani ve diğerleri tarafından tanıtılmıştır. Eğitim sırasında Lipschitz kısıtlamasını elde etmek için Gradient Penalty (Gradyan Cezası) yöntemini kullanır. Gradyan cezası, ayırıcı ağın eğitiminde Lipschitz sürekliliğini zorlamak için ek bir terim olarak kullanılır. Üretici ağın gradyanlarının normunu cezalandırarak çalışır. Bu, ayırıcı ağın gradyanlarının belirli bir sınıra yakın olmasını ve böylece Lipschitz sürekliliğini sağlamasını sağlar.
cGAN (Conditional GAN)
Üretici modelin belirli bir koşula göre (bir sınıf etiketi) öğrenilmesini sağlar. cGAN’da ayırıcı ağ, gerçek ve üretilen görüntü arasındaki farkı belirlerken bir koşul vektörünü ele alır ve bu vektörü göz önünde bulundurarak sınıflandırma yapar. Normal bir GAN modelinde gizli vektör eşlemesinin görüntünün gerçek özellikleriyle nasıl ilişkili olduğunu bilemiyoruz, bu nedenle bir “kara kutu” gibidir. Belirli sonuçlar elde etmek için bu özellikleri manipüle edemeyiz. Görüntü rastgele bir gürültüden oluşur. cGAN da bu sorun giderilir.
Pix-to-Pix
cGAN’ın bir türevidir. Bir görüntüden diğerine çeviri yapmak için kullanılır. Bir giriş görüntüsü alır ve bu giriş görüntüsünü belirli bir çıktı formatına çevirir.
CycleGAN (Cycle-Consistent GAN)
Bi görüntüden diğerine çeviri yapmak için kullanılır. Pix-to-pix gibi doğrudan eşleştirilmiş eğitim verilerine ihtiyaç duymaz. Bunun yerine “unsupervised learning (denetimsiz öğrenme)” prensibini kullanır. Cycle Consistency Loss, dönüşüm yapılırken orijinal görüntünün yeniden oluşturulmasını zorunlu kılar. Yani bir görüntü bir dönüşüme uğradıktan sonra tekrar orijinal hale geldiğinde, başlangıç ve sonuç arasında bir tutarlılık sağlar. Pix-to-pix’e kıyasla daha maliyetli ve zaman alıcı bir eğitim sunar. Renk ve doku değişikliklerini içeren çeviri görevlerinde yöntem genellikle başarılıdır. Örneğin at-zebra, elmaportakal dönüşümü.
SRGAN (Super Resolution GAN)
2017 yılında Ledig ve diğerleri tarafından tanıtılmıştır. Düşük çözünürlüklü (Low-Resolution) giriş görüntülerini yüksek çözünürlüklü (High-Resolution) görüntülere dönüştürmeyi amaçlar. Üretici, düşük çözünürlüklü giriş görüntüsünü alır ve bunu yüksek çözünürlüklü bir çıktıya görüntüsünü daha yüksek boyuta genişletmek yerine gizli katmanlarda işlenirken yüksek boyutlu bir tensör oluşturur. Daha sonra bu tensör, bir kanal gruubunu, pikselleri birleştirerek daha büyük bir tensör oluşturmak için yeniden boyutlandırır.
ESRGAN (Enhanced Super Resolution GAN)
2018 yılında X. Wang ve diğerleri tarafından tanıtılmıştır. SRGAN’ın geliştirilmiş bir versiyonudur. ESRGAN’da, perceptual loss, content loss gibi özel kayıp fonksiyonları kullanılabilir. Bu kayıp fonksiyonları, üretilen görüntülerin daha fazla detay ve daha gerçekçi olmasını sağlamak için kullanılır. ESRGAN, aktarımlı öğrenme (transfer learning) kullanarak önceden eğitilmiş bir VGG19 modelinin özelliklerini kullanabilir. Bu, üretici ağın daha iyi sonuçlar elde etmek için daha fazla bilgiye erişmesini sağlar.
ProGAN (Progressive Growing of GANs)
2017 yılında NVIDIA tarafından geliştirilmiştir. GAN’ların eğitimini aşamalı olarak gerçekleştiren ve daha yüksek çözünürlüklü görüntülerin üretilmesini sağlayan bir modeldir. Düşük çözünürlüklü görüntülerden başlayarak yavaş yavaş daha yüksek çözünürlüklü görüntülere geçiş yapar. İlk olarak, üretici ağ düşük
çözünürlüklü görüntüleri üretmek için eğitilir. Her aşamada, üretici ve ayırıcı ağ daha fazla katman ekler. Aktarımlı öğrenme (transfer learning) yöntemlerini kullanarak önceki aşamalarda öğrenilen bilgileri daha sonraki aşamalara aktarır.
StyleGAN
2018 yılında NVIDIA tarafından geliştirilmiştir. Yüksek çözünürlüklü insan yüzü ve diğer görsel içeriklerin üretilmesi için kullanılır.
VQGAN (Vector Quantized GAN)
Görsel verilerin temsillerini kodlamak ve yeniden oluşturmak için kullanılır. Giriş olarak verilen görsel veri üzerinde CNN kullanarak özellik çıkarımı yapılır. Elde edilen özellikler vektör kuantizasyonundan geçilir. Vektör kuantizasyonu, özellik vektörünü sabit bir sayıda semantik olarak anlamlı kümelerden birine atar. Bu, özellik vektörünün boyutunu azaltır ve daha basit bir temsil elde edilmesini sağlar. Kuantize edilmiş vektör, bir kodlayıcı kullanılarak daha düşük boyutlu bir vektöre kodlanır. Bu, görüntünün daha düşük boyutlu bir temsilini oluşturur. Kodlanmış vektör, bir dekoder kullanılarak yeniden oluşturulur. Bu,
orijinal görüntünün yeniden oluşturulmasını sağlar.
GauGAN
NVIDIA tarafından geliştirilmiştir. Görüntülerin segmentasyonunu ve sentezini geliştirmek için kullanılır. Temel fikri, basit bir çizimle başlayarak karmaşık ve gerçekçi görüntüler oluşturmaktır. Kullanıcı, bir çizim arayüzü üzerinden basit bir çizim oluşturur. Çizim, farklı renklerle ve şekillerle temsil edilen nesneleri içerir. GauGAN, kullanıcının çizimini alır ve farklı nesneleri otomatik olarak tanımlar ve segmente eder. Bu, çizimin her bölgesinin hangi nesneye ait olduğunu belirlemek için bir segmentasyon aşamasını içerir. GauGAN, her bir nesne için bir özellik haritası oluşturur. Bu özellik haritaları, her bir nesnenin geometrik şeklini, renklerini ve diğer özelliklerini temsil eder. Her bir özellik haritası, o nesnenin piksel düzeyinde ayrıntılı bir temsilini içerir. GauGAN, özellik haritalarını birleştirir ve gerçekçi bir görüntü oluşturur.
GFP-GAN (Generative Face Completion GAN)
Yüz görüntülerinin tamamlanması ve restore edilmesi için kullanılır. Yarı eksik veya bozulmuş bir yüz görüntüsünü alır. Eksik yüz görüntüsünü bir latent uzayda kodlamak için bir kodlayıcı kullanır. Bu, eksik görüntünün temsilini elde etmek ve işlemek için bir vektör oluşturur. Kodlanmış eksik görüntü vektörü bir dekoder kullanarak tamamlanır.