• Yapay zeka soru ve sorunlarınızı uygun olan kategorilere açıp yanıt alabilirsiniz...

TensorFlow ile görüntü stil aktarımı nasıl çalışır?

Garfield

YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
664
Mesajlar
689
AI Seviyesi
Yeni
Görüntü stil aktarımı, bir içerik görüntüsünün nesne ve düzenini korurken başka bir görüntünün renk, doku ve fırça darbesi özelliklerini birleştirir. TensorFlow ile yaygın yöntem, önceden eğitilmiş bir görüntü sınıflandırma ağının ara katmanlarını kullanarak iki kaybı aynı anda azaltmaktır: içerik kaybı içerik görüntüsüne benzerliği, stil kaybı ise stil görüntüsünün dokusal özelliklerini ölçer. Sonuçta ağ yeni bir görüntü üretmez; pikselleri doğrudan optimize ederek seçilen iki görüntünün özelliklerini taşıyan bir çıktı oluşturur.

Yöntemin temel işleyişi​


TensorFlow uygulamasında genellikle VGG19 gibi önceden eğitilmiş bir ağın sınıflandırma katmanları yerine ara özellik katmanları kullanılır. Daha sığ katmanlar kenar, renk ve küçük dokuları; daha derin katmanlar ise nesnelerin genel düzenini temsil eder.

İçerik görüntüsü, örneğin bir şehir fotoğrafıdır. Stil görüntüsü ise bir yağlı boya tablosudur. Ağ, içerik katmanlarında iki görüntünün özellik farkını ölçer. Stil içinse her katmandaki özellik haritalarının birlikte ne kadar etkinleştiğini gösteren Gram matrisi hesaplanır. Gram matrisi, nesnelerin konumundan çok renklerin ve dokuların birlikte görülme biçimini temsil eder.

Optimizasyon sırasında değiştirilen şey ağın ağırlıkları değil, üretilecek görüntünün pikselleridir. Bu ayrım önemlidir: Stil aktarımı modeli yeniden eğitmekten ziyade, sabit bir ağın ölçtüğü kayıpları azaltan bir görüntü arama işlemidir.

İçerik ve stil kaybı nasıl birleşir?​


Toplam kayıp genellikle şu biçimde düşünülür:

toplam_kayıp = içerik_ağırlığı × içerik_kaybı + stil_ağırlığı × stil_kaybı

İçerik ağırlığını artırırsanız özgün fotoğrafın şekilleri ve yerleşimi daha fazla korunur. Stil ağırlığını artırırsanız renk paleti, doku ve fırça etkisi güçlenir; ancak nesnelerin görünümü içerik görüntüsünden daha fazla uzaklaşabilir. Bu nedenle tek bir “doğru” stil aktarımı sonucu yoktur; sonuç, katman seçimine, ağırlıklara, başlangıç görüntüsüne ve optimizasyon adım sayısına bağlıdır.

Örneğin içerik görüntüsünde bir kedi, stil görüntüsünde ise yoğun mavi ve sarı fırça dokuları varsa başarılı bir aktarımda kedinin genel silueti ve konumu korunurken yüzeydeki renk dağılımı ve doku stil görüntüsüne yaklaşır. Bu işlem kediyi tanıyan yeni bir model oluşturmaz ve görüntüdeki nesnelerin gerçeğe uygunluğunu garanti etmez.

TensorFlow'da en küçük uygulama mantığı​


Uygulama için Python, TensorFlow ve görüntü işleme yardımcıları gerekir. Kodda kullanılan önceden eğitilmiş ağ ağırlıkları ilk çalıştırmada indirilebilir; bu nedenle çevrim dışı ortamda ağırlık dosyalarının önceden hazır bulunması gerekir.

Aşağıdaki örnek, işlem sırasını gösteren bir iskelettir; görüntü yükleme ve özellik çıkarıcıların kurulumu ayrıca yapılmalıdır. content_image tek görüntülü, (1, yükseklik, genişlik, 3) biçiminde ve 0–1 aralığında RGB tensörüdür. content_model seçilen tek içerik katmanının tensörünü, style_model ise seçilen stil katmanlarının Gram matrislerinden oluşan listeyi döndürmelidir. content_features ve style_features ilgili hedef tensör ve hedef Gram matrisleridir; ham stil özellikleri doğrudan karşılaştırılmaz. Her iki özellik çıkarıcı VGG19’a aynı uygun ön işlemi uygulamalı ve ağın ağırlıkları sabit tutulmalıdır:

