Een goedkope module en MicroPython gebruiken om snel op AI gebaseerde visie- en gehoorapparatuur te bouwen
Bijgedragen door De Noord-Amerikaanse redacteurs van DigiKey
2019-08-01
Om tegemoet te komen aan de groeiende behoefte aan slimme 'connected' producten, maken ontwikkelaars steeds meer gebruik van op kunstmatige intelligentie (AI) gebaseerde methoden, zoals machine-learning (ML). Ontwikkelaars zien zich echter vaak voor een moeilijke keuze gesteld voor wat betreft de hardware. Ze kunnen hun ontwerpen baseren op general-purpose processors, die kosteneffectief zijn maar niet krachtig genoeg zijn voor complexe algoritmen, of ze kunnen gespecialiseerde oplossingen gebruiken die hoge prestaties leveren maar de ontwerpkosten en -complexiteit verhogen.
Maar deze processors zijn tegenwoordig niet meer de enige opties. Dit artikel beschrijft een eenvoudiger, kosteneffectief alternatief van Seeed Technology dat ontwikkelaars in staat stelt om krachtige, op Ai gebaseerde oplossingen te implementeren met behulp van de vertrouwde MicroPython-programmeertaal.
Benaderingen van machine-learning
Het succes van ML-algoritmes heeft de aandacht getrokken van ontwikkelaars die op zoek zijn naar meer doeltreffende benaderingen voor objectdetectie en spraakherkenning voor een breed scala aan toepassingen. Een soort van deze algoritmes, de convolutionele neurale netwerken (CNN's), hebben aangetoond het soort uiterst nauwkeurige herkenning te bieden dat vereist is voor machine-vision- en gehoortoepassingen. Het resultaat is dat CNN's en gelijksoortige diepe neurale netwerken (DNN's) in toenemende mate worden toegepast in ontwerpen voor elektronische apparaten voor persoonlijk gebruik, wearables en Internet of Things (IoT).
Voor toepassingen met bescheiden vereisten ten aanzien van CNN-inferentie kunnen ontwikkelaars succesvolle oplossingen implementeren met behulp van softwarebibliotheken van neurale netwerken, die worden uitgevoerd op general-purpose processors met SIMD-architectuur (SIMD staat voor een instructie, meerdere data) en DSP-extensies (DSP staat voor digitale signaalverwerking) (zie “Een machine-learning toepassing bouwen met een Raspberry Pi”).
Voor meer veeleisende toepassingen kunnen ontwikkelaars krachtigere, op CNN gebaseerde ontwerpen bouwen met behulp van field-programmable gate arrays (FPGA's) die krachtige DSP-blokken insluiten die ML-algoritmes kunnen versnellen (zie “FPGA's gebruiken om krachtige ingebedde vision-toepassingen te bouwen met machine-learning”).
Op processors gebaseerde ML-ontwerpen zijn gewoonlijk eenvoudiger te implementeren dan de op FPGA gebaseerde ML-ontwerpen, maar de wiskundige complexiteit van CNN-modellen vertraagt de inferentie van op processors gebaseerde oplossingen. Op FPGA gebaseerde oplossingen kunnen hardware-implementatie van belangrijke verwerkingsstappen gebruiken om de inferentie-prestaties te versnellen, maar ontwikkelingsvereisten kunnen het moeilijk maken om geoptimaliseerde oplossingen snel te implementeren.
Met de Sipeed MAIX-I 114991684 module van Seeed Technology beschikken ontwikkelaars nu over een alternatieve oplossing die het mogelijk maakt om de implementatie van krachtige CNN-inferentiesystemen in slimme producten en edge-computing apparaten te versnellen.
Krachtige CNN verwerkingsmodule
De MAIX-1 module combineert een krachtige dual-core processor, een Espressif Systems ESP8285 Wi-Fi-microcontroller, een Winbond W25Q128FW 128-megabits (Mbit) serieel flashgeheugen, een spanningsregelaar en een IPEX-antenneconnector. Een draadloze versie, de Sipeed MAIX-I 114991695 module, wordt zonder de ESP8285-microcontroller geleverd. De dual-core processor, ontworpen om uiteenlopende toepassingswerkbelastingen te versnellen, bevat een paar van 64-bits RISC-V processors met zogenaamde floating-point units (FPU's) en accelerators voor CNN-modellen, audio-processing, cryptografie en FFT (fast Fourier transform)-berekening (Afbeelding 1).
Afbeelding 1: de MAIX-I module van Seeed Technology combineert een draadloze microcontroller, flashgeheugen, een DC-spanningsregelaar en een IPEX-antenneconnector met een krachtige dual-core processor en accelerators voor CNN (convolutioneel neuraal netwerk)-verwerking en andere functies. (Bron afbeelding: Seeed Technology)
Samen met 8 megabytes (Mbytes) aan statisch random access memory (SRAM) en 128 kilobits (Kbits) eenmalig programmeerbaar (one-time programmable, OTP) geheugen, integreert de dual-core processor een uitgebreide set van interfaces waaronder een poort voor een LCD en een digitale videopoort (DVP) voor een videocamera. Ontwikkelaars kunnen de field-programmable IO array (FPIOA) multiplexer gebruiken om 255 interne functies toe te wijzen aan de 48 beschikbare GPIO (general-purpose IO)-poorten.
De accelerators van de processor en geïntegreerde functionaliteit ondersteunen een scala aan vereisten voor typische ontwerpen van slimme producten. De audio processor unit (APU) ondersteunt bijvoorbeeld maximaal acht microfoons en heeft zijn eigen specifieke 512-punts FFT accelerator. Door alleen deze APU-functies te gebruiken, kunnen ontwikkelaars microfoonarrays efficiënt gebruiken om op richting gebaseerd oppikken van audio-beamforming te implementeren, iets wat wordt gebruikt in spraakinterfaces voor slimme producten. Voor spraakinterfacefuncties zoals de sleutelzin-wekfunctie, kunnen ontwikkelaars vooraf verwerkte audio-uitvoer van de APU gebruiken om de geïntegreerde CNN-accelerator van de processor aan te sturen.
CNN-accelerator
Van al zijn functies berust het meest opvallende kenmerk van de Sipeed MAIX-I-module in de CNN-accelerator, die is geïntegreerd in de dual-core processor van de module. De neurale netwerkprocessor, ontworpen om de verwerking van de afzonderlijke onderliggende kernelfuncties van de CNN's te versnellen, hier aangeduid als “KPU” (kernel processing unit), biedt hardware-implementaties van convolutie-, batchnormalisatie-, activerings- en pooling-kernelfuncties die de afzonderlijke lagen van CNN-modellen omvatten (zie, “Aan de slag met machine-learning met behulp van kant-en-klare hardware en software”).
Met deze functies kunnen ontwikkelaars energiezuinige ontwerpen implementeren die CNN's gebruiken om spraakactiveringszinnen in audio-interfaces te herkennen of objecten te detecteren en classificeren in visie-gebaseerde toepassingen. De KPU kan in feite het geïntegreerde SRAM van de processor gebruiken om real-time inferentie uit te voeren met behulp van fixed-point CNN-inferentiemodellen tot 5,9 Mbytes, of vooraf gekwantiseerde floating-point modellen tot 11,8 Mbytes. In machine-vision-toepassingen, voert de KPU bijvoorbeeld inferentie uit op een snelheid van meer dan 30 frames per seconde, met het soort relatief kleine beeldframes dat in slimme producten wordt gebruikt voor gezichtsherkenning of detectie van voorwerpen. Voor niet-real-time toepassingen kunnen ontwikkelaars extern flashgeheugen gebruiken om modelgroottes te hanteren, waarbij de capaciteit van het flashgeheugen de enige beperking vormt.
Intern voert de KPU inferentiemodellen uit door een first-in, first-out (FIFO) buffer te gebruiken voor sequentiële verwerking van elk van de lagen van een typisch CNN-model (Afbeelding 2, boven). Voor elke laag leest de KPU modelparameters en data af uit het SRAM op de chip of externe flashgeheugen en voert de kernelfunctie van die laag uit met behulp van de gekoppelde versnelde kernelfunctie (Afbeelding 2, onder). Een callback-mechanisme, ingebouwd in deze laagverwerkingspijplijn, stelt ontwikkelaars in staat om hun eigen routines uit te voeren naarmate de KPU-hardware elk van de verwerkingssequensen voltooit.
Afbeelding 2: bij het uitvoeren van inferentie omvat de volledige KPU-taak (boven) eerdere lagen, elk daarvan is betrokken bij de uitvoering van de passende kernelfuncties (onder). (Bron afbeelding: Seeed Technology)
Ontwikkelingsplatforms
De KPU abstraheert de complexiteit van de uitvoering van CNN-algoritmes achter de specifieke hardware. Seeed vereenvoudigt de complexiteit van op CNN gebaseerde ontwikkeling voor ontwikkelaars met een combinatie van hardware-producten en software-pakketten. Naast het gebruik van de MAIX-I module kunnen ontwikkelaars op MAIX-I gebaseerde ontwerpen snel evalueren en ontwikkelen met behulp van de printplaatproducten op verschillende niveaus van Seeed die een verhoging van de functionaliteit bieden.
Op het basisniveau combineert de Seeed 110991188 ontwikkelingskit een op een basisprintplaat gemonteerde MAIX-I module met een 2,4 inch LCD en een Seeed 114991881 OV2640 fish-eye camera. De Seeed 110991189-kit biedt dezelfde functies met de niet-Wi-Fi versie van de MAIX-I module.
Voor prototype-ontwikkeling biedt het Seeed 102991150 Bit-evaluatiebord een MAIX-I module op een printplaat die specifiek is ontworpen voor breadboarding. De 110991190 MAIX-I Bit kit van Seeed Technology combineert het Bit evaluatiebord, een 2,4 inch display, een OV2640 camera en een stel stiftlijsten voor het aansluiten van het Bit board op een breadboard.
Voor de ontwikkeling van meer complexe toepassingen combineert de Seeed 110991191 Sipeed MAIX Go printplaatkit de MAIX-I module met STMicroelectronics STM32F103C8 microcontroller, een camera, een I2S microfoon, een luidspreker, lithiumbatterijbeheer, een MicroSD slot en meerdere interfaceconnectors (Afbeelding 3). Door het meegeleverde 2.8 inch LCD aan te sluiten op de achterkant van de printplaat kunnen ontwikkelaars de kit daadwerkelijk gebruiken als platform voor een via AI aangestuurd digitaal videosysteem.
Afbeelding 3: de Sipeed MAIX Go printplaat, een van de series van MAIX printplaten van Seeed Technology, combineert de MAIX-I module met een STM32F103C8 microcontroller van STMicroelectronics, een camera, een display en meerdere interfaces voor het maken van een standalone beeldvormingssysteem voor objectherkenning. (Bron afbeelding: Seeed Technology)
De printplaten bieden een standalone oplossing voor de vereisten van vele slimme producten en dankzij hun ondersteuning van MicroPython zijn ze gemakkelijk te gebruiken. De combinatie van de Seeed Sipeed printplaten en MicroPython, biedt ontwikkelaars de voordelen van een eenvoudigere benadering van op AI gebaseerde slimme producten.
Snelle ontwikkeling met MicroPython
MicroPython werd gecreëerd om een geoptimaliseerde subset van de Python-programmeertaal te bieden voor microcontrollers die over beperkte resources beschikken. Met zijn directe ondersteuning voor hardware-toegang maakt MicroPython de relatieve eenvoud van op Python gebaseerde ontwikkeling beschikbaar voor de ontwikkeling van software voor embedded systemen.
In plaats van C-bibliotheken gebruiken ontwikkelaars het vertrouwde Python importmechanisme om de benodigde bibliotheken te laden. Ze importeren bijvoorbeeld simpelweg de MicroPython machinemodule om toegang te krijgen tot I2C interface, timers enzovoorts van een microcontroller. Voor ontwerpen waarbij beeldsensors worden gebruikt, kunnen ontwikkelaars een beeld vastleggen door de sensormodule te importeren en sensor.snapshot() op te roepen, wat een frame van de beeldsensor teruggeeft.
Het MaixPy project van Seeed breidt MicroPython uit met ondersteuning voor de dual-core K210 processor in het hart van de MAIX-I module en bijbehorende ontwikkelingsborden. De MaixPy MicroPython-interpreter, die wordt uitgevoerd op de K210-processor van de MAIX-I module, gebruikt MicroPython-functies en gespecialiseerde MaixPy-modules zoals de MaixPy KPU-module, die de KPU-functionaliteit van de processor inkapselt.
Ontwikkelaars kunnen MaixPy en de KPU-module gebruiken om een CNN-inferentie gemakkelijk te implementeren. De MaixHub modelbibliotheek van Seeed biedt een aantal voorgetrainde CNN-modellen om ontwikkelaars te helpen om aan de slag te gaan met de MAIX-I-module. Om deze modellen te downloaden, moeten ontwikkelaars een machine-ID verstrekken, door een ID generator-hulpprogramma op het MAIX-bord uit te voeren.
Bijvoorbeeld, door de Seeed Sipeed MAIX Go kit met aangekoppeld LCD te gebruiken kunnen ontwikkelaars een voorgetraind model voor gezichtsherkenning laten. Het uitvoeren van inferentie met het model vereist slechts een paar Python-coderegels (Lijst 1).
Copy import sensor import image import lcd import KPU as kpu lcd.init() sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.run(1) task = kpu.load(0x300000) # you need put model(face.kfpkg) in flash at address 0x300000 # task = kpu.load("/sd/face.kmodel") anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025) a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor) while(True): img = sensor.snapshot() code = kpu.run_yolo2(task, img) if code: for i in code: print(i) a = img.draw_rectangle(i.rect()) a = lcd.display(img) a = kpu.deinit(task)
Lijst 1: ontwikkelaars hebben genoeg aan een paar MicroPython-coderegels om inferentie te implementeren met behulp van een neuraal netwerkmodel op flash. (Bron code: Seeed Technology)
Het voorgetrainde model implementeert een type CNN dat Yolo-model wordt genoemd ('yolo' staat voor 'you only look once'), dat inferentie versnelt door gedurende training en inferentie een geheel beeld te gebruiken in plaats van een serie van schuivende vensters, die de basis van vroegere CNN-algoritmes vormden. Verdere optimalisaties van Yolo zijn opgenomen in het “Tiny Yolo2” model dat beschikbaar is in de MaixHub-modelbibliotheek. Het resultaat is een krachtig model dat real-time gezichtsherkenning op de MAIX Go mogelijk maakt (Afbeelding 4).
Afbeelding 4: met de Sipeeed MAIX Go-printplaat kunnen ontwikkelaars snel meer leren over real-time gezichtsherkenning met een speciaal voorgetraind CNN-inferentiemodel. (Bron afbeelding: Seeed Technology)
Natuurlijk is inferentie alleen de implementatiefase van het complexe ontwikkelingsproces van het DNN-model, en de ogenschijnlijke eenvoud van dit voorbeeld kan de uitdagingen verbergen die gepaard gaan met de implementatie van een werkelijk model.
Om een aangepast model te ontwikkelen, moeten ontwikkelaars een voldoende grote set van samples voor modeltraining verkrijgen. Voor training gebruiken ontwikkelaars een deep-learning framework zoals TensorFlow om een model te configureren en training te doen met behulp van de traininggegevens.
Alhoewel deze stappen er op het eerste gezicht ingewikkeld uit kunnen zien, maakt het MAIX-I-ecosysteem de implementatie van inferenties relatief eenvoudig.
Seeed biedt omzetters die ontwikkelaars in staat stellen om in TensorFlow, Keras of Darknet ontwikkelde modellen om te zetten naar het speciale kmodel-formaat van KPU. Net als bij de voorgetrainde modellen die worden gedownload van de MaixHub-modelbibliotheek, kunnen ontwikkelaars hun aangepaste modellen naar de MAIX-I module laden en de prestaties ervan beoordelen met MicroPython zoals hierboven beschreven.
Seeed levert ook softwareontwikkelingskits (SDK's) voor het creëren van aangepaste softwaretoepassingen in de C-programmeertaal. Afzonderlijke SDK's ondersteunen standalone C-toepassingen of C-toepassingen die op het RTOS real-time besturingssysteem zijn gebouwd.
Conclusie
De snelle inburgering van op beeld en spraak gebaseerde interfaces voor slimme producten stimuleert de interesse in het gebruik van machine learning-algoritmes in ontwerpen met beperkte resources die aan de basis van deze producten liggen. In het verleden hebben ontwikkelaars slechts weinig doeltreffende mogelijkheden gevonden voor oplossingen die eenvoudig te implementeren zijn en krachtig genoeg om real-time machine-learning functionaliteit te bieden.
Zoals getoond kunnen ontwikkelaars met behulp van de MAIX-I-module en bijbehorende printplaten van Seeed Technology snel inferentiemodellen implementeren op een hardwareplatform dat in staat is real-time spraakherkenning of objectdetectie te leveren op basis van audio- of videostreaminggegevens.
Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.




