RetinaFace: Python İçin Bir Yüz Algılama Kütüphanesi

0 3,383

InsightFace projesi yüz tanıma konusunda literatüre 2 önemli katkıda bulundu: yüz tanıma modeli olarak sundukları ArcFace ve yüz algılama modeli olarak sundukları RetinaFace. Derin öğrenme tekniği ile dizayn edilmiş bu iki model de günümüz için en ileriyi ifade etmek için kullandığımız sanat seviyesinde modeller. Bu yazımızda python için tensorflow kütüphanesi üzerine dizayn edilmiş RetinaFace yazılım çerçevesini inceleyeceğiz.

RetinaFace

Yüz tanıma üretim hattı

Modern bir yüz tanıma üretim hattı 4 ortak adımdan oluşmaktadır: yüzün algılanması, hizalanması, vektörel gösteriminin yapılması ve doğrulanması. Burada algılama ve hizalamayı önemli ön işleme adımları olarak değerlendirebiliriz. Zira Google FaceNet modelinde hizalama işleminin %1 oranında iyileştirme sağladığını duyurmuştu. Bu noktada RetinaFace algılama ve hizalama işlemlerini yüksek başarı oranları ile gerçekleştirebilmekte.

Tensorflow ile yeniden implementasyon

Orjinal çalışma mxnet ile geliştirilmiş olsa da tensorflow ile yeniden implemente edilmiş bir çalışmaya rastladım. Görünen o ki bu yeniden implemente edilmiş çalışma orjinal çalışmaya yakın bir başarı oranına sahip.

Bu yeniden implementasyonun eksik noktalarından birincisi pip uyumlu dizayn edilmemiş. Kaynak kodunu elle indirmenizi beklemekte. Bununla birlikte c diline bağımlı bazı gereksinimlere ihtiyaç duyuyor. Ana dizindeki makefile dosyasını make komutu ile çalıştırıp c kodlarını derlemeniz sizden beklenmekte. Son olarak eğitilmiş ağırlık dosyası 100MB’dan daha büyük olduğu için kaynak kodu içerisinde yer verilmemiş. Bunu da dropbox linkinden elle indirmeniz bekleniliyor.

Bu noktada çalışmayı pip uyumlu hale getirip, kaynak kodunu yalınlaştırıp c dili bağımlılıklarından kurtaran, kaynak kodunu google drive kaynağından arka planda otomatik indiren ve bir kaç satır kod ile yüz algılama işlemini gerçekleştirebileceğiniz bir yeniden implementasyon çalışması gerçekleştirdim: retina-face.

Kurulum

RetinaFace projesi tamamen açık kaynak kodlu ve pip üzerinden indirilebilir durumdadır. Tek yapmanız gereken aşağıdaki komutu komut penceresinde çalıştırmak. Böylelikle kütüphaneyi ve bağımlılıklarını indirmiş olacaksınız.

Yüz algılama

Kurulum sonrası kütüphaneyi import edecek hale geleceksiniz. Arayüzünde yer alan detect_faces fonksiyonu ile yüz algılama işlemi gerçekleştirebilmektedir. Fonksiyon girdi olarak resmin diziniyle birlikte tam ismini beklemektedir.

Fonksiyon cevap olarak güvenilirlik skoru ile birlikte yüz bölgesinin koordinatlarını ve gözler, burun ve ağızın da bulunda bazı noktaların koordinatlarını dönmektedir.

Fonksiyonun cevabını aldıktan sonra yüz bölgesini ve yüzsel noktaları vurgulayabiliriz.

Sonuçlar ise oldukça tatmin edici! Lütfen resme tıklayarak genişletin ve sonuçları inceleyin.

Euroleague 2017 basketbol şampiyonu – Fenerbahçe

Güvenilirlik skoru fonksiyonun girdileri arasında opsiyonel bir argumandır ve varsayılan değeri %90’dır. Bu değeri düşürerek topluluklar için de retinaface’i çalıştırabiliriz.

Gördüğünüz gibi retinaface tribündeki taraftarların bile yüzlerini algılayabilmekte.

