Derin Öğrenme ile Artistik Stil Transferi
🎨 Çektiğiniz fotoğrafın ya da çizdiğiniz bir resmi tüm zamanların sizce en başarılı ressamı resmetseydi neye benzerdi, merak etmez misiniz?
Peki bu, sanatçıyı kopyalamak mıdır, ölümsüzleştirmek midir?

Prisma ve Lucid gibi akıllı telefon uygulamalarını kullanmış ya da duymuşsunuzdur. Telefonunuzun fotoğraf arşivinden seçtiğiniz bir fotoğraf ile benzemesini istediğiniz bir tasarım içeriğini eşleştirip bu görüntünün stiline sahip yeni bir görüntü elde edebiliyorsunuz. Peki, bu nasıl çalışıyor duymak(okumak) ister misiniz? Derin öğrenme dünyasında buna stil transferi denir. Derin öğrenmenin görüntü temelli konularda evrişimli sinir ağları (Convolutional Neural Networks) modelleriyle nasıl büyülü işler yapabileceğine bakalım ve artistik stil transferini yapmayı en basit haliyle anlatmaya çalışayım.
Stil transferi, girdi görüntüsünün stil görüntüleri biçiminde yeniden oluşturulması tekniğidir. Her şey Gatys ve arkadaşlarının sanatsal üslubun bir resimden başka bir resme, evrişimsel sinir ağlarını kullanarak aktarmasının nasıl mümkün olduğuna dair harika bir makale yayımlamasıyla başladı.
Örneğin, haftasonu yürüyüşümde İstinye sahilinde çekmiş olduğum fotoğrafa Vincent Van Gogh’un Yıldızlı Gece (Starry Night) eserinin stilini transfer edersek aşağıdaki gibi görünecektir. Gerçekten artistik!
Bunu yapmak için mobil uygulama kullanırsanız birkaç dakikanızı alır. Peki nasıl kodlandığını merak ediyorsanız buyrun, böylesi de çok uzun sürmüyor!












💻Artistik Stil Transferi Uygulaması kodları!
📺Artistik Stil Transferi Uygulaması anlatım videosu!
Temel olarak, iki görüntüyü giriş olarak almamız gerekir:
- Giriş görüntüsü, oluşturulan görüntünün nasıl görüneceğini belirler (örneğin İstinye sahili görüntüsü).
- Stil görüntüsü, oluşturulan görüntüye stil (veya genel doku) verecektir (örneğin Vincent van Gogh’un Yıldızlı Gece eserinin stili).
- Çıktı görüntüsü, en sonunda, giriş görüntüsünün içeriğine ve stil görüntüsünün stiline sahip olacak şekilde oluşturulan görüntüdür.
Evrişimli Sinir Ağı (Convolutional Neural Network-CNN) Modeli
Evrişimli sinir ağları, bilgisayarlı görü konusunda başarısını ispatlamış yüzlerce farklı problem için tasarlanmış onlarca ve hatta belki daha fazla modeline rastlayabileceğimiz bir derin öğrenme konusudur. Bunların robot ve otonom araçların görme sistemlerinde; yüz, nesne, trafik işaretleri tanıma gibi konularda kullanıldığını biliyoruz.
Evrişimli sinir ağları her yerde. Sanatçılar ve tasarımcılar buna kızmalı mı bilmiyorum ama bence bu konuya optimist bir açıdan yaklaşırsak, sanatla ilgisi olmayan insanlara bile stillerinin bu şekilde ulaşıyor olduğunu söyleyebiliriz. Ayrıca sanatın her hali güzeldir!
VGG-Network daha önce DERİNE DAHA DERİNE: Evrişimli Sinir Ağları yazımda anlattığım temel seviye bir evrişimli sinir ağı modelidir. Bir görüntünün içeriğini ve stilini ayrı ayrı kullanmamıza izin verir ve bu tam olarak istediğimiz şeydir. Böylece, iki görüntüyü VGG16 veya 19 katmanlı versiyonu ile eğitmek gerekiyor. Rastgele bir değerde de yeni oluşturulacak görüntüyü ilklendirmek gerekiyor.

