DeepFace: Python için Yüz Tanıma ve Demografi Analizi İskeleti

4 667

deepface, python için geliştirilmiş basit bir yüz tanıma ve demografi analizi (yaş, cinsiyet, duygu durumu ve ırk/etnisite) yazılım iskeletidir. Bir kaç satır kod yazarak yüzsel analizleri gerçekleştirmenizi sağlamaktadır. Bu sayede yazılım mühendisliği ve makine öğrenimi çalışmaları arasındaki boşluğun doldurulması amaçlanmıştır.

 

deepface

Kurulum

İskeletin kurulumu için en kolay yöntem PyPI üzerinden indirilmesidir.

Alternatif olarak kaynak kodu doğrudan GitHub reposundan indirerek kurulumu gerçekleştirebilirsiniz.

Yüz Tanıma

Yüz tanıma işlemi için deepface arayüzünün sağladığı doğrulama (verify) fonksiyonunu kullanacağız.

deepface ile yüz tanıma

Modern yüz tanıma sistemleri 4 adımdan oluşmaktadır: yüzü algıla, yüzün hizalaması, yüz resminin vektör olarak ifade edilmesi ve doğrulama. deepface tüm bu ortak adımları arkaplanda halletmektedir.

Doğrulama fonksiyonunun her çağırılması arkaplanda maliyetli bir işlem olan bir yüz tanıma modelini ayağa kaldırmaktadır. Sıralı şekilde çok sayıda yüzü doğrulama ihtiyacınız varsa yüzleri dizi olarak beslemeniz halinde operasyon ciddi şekilde hızlanacaktır. Bu şekilde kompleks yüz tanıma modelleri tek bir kez kurulacaktır.

Yüz tanıma modelleri

İskelet bugün için en güçlü yüz tanıma modelleri olan VGG-Face, Google FaceNet, OpenFace ve Facebook DeepFace modellerini içermektedir. Varsayılan konfigürasyon model belirtilmemesi halinde VGG-Face ile çalışmaktadır. Kullanmak istediğiniz baz modeli doğrulama fonksiyonunda parametre olarak belirtebilirsiniz.

Başarı ve hız çalışan modele göre değişiklik gösterecektir. Örneğin OpenFace diğer modellere göre daha düşük başarı gösterirken (%1 – %2 aralığında) model kompleksitesinin düşüklüğü (VGG-Face’e göre 38 kat daha ufak) sebebiyle çok hızlı çalışmaktadır. Bu sebeple gerçek zamanlı çalışmalarınızda OpenFace kullanılabilecekken batch işlemlerinizde diğer modelleri tercih edebilirsiniz.

Benzerlik metriği

Yüz tanıma modelleri yüz resimlerini vektör olarak ifade etmekten sorumludur. İki farklı yüz resminin aynı kişiye ait olup olmadığı ise bu vektörlerin arasındaki benzerliğine göre karar verilmektedir. Vektörlerin benzerliğine kösinüs benzerliği, öklid uzaklığı, l2 normu gibi farklı metrikler ile karar verilebilir. Varsayılan konfigürasyon metriğin belirtilmemesi halinde kosinüs benzerliği karar vermektedir. Alternatif olarak benzerlik metriğini doğrulama fonksiyonunda parametre olarak belirtebilirsiniz.

Yüz özelliği analizi

deepface ayrıca yaş, cinsiyet, duygu durumu (kızgın, korkmuş, doğal, üzgün, tiksinmiş, mutlu ve şaşırmış) ve ırk / etnisite (asya, siyah, beyaz, orta doğulu, hintli, latin) gibi yüz özelliklerinin analizini de sunmaktadır. deepface arayüzünün sunduğu analiz (analyze) fonksiyonu ile bu işlemi gerçekleştireceğiz.

deepface ile yüz özelliği analizi

Gerçek Zamanlı Analiz

deepface’i gerçek zamanlı videolar için de kullanabilirsiniz. DeepFace arayüzü altındaki stream fonksiyonunu çağırdığınız zaman uygulama webcam’inize erişerek yüz tanıma ve yüz analizini beraber uygulayacaktır. Stream fonksiyonu, yüz resimlerinden oluşan klasörü girdi olarak göndermenizi beklemektedir. Doğrulama adımında da olduğu gibi VGG-Face varsayılan yüz tanıma modeli olarak kullanılmaktadır. Videoda ardı ardına 5 pencerede yüz algılandığı takdirde 5 sn süreli analiz donarak ekranda gösterilecektir.

