Köpek yüz tanıma ios Uygulamasını sıfırdan yapmak için derin öğrenmeyi kullandım.

Lei Feng Net Not: Bu makale, Lei Feng'in altyazı grubu tarafından derlenen teknik bir blogdur.Orijinal başlık, Octavian Costache tarafından yazılan, derin öğrenen bir Köpek Yüzü Tanıma iOS uygulaması oluştururken öğrendiklerimdir.

Tercüme | Wang Ning Wang Fei Liu Zesheng Bitirme | Fan Jiang

Köpek yüz tanıma için derin öğrenme ios uygulaması yaptım ve bu deneyimleri sizlerle paylaşmak istiyorum.

Bir başlangıç şirketinde yazılım mühendisiyim. Bir süre Google'da çalışıyordum, Google Finans çizelgeleri ve Çoklu gelen kutuları yapıyor ve Google Haritalar işlerinden sorumluydum. Geçenlerde Spring adında bir alışveriş şirketi açtım. Aynı zamanda bir girişimciyim ve boş zamanlarımda bazı yan işler yapmayı seviyorum.

Birkaç ay önce köpek fotoğraf uygulaması için bir yüz filtresi yapmaya başladım. Uygulamayı köpeğinize yönelttiğinizde, uygulama filtreyi köpeğin yüzüne uygulayacaktır. Dogsofinstagram olarak etiketlenen 92 milyon fotoğrafla bazı kullanıcıların aralarında olmadığını fark edebilirsiniz insanların istediklerini yaratmak ek bir motivasyondur:

İhtiyacım var

  • Köpeklerin yüz hatlarını çıkarmak için derin bir öğrenme modeli oluşturun.

  • İPhone'da canlı videonun üstüne çalıştırın

  • 3D filtreleri görüntülemek için ARKit'i kullanın (iki boyutlu gösterim o kadar da havalı değil)

Derin öğrenmeyle ilgili cehaletten iyi bir uygulama yapmaya kadar. Her adımda öğrendiğim deneyimi paylaşmak istiyorum.

Umarım derin öğrenmede yeni olanlar bu yöntemleri faydalı bulacaktır.

1. Adım: Derin öğrenme çoğunlukla hazırdır

Cevaplamam gereken ilk soru "Bu mümkün mü?" Sorunumun üstesinden gelmek kolay mı? Nereden başlamalıyım?

Bazı basit aramalar bana TensorFlow nesne algılama eğitimlerini, araştırma belgelerini veya hazır kodla bir sınırlayıcı kutu algılayıcısının nasıl oluşturulacağını öğrenmem gerektiğini söyledi.

Sorunum çözülebilir gibi görünüyor (insanların aldığı çeşitli sonuçlar ihtiyacım olan şey kapsamındadır), ancak benim kullanım durumumda kolayca kullanılabilecek hazır bir şey yok. Mevcut bir öğreticinin nasıl değiştirileceğini anlamaya çalışmak can sıkıcıdır.

Blog yazılarını okuma sürecinde, temellerden başlayarak en temel çevrimiçi kurslara geçmeye başladım. Bunun çok iyi bir karar olduğu ortaya çıktı.

Bu süreçte şunu öğrendim:

  • Andrew Ng'nin kursu, evrişimli sinir ağları üzerine bir derstir (bu, derin öğrenme üzerine bir kurs serisinin üçüncü bölümüdür), bilgisayarla görmeye uygulanan temel kavramları ve araçları öğrenmek için iyi bir yerdir. Onsuz hiçbir şey yapamam.

  • Keras, TensorFlow'da gelişmiş bir API'dir ve kullanımı en kolay derin öğrenme modelidir. TensorFlow'un kendisi yeni başlayanlar için çok düşük seviyededir ve yeni başlayanlar için kafa karıştırır. Eminim Caffe / PyTorch da harika, ama Keras gerçekten bana yardımcı oldu.

  • Conda, python ortamını yönetmek için iyi bir araçtır. Nvidia-docker da harika, ancak yalnızca GPU'yu kullanabiliyorsanız gereklidir.

