---
title: 'Video ve Zamansal Modeller'
source: 'https://academia.sh/tr/kurslar/nlp-ve-goru/video-ve-zamansal-modeller'
course: 'Doğal Dil İşleme ve Bilgisayarla Görme'
language: tr
updated: '2026-08-17T18:10:15+00:00'
license: 'CC BY-SA 4.0'
---

# Video ve Zamansal Modeller

Kare başına kararın zaman içindeki tutarsızlığının sayılması: otuz altı sınama dizisinin 432 karesinde her kareye baskın sınıfı yazan taban 0,7014 doğruluk ve 0 kararsızlık verirken gerçek etiket dizileri 71 geçiş taşıyor. Bağımsız kare kararı 0,8634 doğrulukla 99 geçiş üretiyor, yani gerçeğin 28 fazlası. Aynı puanlara geçiş cezası uygulandığında ceza 0,05'te doğruluk 0,8657'ye çıkıyor, ceza 0,15'te kararsızlık gerçeğin 71'ine oturuyor ve ceza 4,00'te karar tabanın kendisine, 0,7014 ve 1 geçişe iniyor: alanın tabanı bu ölçütte ayrı bir yordam değil, cezanın uç değeridir.

Önceki ders piksel kararını komşularına bakarak verdi ve komşuluk penceresi örtüşme oranını 0,2431
oynattı. O komşuluk **uzaydaydı**: bir pikselin sekiz komşusu aynı karenin içindeydi. Bir kapsama
ağı kareyi tek tek değil arka arkaya üretir; aynı bölge belirli aralıklarla yeniden okunur ve
okumalar bir dizi oluşturur. Bu dizinin komşuluğu **zamandadır** ve dersin sorusu şudur: her kareye
bağımsız karar veren bir yordam, zamanı hiç kullanmadığında ne kaybediyor.

Kayıp, kare doğruluğuna bakılarak görülmez. Bir olay gerçekte başlar, bir süre sürer ve biter;
etiket dizisi bu yüzden iki üç kez değişir. Kare başına bağımsız karar veren bir yordam ise
gürültü her yön değiştirdiğinde fikir değiştirir. Bu dersin ikinci ölçütü **kararsızlıktır**:
ardışık iki karede kararın kaç kez değiştiği. Ölçüt yeni bir soru da getiriyor, çünkü hiçbir şey
öğrenmeyen taban bu ölçütte **sıfır** alır.

- **BG40. Zamansal kurgu, 04. dersin karesinin kısa bir dizisidir.** Aynı 12x12 gri düzeyli kapsama
  karesi bir bölge için on iki kez üretilir; zemin, blok düzeyi ve gürültü aynıdır, tohum 20260218.
- **BG41. Olay bir aralıktır.** Kurgu blok, dizinin ardışık iki ila beş karesinde bulunur; başlangıç
  karesi birinci ile yedinci kare arasındadır. Kare etiketi bloğun o karede bulunup bulunmadığıdır.
- **BG42. İki gürültü kaynağı vardır.** Etkin karelerin yaklaşık üçte birinde okuma zayıftır ve blok
  sönük görünür; etkin olmayan karelerin yaklaşık yedide birinde geçici parlak bir leke belirir.
  Birincisi kaçırma, ikincisi yanlış alarm üretir.
- **BG43. Bölme 24/36 dizidir**, yani sınamada 432 kare vardır. Bölme dizi düzeyindedir; aynı dizinin
  kareleri iki kümeye dağıtılmaz.
- **BG44. Alanın tabanı her kareye baskın sınıfı yazmaktır.** Baskın sınıf "etkin değil"dir.
- **BG45. İki ölçüt yan yana okunur.** Kare doğruluğu (büyük iyi) ve **kararsızlık**: ardışık
  karelerde kararın kaç kez değiştiği. Kararsızlıkta küçük olan iyi değildir; okunacak sayı
  **gerçek etiket dizilerinin kararsızlığıdır** ve o sayı da basılır.
