İçeriğe atla
SinaptikLabAI KNOWLEDGE PLATFORM
DersBaşlangıç25 dakikaComputer Vision Engineer · 1. ders

Görüntü verisinin doğası

Bir görüntünün sayısal temsilini, renk uzayı ile yeniden ölçekleme kararlarını ve eğitimle çıkarım arasında aynı kalmak zorunda olan önişleme sözleşmesini öğretir.

BU DERSİN SONUNDA

  • Bir görüntü dosyasını şekil, veri tipi ve değer aralığı üçlüsüyle tanımlamak
  • Renk uzayı ve kanal sırası kararını göreve göre gerekçelendirmek
  • Yeniden ölçekleme yöntemini bilgi kaybına göre seçmek
  • Eğitim ve çıkarım önişlemesini tek bir yazılı sözleşmede sabitlemek
  1. 1

    Teori

    Kavramın çalışma mantığı

  2. 2

    Örnek

    Gerçek bir senaryo üzerinde gösterim

  3. 3

    Lab

    Uygulamalı alıştırma

  4. 4

    Test

    Kısa ölçüm

  5. 5

    Proje

    Rotadaki projeye katkı

Kısa cevap

Bir görüntü, model açısından yükseklik × genişlik × kanal biçiminde bir sayı dizisidir. Modelin gördüğü şey fotoğraf değil, bu dizinin veri tipi, değer aralığı, kanal sırası ve renk uzayıdır. Bu dörtlü eğitimde ne ise çıkarımda da aynı olmak zorundadır; görü hattındaki en pahalı hatalar mimaride değil, bu sözleşmenin iki tarafta ayrışmasında doğar.

Teori: piksel bir ölçüm değil, bir kodlamadır#

Bir piksel değeri sahnedeki ışık miktarının doğrudan karşılığı değildir. Yaygın dosya biçimleri değerleri gamma kodlu bir uzayda saklar: insan gözünün karanlık tonlara duyarlılığı daha yüksek olduğu için bitler oraya kaydırılmıştır. Bunun pratik sonucu şudur: iki pikselin aritmetik ortalaması fiziksel bir ışık ortalaması değil, algısal bir ara değerdir. Ölçme amaçlı işlerde (parlaklık farkı, pozlama düzeltme) doğrusal uzaya geçmek gerekir; sınıflandırma ve tespitte ise ağın kendisi bu kodlamayı öğrendiği için genellikle olduğu gibi bırakılır.

Normalizasyon da aynı mantığın uzantısıdır. Ağın ilk katmanındaki ağırlıklar belirli bir girdi dağılımına göre kalibre olmuştur; 0–255 arası tam sayı yerine kanal bazlı ortalaması çıkarılmış ve standart sapmasına bölünmüş bir girdi beklerler. Yanlış istatistikle beslenen bir ağ çökmez, sessizce kötüleşir. Bu yüzden normalizasyon bir estetik tercih değil, ağırlıklarla birlikte taşınan bir sözleşme maddesidir.

Renk uzayları#

Renk uzayıAyırdığı bilgiNerede işe yararDikkat
RGB (sRGB)Üç renk kanalı; parlaklık ile renk iç içedirÖnceden eğitilmiş omurgaların beklediği varsayılan girişDeğerler gamma kodludur; kanal sırasının RGB mi BGR mi olduğu kütüphaneye göre değişir
Gri tonlamaYalnızca parlaklıkRenk hiçbir sınıfı ayırmıyorsa bellek ve giriş katmanı maliyetini düşürürRenkle ayrılan sınıflar birleşir; kayıp geri alınamaz
HSV / HSLRenk tonunu doygunluk ve parlaklıktan ayırırEşikleme, renk tabanlı maskeleme, aydınlatma artırmasıTon dairesel bir eksendir; uçları komşudur, doğrudan ortalaması alınmaz
YCbCrParlaklığı renk farklarından ayırırSıkıştırma ve kodek hattı; kayıplı fotoğraf biçimleri bu uzayda çalışırRenk kanalları alt örneklenmiş olabilir; ince renkli ayrıntı dosyada zaten kayıptır
LabAlgısal olarak daha düzgün bir renk uzaklığıRenk farkı ölçmek, renk düzeltmesi yapmakDönüşüm bir beyaz nokta varsayar; kaynak profili bilinmiyorsa sonuç kayar
Ağa hangi uzayı vereceğinize karar verirken soru şudur: ayırt etmek istediğim bilgi hangi eksende duruyor ve o ekseni kaybediyor muyum?

