İçindekiler:

K210 Kartları ve Arduino IDE/Micropython ile Görüntü Tanıma: 6 Adım (Resimlerle)
K210 Kartları ve Arduino IDE/Micropython ile Görüntü Tanıma: 6 Adım (Resimlerle)

Video: K210 Kartları ve Arduino IDE/Micropython ile Görüntü Tanıma: 6 Adım (Resimlerle)

Video: K210 Kartları ve Arduino IDE/Micropython ile Görüntü Tanıma: 6 Adım (Resimlerle)
Video: 25 Kızla Konuşmayan Erkekler Arduino'ya Dinazor Oyunu Oynatıyor 2024, Kasım
Anonim
Image
Image

Sipeed Maix Bit üzerinde OpenMV demolarının nasıl çalıştırılacağına dair bir makale yazdım ve ayrıca bu pano ile bir nesne algılama demosu videosu yaptım. İnsanların sorduğu birçok sorudan biri şudur: Sinir ağının eğitilmemiş bir nesneyi nasıl tanıyabilirim? Başka bir deyişle, kendi görüntü sınıflandırıcınızı nasıl oluşturacağınız ve donanım hızlandırma ile nasıl çalıştıracağınız.

Bu anlaşılabilir bir soru çünkü projeniz için muhtemelen kediler, köpekler ve uçaklar gibi bazı genel nesneleri tanımanız gerekmiyor. Belirli bir şeyi tanımak istiyorsunuz, örneğin, o otomatik evcil hayvan kapısı için bir köpek cinsi veya sıralama için bir bitki türü veya aklınıza gelebilecek diğer mevcut uygulamalar!

Anladım! Bu yazıda size Keras'ta transfer öğrenme ile kendi özel görüntü sınıflandırıcınızı nasıl oluşturacağınızı, eğitilmiş modeli.kmodel formatına nasıl dönüştüreceğinizi ve Micropython veya kullanarak Sipeed kartında (herhangi bir board, Bit/Dock veya Go olabilir) çalıştırmayı öğreteceğim. Arduino IDE'si. Ve sadece hayal gücünüz bu bilgiyle yapabileceğiniz görevlerin sınırı olacaktır.

MAYIS 2020 GÜNCELLEME: K210 panoları ile Görüntü Tanıma hakkındaki makalemin ve videomun hala çok popüler olduğunu ve YouTube ve Google'daki en iyi sonuçlar arasında olduğunu görünce, makaleyi AI için Keras tabanlı çerçeve aXeleRate hakkında bilgileri içerecek şekilde güncellemeye karar verdim. Geliştirdiğim kenar.

aXeleRate, temel olarak, görüntü tanıma/nesne algılama modellerini eğitmek için kullandığım komut dosyaları koleksiyonuna dayanmaktadır - tek bir çerçevede birleştirilmiştir ve Google Colab'da iş akışı için optimize edilmiştir. Kullanımı daha uygun ve daha güncel.

Makalenin eski versiyonu için steemit.com'da hala görebilirsiniz.

Adım 1: CNN ve Transfer Öğrenimi: Bazı Teoriler

CNN ve Transfer Öğrenimi: Bazı Teoriler
CNN ve Transfer Öğrenimi: Bazı Teoriler

Evrişimli Sinir Ağları veya CNN, en yaygın olarak görsel görüntüleri analiz etmek için uygulanan bir derin sinir ağları sınıfıdır. İnternette konuyla ilgili çok fazla literatür var ve makalenin son bölümünde bazı bağlantılar vereceğim. Kısacası, CNN'yi görüntüye uygulanan, her filtre görüntüde belirli bir özellik arayan bir dizi filtre olarak düşünebilirsiniz - alt evrişim katmanlarında özellikler genellikle çizgiler ve basit şekillerdir ve daha yüksek katmanlarda özelliklerdir. daha spesifik olabilir, örn. vücut parçaları, belirli dokular, hayvan veya bitki parçaları, vb. Belirli bir dizi özelliğin varlığı, görüntüdeki nesnenin ne olabileceğine dair bize bir ipucu verebilir. Bıyık, iki göz ve siyah bir burun mu? kedi olmalı! Yeşil yapraklar, ağaç gövdesi mi? Bir ağaç gibi görünüyor!

Umarım şimdi CNN'nin çalışma prensibi hakkında fikir edinirsiniz. Normalde derin bir sinir ağı, istediğiniz nesne türlerini tanımak için yararlı olan filtreleri "geliştirmek" için binlerce görüntüye ve saatlerce eğitim süresine (eğitim için kullandığınız donanıma bağlıdır) ihtiyaç duyar. Ama bir kısayol var.

Pek çok farklı ortak nesneyi (kediler, köpekler, ev aletleri, ulaşım vb.) tanımak için eğitilmiş bir model, zaten "geliştirilmiş" bu yararlı filtrelerin birçoğuna sahiptir, bu nedenle temel şekilleri ve parçaları tanımayı öğrenmemiz gerekmez. yine nesnelerin Bizim için önemli olan belirli nesne sınıflarını tanımak için ağın son birkaç katmanını yeniden eğitebiliriz. Buna "aktarım öğrenimi" denir. Belki de birkaç yüz nörondan oluşan ağın yalnızca son birkaç katmanını eğittiğiniz için, transfer öğrenme ile önemli ölçüde daha az eğitim verisine ve hesaplama süresine ihtiyacınız vardır.

Kulağa harika geliyor, değil mi? Nasıl uygulanacağını görelim.

2. Adım: Ortamınızı Hazırlayın

Ortamınızı Hazırlayın
Ortamınızı Hazırlayın

aXeleRate'i kullanmanın iki yolu vardır: yerel olarak Ubuntu makinesinde veya Google Colab'da çalışmak. Google Colab'da çalıştırmak için şu örneğe bir göz atın:

Görüntü sınıflandırması Colab Not Defteri

Modelinizi yerel olarak eğitmek ve donanım hızlandırma ile kullanmak üzere dışa aktarmak da artık çok daha kolay.

Çalışma ortamım Ubuntu 16.04, 64bit. Eğitim için GPU kullanmayacağımız için Ubuntu imajını çalıştırmak için Sanal makineyi kullanabilirsiniz. Bazı değişikliklerle eğitim komut dosyasını Windows'ta da çalıştırabilirsiniz, ancak model dönüştürme için Linux sistemini kullanmanız gerekecektir. Bu nedenle, bu öğreticiyi yürütmeniz için tercih edilen ortam, yerel olarak veya sanal makinede çalışan Ubuntu 16.04'tür.

Python için ortam yöneticisi olan Miniconda'yı yükleyerek başlayalım. Yalıtılmış bir ortam yaratacağız, böylece sisteminizdeki Python ortamınızdaki herhangi bir şeyi yanlışlıkla değiştirmeyeceğiz.

Yükleyiciyi buradan indirin

Kurulum tamamlandıktan sonra yeni bir ortam oluşturun:

conda oluşturmak -n ml python=3.7

Yeni ortamı etkinleştirelim

conda etkinleştirmek ml

Bash kabuğunuzdan önce, o ortamda çalıştığınızı belirten ortamın adıyla birlikte bir önek görünecektir.

Adım 3: AXeleRate'i kurun ve Testleri Çalıştırın

AXeleRate'i kurun ve Testleri Çalıştırın
AXeleRate'i kurun ve Testleri Çalıştırın

aXeleRate'i yerel makinenize kurun.

pip kurulumu git+https://github.com/AIWintermuteAI/aXeleRate

Örnekleri indirmek için şunu çalıştırın:

git klonu

aXeleRate klasöründe test_training.py ile hızlı testler çalıştırabilirsiniz. Her model tipi için eğitim ve çıkarım yapacak, eğitilmiş modelleri kaydedecek ve dönüştürecektir. Sadece 5 dönem için eğitim olduğu ve veri seti çok küçük olduğu için kullanışlı modeller elde edemezsiniz, ancak bu komut dosyası yalnızca hata olup olmadığını kontrol etmek içindir.

Adım 4: Modeli Yeniden Eğitin, Keras Modelini.kmodel'e Dönüştürün

Modeli Yeniden Eğitin, Keras Modelini.kmodel'e Dönüştürün
Modeli Yeniden Eğitin, Keras Modelini.kmodel'e Dönüştürün

Bu oyuncak örneği için modeli Noel Baba ve Arduino Uno'yu tanıması için eğiteceğiz. Elbette diğer dersleri seçebilirsiniz. Veri setini buradan indirin. config klasöründe classifier.json dosyasının bir kopyasını oluşturun, ardından ekran görüntüsündeki config dosyasına benzer şekilde uygun şekilde değiştirin - eğitim ve doğrulama klasörlerine giden yolun doğru olduğundan emin olun!

aXeleRate klasöründen aşağıdaki komutu çalıştırın:

python axelerate/train.py - c yapılandırmaları/santa_uno.json

Eğitim başlayacak. Doğrulama doğruluğu (bizim doğrulama metriğimiz) 20 dönem boyunca iyileşmiyorsa, eğitim zamanından önce duracaktır. Doğrulama doğruluğu her arttığında, model proje klasörüne kaydedilir. Eğitim bittikten sonra, aXeleRate otomatik olarak en iyi modeli belirtilen formatlara dönüştürür - şu andan itibaren "tflite", "k210" veya "edgetpu" seçebilirsiniz.

Adım 5: Modeli Sipeed Maix Bit üzerinde çalıştırın

Modeli Sipeed Maix Bit'te Çalıştırın
Modeli Sipeed Maix Bit'te Çalıştırın
Modeli Sipeed Maix Bit'te Çalıştırın
Modeli Sipeed Maix Bit'te Çalıştırın
Modeli Sipeed Maix Bit'te Çalıştırın
Modeli Sipeed Maix Bit'te Çalıştırın

Şu anda sahip olduğunuz modeli Sipeed Maix donanımında çalıştırmanın iki yolu vardır: micropython bellenimi ve Arduino IDE. Micropython donanımının kullanımı daha kolaydır, ancak kullanılabilir belleğin önemli bir bölümünü kaplar, bu nedenle model için daha az alan kalır. Arduino IDE temel olarak çok daha verimli ve daha küçük bellek ayak izine sahip olan C kodudur. Modelim sadece 1.9Mb, yani her iki seçenek de işe yarıyor. Arduino IDE kullanmayı düşünmeniz gereken daha büyük herhangi bir şey için Micropython ile 2,9 Mb kadar büyük modelleri kullanabilirsiniz.

OpenMV IDE'yi buradan ve minimum micropython üretici yazılımını buradan indirin.

Firmware'i kflash_gui aracıyla yazın. Ayrıca, ekran görüntüsünde gösterildiği gibi, eğitilmiş modeli de yanıp sönecek şekilde yakmayı seçebilirsiniz. Veya SD karta kopyalayın (bu durumda.kmodel'i bir SD kartın kök dizinine kopyalayın ve SD kartı Sipeed Maix Bit'e takın)

OpenMV IDE'yi açın ve bağlan düğmesine basın. example_scripts klasöründen santa_uno.py betiğini açın ve Başlat düğmesine basın. Kameradan canlı bir akış görüyor olmalısınız ve Seri Terminal'i açarsanız, güven puanı ile en iyi görüntü tanıma sonucunu alacaksınız!

Arduino IDE ile kullanmak için öncelikle burada belgelenmiş olan Arduino IDE'ye Sipeed panoları ekleme prosedürünü izlemeniz gerekir. Arduino IDE sürümünüzün en az 1.8.12 olması gerekmektedir. Panoları ekledikten sonra mobilenet_v1_transfer_learning.ino taslağını açın ve Sipeed Maix Bit'e yükleyin. SD karttaki modelin adını "model" olarak değiştirin (veya bu adla bir kopya oluşturun). Names.cpp içindeki etiket adlarını değiştirebilirsiniz. Sipeed Maix ekranında canlı kamera akışını en iyi görüntü tanıma sonucuyla birlikte gösterecektir.

6. Adım: Sonuçlar

İşte CNN'ler ve öğrenmeyi transfer etme konusunda okumak için daha fazla materyal:

Mobilenet ve Keras kullanarak Transfer Öğrenimi Transfer öğreniminin harika bir açıklaması olan bu öğretici, o makaledeki kodun değiştirilmiş bir sürümünü kullanır.

Kediler ve köpekler ve evrişimli sinir ağları CNN'lerin temellerini açıklar ve bazı filtreleri görselleştirir. Kedilerle!

MobileNet'i Sipeed MaixPy ve MaixDuino'da Eğitin, Dönüştürün, Çalıştırın! Sipeed ekibinden Mobilenet 1000 sınıflarının sıfırdan nasıl eğitileceğine dair bir eğitim (aktarım öğrenimi yok). Önceden eğitilmiş modellerini indirebilir ve deneyebilirsiniz!

Umarım şimdi sahip olduğunuz bilgileri, makine görüşü ile harika projeler oluşturmak için kullanabilirsiniz! Sipeed panoları buradan satın alabilirsiniz, gömülü sistemlerde ML için mevcut en ucuz seçenekler arasındadır.

Önerilen: