Bölüm 7 · Görüntü işleme · Ders 32
Yüz doğrulama: gömme, benzerlik, eşik
Kosinüs benzerliği ve yanlış kabul / yanlış ret dengesi
Veri. Laboratuvar kapısındaki robot, içeri girmek isteyenin yüzünü kayıtlı yüzle karşılaştırıyor. Laboratuvarda 6 kişi çalışıyor; her birinden farklı ışık ve açılarda 15 fotoğraf var, toplam 90. Bir sinir ağı her fotoğrafı 64 sayılık bir gömme vektörüne çevirmiş (burada benzetim: kişi başına bir merkez yön, üstüne fotoğrafın kalitesine göre gürültü). 4005 fotoğraf çiftinin 630'u aynı kişiye, 3375'i farklı kişilere ait.
import numpy as nprng = np.random.default_rng(1)D, P, K = 64, 6, 15 # boyut, kişi, kişi başı fotounit = lambda v: v / np.linalg.norm(v, axis=-1)[..., None] # birim vektörg = unit(rng.normal(size=D)) # ortak "yüz" yönüC = unit(0.8 * g + unit(rng.normal(size=(P, D)))) # kişi merkezlerilab = np.repeat(np.arange(P), K)sig = 0.8 * (0.5 + rng.random(P * K)) # foto kalitesi (ışık, açı)N = rng.normal(size=(P * K, D)) / np.sqrt(D)X = unit(C[lab] + sig[:, None] * N) # 90 gömme vektörüS = X @ X.T # kosinüs benzerliğii, j = np.triu_indices(P * K, 1) # bütün çiftlersame = lab[i] == lab[j]gen, imp = S[i, j][same], S[i, j][~same] # aynı / farklı kişiprint(f'aynı: {gen.mean():.2f}, farklı: {imp.mean():.2f}')for th in [0.3, 0.42, 0.55]: # eşik süpürmefar = (imp >= th).mean() # yanlış kabulfrr = (gen < th).mean() # yanlış retprint(f'eşik {th}: FAR {far:.1%}, FRR {frr:.1%}')tpl = unit(X[lab == 2][:5].mean(0)) # kayıt şablonu: 5 fotoprint(X[lab == 2][-1] @ tpl, X[lab == 4][0] @ tpl) # kapıda iki denemehistory = {'threshold': [], 'far': [], 'frr': [], 'accuracy': []} # eşik süpürme geçmişifor th in np.arange(101) / 100:acc = ((S[i, j] >= th) == same).mean()r = [th, (imp >= th).mean(), (gen < th).mean(), acc]for k, v in zip(history, r): history[k].append(float(v))d = np.abs(np.array(history['far']) - np.array(history['frr'])) # eşit hata noktasıe = d.argmin(); eer = (history['far'][e] + history['frr'][e]) / 2for k, v in [('eer_esik', history['threshold'][e]), ('eer', eer), # son ölçümler('far_042', history['far'][42]), ('frr_042', history['frr'][42])]:print(f'{k:<10}{v:>8.3f}')import csvwith open('egitim_gecmisi.csv', 'w', newline='') as f: # satır başına bir eşikcsv.writer(f).writerows([list(history), *zip(*history.values())])try:import matplotlib.pyplot as plt # varsa grafik çizfor k in ('far', 'frr'): plt.plot(history['threshold'], history[k], label=k)plt.xlabel('threshold'); plt.legend(); plt.show()except ImportError:print('matplotlib yok: grafik atlandı')
Eğitim paneli
Eğitim çalıştırılıyor…
Sahnedeki her sayı, aynı algoritmanın tarayıcında yapılan gerçek çalıştırmasından gelir (sabit tohum, her seferinde aynı sonuç). Python kodunu kendi bilgisayarında çalıştırırsan rastgele başlangıçlar farklı olacağı için sayılar biraz değişebilir.
Veri seti
Tüm veri setleri →Bu dersin kodu verisini kendi içinde üretir; indirilecek dosya yok. Kodu yine de aşağıda tarayıcında çalıştırabilirsin.
Kodu tarayıcıda çalıştırPython · NumPy · matplotlib · Pyodide
Python ve NumPy bu sayfada, tarayıcında çalışır (Pyodide). Kodu değiştirip yeniden çalıştırabilirsin; dersin veri setleri çalışma klasöründe hazır. Kod matplotlib kullanırsa grafikler çıktının altında görünür, yazdığı dosyalar (ör. egitim_gecmisi.csv) indirilebilir.
Çıktı
Çıktı burada görünecek.Nasıl çalışır
- Her yüz 64 boyutlu bir birim vektördür. İki yüzün benzerliği, vektörler arasındaki açının kosinüsüdür: 1 aynı yön, 0 dik.
- Bütün çiftler iki gruba ayrılır: aynı kişi (ortalama yaklaşık 0,6) ve farklı kişi (yaklaşık 0,2). İki dağılım biraz örtüşür: kötü ışıkta çekilmiş fotoğraflar.
- Benzerlik eşiği geçerse kapı açılır. Eşiği geçen farklı kişi çiftlerinin oranı FAR (yanlış kabul), eşiğin altında kalan aynı kişi çiftlerinin oranı FRR'dir (yanlış ret).
- Eşik 0'dan 1'e süpürülür: FAR hep azalır, FRR hep artar. İkisinin eşit olduğu nokta EER'dir; sistemin tek sayılık karnesi.
- Şunu dene: eşiği 0,3'e indir, yabancıların dörtte biri içeri girer. 0,55'e çıkar, çalışanların neredeyse üçte biri kapıda kalır.
Neden önemli
Telefon kilidi, pasaport kapıları ve bina girişleri aynı adımla çalışır: yüzü vektöre çevir, kayıtlı vektörle kosinüs benzerliğini karşılaştır. Eşiği güvenlik ister: kasa dairesinde yanlış kabul pahalıdır, telefon kilidinde yanlış ret can sıkar. Robotlar da aynı yöntemle sahiplerini, ziyaretçileri ve hatta nesneleri yeniden tanır.
ESOF 323, 11. hafta: robotlarda derin öğrenme →