Yüz özelliklerini tespit etmek için size basit bir derin öğrenme yöntemi öğretin

Leifeng.com AI Teknolojisi Yorumu: Bazı cep telefonu yazılımlarında insan yüzlerine özel efektler ekleyen uygulamalar görmüş olabilirsiniz. Selfie videolarına bazı sevimli ve ilginç nesneler ekliyorlar. Daha ilginç olanlardan bazıları ifadeleri algılayabilir ve karşılık gelenleri otomatik olarak seçebilir. nesne. Bu makale, yüz ifadesi tespiti için derin öğrenmeyi kullanma yöntemini yaygınlaştıracak ve kısaca geleneksel algılama yöntemlerini tanıtacaktır.

Geçmişte gözler, burunlar ve ağızlar dahil yüzleri ve özelliklerini tespit etmek ve hatta şekillerinden ifadeleri çıkarmak çok zordu. Şimdi, bu görev derin öğrenme yoluyla "sihirli bir şekilde" çözülebilir. Herhangi bir zeki kişi Gençler bunu birkaç saat içinde yapabilir. Georgia Tech öğrencisi Peter Skvarenina'dan Leifeng.com AI Technology Review tarafından derlenen bu makale, bu uygulama yöntemini tanıtacak.

"Geleneksel" yöntem (CLM)

Diyelim ki benim gibisiniz ve şimdi yüz izleme yapmanız gerekiyor (bu makalede, bir kişinin yüz hareketlerini bir web kamerası aracılığıyla hareketli bir karaktere senkronize etmek anlamına geliyor), bu görevin daha önce en etkili olduğunu görebilirsiniz. İyi bir algoritma, Cambridge Face Tracker veya OpenFace'e dayalı Yerel Kısıtlama Modelidir (CLM). Bu yöntem, algılama görevini ayrıştırmak ve onu algılama şekli vektör özelliklerine (ASM), puding görüntü şablonuna (AAM) bölmek ve algılama ve optimizasyon için önceden eğitilmiş doğrusal SVM kullanmaktır.Bu adımlar tek tek işlenir.

Önce, kilit noktaları kabaca tahmin edin, ardından SVM işleme için yüz bilgilerinin bir kısmını içeren önceden eğitilmiş görüntüyü kullanın ve aynı zamanda kilit noktaların konumunu düzeltin. Oluşan hata bizim ihtiyacımızdan daha düşük olana kadar bu işlemi defalarca tekrarlayın. Ek olarak, bu yöntemin Viola-Jones detektörü (Haar kaskad) kullanılması gibi görüntü üzerindeki yüzün konumunun tahmin edildiğini varsaydığını belirtmek gerekir. Ancak bu yöntem çok karmaşıktır ve lise düzeyindeki öğrenciler tarafından kolaylıkla uygulanamaz Genel yapı aşağıdaki gibidir:

Derin Öğrenme

Gençlerin yüz tanıma yapabilmelerini sağlamak için makalenin başında bahsedilen amaca ulaşmak için derin öğrenme yöntemini tanıtıyoruz. Burada, çok basit bir evrişimli sinir ağı (CNN, evrişimli sinir ağı) kullanacağız ve insan yüzleri içeren bazı görüntülerde yüzün önemli kısımlarını tespit edeceğiz. Bu amaçla önce bir eğitim veri tabanına ihtiyacımız var Burada, Kaggle tarafından sağlanan ve 15 anahtar noktayı içeren yüz tanıma sorgulama veri tabanını veya 76 anahtar noktaya sahip daha karmaşık bir veri tabanı MUCT'yi kullanabiliriz. (Mükemmel!).

Açıkçası, kaliteli bir görüntü eğitimi veritabanı vazgeçilmezdir Burada, mezun olmak için bu görüntüleri işaretlemek için zamanlarını ve enerjilerini feda eden fakir lisans öğrencilerine saygılarımızı sunuyoruz. Bu ilginç deneyler yapılabilir.

Aşağıda, Kaggle veritabanına dayalı bir barok yüz ve kilit noktalar yer almaktadır:

Bu veri tabanı, 96 * 96 çözünürlüklü gri tonlamalı görüntülerden oluşur ve her iki göz için 5 nokta ve burun ve ağız için 5 nokta olmak üzere 15 anahtar noktaya sahiptir.

