Proje
Bursa Uludağ Üniversitesi Bilgisayar Mühendisliği bölümünde, Prof. Dr. Kemal Fidanboylu danışmanlığında yaptığım bitirme projesi. Amaç, gömme (embedding) tabanlı yüz tanıma yaklaşımını baştan sona anlamak ve gerçek zamanlı çalışabilen bir sistem kurmaktı.
Yöntemi seçmeden önce bu yazını taradım. FaceNet çizgisindeki ağlar, triplet ve center loss, yüz hizalama ve maske, gözlük, poz gibi bozucu koşullar üzerine elliye yakın makale okudum. Okuma, hazır bir tanıma modelini çağırmak yerine ağı sıfırdan kurmanın gerekçesini netleştirdi: yeni bir kişi için modeli yeniden eğitmemek, kayıpta zor örnekleri seçmek ve kapanmayı veri artırmayla taklit etmek buradan çıktı.
Gömme tabanlı yaklaşımda model bir yüzü sınıflandırmıyor; onu bir vektöre çeviriyor. Aynı kişinin yüzleri bu uzayda birbirine yakın, farklı kişilerinki uzak düşecek şekilde eğitiliyor. Böylece sisteme yeni bir kişi eklemek için modeli yeniden eğitmek gerekmiyor, sadece o kişinin vektörünü kaydetmek yetiyor.
Veri
CelebA’dan türettiğim ve filtrelediğim bir alt küme: 1.800’ü kadın, 1.800’ü erkek olmak üzere 3.600 kişi, her kişi için 10 farklı poz ve varyasyon.
- Ön işleme: MTCNN ile yüz tespiti, kırpma ve hizalama; piksel değerlerinin
[-1, 1]aralığına normalizasyonu - Veri artırma: yatay çevirme, ColorJitter, RandomAffine, RandomErasing. Sonuncusu, yüzün bir kısmının maske ya da gözlükle kapandığı durumları taklit etmek için
Model
| Bileşen | Seçim |
|---|---|
| Yüz tespiti | MTCNN |
| Gömme ağı | Sıfırdan tasarlanmış FaceNet tarzı CNN: 4 konvolüsyon bloğu, ortalama havuzlama, tam bağlantılı katman |
| Düzenleme | BatchNorm, Dropout |
| Kayıp | Triplet loss, isteğe bağlı center loss |
| Örnek seçimi | Semi-hard ve hard negative mining |
| Optimizasyon | AdamW, CosineAnnealingLR |
| Karşılaştırma | Öklid mesafesi ve kosinüs benzerliği |
Triplet loss, bir yüzü aynı kişinin başka bir yüzüne yaklaştırıp farklı bir kişinin yüzünden uzaklaştırıyor. Rastgele seçilen üçlülerin çoğu model için fazla kolay olduğundan, zor örnekleri seçen (hard ve semi-hard negative mining) bir strateji kullandım. Center loss ise aynı kişinin vektörlerini kendi sınıf merkezine doğru çekerek kümeleri sıkılaştırıyor.
Demo
OpenCV ile kameradan canlı görüntü alıp yüzü tanıyan bir masaüstü uygulaması yaptım. Tkinter arayüzünde iki düğme var: kişi ekleme ve tanıma. Eğitim Google Colab’da Tesla T4 GPU ile yapıldı.
Sonrası
Bu projede edindiğim gömme tabanlı yüz tanıma bilgisi, staj ve iş hayatımda cihaz üstünde çalışan yüz doğrulama uygulamalarına doğrudan temel oldu.