- **BG46. Kare modeli doğrusaldır** ve kare başına üç sayıdan uydurulur: ortalama gri düzey, en
  parlak 3x3 pencerenin ortalaması, eşik üstü piksel oranı. En küçük kareler, eşik 0,5. Kütüphane
  çağrılmaz.
- **BG47. Zamanı kullanan karar aynı puanları kullanır.** Model, ağırlıklar ve kare puanları
  değişmez; yalnız dizinin tamamına **geçiş başına sabit bir ceza** eklenir ve en düşük maliyetli
  karar dizisi seçilir.

## Zamansal Kurgu ve İki Taban Sayısı

```python
# dizi.py — MODELDIR. Zamansal kurgu, 04. dersin gri duzeyli 12x12 kapsama
# karesinin KISA BIR DIZISIDIR: ayni bolge on iki kez okunur ve olay
# karelerin bir bolumunde etkindir. Tohum 20260218.
TOHUM, M32, BOY, KARE = 20260218, 0xFFFFFFFF, 12, 12
ZEMIN, BLOK, GURULTU = 0.30, 0.74, 0.30


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 dizi(no):
    """Bir bolgenin on iki karelik okumasi: kareler ve kare basina olay etiketi."""
    r = uretec(TOHUM + 500000 + no)
    bas, boy = 1 + int(r() * 7), 2 + int(r() * 4)
    h, w = 2 + int(r() * 3), 2 + int(r() * 3)
    sy, sx = int(r() * (BOY - h + 1)), int(r() * (BOY - w + 1))
    kareler, etiket = [], []
    for t in range(KARE):
        etkin = bas <= t < bas + boy
        g = [[ZEMIN + (r() + r() + r() - 1.5) * GURULTU for _ in range(BOY)]
             for _ in range(BOY)]
        if etkin:
            guc = 0.35 if r() < 0.28 else 1.0        # bazi karelerde okuma zayif
            for i in range(sy, sy + h):
                for j in range(sx, sx + w):
                    g[i][j] += (BLOK - ZEMIN) * guc
        elif r() < 0.14:                             # gecici parlak leke
            a, b = int(r() * (BOY - 1)), int(r() * (BOY - 1))
            for i in (a, a + 1):
                for j in (b, b + 1):
                    g[i][j] += BLOK - ZEMIN
        kareler.append(g)
        etiket.append(int(etkin))
    return kareler, etiket


VERI = [dizi(i) for i in range(60)]
EGT, SIN = VERI[:24], VERI[24:]
TOPLAM = len(SIN) * KARE
ETKIN = sum(sum(e) for _, e in SIN)
TABAN = (TOPLAM - ETKIN) / TOPLAM
GERCEK_KARARSIZ = sum(sum(e[t] != e[t - 1] for t in range(1, KARE)) for _, e in SIN)
print(f"kurgu: {len(VERI)} dizi x {KARE} kare, egitim {len(EGT)}, sinama {len(SIN)}; "
      f"sinamada {ETKIN}/{TOPLAM} kare etkin")
print(f"taban - her kareye baskin sinifi (etkin degil) yazmak: "
      f"kare dogrulugu {TABAN:.4f}, kararsizlik 0")
print(f"gercek etiket dizilerinin kararsizligi: {GERCEK_KARARSIZ} gecis "
      f"({GERCEK_KARARSIZ / len(SIN):.2f} dizi basina)")
```

```
kurgu: 60 dizi x 12 kare, egitim 24, sinama 36; sinamada 129/432 kare etkin
taban - her kareye baskin sinifi (etkin degil) yazmak: kare dogrulugu 0.7014, kararsizlik 0
gercek etiket dizilerinin kararsizligi: 71 gecis (1.97 dizi basina)
```

Alanın tabanı iki sayı veriyor ve ikisi birbirine karşıt yönde okunuyor. Kare doğruluğunda **0,7014**
alıyor, çünkü 432 karenin yalnız 129'u etkin. Kararsızlıkta **0** alıyor, çünkü hiç fikir
değiştirmiyor; bir sabiti tekrarlayan yordam bu ölçütte yenilemez.