Herhangi bir görüntü için, önce yüzü bulmalıyız, yani yukarıda bahsedilen ve Haar kademeli mimarisine dayanan Viola-Jones dedektörünü kullanmalıyız (bu uygulama sürecine daha yakından bakarsanız, bunun olduğunu göreceksiniz. CNN kavramı benzerdir). Bir adım daha ileri gitmek isterseniz, Tam Evrişimli Ağ (FCN) kullanabilir ve görüntü bölümleme için derinlik tahminini kullanabilirsiniz.

Hangi yöntemi kullanırsanız kullanın, OpenCV için bu çok basit:

Grayscale_image = cv2.cvtColor (resim, cv2.COLOR_RGB2GRAY)

face_cascade =

cv2.CascadeClassifier ("haarcascade_frontalface_default.xml"

)

bounding_boxes = face_cascade.detectMultiScale (grayscale_image, 1.25, 6)

Resimdeki yüzü çerçevelemek için yukarıdaki birkaç kod satırını kullanın.

Ardından, döndürülen her yüz çerçevesi için, ilgili alt görüntüleri çıkarır, bunları gri tonlamalı görüntülere ayarlar ve boyutu 96 * 96'ya dönüştürürüz. Yeni oluşturulan görüntü verileri tamamlanmış CNN ağımızın girdisi olur. CNN mimarisi en yaygın 5 * 5 evrişimli katmanı (aslında her biri 24, 36 ve 48 ReLU içeren 3 katman) kullanır ve ardından 23 * 3 evrişimli katman kullanır (her biri 64 ReLU vardır ve son olarak 3 tam bağlı katman (500, 90 ve 30 ünite dahil) kullanılır. Ayrıca fazla uydurmayı önlemek için Maksimum Havuzlamayı kullanın ve yumuşatma parametrelerinin sayısını azaltmak için genel ortalama havuzlamayı kullanın. Bu mimarinin nihai çıktısı, 15 anahtar noktanın her birinin x ve y koordinatlarına karşılık gelen 30 kayan nokta sayısıdır.

Aşağıdaki Keras'ın uygulama sürecidir:

model = Sıralı

model.add (BatchNormalization (input_shape = (96, 96, 1)))

model.add (Convolution2D (24, 5, 5, border_mode = aynı,

init = 'he_normal', input_shape = (96, 96, 1),

dim_ordering = tf))

model.add (Etkinleştirme ("relu"))

model.add (MaxPooling2D (pool_size = (2, 2), strides = (2, 2),

border_mode = geçerli))

model.add (Convolution2D (36, 5, 5))

model.add (Etkinleştirme ("relu"))

model.add (MaxPooling2D (pool_size = (2, 2), strides = (2, 2),

border_mode = geçerli))

model.add (Convolution2D (48, 5, 5))

model.add (Etkinleştirme ("relu"))

model.add (MaxPooling2D (pool_size = (2, 2), strides = (2, 2),

border_mode = geçerli))

model.add (Convolution2D (64; 3; 3))

model.add (Etkinleştirme ("relu"))

model.add (MaxPooling2D (pool_size = (2, 2), strides = (2, 2),

border_mode = geçerli))

model.add (Convolution2D (64, 3, 3)) model.add (Etkinleştirme ("relu"))

model.add (GlobalAveragePooling2D);

model.add (Yoğun (500, aktivasyon = "relu"))

model.add (Yoğun (90, aktivasyon = "relu"))

model.add (Yoğun (30))

Kayıp fonksiyonu ve doğruluk indeksi olarak kök ortalama kare yayılımı (rmsprop) optimizasyonunu ve ortalama kare hatasını (MSE) seçmek isteyebilirsiniz. Giriş görüntüsünde yalnızca toplu normalleştirme ve genel ortalama yoklama ve HE normal ağırlık başlatmayı kullanmanız gerekir ve 30 eğitim döngüsü içinde% 80 -% 90 doğrulama doğruluğu elde edebilirsiniz.

model.compile (optimizer = rmsprop, loss = mse, metrics =

)

checkpointer = ModelCheckpoint (filepath = 'face_model.h5', verbose = 1, save_best_only = True)

epochs = 30

hist = model.fit (X_train, y_train, validation_split = 0.2,

shuffle = True, epochs = epochs, batch_size = 20, callbacks =

, ayrıntılı = 1)

Önemli noktaların konumunu tahmin etmek için aşağıdaki komutları uygulamanız yeterlidir:

özellikler = model.predict (bölge, batch_size = 1)

