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

0 466

Yüz tanıma teknolojisi genel olarak iki yüzün doğrulanması işlemine dayanmaktadır. Tüm senaryo iki resmi bir konvolüsyonel nöral ağa besleyerek bu resimleri vektör olarak ifade ederek bu gösterimlerin benzerliği bir eşik değerin altındaysa aynı kişi olarak sınıflandırma dayanmaktadır. Burada asıl maliyet CNN modelini ayağa kaldırmak ve resimlerin vektör gösterimlerini elde etmek için modelin tahmin fonksiyonunu çağırmaktır. Bu da problematik olabilir. Bu yazıda bu problemin çevresinden nasıl dolanabileceğimizi içeren bir yöntemin üzerinde duracağız.

Jason Bourne

Modern bir yüz tanıma üretim hattı (pipeline)

Öncelikle modern bir yüz tanıma üretim hattını ve adımlarını hatırlayalım.

Modern bir yüz tanıma üretim hattı 4 ortak adımdan oluşmaktadır: yüzün algılanması, hizalanması, vektör olarak gösterimi ve doğrulama ya da sınıflandırma.

Büyük O Gösterimi

Öncelikle yüz doğrulama O(1) kompleksitisine sahipken yüz tanıma O(n) kompleksitisine ssahip olacaktır. Yani bir resmi bir veri tabanında ararken n kere yüz doğrulama işlemini çağıracağız ki n burada veri tabanımızdaki veri boyutunu ifade etmektedir.

Vlog

Ön işleme

Bir yüz tanıma üretim hattının zorunlu olmamakla birlikte büyük katkı sağlayan ilk iki adımı yüzün algılanması ve hizalanmasıdır. Hizalama işlemi gözlerin algılanması sonrasında olduğu için asıl işlem yüzün algılanmasıdır. Bu noktada OpenCV haar ve SSD (Single Shot Multibox Detector), Dlib HoG (Histogram of Oriented Gradients) ve MMOD (Max-Margin Object Detection) yöntemlerini sunarken, MTCNN (Multi-task Cascaded Convolutional Networks) de oldukça yaygın bir çözümdür. Bu çözümlere ait yüz tanıma performanslarını aşağıdaki videodan gözlemleyebilir paylaştığım linklerden de nasıl implemente edildiklerini görebilirsiniz. Üretim hattının zorunlu bir adımı olmadığı için bu iki istasyonun detaylarına bu yazıda girmiyorum.

Yüz tanıma zor bir işlemdir

Asıl maliyetli olan işlem bir yüz tanıma modelinin inşa edilmesidir. Fakat bir kez inşa edilmiş bir modeli tekrar tekrar kullanabileceğimizden bunu göz ardı edebiliriz. Model fark etmeksizin tahmin fonksiyonlarının çağırılıp iki resmin doğrulamasının yapılması işlemi de aşağıdaki tablodan da görüldüğü üzere saniyeler mertebesinde sürmektedir.

İşlem süreleri

Bir resmi 1000 kişilik bir veri tabanında aradığımızı varsayalım. En hızlı olan Facebook DeepFace modeliyle 10 dakika kadar sürecektir ki hiç de kabul edilebilir bir süre değildir.

Bakış açısını değiştirmek

Yüz tanıma üretim hattında doğrulama adımında iki vektör gösterimi arasındaki mesafeyi hesaplıyor ve bu uzaklığın bir eşiğin altında olup olmamasını kontrol ediyorduk. Bu noktada veri tabanımızdaki yüzlerce resme ait vektör gösterimlerini öncesinden hesaplayıp saklarsak işlem süremiz major azalacaktır. Tek yapmamız gereken aradığımız hedef resme ait vektör gösterimi hesaplamak ve bunu veri tabanındaki diğer vektör gösterimleri ile mukayese etmekdir. İki vektör arasındaki uzaklığı çok hızlı şekilde zaten hesaplayabiliyoruz dolayısıyla bu işlemin alacağı zamanı göz ardı edebiliriz.

DeepFace

Python için yüz tanıma ve yüz analizi paketi olan deepface‘i önceki yazılarımızda incelemiştik. DeepFace aynı zamanda bir resmi büyük bir veri seti içerisinde aramak için hazır bir arama fonksiyonu sunmaktadır. Yukarıda bahsedilen adımların tümü bu arama fonksiyonu arkasında kurgulanmıştır. Ayrıca modern bir yüz tanıma üretim hattında bahsedilen yüzün algılanması, hizalanması gibi ön işleme işlemlerini de içermektedir.

DeepFace

Bulma işleminin hangi yüz tanıma modeli ile yapılacağını (VGG-Face, Google FaceNet, OpenFace, Facebook DeepFace) ve hangi benzerlik metriği ile yapılacağını (kosinüs benzerliği, öklid uzaklığı) parametre olarak bildirebiliyoruz.

Bu şekilde bir resmi yüzlerce resim arasında 1-2 saniye dolaylarında bulabiliyoruz.

Sonuç

Bu yazıda büyük ölçekli yüz tanıma işlemini inceledik. Her ne kadar yüz tanıma işlemi kompleks bir işlem olsa da bazı hacking becerileri uygulayarak büyük ölçekli yüz tanımayı çok hızlı şekilde çözümleyebiliyoruz.

Bu yazı “Large Scale Face Recognition for Deep Learning” yazısından Türkçe’ye çevrilmiştir.

Yorum yaz

Email adresiniz yayınlanmayacaktır.