Python:
import tensorflow as tf

# Üretilecek görüntü, içerik görüntüsünün kopyasıyla başlatılır.
image = tf.Variable(content_image, dtype=tf.float32)

optimizer = tf.keras.optimizers.Adam(learning_rate=0.02)

for step in range(1000):
    with tf.GradientTape() as tape:
        current_content = content_model(image)
        current_style = style_model(image)

        content_loss = tf.reduce_mean(
            tf.square(current_content - content_features)
        )

        style_loss = tf.add_n([
            tf.reduce_mean(tf.square(a - b))
            for a, b in zip(current_style, style_features)
        ])

        total_loss = (
            content_weight * content_loss
            + style_weight * style_loss
        )

    gradients = tape.gradient(total_loss, image)
    optimizer.apply_gradients([(gradients, image)])

    # Piksel değerlerini geçerli görüntü aralığında tut.
    image.assign(tf.clip_by_value(image, 0.0, 1.0))

Gerçek uygulamada content_model içerik katmanlarının, style_model ise Gram matrisleri hesaplanan stil katmanlarının çıktısını üretir. content_features ve style_features bir kez hesaplanıp sabit tutulur. Her döngüde yalnızca image güncellenir.

Sonuç görüntüsü sürekli aşırı gürültülü kalıyorsa stil kaybı fazla baskın olabilir, öğrenme oranı yüksek olabilir veya stil katmanları uygun seçilmemiş olabilir. İçerik neredeyse tamamen kayboluyorsa içerik ağırlığını artırmak ya da stil ağırlığını azaltmak gerekir. Çıktı fazla bulanıksa daha fazla optimizasyon adımı tek başına yeterli olmayabilir; seçilen özellik katmanlarının ve görüntü ön işleme adımlarının da tutarlı olması gerekir.

Ağırlıklar sonucu nasıl değiştirir?​


Aynı görüntüler ve aynı ağ kullanılsa bile ağırlıkların değiştirilmesi farklı sonuçlar üretir. Karar verirken şu ayrım kullanılabilir:
TercihGörüntüde beklenen etkiSorun görülürse
Yüksek içerik ağırlığıNesne biçimi ve yerleşimi daha iyi korunurStil dokusu zayıf kalıyorsa stil ağırlığını artırın
Yüksek stil ağırlığıRenk ve doku etkisi güçlenirİçerik bozuluyorsa içerik ağırlığını artırın
Başlangıç görüntüsü olarak içerik resmiSonuç genellikle özgün fotoğrafa daha yakın olurDeğişim azsa optimizasyon adımı ve stil etkisini kontrol edin
Başlangıç görüntüsü olarak rastgele gürültüStil etkisi daha baskın ve yapı daha serbest olabilirNesne yapısı kayboluyorsa içerik kaybını güçlendirin
Tablo yalnızca genel eğilimi gösterir; sonuç, görüntü boyutuna, seçilen katmanlara ve ön işleme yöntemine göre değişebilir. Bu nedenle tek bir ayarı bütün fotoğraflar için doğru kabul etmek yerine birkaç ağırlık oranını aynı içerik ve stil çifti üzerinde karşılaştırmak daha güvenlidir.

Sonucu nasıl değerlendirmelisiniz?​


İyi bir sonuçta içerik görüntüsündeki ana şekiller seçilebilir kalır, stil görüntüsünün renk ve doku ilişkileri ise çıktı boyunca tutarlı biçimde görülür. Kayıpların azalması tek başına görüntünün sanatsal olarak başarılı olduğunu kanıtlamaz; görsel görünüm de kaybın ölçüldüğünü veya azaldığını kanıtlamaz. Bir çıktı teknik olarak düşük kayıplı olsa bile insan gözüne yapay, bulanık veya aşırı gürültülü görünebilir.

İlk denemede içerik görüntüsüyle başlamak, orta boyutlu görseller kullanmak ve içerik ile stil kayıplarını ayrı ayrı izlemek daha anlaşılır sonuç verir. Stil aktarımı beklenenden farklıysa önce görüntülerin aynı normalleştirme aralığında işlendiğini, ardından içerik ve stil katmanlarının gerçekten beklenen özellikleri ürettiğini kontrol edin. Sorun devam ederse ağırlıkları ve öğrenme oranını tek tek değiştirin; aynı anda birçok ayarı değiştirmek hangi değişikliğin sonucu etkilediğini belirsizleştirir.
 
Son düzenleme:

Sen de şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic
Geri
Üst