İçindekiler:

Sipeed MaiX Panoları ile Nesne Algılama(Kendryte K210): 6 Adım
Sipeed MaiX Panoları ile Nesne Algılama(Kendryte K210): 6 Adım

Video: Sipeed MaiX Panoları ile Nesne Algılama(Kendryte K210): 6 Adım

Video: Sipeed MaiX Panoları ile Nesne Algılama(Kendryte K210): 6 Adım
Video: DAĞITIM WIFI İZLEME KİŞİSİ 4G gözetleme kamerası 2024, Aralık
Anonim
Image
Image

Sipeed MaiX Boards ile görüntü tanıma hakkında bir önceki makalemin devamı olarak, nesne algılamaya odaklanan başka bir eğitim yazmaya karar verdim. Son zamanlarda Kendryte K210 yongasıyla ortaya çıkan, Edge Computing için Seeed AI Hat, M5 yığının M5StickV ve DFRobot'un HuskyLens'i de dahil olmak üzere bazı ilginç donanımlar ortaya çıktı (ancak bunun özel bir bellenimi ve daha yeni başlayanlar için daha fazla hedeflenmesine rağmen). Kendryte K210 ucuz fiyatı nedeniyle projelerine bilgisayarlı görü eklemek isteyenlerin ilgisini çekmiştir. Ancak Çin donanım ürünlerinde her zamanki gibi teknik destek eksik ve bu, makaleler ve videolarla geliştirmeye çalıştığım bir şey. Ancak Kendryte veya Sipeed geliştirici ekibinde olmadığımı ve ürünleriyle ilgili tüm soruları yanıtlayamayacağımı unutmayın.

Bunu akılda tutarak, başlayalım! Nesne tanıma CNN modellerinin nasıl çalıştığına dair kısa (ve basitleştirilmiş) bir genel bakışla başlayacağız.

MAYIS 2020 GÜNCELLEME: K210 panoları ile Nesne Algılama 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: Nesne Algılama Model Mimarisi Açıklaması

Nesne Algılama Model Mimarisi Açıklaması
Nesne Algılama Model Mimarisi Açıklaması
Nesne Algılama Model Mimarisi Açıklaması
Nesne Algılama Model Mimarisi Açıklaması

Görüntü tanıma (veya görüntü sınıflandırma) modelleri, tüm görüntüyü girdi olarak alır ve tanımaya çalıştığımız her sınıf için bir olasılık listesi verir. İlgilendiğimiz nesne görüntünün büyük bir bölümünü kaplıyorsa ve konumuyla pek ilgilenmiyorsak bu çok kullanışlıdır. Peki ya projemiz (örneğin yüz izleme kamerası) sadece görüntüdeki nesnenin türü hakkında değil aynı zamanda koordinatları hakkında da bilgi sahibi olmamızı gerektiriyorsa. Peki ya birden fazla nesnenin algılanmasını gerektiren proje (örneğin sayma için)?

İşte Nesne Algılama Modelleri kullanışlı olduğunda. Bu yazıda YOLO (sadece bir kez bakarsınız) mimarisini kullanacağız ve açıklamaya bu mimarinin iç mekaniğine odaklanacağız.

Resimde hangi nesnelerin bulunduğunu ve koordinatlarının ne olduğunu belirlemeye çalışıyoruz. Makine öğrenimi sihir olmadığından ve "düşünen bir makine" olmadığından, yalnızca belirli bir sorunu daha iyi çözmek için işlevi (sinir ağı) optimize etmek için istatistikleri kullanan bir algoritmadır. Daha "optimize edilebilir" hale getirmek için bu sorunu başka sözcüklerle ifade etmemiz gerekiyor. Buradaki saf bir yaklaşım, tahmini ile nesnenin doğru koordinatları arasındaki kaybı (farkı) en aza indiren algoritmaya sahip olmak olacaktır. Görüntüde yalnızca bir nesnemiz olduğu sürece bu oldukça işe yarar. Birden fazla nesne için farklı bir yaklaşım izliyoruz - ızgarayı ekliyoruz ve ağımızın her ızgaradaki nesnenin/nesnelerin varlığını (veya yokluğunu) tahmin etmesini sağlıyoruz. Kulağa harika geliyor, ancak yine de ağ için çok fazla belirsizlik bırakıyor - tahminin çıktısı nasıl alınır ve bir ızgara hücresinin içinde merkezi olan birden fazla nesne olduğunda ne yapılır? Bir kısıtlama daha eklememiz gerekiyor - sözde çapalar. Ankrajlar, bazıları (nesne boyutuna en yakın olan) nesne boyutuna yeniden boyutlandırılacak olan başlangıç boyutlarıdır (genişlik, yükseklik) - sinir ağından bazı çıktılar (son özellik haritası) kullanılarak.

