Arduino ve Diğer Mikroişlemciler İçin Makine Öğrenimi

Bir çok yabancı forum ve geliştiricilerin tartışma platformlarında, Arduino ve Makine Öğrenimi hakkında açılan yüzlerce başlık var. Belirli bir kesim, Arduino, makine öğrenimini idare edemeyecek kadar kaynaklarının kısıtlı olduğunu savunuyor. Başka bir kesin Multi Layer Perceptron uygulamarının kolay bir şekilde Arduino geliştirme kartlarında kullanılabileceğini savunuyor. Son olarakta, mikroişlemciler için özel olarak geliştirilmiş Tensorflow Lite‘ı kullanılabileceği hakkında görüşler var.

Öncelikle genel bir karışıklığı gidermek çok önemli bir şeyi belirtmek gerekiyor:

Yapay zeka ≠ Makine öğrenimi ≠ Sinir ağları

Bu üç kavramın aynı şey olduğunu düşünen kullanıcılar ve geliştiriciler, mikroişlemciler ile makine öğrenmesi hakkında yanlış ve hatalı fikirlere sahipler. Arduino kartlarında, daha az güçlü olanlarda bile(Örneğin ATmega128, ATtiny Serisi, ATmega8) sınıflandırma(classification) ve regresyon(regression) çalıştırabilirsiniz: sadece sinir ağlarını kullanmamanız gerekiyor.

MicroML Oluşturucu Nedir?

Donanım olarak eski kalmış, güçsüz ve kısıtlı imkanlarlar makine öğrenimi mi çalıştırıyorsunuz? İşte MicroML bu konuda imdadınıza yetişiyor.

MicroML, Makine öğrenimi algoritmalarını mikrodenetleyicilere getirmeye yönelik bir projedir. Yalnızca Yapay Sinir Ağlarına adanmış Mikrodenetleyiciler için Tensorflow’a bir alternatif olarak geliştirilmiştir: burada, 8 bitlik mikro denetleyicilerde bile makine öğrenimi yapmak için sinir ağlarına daha yalın alternatifler bulacaksınız.

Mevcut durumda, Destek Vektör Makinelerini, seçtiğiniz herhangi bir MCU’da kullanabileceğiniz optimize edilmiş C koduna dönüştürebilir: Arduino (Uno, Nano, Micro…), ESP8266, ESP32 ve gerçekten C destekli herhangi bir MCU.

Neden Destek Vektör Makineleri? Çünkü çok boyutlu özellikleri sınıflandırmada gerçekten iyiler ve RAM kısıtlı ortamlar için optimize edilmeleri oldukça kolaydır. Buradan Arduino ile Makine Öğrenimi ile Hareket Tanımlama yazımıza bakabilirsiniz.

Sınıflandırıcı(Classifier) Oluşturmak

Her şeyden önce, bir sınıflandırıcı eğitmeniz gerekir. Python’un scikit-learn kütüphanesini kullanmalısınız – ki bu, yaygın olarak benimsendiğini göz önünde bulundurarak muhtemelen zaten kullanmaktasınız. Ardından MicroML paketini yüklemeniz gerekir.

pip install micromlgen

Son olarak, optimize edilmiş C koduna, eğitilmiş sınıflandırıcı eklemiş olduk.

from micromlgen import port
from sklearn.svm import SVC
from sklearn.datasets import load_iris

if __name__ == '__main__':
    iris = load_iris()
    X = iris.data
    y = iris.target
    clf = SVC(kernel='linear', gamma=0.001).fit(X, y)
    print(port(clf))

Gamma değerini belirli bir değere ayarlamanız gerekir. Aksi halde varsayılan olarak gelen auto bir hataya sebep olacaktır.

Hazırlığımız bu kadar, Arduino projelerinizde sınıflandırma yapmak için ihtiyacınız olan her şeye sahipsiniz.

MicroML Alternatifleri

  1. sklearn-porter (diğerleri arasında) C kodu verebilir, ancak mikrodenetleyiciler için optimize edilmemiştir. Bellekteki tüm destek vektörlerini bildirmesi gerektiğinden RAM’de bir duvara toslayacaksınız (bir fikir sahibi olmak için, meme kanseri veri kümesi 57×30’luk bir çift matris üretir, yalnızca destek vektörleri için toplam 6840 bayt).
  2. emlearn mikrodenetleyiciler için optimize edilmiştir, Karar Ağacı(Decision Tree), Random Forest, Naive Gaussian Bayes, Tam Bağlantılı Sinir Ağları yapabilir. Yine de SVM yoktur.

Arduino Projesinde Kullanım

Projenizde tahminleri çalıştırmak için çağırmanız gereken iki yöntem vardır:

  1. predict(double features[]): gerçek tahmini çalıştırır ve tahmin edilen sınıfı temsil eden bir sayı döndürür
  2. classIdxToName(uint8_t classIdx): dosyalarınızdan oluşturulan sınıf haritasına dayalı olarak sınıf dizinini okunabilir bir dizeye dönüştürür
#include "model.h"

void classify() {
    Serial.print("Predicted class: ");
    Serial.println(classIdxToName(predict(features)));
}

Mikroişlemcilerde makine öğrenimini kullanıma sokmak için uygulamalı projeler hakkında bir seriye başlıyoruz, devamlılık ve yazı takibi bu konuda oldukça önemli, bir sonraki yazıları ve projeleri okumayı unutmayın.

Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.