Çözünürlük ve yeniden ölçekleme#

Yeniden ölçekleme bilgi atma işidir; sorun atmak değil, neyi attığınızı bilmemektir. Küçültürken ince desenler örnekleme frekansının altına düştüğünde örtüşme (aliasing) oluşur: tuğla dokusu dalgalanmaya, ince metin okunmaz bir tarama desenine döner. En-boy oranını korumadan germek biçim bilgisini bozar; kenar dolgusu (letterbox) oranı korur ama etkin çözünürlüğü düşürür; kırpma çözünürlüğü korur ama kenardaki nesneyi kesebilir. Ölçekleme ile kırpmanın sırası bile çıktıyı değiştirir, bu yüzden sıra da yazılı olmalıdır.

  • Küçültürken alan ortalaması veya kenar yumuşatmalı bir süzgeç kullanın; saf en yakın komşu ile küçültmek örtüşme üretir.
  • Büyütürken bilineer makul bir varsayılandır; bikübik kenarı keskinleştirir ama yüksek karşıtlıklı kenarların iki yanında halka izi (ringing) bırakabilir.
  • Etiket maskesi, sınıf kimliği haritası veya indeksli görüntüde her zaman en yakın komşu kullanın: ara değer var olmayan bir sınıf uydurur.
  • En-boy oranı politikasını hedefin konumuna göre seçin; nesne çoğunlukla kenardaysa kırpma, ortadaysa dolgu daha az zarar verir.
  • Aynı görüntüyü hattın iki farklı yerinde iki kez ölçeklemeyin; her ölçekleme bir yumuşatma katmanı ekler.

Karar: önişleme sözleşmesi#

  1. 1Kod çözme ve yönlendirme

    Dosyayı hep aynı kütüphaneyle açın ve EXIF yön bilgisini ya açıkça uygulayın ya da açıkça yok sayın; ikisinin arasında kalmak, aynı görüntünün iki farklı yönde işlenmesi demektir.

  2. 2Renk sözleşmesi

    Renk uzayını ve kanal sırasını hattın tek bir noktasında sabitleyin. Dönüşüm en başta yapılır; sonraki hiçbir adım kanal sırasını varsaymaz.

  3. 3Geometri

    Hedef boyutu, en-boy oranı politikasını (kırp, doldur, ger), interpolasyonu ve ölçekleme-kırpma sırasını yazın.

  4. 4Sayısal aralık

    Tam sayıdan kayan noktaya geçiş noktasını, bölme sabitini ve kanal bazlı ortalama-standart sapmayı kaydedin. Önceden eğitilmiş omurga kullanıyorsanız bu değerler omurganın eğitildiği değerlerle aynı olmalıdır.

  5. 5Tensör düzeni

    Kanalın önde mi sonda mı olduğunu ve toplu iş boyutunun nereye eklendiğini belirtin; dışa aktarılan modelde bu düzen girdi imzasının parçasıdır.

python
from PIL import Image, ImageOps
import numpy as np


def kunye(yol):
    """Onisleme sozlesmesini denetlemek icin bir goruntunun kimlik bilgisi."""
    with Image.open(yol) as ham:
        exif_yonu = ham.getexif().get(274)   # 274 = Orientation etiketi
        im = ImageOps.exif_transpose(ham)    # yonu ACIKCA uygula
        dizi = np.asarray(im)
        return {
            "mod": im.mode,                  # RGB, L, CMYK, P ...
            "sekil": dizi.shape,             # (yukseklik, genislik, kanal)
            "tip": str(dizi.dtype),          # uint8 mi float32 mi
            "aralik": (int(dizi.min()), int(dizi.max())),
            "exif_yonu": exif_yonu,
        }