İşte YOLO mimarisi sinir ağı görüntü üzerinde bir nesne algılaması gerçekleştirdiğinde neler olduğuna dair üst düzey bir görünüm. Öznitelik çıkarıcı ağ tarafından tespit edilen özelliklere göre, her bir ızgara hücresi için, ankraj ofsetini, ankraj olasılığını ve ankraj sınıfını içeren bir dizi tahmin yapılır. Sonra düşük olasılıkla tahminleri atıyoruz ve işte!

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

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

aXeleRate, penny4860, SVHN yolo-v2 haneli dedektörün harika projesine dayanmaktadır. aXeleRate, Keras'taki bu YOLO dedektör uygulamasını bir sonraki seviyeye taşıyor ve çeşitli arka uçlara sahip görüntü tanıma/nesne algılama ve görüntü segmentasyon ağlarının eğitimini ve dönüşümünü gerçekleştirmek için uygun yapılandırma sistemini kullanıyor.

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:

PASCAL-VOC Nesne Algılama 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. Projenizi diğerlerinden ayrı tutmak ve çakışmaları önlemek için gerekli tüm bağımlılıkları Anaconda ortamına yüklemenizi şiddetle tavsiye ederim.

Yükleyiciyi buradan indirin.

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

conda oluşturmak -n yolo python=3.7

Yeni ortamı etkinleştirelim

conda yolo'yu etkinleştir

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

aXeleRate'i yerel makinenize kurun.

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

Ardından, eğitim ve çıkarım için ihtiyaç duyacağınız komut dosyalarını indirmek için bunu ç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.

3. Adım: Keras ile bir Nesne Algılama Modeli Eğitin

Keras ile Nesne Algılama Modeli Eğitin
Keras ile Nesne Algılama Modeli Eğitin

Şimdi yapılandırma dosyasıyla bir eğitim komut dosyası çalıştırabiliriz. YOLO nesne dedektörünün Keras uygulaması oldukça karmaşık olduğu için, ilgili her bir kod parçasını açıklamak yerine, eğitimi nasıl yapılandıracağınızı açıklayacağım ve ayrıca, kendinizde bazı değişiklikler yapmak istemeniz durumunda ilgili modülleri açıklayacağım.

Bir oyuncak örneği ile başlayalım ve bir rakun dedektörü eğitelim. /config klasörünün içinde bir yapılandırma dosyası var, raccoon_detector.json. Mimari olarak MobileNet7_5'i (burada 7_5, orijinal Mobilenet uygulamasının alfa parametresidir, ağın genişliğini kontrol eder) ve giriş boyutu olarak 224x224'ü seçiyoruz. Yapılandırmadaki en önemli parametrelere bir göz atalım:

Tür, model ön ucudur - Sınıflandırıcı, Dedektör veya SegnetArchitecture, model arka ucudur (özellik çıkarıcı)

- Tam Yolo - Küçük Yolo - MobileNet1_0 - MobileNet7_5 - MobileNet5_0 - MobileNet2_5 - SqueezeNet - VGG16 - ResNet50

Çapalar hakkında daha fazla bilgi için lütfen burayı okuyun

Etiketler, veri kümenizde bulunan etiketlerdir. ÖNEMLİ: Lütfen veri kümesinde bulunan tüm etiketleri listeleyin.