Gerçek zamanlı analiz

Yüz tanıma her ne kadar tek seferde öğrenmeye (one-shot learning) dayansa da bir kişiye ait birden fazla resmi veri tabanınızda bulundurabilirsiniz. Klasör yapısını aşağıdaki şekilde düzenlemeniz gerekmetkedir.

Bu arada stream fonksiyonunu çağırırken windows işletim sisteminde de ters slash ( \ ) yerine düz slash ( / ) karakterini göndermeniz gerekmektedir.

Workshop

Her ne kadar deepface bir yüz tanıma üretim hattındaki tüm istasyonları kapsasa da arkaplanda neyin nasıl olduğunu merak ederseniz aşağıdaki workshop’ta bu konulara değindik.

Büyük Ölçekli Yüz Tanıma

Yüz tanıma işlemi çoklu sayıda yüz doğrulama işleminin uygulanmasına dayanmaktadır ve her bir yüz doğrulama işlemi bir CNN’in çağırılması anlamına gelmektedir ki bu da maliyetli bir işlemdir. Yine de bazı hacking yetenekleri uygulayarak bir resmi büyük bir veri tabanı içerisinde hızlıca bulabiliriz.

Webinar: Yazılım Mühendisliği ile Makine Öğrenimi Arasındaki Boşluğu Doldurmak

Lisans

Yazılım iskeleti MIT ile lisanslansa da kullanılacak referans modeller farklı tiplerde lisanslanmıştır. Dolayısıyla referans modelin lisansı iskelete miras olarak geçmektedir.

Örneğin VGG-Face ticari olmayan creative commons ile lisanslanmıştır. Öte yandan OpenFace Apache License 2.0 ile, Facebook DeepFace ve Google FaceNet ise MIT ile lisanslanmıştır. Dolayısıyla VGG-Face hariç diğer yüz tanıma modelleri ticari kullanıma izin vermektedir.

Bitirirken…

Yazılım iskeleti tamamen açık kaynaklı olup kaynak koduna GitHub üzerinden ulaşabilirsiniz. Çalışmayı yıldızlayarak destek verebileceğinizi lütfen unutmayın.

4 Comments
  1. fatoş says

    merhabalar kolay gelsin size.
    Gerçek zamanlı da gösterdiğiniz şekilde diğer resimlerde de aynı çıktıyı nasıl alabilirrim. yani resmin özerin de nasıl gösterebilirrim.
    Benim çıktım Şu şekilde çıkıyor:
    {‘age’: 32.26633552210522,
    ‘dominant_emotion’: ‘neutral’,
    ‘dominant_race’: ‘middle eastern’,
    ’emotion’: {‘angry’: 4.419447109103203,
    ‘disgust’: 0.00012736104508803692,
    ‘fear’: 5.354632064700127,
    ‘happy’: 0.3518438432365656,
    ‘neutral’: 73.14058542251587,
    ‘sad’: 16.620807349681854,
    ‘surprise’: 0.11255834251642227},
    ‘gender’: ‘Man’,
    ‘race’: {‘asian’: 0.014853122411295772,
    ‘black’: 0.07524138782173395,
    ‘indian’: 22.850976884365082,
    ‘latino hispanic’: 10.078267008066177,
    ‘middle eastern’: 60.04456877708435,
    ‘white’: 6.936091929674149}}
    bunun yerine sizin yaptıgınız gibi resmin özerinde daha derli topu çıktı yı nasıl alabilirrim.

    1. Şefik İlkin Serengil says

      yalnız stream fonksiyonu çağırırsanız görebilirsiniz bunu. verify ve analyze fonksiyonları json objeleri döner.

  2. Aşkın Üçüncü says

    Merhaba,

    DeepFace gpu için optimize edilmiş olarak mı çalışıyor yoksa cpu’dan mı güç alıyor?

    1. Şefik İlkin Serengil says

      DeepFace aslında tensorflow üzerine inşa edilmiş bir kütüphane. TensorFlow’unda cpu ve gpu için dağıtımları farklı ve her ikisi için de optimize edilmiş durumda. Eğer gpu ile kullanmayı planlıyorsanız öncelikle pip install tensorflow-gpu==1.9.0 kurulumunu yapmayı sonra deepface’in kurulumunu yapmayı deneyebilirsiniz. Bu şekilde gpu üzerinde çalışacaktır.

      GPU’nuz yoksa da zaten cpu core’larını kullanacaktır.

Yorum yaz

Email adresiniz yayınlanmayacaktır.