Üçüncü satır ölçütün nasıl okunacağını söylüyor. Gerçek etiket dizileri 36 dizide toplam **71 geçiş**
taşıyor, dizi başına 1,97. Bir olay başlıyor ve bitiyorsa iki geçiş olur; dizinin son karesine kadar
sürenlerde bir geçiş kalır. Kararsızlıkta küçük olan iyi değildir: aranan sayı sıfır değil,
**71'dir**. Tabanın sıfırı gerçeğin altındadır ve bu, ölçütün tek başına okunamayacağının en açık
biçimidir.

## Bağımsız Kare Kararı

```python
def oznitelik(g):
    """Kare basina uc sayi: ortalama gri duzey, en parlak 3x3 pencere, esik ustu oran."""
    top = sum(sum(s) for s in g)
    enp = 0.0
    for i in range(BOY - 2):
        for j in range(BOY - 2):
            p = sum(g[i + a][j + b] for a in range(3) for b in range(3)) / 9.0
            if p > enp:
                enp = p
    ust = sum(1 for s in g for v in s if v > 0.55) / (BOY * BOY)
    return [1.0, top / (BOY * BOY), enp, ust]


def coz(A, b):
    n, x = len(b), [0.0] * len(b)
    M = [A[i][:] + [b[i]] for i in range(n)]
    for k in range(n):
        p = max(range(k, n), key=lambda r: abs(M[r][k]))
        M[k], M[p] = M[p], M[k]
        for r in range(k + 1, n):
            f = M[r][k] / M[k][k]
            for c in range(k, n + 1):
                M[r][c] -= f * M[k][c]
    for k in range(n - 1, -1, -1):
        x[k] = (M[k][n] - sum(M[k][c] * x[c] for c in range(k + 1, n))) / M[k][k]
    return x


def egit(kume):
    """Kare basina dogrusal karar islevi; en kucuk karelerle uydurulur. MODELDIR."""
    A, b = [[0.0] * 4 for _ in range(4)], [0.0] * 4
    for kareler, etiket in kume:
        for g, y in zip(kareler, etiket):
            x = oznitelik(g)
            for p in range(4):
                b[p] += x[p] * y
                for q in range(4):
                    A[p][q] += x[p] * x[q]
    return coz(A, b)


W = egit(EGT)
SKOR = [[sum(a * c for a, c in zip(W, oznitelik(g))) for g in kareler]
        for kareler, _ in SIN]
BAGIMSIZ = [[1 if s >= 0.5 else 0 for s in d] for d in SKOR]


def olc(kararlar):
    dogru = sum(k == y for kd, (_, e) in zip(kararlar, SIN) for k, y in zip(kd, e))
    kararsiz = sum(sum(kd[t] != kd[t - 1] for t in range(1, KARE)) for kd in kararlar)
    return dogru / TOPLAM, kararsiz


d, kz = olc(BAGIMSIZ)
print(f"bagimsiz kare karari: kare dogrulugu {d:.4f}, kararsizlik {kz} gecis "
      f"({kz / len(SIN):.2f} dizi basina)")
print(f"taban ile fark: dogrulukta {d - TABAN:+.4f}, kararsizlikta {kz - 0:+d}")
```

```
bagimsiz kare karari: kare dogrulugu 0.8634, kararsizlik 99 gecis (2.75 dizi basina)
taban ile fark: dogrulukta +0.1620, kararsizlikta +99
```

Birinci ölçütte model tabanı 0,1620 geçiyor ve bu, kare başına verilen kararın gerçekten bir şey
öğrendiğini söylüyor. İkinci ölçütte aynı model tabanın **99 geçiş** üstünde. Sayının okunacağı yer
gerçeğin 71'idir: model, gerçekliğin fikir değiştirdiğinden **28 kez fazla** fikir değiştiriyor,
oran olarak yüzde 39 fazla. Dizi başına bakıldığında gerçekte 1,97 geçiş varken kararda 2,75 geçiş
var.

Bu fazlalık kare doğruluğuna neredeyse hiç yansımaz. Bir dizide olayın ortasındaki tek bir karede
fikir değiştirmek doğruluktan yalnız 1/432 götürür, ama kararsızlığa iki geçiş ekler. Bir kapsama
ağında bu farkın karşılığı somuttur: aynı bölge için ardışık iki okumada iki ayrı uyarı üretilmesi
demektir ve uyarıyı okuyan taraf için bu, doğruluk kaybından daha pahalıdır.