object_scale, nesne tahmincilerinin güveninin yanlış tahminini ne kadar cezalandıracağını belirler

no_object_scale, nesne olmayan tahmin edicilerin güveninin yanlış tahminini ne kadar cezalandıracağını belirler

coord_scale, yanlış konum ve boyut tahminlerini ne kadar cezalandıracağını belirler (x, y, w, h)

class_scale, yanlış sınıf tahminini ne kadar cezalandıracağını belirler

augumentation - fazla sığmayı önlemek ve veri setinde daha fazla çeşitliliğe sahip olmak için görüntüyü büyütme, yeniden boyutlandırma, kaydırma ve bulanıklaştırma.

train_times, validation_times - veri kümesinin kaç kez tekrarlanacağı. Büyütme varsa yararlıdır

etkinleştirilmiş

first_trainable_layer - önceden eğitilmiş bir özellik ağı kullanıyorsanız belirli katmanları dondurmanıza olanak tanır

Şimdi Google Drive'ımda paylaştığım (orijinal veri seti) 150 adet açıklamalı resim içeren bir rakun tespit veri seti olan veri setini indirmemiz gerekiyor.

Yapılandırma dosyasındaki (train_image_folder, train_annot_folder) satırları uygun şekilde değiştirdiğinizden emin olun ve ardından aşağıdaki komutla eğitimi başlatın:

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

train.py,.json dosyasından yapılandırmayı okur ve modeli axelerate/networks/yolo/yolo_frontend.py komut dosyasıyla eğitir. yolo/backend/loss.py, özel kayıp işlevinin uygulandığı yerdir ve yolo/backend/network.py, modelin oluşturulduğu yerdir (girdi, özellik çıkarıcı ve algılama katmanları bir araya getirilir). axelerate/networks/common_utils/fit.py, eğitim sürecini uygulayan komut dosyasıdır ve axelerate/networks/common_utils/feature.py özellik çıkarıcıları içerir. K210 yongası ve Micropython bellenimi ile eğitimli modeli kullanmayı düşünüyorsanız, bellek sınırlamaları nedeniyle MobileNet(2_5, 5_0 ve 7_5) ve TinyYolo arasında seçim yapabilirsiniz, ancak MobileNet'in daha iyi algılama doğruluğu sağladığını gördüm.

Bir oyuncak örneği olduğu ve yalnızca 150 rakun görüntüsü içerdiği için, doğruluk yıldız olmaktan uzak olsa da, eğitim süreci GPU olmadan bile oldukça hızlı olmalıdır. İşle ilgili proje için bir trafik işareti dedektörü ve bir sayı dedektörü eğittim, her iki veri seti de birkaç binden fazla eğitim örneğini içeriyordu.

Adım 4:.kmodel Formatına Dönüştürün

.kmodel Formatına Dönüştür
.kmodel Formatına Dönüştür

aXeleRate ile model dönüştürme otomatik olarak gerçekleştirilir - bu muhtemelen eğitim komut dosyalarının eski sürümünden en büyük farktır! Ayrıca, proje klasörüne düzgün bir şekilde kaydedilen model dosyalarını ve eğitim grafiğini alırsınız. Ayrıca, doğrulama doğruluğunun bazen nesne algılama için modelin gerçek performansı hakkında tahmin vermede başarısız olduğunu buldum ve bu nedenle nesne algılama modelleri için bir doğrulama metriği olarak mAP'yi ekledim. mAP hakkında daha fazla bilgiyi buradan okuyabilirsiniz.

mAP, ortalama ortalama hassasiyet (bizim doğrulama metriğimiz) 20 dönem boyunca iyileşmiyorsa, eğitim zamanından önce duracaktır. Harita her iyileştiğinde, 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.

Şimdi son adıma, aslında modelimizi Sipeed donanımı üzerinde çalıştırıyoruz!

Adım 5: Micropython Firmware üzerinde çalıştırın

Micropython Firmware üzerinde çalıştırın
Micropython Firmware üzerinde çalıştırın

