Ders 11 / 14
Nesne Tespiti
Örtüşme oranının ve eşiğinin, hiçbir görüntüye bakmayan bir yordamla birlikte okunması: ızgaranın ortasına konan 4x4'lük sabit bir kutu ortalama 0,3011 örtüşme alıyor ve 0,3 eşiğinde sınama görüntülerinin 0,5125'inde tespit sayılıyor, ama eşik 0,5'te 0,1938'e, 0,7'de 0,0125'e düşüyor. Yalnız konum arayan 81 adaylı sabit boyutlu pencere 0,5687 ortalama ile 0,9750, 0,6875 ve 0,2375; boyutu da arayan 2.025 adaylı pencere 0,9076 ortalama ile 0,9812, 0,9625 ve 0,8500 veriyor. İki yordam 0,3 eşiğinde 0,0062 ile ayrılıyor, 0,7 eşiğinde aradaki fark 0,6125'e çıkıyor. Güven eşiği doğrulama kümesinin dörtte birlik puanına çekildiğinde kesinlik 0,9812'den 1,0000'e çıkıyor, duyarlılık 0,7063'e iniyor.
İçindekiler
İki derste soru hep aynıydı: görüntüde ne var. Cevap tek bir sayıydı ve modelin bloğu bulması gerekmiyordu, yalnız yönünü söylemesi yeterliydi. Oysa kurgunun içinde bir kutu duruyor: her görüntüde bloğun satırı, sütunu, yüksekliği ve genişliği yazılı. Bu ders soruyu değiştirir — nesne nerede.
Soru değişince ölçüt de değişir. Doğruluk iki kutunun ne kadar tuttuğunu söyleyemez, çünkü cevap doğru ya da yanlış değil, kısmen doğrudur: tahmin edilen kutu gerçek kutuyu bir hücre kaçırmış da olabilir, yarısını kapsamış da. Bu dersin ilk işi bu kısmiliği tek bir sayıya çeviren ölçütü kurmak, ikinci işi o sayının kendi başına ne kadar yanıltıcı olduğunu göstermektir.
- BG16. Görüntü kurgusu değişmedi; değişen, kullanılan alandır. Etiket yerine her görüntünün gerçek kutusu okunur: satır, sütun, yükseklik, genişlik.
- BG17. Her görüntüde tam olarak bir nesne vardır. Bu, görevi saf bir yer belirleme problemi yapar; tespit, yer belirlemeye bir de “nesne var mı, kutu yayımlanmalı mı” kararının eklenmesidir ve son bölümde eklenir.
- BG18. Ölçüt örtüşme oranıdır: iki kutunun kesişim alanının birleşim alanına bölümü. Sıfır hiç değmemek, bir tıpatıp örtüşmektir. Yönü büyük iyidir.
- BG19. Bir örtüşme eşiği seçilmeden başarı sayılamaz. Eşik 0,3, 0,5 ve 0,7’de ayrı ayrı okunur ve üçü de basılır.
- BG20. Alanın tabanı sabit kutudur: eğitim kümesindeki ortalama kutu boyutunda, ızgaranın ortasına konan tek bir kutu, her görüntü için aynen söylenir. Bu yordam görüntüye hiç bakmaz.
- BG21. Kesinlik ve duyarlılık M27/K03’te tanımlandı ve tekrarlanmaz. Bu derste eklenen tek şey, bir tahminin doğru sayılması için gereken örtüşme eşiğidir.
- BG22. Güven eşiği adayları doğrulama kümesinin puanlarından okunur; sınama kümesi yalnız raporlama için kullanılır.
Örtüşme Oranı ve Sabit Kutu
# kutu.py — MODELDIR. Ayni goruntu kurgusu; bu derste etiket degil, her # goruntunun GERCEK KUTUSU kullanilir: (satir, sutun, yukseklik, genislik). import statistics TOHUM, M32, BOY = 20260218, 0xFFFFFFFF, 12 EN_KUCUK, EN_BUYUK = 2, 6 def uretec(t): x = ((t ^ (t >> 16)) * 2246822507) & M32 x = ((x ^ (x >> 13)) * 3266489909) & M32 s = [(x ^ (x >> 16)) & M32] def sonraki(): s[0] = (s[0] * 1664525 + 1013904223) & M32 return s[0] / 4294967296 return sonraki def goruntu(no): r = uretec(TOHUM + 700000 + no) zemin, karsitlik = 30 + int(r() * 70), 20 + int(r() * 36) yuk = EN_KUCUK + int(r() * (EN_BUYUK - EN_KUCUK + 1)) gen = EN_KUCUK + int(r() * (EN_BUYUK - EN_KUCUK + 1)) while gen == yuk: gen = EN_KUCUK + int(r() * (EN_BUYUK - EN_KUCUK + 1)) i = int((r() + r() + r()) / 3 * (BOY - yuk + 1)) j = int((r() + r() + r()) / 3 * (BOY - gen + 1)) g = [[0] * BOY for _ in range(BOY)] for a in range(BOY): for b in range(BOY): v = zemin + (karsitlik if i <= a < i + yuk and j <= b < j + gen else 0) v += int(r() * 61) - 30 g[a][b] = 0 if v < 0 else (255 if v > 255 else v) return g, (i, j, yuk, gen), (1 if gen > yuk else 0) def karistir(n, tohum): r, s = uretec(tohum), list(range(n)) for i in range(n - 1, 0, -1): j = int(r() * (i + 1)) s[i], s[j] = s[j], s[i] return s HAM = [goruntu(i) for i in range(400)] VERI = [HAM[i] for i in karistir(400, TOHUM + 40000)] EGT, DOG, SIN = VERI[:160], VERI[160:240], VERI[240:] def ortusme(a, b): """Ortusme orani: kesisim alani bolu birlesim alani.""" di = max(0, min(a[0] + a[2], b[0] + b[2]) - max(a[0], b[0])) dj = max(0, min(a[1] + a[3], b[1] + b[3]) - max(a[1], b[1])) kes = di * dj return kes / (a[2] * a[3] + b[2] * b[3] - kes) def icinde(k, a, b): return k[0] <= a < k[0] + k[2] and k[1] <= b < k[1] + k[3] sy = round(statistics.mean(k[2] for _, k, _ in EGT)) sx = round(statistics.mean(k[3] for _, k, _ in EGT)) SABIT = ((BOY - sy) // 2, (BOY - sx) // 2, sy, sx) ESIKLER = (0.3, 0.5, 0.7) def rapor(ad, kutular): o = [ortusme(k, g) for k, (_, g, _) in zip(kutular, SIN)] print(f"{ad:<32}{statistics.mean(o):>10.4f}" + "".join(f"{sum(1 for v in o if v >= e) / len(o):>10.4f}" for e in ESIKLER)) return o g0, k0, _ = SIN[0] print(f"egitim kumesinde ortalama kutu {sy}x{sx}; sabit kutu {SABIT}") print(f"ornek: gercek kutu {k0}; X kesisim, g yalniz gercek, s yalniz sabit") for a in range(BOY): print(" " + "".join("Xgs."[(0 if icinde(SABIT, a, b) else 1) if icinde(k0, a, b) else (2 if icinde(SABIT, a, b) else 3)] for b in range(BOY))) print(f"bu ornekte ortusme orani {ortusme(SABIT, k0):.4f}") print(f"\n{'alanin tabani':<32}{'ort ortusme':>10}" + "".join(f"{'esik ' + str(e):>10}" for e in ESIKLER)) SABIT_O = rapor("sabit kutu (goruntuye bakmaz)", [SABIT] * len(SIN))
egitim kumesinde ortalama kutu 4x4; sabit kutu (4, 4, 4, 4) ornek: gercek kutu (3, 6, 6, 5); X kesisim, g yalniz gercek, s yalniz sabit ............ ............ ............ ......ggggg. ....ssXXggg. ....ssXXggg. ....ssXXggg. ....ssXXggg. ......ggggg. ............ ............ ............ bu ornekte ortusme orani 0.2105 alanin tabani ort ortusme esik 0.3 esik 0.5 esik 0.7 sabit kutu (goruntuye bakmaz) 0.3011 0.5125 0.1938 0.0125
Çizim ölçütün tanımını hücre hücre gösteriyor. Kesişim 8 hücre, birleşim ise gerçek kutunun 30 hücresiyle sabit kutunun 16 hücresinin toplamından kesişim çıkarılarak 38 hücre; oran . Bu tek bir örnektir ve kutular oldukça kaymıştır.
Alt satır bu kursun ikinci iddiasının ödendiği yerdir. Sabit kutu hiçbir görüntüye bakmaz, hiçbir piksel okumaz, hiçbir şey öğrenmez: eğitim kümesinden aldığı tek bilgi ortalama kutu boyutudur, ve konumu ızgaranın ortasıdır. Bu yordam ortalama 0,3011 örtüşme alıyor ve 0,3 eşiğinde sınama görüntülerinin 0,5125’inde tespit sayılıyor — yarısından fazlasında.
Sayının kaynağı ölçütte değil kurgudadır ve kurgu bunu bilerek taşıyor. Bloğun konumu üç bağımsız çekimin ortalamasıyla seçildiği için nesneler ızgaranın ortasına toplanıyor. Gerçek görüntü kümelerinde de nesne çoğunlukla ortadadır, ve bu, hiçbir şey öğrenmemiş bir yordamın örtüşme ölçütünde iyi görünmesine yeter. Eşik yükseltildiğinde aynı yordam 0,1938 ve 0,0125’e düşüyor: aynı kutu, aynı sınama kümesi, tek değişen okuma eşiği.
Aramanın Kattığı Fark
# pencere.py — MODELDIR. Kayan pencere: her aday kutunun puani, icindeki # normallestirilmis piksellerin toplaminin alanin karekokune bolunmesidir. # Toplamlar birikimli toplam tablosundan sabit surede okunur. def norm_t(g): x = [v for s in g for v in s] m = sum(x) / len(x) sd = (sum((v - m) ** 2 for v in x) / len(x)) ** 0.5 return [[(v - m) / sd for v in s] for s in g] def toplam_tablo(x): T = [[0.0] * (BOY + 1) for _ in range(BOY + 1)] for a in range(BOY): for b in range(BOY): T[a + 1][b + 1] = x[a][b] + T[a][b + 1] + T[a + 1][b] - T[a][b] return T def ara(x, boyutlar): T, en, kutu = toplam_tablo(x), None, SABIT for h, w in boyutlar: kok = (h * w) ** 0.5 for a in range(BOY - h + 1): for b in range(BOY - w + 1): p = (T[a + h][b + w] - T[a][b + w] - T[a + h][b] + T[a][b]) / kok if en is None or p > en: en, kutu = p, (a, b, h, w) return kutu, en TEK = [(SABIT[2], SABIT[3])] TUM = [(h, w) for h in range(EN_KUCUK, EN_BUYUK + 1) for w in range(EN_KUCUK, EN_BUYUK + 1)] SIN_N = [norm_t(g) for g, _, _ in SIN] def aday_sayisi(boyutlar): return sum((BOY - h + 1) * (BOY - w + 1) for h, w in boyutlar) print(f"{'yordam':<32}{'ort ortusme':>10}" + "".join(f"{'esik ' + str(e):>10}" for e in ESIKLER)) rapor("sabit kutu (goruntuye bakmaz)", [SABIT] * len(SIN)) rapor("sabit boyutlu kayan pencere", [ara(x, TEK)[0] for x in SIN_N]) TAM = [ara(x, TUM) for x in SIN_N] rapor("boyutu da arayan pencere", [k for k, _ in TAM]) print(f"aday kutu sayisi: sabit boyutlu {aday_sayisi(TEK)}, " f"boyutu da arayan {aday_sayisi(TUM)}")
yordam ort ortusme esik 0.3 esik 0.5 esik 0.7 sabit kutu (goruntuye bakmaz) 0.3011 0.5125 0.1938 0.0125 sabit boyutlu kayan pencere 0.5687 0.9750 0.6875 0.2375 boyutu da arayan pencere 0.9076 0.9812 0.9625 0.8500 aday kutu sayisi: sabit boyutlu 81, boyutu da arayan 2025
İki yordam arasındaki tek fark aranan şeydir. Sabit boyutlu pencere yalnız konumu arar: kutunun boyu eğitim kümesinin ortalamasına sabitlenmiştir ve 81 konum denenir. İkincisi boyutu da arar ve 2.025 aday değerlendirir. Ortalama örtüşme 0,5687’den 0,9076’ya çıkıyor; 25 kat daha büyük bir arama uzayı 0,3389 katıyor.
Asıl sayı satırlarda değil, sütunlar arasındaki farktadır. 0,3 eşiğinde iki pencere 0,9750 ile 0,9812 okuyor; aralarındaki fark 0,0062, yani hiç yok sayılabilir. 0,7 eşiğinde aynı iki yordam 0,2375 ile 0,8500 okuyor; fark 0,6125. Aynı iki yordam, aynı sınama kümesi, aynı ölçüt ailesi — yalnız eşik değişiyor ve biri “neredeyse eşit”, öteki “üç buçuk kat üstün” oluyor.
Eşiğin ne anlama geldiği de yordamdan yordama değişiyor. Sabit boyutlu pencere nesneyi bulur ama boyunu tutturamaz: doğru konumda duran 4x4’lük bir kutu, gerçek kutu 6x5 olduğunda kesişimi en çok 16 hücre yapabilir ve birleşim 30 hücre kalır, yani örtüşme ’ü aşamaz ve 0,7 eşiğini yapısal olarak geçemez. Düşük eşik bu kusuru tümüyle gizler. Bir örtüşme sayısı, hangi eşikte okunduğu yazılmadan taşınamaz.
Puanın biçimi de bir karardır ve ölçülebilir bir sonucu vardır. Aday kutuların ham piksel toplamına bakılsaydı arama en büyük kutuyu seçerdi, çünkü zemin pikselleri ortalamada sıfır olsa da toplam kutu büyüdükçe artan gürültüyle şişer; kutu içindeki ortalamaya bakılsaydı arama tek bir parlak gürültü hücresini seçerdi, çünkü en yüksek ortalamayı en küçük kutu verir. Toplamı alanın karekökune bölmek bu iki eğilimi dengeler: puan, bölgenin gürültüye göre ne kadar öne çıktığını ölçer.
Güven Eşiği, Kesinlik ve Duyarlılık
# guven.py — Yordamlar simdiye kadar her goruntude bir kutu yayimladi. Puan # bir guven esiginin altindayken kutu yayimlanmazsa kesinlik ile duyarlilik # ayrisir. Esik adaylari DOGRULAMA kumesinin puanlarindan okunur. KUTULAR, PUANLAR = [k for k, _ in TAM], [p for _, p in TAM] DOG_P = sorted(ara(norm_t(g), TUM)[1] for g, _, _ in DOG) ADAYLAR = [("hepsi", 0.0)] + [(f"dorttebir {q}", DOG_P[len(DOG_P) * q // 4]) for q in (1, 2, 3)] def kesinlik_duyarlilik(guven, esik): yayin = [(k, g) for k, p, (_, g, _) in zip(KUTULAR, PUANLAR, SIN) if p >= guven] dogru = sum(1 for k, g in yayin if ortusme(k, g) >= esik) return (dogru / len(yayin) if yayin else 0.0), dogru / len(SIN) print(f"{'guven esigi':<14}{'yayin':>8}" + "".join(f"{f'{e} kes':>9}{f'{e} duy':>9}" for e in ESIKLER)) for ad, guven in ADAYLAR: oran = sum(1 for p in PUANLAR if p >= guven) / len(PUANLAR) print(f"{ad:<14}{oran:>8.4f}" + "".join(f"{k:>9.4f}{d:>9.4f}" for k, d in (kesinlik_duyarlilik(guven, e) for e in ESIKLER))) print(f"{'sabit kutu':<14}{1.0:>8.4f}" + "".join(f"{v:>9.4f}{v:>9.4f}" for v in (sum(1 for o in SABIT_O if o >= e) / len(SABIT_O) for e in ESIKLER)))
guven esigi yayin 0.3 kes 0.3 duy 0.5 kes 0.5 duy 0.7 kes 0.7 duy hepsi 1.0000 0.9812 0.9812 0.9625 0.9625 0.8500 0.8500 dorttebir 1 0.7063 1.0000 0.7063 1.0000 0.7063 0.9735 0.6875 dorttebir 2 0.4437 1.0000 0.4437 1.0000 0.4437 1.0000 0.4437 dorttebir 3 0.2625 1.0000 0.2625 1.0000 0.2625 1.0000 0.2625 sabit kutu 1.0000 0.5125 0.5125 0.1938 0.1938 0.0125 0.0125
Şimdiye kadar her yordam her görüntüde bir kutu yayımladı; yayımlamak zorunda olduğu için de kesinlik ile duyarlılık aynı sayıydı. İlk satır bunu gösteriyor: 1,0000 yayın oranında ikisi de 0,9812. Puanı düşük olan tahminler yayımlanmadığında ikisi ayrışıyor. Doğrulama kümesinin en düşük dörtte birlik puanı eşik alındığında görüntülerin 0,7063’ünde kutu yayımlanıyor ve 0,3 eşiğinde kesinlik 1,0000’e çıkarken duyarlılık 0,7063’e iniyor.
M27/K03 bu değiş tokuşu kurmuştu ve tanımları burada tekrarlanmıyor. Görüntüye özgü olan tek şey şudur: orada bir tahmin “doğru” ya da “yanlış”tı, burada doğruluğu bir örtüşme eşiği tanımlıyor ve o eşik tablonun sütunlarını birbirinden ayırıyor. Dörtte birlik eşikte 0,7 sütunundaki kesinlik 0,9735 kalıyor, çünkü yüksek puanlı bir tahmin bile 0,7 örtüşmeyi kaçırabiliyor. Puan, kutunun doğru olduğunu değil, o bölgede parlak bir yığılma bulunduğunu söylüyor.
Son satır tabanı aynı tabloya koyuyor. Sabit kutu hep yayımladığı için kesinliği ve duyarlılığı eşittir ve 0,3 eşiğinde 0,5125’tir. Kesinliğe bakıp “yordamım 1,0000” demek, hangi eşikte ve kaç görüntüde yayın yapıldığı yazılmadan hiçbir şey söylemez; alanın tabanı yazılmadan ise ölçülmemiş sayılır.
Özet
- Örtüşme oranı iki kutunun kesişim alanının birleşim alanına bölümüdür; örnekte 8 hücre kesişim, 38 hücre birleşim, oran 0,2105.
- Izgaranın ortasına konan 4x4’lük sabit kutu görüntüye hiç bakmadan ortalama 0,3011 örtüşme alır ve 0,3 eşiğinde sınama görüntülerinin 0,5125’inde tespit sayılır; kaynağı kurgudaki merkez yanlılığıdır.
- Aynı sabit kutu eşik 0,5’te 0,1938’e, 0,7’de 0,0125’e düşer: sayı yordamdan değil eşikten gelmektedir.
- Yalnız konum arayan 81 adaylı pencere 0,5687, boyutu da arayan 2.025 adaylı pencere 0,9076 ortalama örtüşme verir; 25 kat arama 0,3389 katar.
- İki pencere 0,3 eşiğinde 0,0062 ile ayrılır, 0,7 eşiğinde fark 0,6125’e çıkar; düşük eşik boyut hatasını tümüyle gizler.
- Güven eşiği doğrulama kümesinin dörtte birlik puanına çekildiğinde yayın oranı 0,7063 olur, kesinlik 0,9812’den 1,0000’e çıkar, duyarlılık 0,7063’e iner.
Sonraki Adım
Kutu nesnenin nerede olduğunu söyledi, ama hangi piksellerin nesne olduğunu söylemedi. Boyutu da arayan pencere 0,9076 ortalama örtüşme aldığında bile verdiği cevap bir dikdörtgendir ve o dikdörtgenin içindeki her piksel nesne sayılır. Bu kurguda nesne zaten bir dikdörtgen olduğu için kaybın çoğu görünmez; nesnenin kenarı düz olmadığında kutunun içine giren zemin pikselleri hiç sayılmaz. Sonraki ders kararı piksel düzeyine indirir ve ilk işi yine tabanı yazmak olur: her pikseli baskın sınıfa atayan bir yordam, piksel dengesizliği yüzünden şaşırtıcı biçimde yüksek bir sayı alır.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.