Sık yapılan hata#

Birinci sık hata, aynı dönüşümü hattın iki ayrı yerinde uygulamaktır: 0–255 aralığını hem kütüphanenin yükleyicisinde hem kendi kodunuzda bölmek ya da normalizasyonu iki kez geçirmek, girdiyi beklenen aralığın çok altına indirir ve hiçbir yerde hata vermez. İkinci hata, tam sayı aritmetiğini unutmaktır: uint8 bir dizide 255 üzerine 1 eklemek 0 verir, parlaklık artırma denemesi karanlık lekeler üretir. Üçüncüsü, artırma hattında her adımda kayıplı biçime geri kaydetmektir; bozulma birikir ve eğitim setinin istatistiği sessizce kayar. Ara adımları kayıpsız tutup yalnızca son yazımda kayıplıya inmek bu birikimi kesen en ucuz önlemdir.

LAB · UYGULAMALI ALIŞTIRMA

Kendi görüntü setiniz için önişleme sözleşmesi yazın

  1. 1Kendi arşivinizden en az 20 görüntü seçin; farklı kaynaklardan (telefon fotoğrafı, ekran görüntüsü, taranmış belge) karışık olsun.
  2. 2Yukarıdaki künye fonksiyonunu koşturup her dosya için mod, şekil, veri tipi, değer aralığı ve EXIF yönünü bir tabloya yazın; beklenmedik değerleri işaretleyin.
  3. 3Aynı görüntüyü hedef boyuta üç yolla küçültün: en yakın komşu, bilineer, alan ortalaması. Üç çıktıyı yan yana kaydedip ince desende (kumaş, tuğla, küçük metin) farkı gözleyin.
  4. 4Setin kanal bazlı ortalama ve standart sapmasını hesaplayın; kayan noktaya geçiş noktasını ve bölme sabitini not edin.
  5. 5Bütün kararları tek sayfalık bir sözleşme dosyasına yazın: kod çözücü, EXIF politikası, renk uzayı, kanal sırası, en-boy politikası, interpolasyon, normalizasyon, tensör düzeni.

Beklenen çıktı

Kendi setinizin künye tablosu ve eğitimle çıkarımda aynen uygulanacak, yazılı tek sayfalık bir önişleme sözleşmesi.

Sık sorulan sorular

Görüntüleri gri tonlamaya çevirmek eğitimi hızlandırır mı?

Kanal sayısı üçten bire indiğinde yalnızca ilk evrişim katmanının iş yükü düşer; toplam maliyetin büyük kısmı sonraki katmanlarda olduğu için kazanç sınırlı kalır. Asıl soru hız değil bilgidir: sınıflarınız renkle ayrılıyorsa gri tonlama geri alınamaz bir kayıptır. Önceden eğitilmiş bir omurga kullanıyorsanız girdisinin üç kanal beklediğini de hesaba katın.

Normalizasyon istatistiğini kendi setimden mi hesaplamalıyım?

Önceden eğitilmiş bir omurgayı dondurup üstüne baş takıyorsanız omurganın eğitildiği istatistiği kullanın; katman ağırlıkları o dağılıma göre kalibredir. Sıfırdan eğitiyorsanız kendi setinizin istatistiği doğru seçimdir. İkisini karıştırmak, yani önceden eğitilmiş ağırlığa kendi ortalamanızı vermek, sık görülen sessiz hatalardan biridir.

Etiket maskelerini de görüntülerle aynı biçimde saklayabilir miyim?

Hayır. Maske bir görüntü değil, sınıf kimliklerinden oluşan bir tam sayı haritasıdır; kayıplı sıkıştırma kimlikleri komşu değerlere kaydırır ve var olmayan sınıflar üretir. Maskeler kayıpsız saklanır, yeniden boyutlandırılırken en yakın komşu kullanılır ve hiçbir renk dönüşümünden geçirilmez.

LEARN

Computer Vision Engineer rotasına devam et

Dersler tek başına da okunabilir, ama sıralı ilerlemek önkoşul boşluklarını kapatır.