C kodu ile nesne algılama modelimiz ile çıkarım yapmak mümkündür, ancak kolaylık olması açısından bunun yerine Micropython firmware ve MaixPy IDE kullanacağız.

MaixPy IDE'yi buradan ve micropython ürün yazılımını buradan indirin. Bellenimi yakmak veya buradan ayrı bir GUI flash aracı indirmek için python komut dosyası kflash.py'yi kullanabilirsiniz.

model.kmodel'i bir SD kartın kök dizinine kopyalayın ve SD kartı Sipeed Maix Bit'e (veya başka bir K210 aygıtına) takın. Alternatif olarak.kmodel'i cihazın flash belleğine yazabilirsiniz. Örnek betiğim flash bellekten.kmodel okuyor. SD kart kullanıyorsanız, lütfen bu satırı değiştirin

görev = kpu.load(0x200000)

ile

görev = kpu.load("/sd/model.kmodel")

MaixPy IDE'yi açın ve bağlan düğmesine basın. example_scripts/k210/detector klasöründen raccoon_detector.py betiğini açın ve Başlat düğmesine basın. Etrafında sınırlayıcı kutular olan kameradan canlı bir akış görüyor olmalısınız… peki, rakunlar. Daha fazla eğitim örneği vererek modelin doğruluğunu artırabilirsiniz, ancak bunun çok küçük bir model (1,9 M) olduğunu ve küçük nesneleri (düşük çözünürlük nedeniyle) algılamakta zorlanacağını unutmayın.

Görüntü tanıma ile ilgili bir önceki makaleme yapılan yorumlarda aldığım sorulardan biri, algılama sonuçlarının UART/I2C üzerinden Sipeed geliştirme kartlarına bağlı başka bir cihaza nasıl gönderileceğidir. Github depomda, (tahmin ettiğiniz gibi) rakunları algılayan ve sınırlayıcı kutuların koordinatlarını UART üzerinden gönderen raccoon_detector_uart.py adlı başka bir örnek komut dosyası bulabileceksiniz. UART iletişimi için kullanılan pinlerin farklı kartlardan farklı olduğunu unutmayın, bu belgelerde kendiniz kontrol etmeniz gereken bir şeydir.

6. Adım: Özet

Kendryte K210, sınırlı belleğe sahip olmasına rağmen esnek, bilgisayar görüşü için sağlam bir çiptir. Şimdiye kadar, derslerimde özel nesneleri tanımak, özel nesneleri tespit etmek ve bazı OpenMV tabanlı bilgisayarlı görme görevlerini çalıştırmak için kullanmayı ele aldık. Yüz tanıma için de uygun olduğunu biliyorum ve biraz kurcalama ile poz algılama ve görüntü segmentasyonu yapmak mümkün olmalı (anlamsal segmentasyon modelini eğitmek için aXeleRate kullanabilirsiniz, ancak çıkarımı henüz K210 ile uygulamadım). Katkıda bulunabileceğiniz bazı iyileştirmeler olduğunu düşünüyorsanız, aXeleRate veri havuzu sorunlarına göz atmaktan ve bir PR yapmaktan çekinmeyin!

Bu öğreticiyi yazarken kullandığım bazı makaleler, sinir ağlarıyla nesne algılama hakkında daha fazla bilgi edinmek istiyorsanız bir göz atın:

Sınırlayıcı kutu nesne dedektörleri: YOLO'yu anlamak, Yalnızca Bir Kez Bakarsınız

YOLO'yu Anlamak (daha fazla matematik)

YOLO Nesne Yerelleştirmenin Keras ile nasıl çalıştığına dair nazik kılavuz (Bölüm 2)

YOLO, YOLOv2 ve şimdi YOLOv3 ile Gerçek Zamanlı Nesne Algılama

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.

Herhangi bir sorunuz varsa beni LinkedIn'de ekleyin ve makine öğrenimi ve robotik içeren daha ilginç projelerden haberdar olmak için YouTube kanalıma abone olun.

Önerilen: