Python ile Büyük Ölçekli Yüz Tanıma – Bilişim IO
By Şefik İlkin Serengil	 On Haz 2, 2020
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.
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.
Ö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.
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.
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.
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.
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.
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.
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.
derin öğrenmeyapay zekayüz tanıma