Tamam! Artık yüzdeki kilit noktaları nasıl tespit edeceğinizi öğrendiniz!

Bir hatırlatma olarak, tahmin sonucunuz aşağıdaki resimde gösterilebilen 15 çift (x, y) koordinat değeridir:

Yukarıdaki işlemler ihtiyaçlarınızı karşılamıyorsa aşağıdaki adımları da gerçekleştirebilirsiniz:

  • Doğruluğu korurken ve çıkarım hızını artırırken evrişimli katmanların ve filtrelerin sayısını nasıl azaltacağınızı deneyin;

  • Evrişim kısmını değiştirmek için transfer öğrenmeyi kullanın (Xception benim favorimdir)

  • Daha ayrıntılı bir veritabanı kullanın

  • Sağlamlığı artırmak için bazı gelişmiş görüntü iyileştirmeleri yapın

Yine de çok basit bulabilirsin, bu yüzden bazı 3B işleme yapmayı öğrenmeni tavsiye ederim. Facebook ve NVIDIA'nın yüz tanıma ve izlemeyi nasıl gerçekleştirdiğine bakabilirsiniz.

Ek olarak, öğrendiklerinizi yeni şeyler yapmak için kullanabilirsiniz (her zaman yapmak isteyebilirsiniz ama nasıl başaracağınızı bilmiyor olabilirsiniz):

  • Görüntülü sohbet sırasında yüzünüze güneş gözlüğü, komik şapkalar ve sakallar gibi komik resimler koyun;

  • Sizin ve arkadaşlarınızın yüzleri, hayvanlar ve nesneler vb. Dahil olmak üzere yüzleri değiş tokuş etmek;

  • Ürünleri gerçek zamanlı selfie videolarında test etmek için yeni saç stilleri, mücevherler ve makyajlar kullanın;

  • Çalışanlarınızın alkol nedeniyle bazı görevleri yerine getiremediğini kontrol edin;

  • İnsanların geribildirim ifadelerinden güncel popüler ifadeleri çıkarın;

  • Gerçek zamanlı yüz-karikatürize dönüşüm gerçekleştirmek için yüzleşme ağlarını (GAN'lar) kullanın ve gerçek zamanlı yüzleri ve çizgi film animasyon ifadelerini senkronize etmek için ağı kullanın.

Pekala ~ Artık kendi görüntülü sohbet filtrenizi nasıl oluşturacağınızı öğrendiniz, devam edin ve ilginç bir filtre oluşturun!

Lei Feng.com'un AI Technology Review tarafından derlenen Data Science @ Medium aracılığıyla.

Eylül 2018'de Avrupa ve Amerika Birleşik Devletleri'ndeki PS + üyeleri için ücretsiz oyunlar
önceki
Lüks kompakt SUV rakiplerini doğrudan BMW X1'de konumlandıran Volvo XC40 casus fotoğrafları ortaya çıktı
Sonraki
OPPO Açık İnovasyon Konferansı posteri iki yıl sonra resmi olarak MWC aşamasına geri dönüyor
Microsoft, yeni beyaz Xbox One X konsolunu ve elit denetleyiciyi duyurdu
Sadece 100.000'inin bir ortak girişim satın alması gerekiyor, bu modeller görülmeli
Çin güvenlik araştırma ekibinin Tesla'nın teşekkürlerini nasıl aldığını düşünüyorsunuz?
Sol-sağ kompozit iletim hattına dayalı çift frekanslı eşit olmayan bölme güç bölücü
BYD'nin bulut raylı ticari operasyon hattı Yinchuan'da trafiğe açıldı ve "iki ilk" belirlendi
Feng Xiaogang'ın "Fanghua" anahtarı ertelendi, fenomen düzeyinde her yıl düzenlenen film, Bahar Şenliği'ne kadar devam ediyor.
"Yakıt tasarrufu" ile ilgili olarak, çevremizde hangi sağduyu hataları var?
UML ve SystemC'ye dayalı GPU geometri ardışık düzeni pikselleştirme donanım modellemesi
Önden Apple Watch: Fitbitin ilk gerçek akıllı saati | IFA 2017
Asya Oyunları "League of Legends" sergisi maçında Çin takımı, Güney Kore'yi 3: 1 yenerek şampiyonluğu kazandı!
NVIDIA 2019 mali raporunu yayınladı, oyun endüstrisi geliri rekor kırdı
To Top