Hatırlatma: VGG 19, 5 ortaklama katmanı ve 3 tam bağlı katmanda sona eren 16 evrişim katmanından meydana gelen ve ReLU aktivasyon fonksiyonlarıyla tanımlı bir derin öğrenme modelidir.
Modelde bilgi çok önemlidir ve CNN’deki maksimum ortaklama (max-pooling) kullanarak, önceki katmanın çok sayıda piksel değerini işlemden atıyoruz ve sadece en yüksek değerleri tutuyoruz. Bunun için ortalama ortaklama kullanımı daha iyi olabilir çünkü en azından ortalama elde etmek için tüm verileri kullanır. Sonuçta da ortalama değerde temsiller üretir.
2014 yılında ImageNet yarışmasının galibi, Oxford Üniversitesi’nde Görsel Geometri Grubu (VGG- Visual Geometry Group) tarafından oluşturulan ve sadece % 7,0'lik bir sınıflandırma hata oranı ile nesne sınıflama konusunda başarı elde eden bir derin sinir ağıydı.
Gatys ve arkadaşları nesnelerin tanınmasında son derece etkili bir şekilde eğitilmiş olan bu ağı, görüntülerden içerik ve stil gösterimlerini çıkarmaya çalışmak için kullandılar!

İçerik Yeniden Yapılandırma (Content Reconstruction)
Buradaki amacımız, sadece doku veya stil olmaksızın girdi görüntüsünün içeriğini almak ve sadece görüntünün içeriğine karşılık gelen tüm ham aktivasyonları depolayan CNN katmanı oluşturmaktır. Daha önce DERİNE DAHA DERİNE: Evrişimli Sinir Ağları yazımda da belirttiğim gibi CNN modellerinin ilk katmanları genellikle tüm CNN versiyonu modellerde temel öznitelikleri öğrenirken daha derin katmanlarda daha kavramsal öznitelikleri öğrenmeye başlar.
Stil Yeniden Yapılandırma (Content Reconstruction)
Stil görüntüsünün temsilini elde etmek için, Gram Matris’i kullanarak ağdaki farklı sinir türleri arasındaki korelasyonları hesaplamak gerekir.
Peki, Gram Matris nasıl çalışır?
Stil görüntüsünün özelliklerini evrişimli sinir ağının derin katmanlarından alabiliriz. Aşağıda gösterildiği gibi, yükseklik, genişlik ve derinlik bilgileri evrişim katmanları sonucunda oluşan tensorü temsil eder ve bunlar öznitelik haritaları olarak adlandırılır.

Bu farklı özellik sütunlarından iki tanesini (aşağıdaki şekilde olduğu gibi pembe ve mavi boyutlu vektörler) seçiyoruz, daha sonra, aralarındaki dış çarpım hesaplıyoruz. Sonuç olarak, bu öznitelik haritasındaki hangi özelliklerin bu iki özel mekansal pozisyonda birlikte harekete geçme eğilimi gösterdiği hakkında C×C matrisini elde ediyoruz.

Aynı prosedürü, H’nin W matrislerindeki tüm noktalardan tüm farklı öznitelik vektör çiftleriyle tekrarlıyoruz ve bu özellik hacminde olan tüm uzamsal bilgileri atmak için bunların hepsini sıralıyoruz.
Özetle, gram matris korelasyonlu özelliklerden oluşan matristir.
Şimdi, gram matrisinin nasıl çalıştığını biliyoruz, nasıl hesaplayabiliriz?
Gram matris aslında bir stil katmanının öznitelik aktivasyonlarının vektörleri için sadece nokta çarpımları matrisidir. Gram matrisindeki bir girişin sıfıra yakın bir değere sahip olması durumunda, verilen katmandaki iki öznitelik, verilen stil-görüntü için eşzamanlı olarak etkin değildir. Tam tersi durumda, eğer gram-matrisinde bir giriş büyük bir değere sahipse, o zaman verilen katmandaki iki öznitelik, verilen stil-görüntü için eşzamanlı olarak aktif olduğu anlamına gelir. Ardından stil görüntüsünün bu aktivasyon modelini çoğaltan bir karma yani çıkış görüntüsü oluşturmayı deneyeceğiz. Özniteliklerin C × H × W tensorünü C sayısı kadar H × W olarak yeniden şekillendiririz, o zaman kendi transpozelerini hesaplamış oluruz.
Eğer öznitelik haritası F matrisi olarak ifade edilirse, o zaman gram matrisindeki her bir giriş G olarak ifade edilir:

