Güncellendi: 28 Şubat 2024
Bu, TinyML kurs serisinin son makalesidir – önceki makalelerde, ses sahnesi sınıflandırması, anormallik tespiti, konuşma tanıma ve diğer görevler için makine öğrenimi modellerinin nasıl eğitileceğini ve dağıtılacağını tartıştık. Tüm makaleler Seeed blogunda yayınlandı ve videolar için YouTube’da Wio Terminal ile TinyML kursu oynatma listesine göz atabilirsiniz.
Wio Terminal, birden fazla yerleşik sensör ve bir kasa bulundurması nedeniyle deneyler için uygun olsa da, bazı uygulamalar için, örneğin giyilebilir cihazlar için biraz fazla hacimli olabilir. Son projede daha da küçülerek Seeed Studio XIAO kartlarını kullanacağız – yani orijinal XIAO SAMD21 (eskiden Seeeduino XIAO olarak adlandırılıyordu) ve daha yeni XIAO RP2040 kullanacağız ve yakında çıkacak olan XIAO BLE’den de kısaca bahsedeceğiz.
Daha fazla detay için, eğitimin video versiyonunu izleyin!
Özellikler açısından, XIAO SAMD21 lansman zamanında muhtemelen en küçük M0 geliştirme kartıydı ve boyutuna göre ARM® Cortex®-M0+ 48MHz mikrodenetleyici (SAMD21G18) ve 256KB Flash, 32KB SRAM ile oldukça güçlüydü.

Daha sonra RP2040 çipi geldi ve Cortex M0+ tasarımında daha iyi özellikler sundu. Her ikisi de bu proje için sahip olacağımız küçük sinir ağını çalıştırmak için oldukça yetenekli, ancak daha talepkar uygulamalarınız varsa orijinal XIAO yerine XIAO RP2040’ı seçmek mantıklı olacaktır.

Bir yazılım mühendisi olarak, eminim birçokınız gibi, koltuğumda parlayan ekranın önünde çok zaman geçiriyorum. Ve günün ilerleyen saatlerinde doğru bir pozisyonu korumak zorlaşıyor.

Keşke doğru ve yanlış pozisyonlar için vücut pozisyonunuzu öğrenebilen bir cihaz yapmanın bir yolu olsaydı ve çok fazla kambur durduğunuzda veya “Python pozisyonuna” girdiğinizde sizi uyarabilseydi… Bir dakika, var!
Makine öğrenimi modeli için veri sağlayacak en iyi sensör kesinlikle ivmeölçerdir. Tüm XIAO serisi kartlar, çok küçük olmalarına rağmen ivmeölçer sensör ile donatılmamıştır. Geliştirme ve test için bir XIAO genişletme kartı kullanabiliriz, ancak bu, XIAO kartlarının düşük ayak izi avantajını ortadan kaldırır. Kendi ürününüzü oluşturacaksanız, çip veya SoM için kendi özel PCB’nizi oluşturmak daha iyi bir seçenek olacaktır. Donanım mühendisimize, LIS3DH ivmeölçer, bir buzzer ve bir güç anahtarı ile bir batarya konektörü içeren basit bir taşıyıcı kart tasarlamasını istedim.

Daha sonra bazı PCBA örneklerini yazdırmak için Seeed studio Fusion hizmetini kullandık – bunun için https://www.seeedstudio.com/fusion_pcb.html adresine gidin ve PCB tasarımını içeren Gerber dosyalarını yükleyin ve kart için katman sayısı, temel malzeme, minimum delik boyutu gibi uygun parametreleri seçin. Basit bir 2 katmanlı kartın 10 parça için yaklaşık 4.9 USD maliyeti olduğunu görebiliriz, buna kargo ücreti dahil değildir.

Özel PCB olmadan deneyi tekrarlamak isterseniz, Grove LIS3DH ivmeölçer modülünü XIAO genişletme kartına bağlayabilir ve veri toplamaya başlayabilirsiniz. Her poz için 60 saniye boyunca, arka tarafımdaki tişörte bağlı cihazla 3 veri örneği topladım.

Her örnekte aynı pozisyonu korudum, ancak normal aktiviteyi simüle etmek için bazı kol, baş ve gövde hareketleri ekledim.

5 saniyelik bir zaman penceresi ve 1 saniyelik pencere kaydırması ile Flatten işleme bloğu seçtim, çünkü çok yavaş hareket eden verilerle ilgileniyoruz. Çok basit bir tam bağlı ağ iyi bir doğruluk sağladı. İşte Edge Impulse projesinin halka açık versiyonu için bağlantı.

Daha fazla veri toplayarak ve cihazın kıyafet üzerindeki konumlandırmasındaki bazı varyasyonlarla doğru ve yanlış duruşların tanınmasını sağlayarak bazı iyileştirmeler yapılabilir. Cihazın bireysel kullanım için tasarlandığı düşünüldüğünden, farklı insanların duruşlarına genelleme yapmasına gerek yoktur ve kolayca yeniden eğitilebilir. Eğitimden sonra duruşlarınızı ne kadar iyi tespit ettiğini Live classification sekmesinde kontrol edebilirsiniz.
Doğrulukla tatmin olduktan sonra, elde edilen modeli Arduino kütüphanesi olarak indirin ve bunu Arduino sketch’leriniz/kütüphaneleriniz klasörüne kopyalayın. 5 saniyelik bir örnek toplayacak, çıkarım yapacak ve yanlış duruşlardan biri tespit edilirse buzzer’ı açacak olan örnek kodu indirebilirsiniz.
void loop()
{
ei_printf("Sampling...\n");
// IMU'dan okuyacağımız değerler için burada bir tampon ayırın
float buffer[EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE] = { 0 };
for (size_t ix = 0; ix < EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE; ix += 3) {
// Sonraki tick'i belirleyin (ve sonra uyuyun)
uint64_t next_tick = micros() + (EI_CLASSIFIER_INTERVAL_MS * 1000);
lis.getAcceleration(&buffer[ix], &buffer[ix+1], &buffer[ix + 2]);
buffer[ix + 0] *= CONVERT_G_TO_MS2;
buffer[ix + 1] *= CONVERT_G_TO_MS2;
buffer[ix + 2] *= CONVERT_G_TO_MS2;
delayMicroseconds(next_tick - micros());
}
// Ham tamponu sınıflandırabileceğimiz bir sinyale dönüştürün
signal_t signal;
int err = numpy::signal_from_buffer(buffer, EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE, &signal);
if (err != 0) {
ei_printf("Tampondan sinyal oluşturma başarısız (%d)\n", err);
return;
}
// Sınıflandırıcıyı çalıştırın
ei_impulse_result_t result = { 0 };
err = run_classifier(&signal, &result, debug_nn);
if (err != EI_IMPULSE_OK) {
ei_printf("HATA: Sınıflandırıcıyı çalıştırma başarısız (%d)\n", err);
return;
}
// Tahminleri yazdırın
ei_printf("Tahminler ");
ei_printf("(DSP: %d ms., Sınıflandırma: %d ms., Anomali: %d ms.)",
result.timing.dsp, result.timing.classification, result.timing.anomaly);
ei_printf(": \n");
for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {
ei_printf(" %s: %.5f\n", result.classification[ix].label, result.classification[ix].value);
}
#if EI_CLASSIFIER_HAS_ANOMALY == 1
ei_printf(" anomali skoru: %.3f\n", result.anomaly);
#endif
if (result.classification[1].value > ALARM_THRESHOLD || result.classification[2].value > ALARM_THRESHOLD)
{
tone(BUZZER_PIN, 523, 250);
delay(250);
noTone(BUZZER_PIN);
delay(250);
tone(BUZZER_PIN, 523, 250);
delay(250);
noTone(BUZZER_PIN);
}
}
Verinin nispeten yavaş değiştiği ve hızlı yanıt sürelerine ihtiyacımız olmadığı için, normal sıralı çıkarım hattı bu uygulama için iyi bir şekilde uygundur.
Bir adım daha ileri gitmek, en yeni XIAO nRF52840 Sense‘i kullanmak ve cihazı kullanıcının akıllı telefonuna bağlamak olacaktır; bu, daha iyi uyarılar, istatistikler vb. sağlar.
TinyML projeniz için en iyi aracı seçin
Grove – Vision AI Modülü V2
Himax WiseEye2 HX6538 işlemcisi ile güçlendirilmiş MCU tabanlı bir görsel AI modülüdür ve rm Cortex-M55 ve Ethos-U55 içerir. Arm Helium teknolojisini entegre eder, bu da vektör veri işleme için ince bir şekilde optimize edilmiştir ve şunları sağlar:
- Ödüllü düşük güç tüketimi
- DSP ve ML yeteneklerinde önemli bir artış
- Pil ile çalışan uç nokta AI uygulamaları için tasarlanmıştır

Tensorflow ve Pytorch framework’lerini destekleyerek, kullanıcıların hem hazır hem de özel AI modellerini Seeed Studio’dan SenseCraft AI ile dağıtmasına olanak tanır. Ayrıca, modül, IIC, UART, SPI ve Type-C gibi bir dizi arayüze sahiptir ve bu da Seeed Studio XIAO, Grove, Raspberry Pi, BeagleBoard ve ESP tabanlı ürünler gibi popüler ürünlerle kolay entegrasyon sağlar.
Seeed Studio XIAO ESP32S3 Sense & Seeed Studio XIAO nRF52840 Sense
Seeed Studio XIAO Serisi, benzer bir donanım yapısına sahip minik geliştirme kartlarıdır ve boyutları gerçekten parmak boyutundadır. Buradaki kod adı “XIAO”, yarı özelliği “Tiny” ve diğer yarısı “Puissant” anlamına gelir.


Seeed Studio XIAO ESP32S3 Sense, bir OV2640 kamera sensörü, dijital mikrofon ve SD kart desteği entegre eder. Gömülü ML hesaplama gücü ve fotoğrafçılık yeteneğini birleştirerek, bu geliştirme kartı akıllı ses ve görsel AI ile başlamanız için harika bir araç olabilir.
Seeed Studio XIAO nRF52840 Sense, Bluetooth 5.0 kablosuz yeteneği taşır ve düşük güç tüketimi ile çalışabilir. Yerleşik IMU ve PDM ile, gömülü Makine Öğrenimi projeleri için en iyi aracınız olabilir.
Daha fazla bilgi için XIAO ailesi‘ne göz atın!
SenseCraft AI
SenseCraft AI kolay AI modeli eğitimi ve dağıtımı için no-code/low-code ile bir platformdur. Seeed ürünlerini yerel olarak destekler, eğitilen modellerin Seeed ürünlerine tam uyumunu sağlar. Ayrıca, bu platform aracılığıyla modellerin dağıtılması, tanımlama sonuçlarının web sitesinde anında görselleştirilmesini sağlar ve model performansının hızlı bir şekilde değerlendirilmesine olanak tanır.

TinyML uygulamaları için ideal olan bu platform, cihazı bağlayarak, bir model seçerek ve tanımlama sonuçlarını görüntüleyerek hazır veya özel AI modellerini zahmetsizce dağıtmanıza olanak tanır.
Umarım TinyML kursu video serimden keyif almışsınızdır ve mikrodenetleyicilerde Makine Öğrenimi hakkında çok şey öğrenmişsinizdir. En küçük cihazlarda Makine Öğrenimi ile oynamak, SBC’lerde ve sunucularda çok daha büyük ML modellerini çalıştırdıktan sonra benim için gerçekten göz açıcı bir deneyim oldu. Bu konuda öğrenmeye devam etmek isterseniz, Coursera ve Edge impulse tarafından sunulan ücretsiz kurslara ve ayrıca Codecraft‘a, TinyML uygulamaları oluşturmanıza ve bunları Wio Terminal’e dağıtmanıza olanak tanıyan grafiksel bir programlama ortamına göz atın.
