Ebben a számban megvitatjuk, hogyan lehet gépi tanulási modelleket helyileg futtatni Android mobileszközökön. Meg fogjuk vizsgálni:

  • Miért érdekes az eszközön történő gépi tanulás?
  • Android-alkalmazások készítése a Jetpack Compose segítségével
  • Hogyan építsünk és tanítsunk egyszerű neurális hálózatot a Tensorflow segítségével
  • A modell konvertálása Tensorflow lite formátumba, amely erőforrás-korlátozott eszközökön (mikrovezérlők, mikroprocesszorok) való futtatásra optimalizált
  • Hogyan integrálhatja a Tensorflow lite modellt Android-alkalmazásába, és jóslatokat készíthet!

Merüljünk el!

Megjegyzés: Ez a hírlevél nem tartalmaz kódrészleteket a fenti feladatokhoz. Kérjük, tekintse meg a teljes bejegyzést és a "mintakód linkjeit itt".

Miért a gépi tanulás az eszközön?

A gépi tanulási modell „helyi, eszközön” futtatásának számos előnye van. Néhány ilyen ok:

  • Adatvédelem: A modell bemeneti adatai nem hagyják el az eszközt, és jobb adatvédelmi és biztonsági primitíveket tesznek lehetővé.
  • Késés: Az előrejelzést helyileg hajtják végre, és nem igényel hálózati oda-vissza utat.
  • Hozzáférés a valós idejű szenzoradatokhoz: A modell felhasználható olyan interaktív élmények létrehozására, amelyek kihasználják a helyi szenzoradatokat, pl. gyorsulásmérő, giroszkóp, mikrofon stb.
  • Költség: A modellelosztás összköltsége csökken a fejlesztő számára, mivel nem kell előrejelzéseket kiszolgáló szervereket üzemeltetnie.
  • Hatékonyság: A modell betanítható egy nagy adatkészletre a szervereken, és az eredményül kapott modell tömöríthető (kvantálás, metszés), hogy szélső eszközökön futhasson. Vegye figyelembe, hogy egyes használati esetek és modellek nem felelnek meg ennek a kritériumnak.

Android-alkalmazás készítése

Az írás idején valószínűleg több mint egy tucat módszer létezik Android-alkalmazások létrehozására. Ez magában foglalja az olyan megközelítéseket, mint az Android Native, a React Native, a WebViews, a PWA, a Flutter és számos más többplatformos alkalmazásfejlesztő eszköz. Nem csak ez, még az Android Native alkalmazások esetében is választhat több nyelven – Java, Kotlin, C/C++ – való fejlesztést. És igen, jól olvastad, androidos alkalmazásokat fejleszthetsz C/C++ nyelven az android Native Development Kit segítségével.

Több lehetőség áttekintése után a „Jetpack Compose” mellett döntöttem a következő okok miatt:

  • A Jetpack egy natív Android-könyvtár, amely Kotlin nyelven íródott, amely egy preferált nyelv az Android fejlesztéséhez. Ez azt jelenti, hogy szükség szerint lehetővé kell tenni a felhasználói felület interakcióinak az alacsony szintű ML-kóddal való szoros összekapcsolását.
  • A Compose rugalmas, támogatja az állapotalapú felhasználói felület kialakítását és az összetett animációkat, amelyek a minőség érzetét keltik. A Compose alkalmazással készült bemutatópéldák sokaságával a könyvtár sokoldalúnak és rugalmasnak tűnik.
  • A Compose deklaratív megközelítést ígér, ahol a Composable függvények által képviselt összetevők állapotváltozók alapján jelenítik meg a felhasználói felületet. Az állapotfrissítéskor a Composable függvény ismét meghívásra kerül az új adatokkal. Olyan érzés, mint Reagálj! Nyerj az ismerkedésért!
  • A Compose-t az „Anyagtervezési ökoszisztéma” támogatja. A Material egy olyan tervezőrendszer, amelyet a Google hozott létre, hogy segítsen a csapatoknak kiváló minőségű digitális interfészek létrehozásában Android, iOS, Flutter és a web számára. Az anyagösszetevők (gombok, kártyák, kapcsolók stb.) és az olyan elrendezések, mint az Állvány, összeállítható funkciókként állnak rendelkezésre, és kiváló, teljesítményt nyújtó alapértelmezésként használhatók az alkalmazásban.

Problémameghatározás, modellépítés