Başlangıçta, en temel kavramları çevrimiçi eğitimlerden öğrenmeniz zordur. Sizin için daha uygun olan derslerden veya kitaplardan temel temel kavramları öğrenirseniz. Öğrenmenizi kolaylaştıracak.

2. Adım: Özellik noktası algılamanın nasıl uygulanacağını öğrenin

Yakın zamanda keşfettiğim temel bilgileri kullanarak, özel modelimi nasıl uygulayacağımı araştırmaya başladım.

"Nesne sınıflandırması" ve "nesne algılama" bugün zaten mevcuttur. Yapmak istediğim şey bu değil, ikincisi ... Literatürde terim "Landmark Detection". Yapmak istediklerimi özetlemek için terimleri kullanmak daha uygun.

Şimdi, yeni sorular. Ne tür bir model iyidir, ne kadar veriye ihtiyacım var? Verileri nasıl etiketlerim, verileri nasıl eğitirim? İyi bir minimum uygulanabilir geliştirme iş akışına ne dersiniz?

İlk hedef, bazı programları çalıştırmaktır. Gelecekte kaliteyi artırmak için bazı işler yapabilirim. Söylendiği gibi, koşmadan önce yürümeyi öğrenmelisiniz.

Benim deneyimim:

  • Sol gözü / sağ gözü / burnu işaretlemek için kullandığım, kendi tasarladığım araç berbat görünüyor ama çok pratik.

  • Kullanıcı arayüzünü etiketlemek için kendi verilerinizi oluşturmak çok iyi bir fikirdir. Diğer mevcut etiketler benim için işe yaramaz, sadece Windows üzerinde çalışıyorlar veya çok fazla. Daha sonra, işaretlediğim verileri değiştirmem gerektiğinde (yeni özellik noktaları eklemek gibi), bu esneklik gerçekten yararlıdır.

  • Markalama hızı önemlidir. Saatte en az 300 fotoğraf etiketleyebilirim. Yani her 12 saniyede bir görüntü işaretlenebilir. 8.000 fotoğrafı işaretlemek yalnızca 26 saat sürer. Gerçek veri miktarını etiketlemek istiyorsanız, her saniye önemlidir. Kendi markamı oluşturmanın belirli bir peşin maliyeti var, ancak aslında gelecekteki çalışmalarınızda size yardımcı oluyor.

  • Verileri manuel olarak etiketlemek, modelin içeriğini iyi anlamanızı sağlayabilir.

  • Önceden işlenmiş görüntü ilk başta bir detay gibi görünüyordu, ancak kritik olduğu ortaya çıktı, onu nasıl değiştireceğimi anlamak için birkaç gün harcadım. Yığın Taşması ile ilgili yanıtı kontrol edin - preprocess_image'i doğru yerde çağırmak, programın çalışıp çalışmadığının anahtarı mı?

  • Çok kesin olmasa da, program zaten uygulanmaktadır. Bir modelin çıktısı çirkin değil, bu da beni çok mutlu ediyor.

Bu ince kara kutu hissi - doğru yerde doğru şeyi yaptığınızda başarılı - neredeyse her adımda mevcuttur.

Genel yazılım mühendisliğinde normal olan kusurları takip etmek, sorunları belirlemek ve problemin kapsamını daraltmak, günümüzün derin öğrenme gelişiminde o kadar kolay değildir.

Benim gibi yeni başlayan biri için, bu soruyu çözmek dikkatli düşünmenin sonucu olmaktan çok rüya gibi ve tesadüfi görünüyor. Bu sektördeki birinin bunu nasıl iyi yapacağını bilip bilmediğini bilmiyorum - sanki herkes bu sorunu çözmeye çalışıyormuş gibi geliyor.

Yaklaşık üç hafta sonra bir şey yaptım: Verileri etiketleyebilir, model üzerinde eğitebilir, modeli Jupyter Notebook'ta bir fotoğrafla çalıştırabilir ve gerçek koordinatları (şüpheli konumlarla) Çıktı.

3. Adım: Modelin iOS'ta çalıştığından emin olun

Artık basit bir çalışma modelim olduğuna göre, bir sonraki adımım bir telefonda çalışıp yeterince hızlı çalıştığından emin olmak.

Keras / TensorFlow modelleri iOS'ta yerel olarak çalışamaz, ancak Apple'ın CoreML çerçevesini çalıştıran kendi sinir ağı vardır. İOS'ta .mlmodel'i çalıştırmak, eğitim kodu aracılığıyla yapılabilir. Böylesine basit bir süreçle fethedildim.

Ancak, bu basit dönüştürme adımı (.h5'ten .mlmodel'e) bile zorluklardan arındırılmış değildir.

Apple, bir .h5 modelini yarı bitmiş bir ürün olan .mlmodel modeline (coremltools adı verilir) dönüştürür. Pip kullanılarak kurulan sürüm kutunun dışında çalışamaz. Python2.5'i conda ortamındaki kaynak koddan derlemek ve yama yapmak için kullanmam gerekiyor. Hey, en azından işe yarıyor.

Modelin beklediği gibi, telefondaki giriş görüntüsünün nasıl önceden işleneceğini bulmak şaşırtıcı derecede zordur. StackOverflow hakkında sorular sordum veya blog gönderilerini aradım, ancak hiçbir şey olmadı. Sonunda, Matthijs Hollemans'a bilmediğim bir e-posta göndererek cevabımı buldum, beni şaşırtan yanıtı beni beladan kurtardı! Bu konuda bir blog yazısı bile var. O olmasaydı bu makaleyi bulamazdım.

Derin öğrenme araç zincirinin tamamının hala geliştirme aşamasında olduğu ortaya çıktı. Derin öğrenme alanında işler hızla değişiyor.

Öte yandan, küçük ve enerjik olma ve birbirlerine yardım etme duygusunu seviyorum. Benim gibi biraz kafanız karıştıysa, sormak için bir e-posta göndermekten çekinmeyin. En kötüsü, kimsenin cevap vermemesi. En iyi ihtimalle, size yardım edecek iyi bir insan var. Tıpkı Matthijs gibi. teşekkür!

Benim modelim fiziksel bir makinede saniyede 19 kare hızında çalışıyordu, bu sihirli bir çığır açan olay gibi. Bu temel ile artık kendimi kaliteyi geliştirmeye adayabiliyorum.

4. Adım: Modelin daha mükemmel çalışmasını sağlayın

Bu biraz zaman alır. Ürünümün derin öğrenme modelinin dışında iyi performans göstermesini sağlamak için ne yapmalıyım? Daha fazla veri mi? Farklı bir üst katman mı kullanıyorsunuz? Farklı bir kayıp işlevi mi kullanıyorsunuz? Katmanda farklı etkinleştirme parametreleri mi kullanıyorsunuz? Cok fazla sorun!

Adım adım en iyisi gibi görünüyor. Hangi yöntemin çalıştığını görmek için test etmeye, eğitmeye ve önceki çalıştırmayla karşılaştırmaya devam edin. Küçük miktarda veriyle başlayın ve veri kümesini yavaşça genişletin. Küçük miktarda veri, daha kısa eğitim süresi anlamına gelir. Büyük veri kümeleriyle bir kez eğitim. Bir koşu için 24 saat beklemek çok yaygındır, bu gerçekten hızlı bir yineleme değildir.

Veri genişletme, yanlış olabilecek bir koddur. Başlangıçta bu bölümü atlayabilirsiniz, çalıştırırken kodun bu bölümünü çalıştırmanıza ve ardından kodun veri genişletme bölümünü azar azar eklemenize gerek yoktur. Kodun kararlı olmasını sağlamak için. Modeliniz her zaman girdiğiniz veriler kadar iyi olmalıdır. Hazırlanma zamanı boşa gidecek ve en iyi uygulamaları öğrenmek için hazırlanmak zaman alacak. İlerlemeye devam etmeli ve aşağı inmeye devam etmelisiniz, aksi takdirde hatalarınızdan hiçbir şey öğrenemezsiniz. İlerleyin ve hatalar yapın.

Bu projeyi yapmaya çalışırken öğrendiğim şey şu:

  • Bu bariz görünüyor - TendorBoard'u kullanmak, yinelemeli geliştirmede büyük gelişme emirleri elde edebilir

  • Veri oluşturucumdan görüntü verilerinin hatalarını ayıklamak, modelimin görüntü işlemesini etkileyen hataları bulmama yardımcı olabilir. Tıpkı fotoğrafları aynaladığım zamanki gibi, sol ve sağ gözlerini değiştirmemiş olsam da.

  • Düzenli eğitim almış ve deneyimli kişilerle konuşmak bana çok zaman kazandırıyor. Rumen bir makine öğrenimi ekibi ve birkaç cömert arkadaş bunun önemli olduğunu kanıtladı (Csomin Negruseri, Matt Slotkin, Qianyi Zhou ve Ajay Chainani sayesinde). Başkalarının size hangi zorluklarla karşılaştığınızı sormasına izin vermek imkansızdır.

  • Genel olarak konuşursak, varsayılan kurallara uymamak iyi bir fikir değildir. Örneğin, balıkçılık rekabeti üzerine yayınlanan bir blogu en üst seviye olarak kullanmaya çalıştığımda - blogda activation = 'relu' kullanıldı.Üst seviyede sunulan sonuçlar çok iyi olsa da activation = 'relu' iyi değildi. Kendi L1 LOSS loss fonksiyonumu kullanmaya çalıştığımda, sunulan sonuçlar daha standart MSE kayıp kaybı fonksiyonundan çok daha kötüydü.

  • Bir veri üreteci yazmak gereklidir. Veri büyütme çok önemlidir.

  • Öğreticiyi çalıştırdığınızda, ilk modeli yüzlerce resim üzerinde öğrenin ve eğitin, bir CPU yeterlidir ve GPU kullanımı zahmetli olacaktır.

  • GPU eğitimi için, 24 saat sürse bile gerçek bir veri seti (8000 görüntü) ve bir veri oluşturucu (80.000 görüntü) kullanmak önemlidir.

  • Amazon'un GPU'su kişisel gelişim için daha pahalıdır. 24 saatlik bir yinelemede, saatte yaklaşık bir dolara mal olur ve maliyet hızla artacaktır. GPU'nuzu ücretsiz olarak kullanabilmem için SSH aracılığıyla bilgisayarınıza erişmeme izin verdiğiniz için Cosmin'e teşekkür ederim.

Tespit biraz yanlış. Tabii ki, bu sadece test etmek için kullandığım köpek kafası, Amazon'dan aldığım bir köpek maskesi. Asla hareket etmeyin, daima kameraya mutlu bir şekilde bakın!

Mükemmel olmasa da, nihai sonuç bir uygulama olarak kullanılacak kadar oldukça iyidir.

Ve tam zamanlı bir makine öğrenimi mühendisiysem, onu daha iyi hale getirmenin mümkün olduğunu hissediyorum.

Ama diğer ürünler gibi, sürecin son% 20'si zamanın% 80'ini alacak, sanırım bir sonraki versiyonda işin bu kısmına da yer vermeliyim.

Ürününüz hakkında zayıf bir utanç duygunuz varsa, özellikle yan projeler için bu görevleri tamamlamak için çok zaman harcamanız gerekebilir.

5. Adım: iOS uygulamaları, filtreleri oluşturun ve bunları entegre edin

Yeterince iyi bir model elinizde olduğunda, artık Swift, ARKit'e yerleştirilebilir ve SpriteKit'in 2D içerik için kullanılabileceği ortaya çıktı. Hala iOS ve çerçevesinden etkilendim. Perspektif içine koyabilirseniz, bugünlerde telefonunuzda yapabilecekleriniz gerçekten heyecan verici.

Uygulamanın kendisi çok basit, büyük bir kayıt düğmesi, kayan bir anahtar filtresi ve bir paylaşım düğmesi.

İşin çoğu ARKIT'i öğrenmek ve sonra sınırlarını bulmaktır. 3B modeller nasıl eklenir, bu modeller sahneler, ışıklar, animasyonlar ve geometriden nasıl eklenir ve kaldırılır

Bu süreçte öğrendiklerim:

ARKit iyidir. Evet, 3B içerik eklemek kolay ve ilgi çekicidir ve API harikadır. Sahneye belirli bir model koyduğunuzda hemen çalışır.

ARHitTestResult, resimdeki pikseller aracılığıyla size piksellerin üç boyutlu koordinatlarını döndüreceğini gösterir, bu gerçekten yararlıdır, ancak doğruluk yeterince iyi değildir. Sonuçların yüzde yetmişi doğru pozisyondaydı ve% 30'u yanlış pozisyondaydı. Bu, filtreyi yüz tanımaya uygulamamı zorlaştırdı.

Alternatif plan: iki boyutlu bir filtre oluşturun. Apple'ın iki boyutlu oyun motoru olan SpriteKit'in kullanımı çok basittir - bu motorda yerleşik bir fizik motoru vardır. Kullanması ve öğrenmesi eğlencelidir (yüzeyde olmasına rağmen).

CoreMl ile birleşen ilk nesil ARKit teknolojisi gözlerimi açtı.

Birkaç hafta içinde, derin öğrenme modelimi gerçek zamanlı kamera video akışı üzerinde çalıştırabileceğim, yüz özelliği noktalarını çıkarabileceğim, üç boyutlu içeriği görüntülemek için Arkit'i kullanabileceğim, iki boyutlu içeriği görüntülemek için SceneKit'i kullanabileceğim ve işlem yapabileceğim Doğruluk oldukça iyi.

Sadece iki yıl önce SnapChat, benzer bir teknoloji için (insan yüzleri için) bir şirketi 150 milyon dolara satın almak zorunda kaldı. Artık iOS ücretsiz olarak yüz işareti algılaması sağlıyor ve ARHitTestResult'umun sonuçlarından farklı olarak doğruluğu çok yüksek. Bu teknolojinin hızlı ticarileşmesi inanılmaz

Birkaç yıl içinde, iPhone'un arkasında bir kızılötesi nokta olduğunda, ortamınızın 3B haritalaması oldukça iyi hale gelecektir.

sonuç olarak

Derin öğrenme uygulamasıyla ilgili olarak, yapay zekanın çılgınlığı nedir, iPhone'un mevcut performansı ve ARkit, SpriteKit, Swift, bunları derinlemesine anladığımı hissediyorum.

Artık hazır bir derin öğrenme modeli bulamazsınız çünkü derin öğrenmeyle ilgili her şey henüz çok yaygın değildir, ancak gelecekte durum daha iyi olacaktır.

Gerekli bazı adımları ve bazı gerekli kısıtlamaları atlarsanız, bana bu blogdaki teknolojinin uygulanması gibi görünüyor.

Neural ağların iç detaylarına girmem, ne de TensorFlow ile ilgili herhangi bir şeye doğrudan dokunmam gerekmiyor.

Yüksek seviyeli Keras yeterince uzak. Evrişimli sinir ağlarının temelleri üzerine bir haftalık web kursu ihtiyaçlarımı karşılamak için yeterli. Elbette bu beni bir uzman yapmayacak, ancak kullanılabilir bir ürünü minimumda tutmamı sağlayacak.

Apple'ın cep telefonu işi dışında artırılmış gerçeklik teknolojisi geliştirmesi gerektiğine inanmaya başladım. Magic-Leap-Equivalent ürünlerini piyasaya sürdüklerinde, artırılmış gerçeklik oluşturmak çok kolay hale gelecektir. ARKit zaten etkileyici.

Bu alıştırmadan sonra, özellikle sihir gibi hissettiren bilgisayarla görmede derin öğrenme konusunda daha derin bir anlayışa sahibim.

Bir fotoğraf kadar basit bir şeyden çıkarılabilecek yapılandırılmış veri türü inanılmaz olacaktır. Hangi köpek oyuncaklarını satın alıyorsunuz, ne kadar köpek maması kalıyor, ne tür köpek maması seviyorsunuz ve köpeğinizi ne zaman veterinere götürüyorsunuz? Fotoğraflarınız kadar basit şeylerden evcil hayvanınızla (veya bebeğinizle veya eşinizle) ilişkiniz hakkındaki her şeyi anlayabileceksiniz.

Okuduğunuz için teşekkürler, umarım size yardımcı olur. Herhangi bir öneriniz varsa tereddüt etmeyin, başvurumu daha iyi hale getirmeye hazırım.

Bu uygulamayı uygulama mağazasından indirin ve bana ne düşündüğünüzü bildirin. Lei Feng Ağı Lei Feng Ağı

Ek olarak, Cosmin Negruseri, Matt Slotkin, Qianyi Zhou ve Ajay Chainani'ye başvuruyu tamamlamama ve bu makaleyi gözden geçirmeme yardımcı oldukları için teşekkür ederim. Andy Bons'a bu uygulama için orijinal fikri sağladığı için teşekkürler.

Orijinal bağlantı https://medium.com/octavians-inglyts/what-ive-learned-building-a-deep-learning-dog-face-recognition-ios-app-afd1eb168ad2

Lei Feng altyazı grubu işe alıyor

Aşağıdaki QR kodunu tarayın

"Lei Feng Altyazı Grubu + Adı" yorumları bize katılın

Göze hoş gelenleri satın alın, B8 kardeşler tamam
önceki
Çıplak gözle 3D desteği: ZTE Tianji 7 MAX resmi olarak yayınlandı, fiyatı 2.999 yuan
Sonraki
"Predator" ın sevimli evcil hayvanıyla tanıştığımdan beri, artık diğer insanların köpeklerini rastgele taciz etmeye cesaret edemiyorum.
Platinum Studio'nun kendi yayınladığı ilk yeni çalışması "Platinum Man" resmi olarak duyuruldu
Mi MIX ne zaman büyük miktarlarda gelecek? Yetkili yargılayamaz
4 CVPR 2018 kabul edilen bildiri özetinin yorumu
"Xihong Şehrindeki En Zengin Adam" da Wei Xiang'ın "Üç -South and A Doms" şarkısını da üretti.
Japonya'da ilk üç arasında kimler seçmeli: Honda, Toyota ve Nissan?
"Kabi" deki kahramanın adı ileride "Kabi" olarak değiştirilecek.
Sağlam görünüm, içi sağlam: Hisense King Kong 2S sağlam cep telefonu değerlendirmesi
Ütülemenin sırrı: Değerli kılıç "Wedge Maru" nasıl yapıldı?
Gece okumasıBayan bavulu onarır ve milyon dolarlık ödülü bırakırKız yılsonu ödülü kısa mesajını aldıktan hemen sonra istifa etti
Japonya belediye başkanlığı için yarışan AI robotlarının önemi nedir?
Suç eylemi gişe rekorları kıran "Yolsuzlukla Mücadele Fırtına 3" Gizemli Grup L, yolsuzlukla mücadele model işçisi Gu Tianle'yi sıkı bir şekilde araştırıyor
To Top