Kadınlar CEV kupası şampiyonu – Fenerbahçe Kadın Voleybol Takımı (Sarı Melekler)

Yüzün hizalanması

Hatırlayacağınız üzere gözün koordinatlarını da içeren yüzsel noktları da retinaface bize söylemekteydi. Gözler yatayda aynı konuma gelene kadar resmi döndürmemiz halinde hizalanmış resimler elde edebiliriz. Google FaceNet çalışmasında bu yöntem uygulandığı durumda yüz tanıma başarısının %1’in üzerinde arttığını belirtmişti.

RetinaFace hizalama işlemini de kapsayan extract_faces fonksiyonunu kendi arayüzü altında sunmaktadır. Yüz algılama fonksiyonunda olduğu gibi diziniyle birlikte resmin tam adını girdi olarak beklemektedir. Fonksiyon cevap olarak ise algılanmış ve hizalanmış resmin kendisini numpy formatında dönmektedir. Hizalama işleminin yapılmasını istemiyorsanız girdi argumanları arasında align değerini yanlış olarak atamanız gerekiyor.

Sonuçlar oldukça net görünüyor!

Yüzün algılanması ve hizalanması

Yüz tanıma

RetinaFace, insightface projesinin yüz algılama modülüyken, yüz tanıma modeli de ArcFace‘dir. DeepFace kullanarak RetinaFace yüz algılayıcısı ve ArcFace yüz tanıma modelini uçtan uca kullanabilirsiniz.

Doğrulama fonksiyonu cevaben resim çiftinin aynı kişi olup olmadığını dönmekte.

DeepFace ile ArcFace ve RetinaFace çiftinin kullanımı

DeepFace kullanımına dair kısa bir bilgilendirici video ilginizi çekebilir.

Fark etmişsinizdir yüz tanıma dediğimiz konu aslında bir resim çiftinin aynı kişi olup olmadığını anlama üzerine kurulu. Ancak biz yüz tanımadan bahsederken bir resmi bir topluluk içerisinden bulmayı anlıyoruz. DeepFace kütüphanesi ile ArcFace kullanarak bir resmi bir topluluk veri tabanı içerisinde de bulabilmekteyiz.

Bu fonksiyon cevaben bir pandas data frame dönecektir.

DeepFace ile yüz tanıma

Gerçek anlamda yüz tanımanın anlatıldığı aşağıdaki videoyu izleyebilirsiniz.

Gerçek zamanlı test etme şansınız da bulunuyor.

ArcFace, deepface içerisinde desteklenen tek yüz tanıma modeli değil. Beraberinde  VGG-FaceGoogle FaceNetOpenFaceFacebook DeepFaceDeepID ve Dlib gibi modeller de kütüphane içerisinde desteklenmekte.

Yüz algılama için de retinaface dışında opencvssddlib ve mtcnn algılayıcıları desteklenmekte. Hızdan bağımsız algılayıcıların performansını aşağıdaki videodan izleyebilirsiniz. RetinaFace hepsinden daha başarılı algılama ve hizalama olanağı sunarken hız olarak diğerlerinden daha yavaş kalmakta.

Peki bir yüz tanıma uygulaması nasıl çalışır?

Kavramları hızlıca geçip kafanızı karıştırdıysak bir yüz tanıma uygulamasının uçtan uca nasıl çalıştığını özetleyen aşağıdaki videoyu izlemenizi tavsiye ederim.

Sonuç

Bu yazıda birbirini mükemmel şekilde tamamlayan RetinaFace ve ArcFace modellerini bir kaç satır kod ile nasıl kullanabileceğimizi irdeledik.

RetinaFace kaynak kodu: https://github.com/serengil/retinaface

DeepFace kaynak kodu: https://github.com/serengil/deepface

GitHub repo’larını yıldızlayarak⭐️ çalışmalara destek olabilirsiniz🙏.

Çeviri: Deep Face Detection with RetinaFace in Python

Email adresiniz yayınlanmayacaktır.