Kovaryans matrislerini de kullanabiliriz, ancak hesaplaması daha maliyetlidir.
Yitim (Loss) Fonksiyonu:
Stil transferinde yitim fonksiyonu, giriş yitim fonksiyonu ile stil yitim fonksiyonu gibi iki yitim fonksiyonunun toplamı şeklinde hesaplanır.
Giriş Görüntüsü Yitim Fonksiyonu (Content Loss)
Orijinal görüntünün öznitelik gösterimi ile oluşturulan yeni görüntünün öznitelik gösterimi arasındaki kare hatası kaybıdır. Giriş görüntüsü yitimini (kaybını) tek bir katmanda uygulayabiliriz.

Stil Görüntüsü Yitim Fonksiyonu (Style Loss)
İlk olarak, stil görüntüsünün stil temsili (gram matrisi) ile çıktı görüntüsünün her bir l katmandaki stil temsili arasındaki ortalama kare mesafeyi en aza indirmeliyiz.

Transfer Öğrenme Yitim Hesabı:


Giriş görüntüsü ile stil görüntüsü arasında ne kadarlık bir içerik eşleşmesi yapmak istediğimize göre çıkışı kontrol etmek için hiper parametreleri ayarlamamız gerekmektedir.

Deterministik Optimizasyon:
Stil transferi öğrenmesinde, Stokastik Dereceli Azalma/Bayır İniş (Stochastic Gradient Descent) veya Adam yerine deterministik optimizasyon olarak l-bfgs kullanımı da tercih edilebilir, çünkü:
- Burada stokastik bir şey yoktur (farklı bir veri kümesine rastgele mini gruplar oluşturmuyoruz), bunun yerine optimizasyon algoritması aynı tek görüntüyü elde etmeye devam edebilir.
- l-bfgs, Hessian’ın hesaplanması ve bir satır aramasının yapılmasıyla hangi yöne gidileceğini ve o yönde gitmek için optimum mesafeyi belirler.
Bu yaklaşım stokastik problemlerde maliyetlidir ancak burada doğru yaklaşımdır. - En önemli ve son gerekçe de l-bfgs, stil transferinde Adam optimizasyonundan daha hızlı öğrenir.
🎶Ses / Müzik tarzı ve 🎮satranç/go gibi oynama stili gibi benzersiz insani diğer görevlerin de stillerinin transfer edilmesi üzerine çalışmalar vardır. Stil transferi çekişmeli üretici ağlar (generative adverserial networks-GANs) kullanılarak daha ileri seviyeye taşınmıştır ve ayrıca hiç var olmayan insan yüzlerinin bile üretilmesine kadar uzanmıştır. Bir başka yazının konusu bu olabilir 😎

“Çünkü sanat, Tanrı’ya söylenen bir şarkıdır ve nihayetinde yine O’na aittir.” Patti Smith-Çoluk Çoçuk 📘
Bu tasarımları insan mı yaptı yoksa yapay zeka mı? — Barış Özcan
Kaynaklar:
- A Neural Algorithm of Artistic Style — Leon A. Gatys, Alexander S. Ecker, Matthias Bethge
- Artistic Style Transfer with Convolutional Neural Network — Manjeet Singh
- Artistic Style Transfer — Firdaouss Doukkali
- Pablo Picasso animasyon
- cs231n: Visualizing and Understanding — Stanford University School of Engineering
- Convolutional neural networks for artistic style transfer
- Style Transfer with Deep Neural Networks