FaceNet Modeli Kullanarak Gerçek Zamanlı Yüz Tanıma Sistemi Oluşturma

Berke Can Ongun
Google Developer Student Clubs
3 min readJul 16, 2020
1

Yazan: Vinayak Arannil, Çeviren: Berke Can Ongun

Yüz Tanıma uygulamaları, güvenlik ve kimlik doğrulama sistemlerinde yeni bir trend haline geliyor. Modern yüz tanıma sistemleri, yüz tanıma yaparken kişinin gerçek (canlı) olup olmadığını bile tespit edebilmekle beraber, gerçek bir kişinin resmini göstererek sistemlerin saldırıya uğramasını önleyebiliyor. Eminim, herkes Facebook’un otomatik etiketleme tekniğini ne zaman ve nasıl uyguladığını merak etmiştir. Kişiyi tanımlar ve bir resim yüklediğinizde onu da etiketler. O kadar etkilidir ki, kişinin yüzü bulanık veya resim karanlıkta çekilse bile doğru şekilde etiketlenir. Tüm bu başarılı yüz tanıma sistemleri, güçlü derin öğrenme algoritmaları tarafından desteklenen bilgisayar görme alanındaki son gelişmelerin sonucudur. Bu algoritmalardan birini inceleyelim ve gerçek zamanlı yüz tanıma sistemini nasıl uygulayabileceğimizi görelim.

Yüz tanıma iki şekilde yapılabilir. Bir işletme için bir yüz tanıma sistemi oluşturduğunuzu düşünün. Bunu yapmanın ilk yolu, yüzleri doğru bir şekilde sınıflandırabilen bir nöral ağ modeli (tercihen bir ConvNet modeli) eğitmektir. Bir sınıflandırıcının iyi eğitilmesi için bildiğiniz gibi, milyonlarca giriş verisine ihtiyaç duyar. Çalışanların bu kadar çok fotoğrafını toplamak çoğu zaman mümkün değildir. Yani bu yöntem nadiren işe yarıyor diyebiliriz. Bu sorunu çözmenin en iyi yolu, tek adımda öğrenme tekniğini (one-shot learning) seçmektir. Tek adımda öğrenme, nesne kategorileri hakkında bir veya yalnızca birkaç eğitim görüntüsünden bilgi öğrenmeyi amaçlamaktadır. Modelin hala milyonlarca veri üzerinde eğitilmesi gerekiyor, ancak veri kümesi aynı alandan herhangi biri olabilir. Bunu daha açık bir şekilde açıklayayım. Tek adımda öğrenme yolunda, herhangi bir yüz veri kümesiyle bir modeli eğitebilir ve daha az sayıda olan kendi verileriniz için kullanabilirsiniz. Milyonlarca yüz görüntüsüne sahip olan CASIA-WebFace, MS-Celeb-1M, AT&T yüz veri setleri gibi halka açık birçok yüz veri seti vardır. Şimdi soru şu ki, bir yüz tanıma sistemi oluşturmak için ne tür bir model gerekli?

Tek adımda öğrenme bir Siamese ağı kullanılarak uygulanabilir. Siamese ağı aynı ağırlıklara sahip, ancak iki farklı girdi alan iki özdeş sinir ağı durumudur. Bu ağlar, çıkışları arasındaki zıt kayıplara göre optimize edilir. Ağlara girişler benzer olduğunda, bu kayıp küçük olur ve girişler birbirinden farklı olduğunda ise büyük olur. Bu şekilde, optimize edilmiş Siamese ağları girişleri arasında ayrım yapabilir.

2

FaceNet, yüz görüntülerinden, mesafelerin doğrudan yüz benzerliğinin bir ölçüsüne karşılık geldiği tek adımda öğrenme modeldir. Bu alan üretildikten sonra, yüz tanıma, doğrulama ve kümeleme gibi görevler, özellik vektörleri olarak FaceNet düğünleriyle standart teknikler kullanılarak kolayca uygulanabilir. Eğitmek için kabaca hizalanmış eşleşen / eşleşmeyen tripletler kullanılır. Triplet, bir tutturucu görüntü, bir tutturucu görüntüsüyle eşleşen başka bir görüntü ve tutturucu görüntüyle eşleşmeyen bir görüntünün bütünüdür diyebiliriz.

Derin öğrenme konusunda önceden eğitilmiş birçok yüz modeli mevcuttur. David Sandberg’in Tensorflow kullanarak geliştirdiği örnek bir uygulama, LINK üzerinden ulaşabilirsiniz. Ayrıca ağırlıkları LINK adresinde kendisi tarafından yayınladı. Şimdi önceden eğitilmiş bir modeli nasıl kullanabileceğimizi görelim. İşte adımlar.

  1. Tüm çalışanların görüntülerini toplayın.
  2. Yüzleri MTCNN (Çok Amaçlı Basamaklı Konvolüsyon Sinir Ağları), dlib veya Opencv kullanarak hizalayın. Bu yöntemler, gözlerin ve alt dudağın her görüntüde aynı konumda görünmesini sağlayarak yüzleri tanımlar, algılar ve hizalar.
  3. 128 boyutlu bir birim hiper kürede tüm çalışanların yüzlerini temsil etmek için önceden eğitilmiş yüz modelini kullanın.
  4. İlgili çalışan isimleri ile düğünleri diskte saklayın.

Ve işte artık yüz tanıma sisteminiz hazır! Yukarıda yaptığımız şeylerle, yüzleri nasıl tanıyabileceğimizi görelim. Şimdi elinizde, çalışan isimleri ile karşılık gelen 128 boyutlu düğünleri var. Bir çalışan algılama kameranızla karşılaştığında, çekilen görüntü önceden eğitilmiş ağ üzerinden çalıştırılacak ve daha sonra öklid mesafesini kullanarak depolanan düğünlerle karşılaştırılacak. Yakalanan görüntüler ile depolanan düğünler arasındaki en düşük mesafe bir eşik değerinden daha azsa, sistem bu kişiyi çalışan olarak tanıyacaktır.

Hepsi bu kadar. Basit ama etkili bir yüz tanıma sistemi oluşturdunuz. İyi günler!

Daha fazlası ve sorularınız için bana sosyal medya hesaplarımdan ulaşabilirsiniz:

Instagram | Twitter | Linkedin

Proje Kodları: https://github.com/vinayakkailas/face_recognition

Aynı zamanda, Google teknolojilerinin bir hayli içerisinde bulunan bir Google DSC Core Lead’i olarak, teknik anlamda desteğe ihtiyacınız olursa benimle iletişim kurmaktan çekinmeyin. Sadece teknik anlamda değil, topluluk yöneticiliği, sosyal girişimcilik, konuşmacı eğitimi ve kişisel gelişim alanlarında da her zaman yardımcı olmaya hazırım. Geri dönüşlerinizi bekliyorum. Sağlıklı günler dilerim.

--

--