## Geçiş Cezası ile Zamanı Kullanan Karar

```python
def gecis_cezali(skor, ceza):
    """Zamani kullanan karar: kare maliyeti + gecis basina sabit ceza."""
    maliyet = [[(skor[0] - s) ** 2 for s in (0, 1)]]
    geri = [[0, 0]]
    for t in range(1, len(skor)):
        yeni, iz = [0.0, 0.0], [0, 0]
        for s in (0, 1):
            en, arg = None, 0
            for p in (0, 1):
                m = maliyet[t - 1][p] + (0.0 if p == s else ceza)
                if en is None or m < en:
                    en, arg = m, p
            yeni[s], iz[s] = en + (skor[t] - s) ** 2, arg
        maliyet.append(yeni)
        geri.append(iz)
    s = 0 if maliyet[-1][0] <= maliyet[-1][1] else 1
    yol = [s]
    for t in range(len(skor) - 1, 0, -1):
        s = geri[t][s]
        yol.append(s)
    return yol[::-1]


print(f"{'ceza':>6}{'kare dogrulugu':>16}{'kararsizlik':>13}{'dizi basina':>13}")
for ceza in (0.00, 0.05, 0.15, 0.40, 1.00, 4.00):
    d, kz = olc([gecis_cezali(skor, ceza) for skor in SKOR])
    print(f"{ceza:>6.2f}{d:>16.4f}{kz:>13}{kz / len(SIN):>13.2f}")
print(f"{'gercek':>6}{1.0:>16.4f}{GERCEK_KARARSIZ:>13}"
      f"{GERCEK_KARARSIZ / len(SIN):>13.2f}")
print(f"{'taban':>6}{TABAN:>16.4f}{0:>13}{0.0:>13.2f}")
ZAMANLI = [gecis_cezali(skor, 0.15) for skor in SKOR]
en = max(range(len(SIN)),
         key=lambda i: sum(BAGIMSIZ[i][t] != BAGIMSIZ[i][t - 1] for t in range(1, KARE)))
print(f"en cok fikir degistiren sinama dizisi ({en + 1}. sirada):")
for ad, d in (("gercek  ", SIN[en][1]), ("bagimsiz", BAGIMSIZ[en]), ("zamanli ", ZAMANLI[en])):
    print(f"   {ad} " + "".join(str(v) for v in d))
```

```
  ceza  kare dogrulugu  kararsizlik  dizi basina
  0.00          0.8634           99         2.75
  0.05          0.8657           86         2.39
  0.15          0.8611           71         1.97
  0.40          0.8472           45         1.25
  1.00          0.7801           21         0.58
  4.00          0.7014            1         0.03
gercek          1.0000           71         1.97
 taban          0.7014            0         0.00
en cok fikir degistiren sinama dizisi (18. sirada):
   gercek   000111110000
   bagimsiz 000101100010
   zamanli  000101100000
```

Tablonun ilk satırı ikinci bölümün sayılarıdır: sıfır ceza, bağımsız kare kararının kendisidir.
Sıfır cezada her kare kendi puanının en yakın olduğu değere yuvarlanır ve dizi hiçbir rol oynamaz.
Ceza büyüdükçe aynı puanlar aynı kalır — model, ağırlıklar ve kare puanları hiç değişmez — ama
kararlar değişir.

Farkın nereden geldiği bu yüzden kesin biçimde söylenebilir. Temsil değişmedi: kare başına aynı üç
sayı. Model değişmedi: aynı doğrusal işlev, aynı ağırlıklar. Değişen tek şey **kararın zaman
içinde nadiren değiştiği varsayımıdır** ve o varsayım tek bir sayıyla, geçiş cezasıyla girildi. Altı
satır, aynı modelin altı ayrı çıktısıdır.