A probléma, amelyet ebben a példában kezelni választottam, a „népszerű cars adatkészlet” használatával az autók gallononkénti mérföldek előrejelzésére összpontosít. A „Tüzelőanyag-hatékonyság előrejelzése” „oktatóanyag a tensorflow.org-ról” alapul. Az adatkészlet információkat tartalmaz az autókról, beleértve a lóerőt, a nyomatékot, a tömeget, a gyorsulást stb., valamint a gallononkénti mérföldeket.

Ezután a modell Tensorflow lite formátumba konvertálódik a Tensorflow lite konverter segítségével. A TensorFlow Lite modell egy speciális „hatékony hordozható” formátumban, FlatBuffers néven van ábrázolva (a .tflite fájlkiterjesztés azonosítja). Ez számos előnnyel rendelkezik a TensorFlow protokoll puffer modell formátumához képest, mint például a csökkentett méret (kis kódterület) és a gyorsabb következtetés (az adatok közvetlenül elérhetők extra elemzési/kicsomagolási lépés nélkül), ami lehetővé teszi a TensorFlow Lite hatékony végrehajtását korlátozott számítási és memóriaerőforrásokkal rendelkező eszközökön. . A Tensorflow lite modellek ezután végrehajthatók a "tensorflow lite interpreter" segítségével.

A TensorFlow Lite olyan CPU-kerneleket használ, amelyek az ARM Neon utasításkészlethez vannak optimalizálva, de támogatják a gyorsabb végrehajtást GPU-kon, TPU-kon és DSP-ken a tensorflow lite „delegates” segítségével. Az Android és az iOS is kínál küldötteket.

Android felhasználói felületek létrehozása a Jetpack Compose alkalmazásban

Az Android Studio IDE megkönnyíti a Jetpack Compose-alkalmazások létrehozásának folyamatát azáltal, hogy projektsablonokat tartalmaz (egy Compose + Material 3 sablont biztosít). A projekt létrehozása után egy MainActivity.kt fájl jön létre egy alapvető elrendezéssel. Ezt követően megkezdheti a komponensek hozzáadását a képernyőhöz és a változtatások előnézetét a tervezési előnézeti ablakban.

Összességében követtem ezt a „Jetpack Compose oktatóanyag” alapjait, hogy megismerjem az alapvető elrendezést (sorok és oszlopok), az állapotot, az állapotemelést, a tartós állapotot, a stílust és a témát. A fenti felhasználói felület az összetevők (több címke, szövegmező és egy gomb) egymásra halmozásával jön létre a Compose sor és oszlop elrendezés összetevőivel.

A Tensorflow lite modell importálása

Az exportált modell importálásához kattintson jobb gombbal a projektre az Android Studio alkalmazásban. Új -› Egyéb -› Tensorflow Lite Model. Ezzel létrehoz egy új mappát ml néven a projektben, és importálja a modellt mintakódszerkezettel az előrejelzésekhez. Az Android Studio megjeleníti a betöltött modell bemeneti/kimeneti aláírását (hasznos a modell megfelelő exportálásának ellenőrzéséhez), valamint mintakódot, hogy előrejelzéseket kapjon a tf.lite modelltől a bemeneti adatokkal együtt.

Ez a kód ezután módosítható – főként a bemeneti adatforrás bájtos pufferekké alakításának részleteivel, amelyet a tensorflow lite értelmező elvár. Lásd alább a kód képernyőképet.

Végső megjegyzések

A Tensorflow lite zökkenőmentes élményt nyújt a python-modellek betanításához és az eszközön történő telepítéshez, hogy következtetéseket lehessen levonni a szélső eszközökre (például Raspberry pi, arduino, edge TPU-k, okostelefonok stb.). Ezenkívül jól támogatott és aktívan fejlesztik.

A folyamat során a legnagyobb kihívás az eszközön rögzített beviteli funkciók (pl. hang a mikrofonból, képek a kamerából, bemenet a kezelőfelületről stb.) megfelelő átalakítása a megfelelő formátumra, amelyet a tensorflow lite interpreter elvár Androidon. Ebben az esetben a modell 9 dimenziós úszótömböt vár, tehát ez egyértelmű. A szöveges adatokkal, hang- vagy képadatokkal rendelkező modellek kissé összetettebbek lesznek (az adatok manuális konvertálása Float pufferekké).

Tekintse meg a teljes bejegyzést a "mintakód itt található linkjeiért".

Outro: Remélem, jól vagytok! Jó hangulatot küldünk!

Ennek a bejegyzésnek egy változata először a hírlevelemben jelent meg.