← Tüm projeler

Derin Öğrenme ile Yüz Tanıma

Lisans bitirme projem. Elliye yakın makalenin ardından yüz tanımayı hazır bir modeli çağırarak değil, PyTorch ile sıfırdan eğitilmiş bir gömme ağı olarak kurdum. Maske, gözlük ve poz değişimine dayanmasını hedefledim; kamerada çalışan bir demo ile kapattım.

Dönem
Bitirme projesi, 2025
Alan
Akademik, Bilgisayarlı Görü, Yapay Zekâ / ML
Rol
Bitirme projesi, danışman Prof. Dr. Kemal Fidanboylu
Teknoloji
Python, PyTorch, TorchVision, MTCNN, OpenCV, scikit-learn, Tkinter, Google Colab
Kod
github.com/l4NGEL/face_recognition
3.600kişi, CelebA alt kümesi
10kişi başına poz ve varyasyon

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.

eğitimCelebA3.600 kişiMTCNNtespit, hizalamaArtırmaçevir, renk, silGömme ağı4 konv. blokKayıptriplet, centerçalışmaKameracanlı kareMTCNNaynı hizalamaAynı ağyeniden eğitim yokGalerikayıtlı vektörlerKararÖklid, kosinüsYeni kişi galeriye bir vektör olarak yazılır. Eşik altındaki mesafe tanıma, üstü ret sayılır.
Şekil 1Sistem hattı. Mavi kutular sıfırdan eğitilen ağ ve kayıp. Alt sıra aynı ağı kamerada, galeriyle kullanıyor.

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
Ham kareeğik, hizasız yüzMTCNN hizasıgözler yatay, kare kırpımArtırmaçevirrenkRandomErasing · maske
Şekil 2Hizalama ve artırma. Solda eğik ham yüz, ortada gözleri yataya çekilmiş kırpım, sağda çevirme, renk oynatma ve kapanma taklidi.

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
Kırpımhizalı yüzBlok 1ConvBatchNormReLUBlok 2Conv · BNReLUBlok 3Conv · BNDropoutBlok 4Conv · BNDropoutOrtalama havuzlamaTam bağlantı · gömme
Şekil 3Gömme ağı. Dört konvolüsyon bloğunun ardından ortalama havuzlama ve tam bağlantılı katman bir yüzü tek vektöre indiriyor.

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.

gömme uzayıAPaynı kişiNfarklı kişiA çapa, P pozitif, N negatifkısa ok: A ile P yakınkesik yay: A ile N uzakiçi boş nokta: sınıf merkeziTripletA, P'ye yaklaşır, N'den uzaklaşırCenteraynı kişi merkeze toplanırkolay üçlüler elenir
Şekil 4Gömme uzayı. A ile P aynı kişi ve yakın, N farklı kişi ve uzak. İçi boş nokta, center loss'un çektiği sınıf merkezi.

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.