Cezanın kendisi bir varsayımın sayıya çevrilmiş halidir: bir geçişin maliyeti, bir karede yanılmanın
maliyetiyle aynı birimden yazılır. Ceza 0,15 demek, bir geçişi ancak o geçişi haklı çıkaran kare
kanıtı yeterince güçlüyse kabul etmek demektir. Bu, olayın **ne kadar sürdüğü** hakkında dolaylı bir
varsayımdır ve kurguda olaylar iki ile beş kare arasında sürüyor.

Değiş tokuş üç yerde okunuyor. Doğruluk 0,05 cezada **0,8657** ile en yüksek değerine çıkıyor,
kararsızlık 99'dan 86'ya iniyor; küçük bir ceza hem doğruluk hem kararlılık kazandırıyor. Ceza
0,15'te kararsızlık **71**'e, yani gerçeğin sayısına oturuyor ve bunun bedeli en yüksek doğruluktan
0,0046 vermek. Ceza büyümeye devam ettiğinde doğruluk düşüyor: 0,40'ta 0,8472, 1,00'de 0,7801.

Son satır kursun ikinci iddiasını bu ders için ödüyor. Ceza 4,00'te karar dizisi neredeyse sabite
iniyor — 36 dizide **1 geçiş** — ve kare doğruluğu **0,7014**'e, yani tabanın kendi sayısına
düşüyor. Alanın tabanı burada ayrı bir yordam değil, **cezanın uç değeridir**; sonsuz cezayla
uygulanan zamansal düzeltme, her kareye baskın sınıfı yazmakla aynı çıktıyı verir. Kararsızlığı tek
başına küçültmeye çalışan bir ayar, sonunda hiçbir şey öğrenmemiş yordama varır.

Son üç satır bunu tek bir dizide gösteriyor. Gerçek dizi beş karelik bir olay taşıyor; bağımsız
karar olayın ortasında bir kare kaçırıyor ve olay bittikten sonra bir kare yanlış alarm veriyor,
altı geçiş. Zamanı kullanan karar yanlış alarmı siliyor ve dört geçişe iniyor, ama ortadaki
boşluğu **dolduramıyor**: o karede puan yeterince düşüktür ve 0,15 ceza onu çevirmeye yetmez.
Geçiş cezası kararı düzleştirir, kaçırılan kareyi geri getirmez.

## Özet

- Kare başına kararın iki ölçütü vardır: kare doğruluğu ve ardışık karelerde kaç kez fikir
  değiştiğini sayan kararsızlık. Taban birincisinde 0,7014, ikincisinde 0 alır.
- Kararsızlıkta küçük olan iyi değildir; okunacak sayı gerçek etiket dizilerinin kararsızlığıdır ve
  o sayı 36 dizide 71 geçiştir.
- Bağımsız kare kararı 0,8634 doğrulukla 99 geçiş üretiyor: gerçeğin 28 fazlası, dizi başına 2,75
  yerine 1,97. Bu fazlalık kare doğruluğunda neredeyse görünmez.
- Geçiş cezası temsili ve modeli değiştirmeden altı ayrı çıktı üretiyor; 0,05'te doğruluk 0,8657 ile
  en yükseğine çıkıyor, 0,15'te kararsızlık gerçeğin 71'ine oturuyor.
- Ceza 4,00'te karar tabanın kendisine iniyor (0,7014 ve 1 geçiş): alanın tabanı bu ölçütte ayrı bir
  yordam değil, cezanın uç değeridir.

## Sonraki Adım

Beş derste girdi hep aynı türdendi: bir gri düzey ızgarası, tek kare ya da kısa bir dizi olarak.
Bu kursun ilk sekiz dersinde ise girdi bir metindi ve aynı kurgu ölçüm ağının notlarından geliyordu.
İki kip şimdiye kadar ayrı ayrı ölçüldü; oysa saha ekibinin bir olay için düştüğü **not** ile aynı
olayın **kapsama karesi** aynı olaya aittir. Sonraki ders ikisini tek bir uzayda buluşturur ve şunu
sorar: bir not ile bir görüntünün aynı olaya ait olup olmadığını söyleyen bir temsil, rastgele
eşleştirmenin ne kadar üstüne çıkar ve tek kip tek başına bunun ne kadarını verir.
