Använd en lågkostnadsmodul och MicroPython för att snabbt bygga AI-baserade syn- och hörselenheter
Bidraget med av DigiKeys nordamerikanska redaktörer
2019-08-01
För att uppfylla det växande behovet av smarta anslutna produkter vänder sig utvecklarna i allt högre grad till metoder inom artificiell intelligens (AI) som maskininlärning (ML). Dock står utvecklarna oftast inför ett svårt maskinvaruval. De kan basera sina konstruktioner på universalprocessorer som är kostnadseffektiva, men saknar tillräcklig prestanda för komplexa algoritmer eller så kan de använda specialiserade lösningar som ger hög prestanda, men ökar designens kostnad och komplexitet.
Detta är inte längre de enda alternativen. Den här artikeln beskriver ett enklare, mer kostnadseffektivt alternativ från Seeed Technology som låter användarna distribuerade högpresterande AI-baserade lösningar med det bekanta MicroPython-programmeringsspråket.
Maskininlärningsmetoder
ML-algoritmernas framgång har fått uppmärksamhet från utvecklare som letar efter effektivare metoder för objektavkänning och taligenkänning i ett stort urval tillämpningar. Bland dessa algoritmer har länkade neurala nätverk (CNN) demonstrerat den typ av mycket exakt identifiering som krävs i maskinbaserade syn- och hörseltillämpningar. Det innebär att CNN-nätverk och liknande djupa neurala nätverk (DNN) har hittat växande tillämpningar i personelektronik, bärbara enheter och konstruktioner för sakernas internet (IoT).
För tillämpningar med måttliga CNN slutledningskrav kan utvecklarna implementera lyckade lösningar med neurala nätverksprogrambibliotek som körs på universella processorer med SIMD-arkitekturer (single instruction, multiple data) och digitala signalbehandlingstillägg (DSP) (se "Bygga en maskininlärningstillämpning med en Raspberry Pi").
För mer krävande krav kan utvecklarna bygga mer kraftfulla CNN-baserade konstruktioner med fältprogrammerbara gatematriser (FPGA:er) som innefattar högpresterande DSP-block som kan accelerera ML-algoritmer (se "Använda FPGA:er för att bygga högpresterande visionstillämpningar med maskininlärning)".
Processorbaserade ML-konstruktioner är normalt enklare att implementera än FPGA-baserade ML-konstruktioner, men den matematiska komplexiteten hos CNN-modellerna saktar ner slutledningen hos processorbaserade lösningar. FPGA-baserade lösningar kan använda maskinvaruimplementering av viktiga bearbetningssteg för att påskynda slutledningsprestandan, men utvecklingskraven kan göra det svårt att implementera optimerade lösningar snabbt.
Genom tillgängligheten till Seeed Technology Sipeed MAIX-I 114991684-modulen har utvecklarna en alternativ lösning som kan påskynda distribueringen av högpresterande CNN-slutledningslösningar i smarta produkter och edge computing-enheter.
Högpresterande CNN-behandlingsmodul
MAIX-1-modulen kombinerar en högpresterande dubbelkärnig processor, en Espressif Systems ESP8285 Wi-Fi-mikrostyrenhet, ett Winbond W25Q128FW 128 megabit (Mbit) serie-flashminne, en spänningsregulator och en IPEX-antennanslutning. En trådlös version, Sipeed MAIX-I 114991695-modulen, levereras utan mikrostyrenheten ESP8285. Den dubbelkärniga processorn är utformad för att accelerera ett stort urval av tillämpningsarbetslaster och innehåller ett par 64-bitars RISC-V-processorer med flytpunktsenheter (FPUs) och acceleratorer för CNN-modeller, ljudbehandling, kryptografi och beräkning med fast Fourier-transformation (FFT) (figur 1).
Figur 1: Seeed Technology MAIX-I-modulen kombinerar en trådlös mikrostyrenhet, flashminne, en DC-spänningsregulator och en IPEX-antennkontakt med en högpresterande dubbelkärnig processor och acceleratorer för bearbetning med länkade neurala nätverk (CNN) och andra funktioner. (Bildkälla: Seeed Technology)
Tillsammans med 8 megabyte (Mbyte) SRAM-minne (static random access memory) och 128 kilobit (kbit) OTP-minne (one-time programmable) har den dubbelkärniga processorn en omfattande uppsättning av gränssnitt inklusive en LCD-port och en digital videoport (DVP) för en videokamera. Utvecklarna kan använda processorns fältprogrammerbara IO-matrismultiplexerare (FPIOA) för att mappa 255 interna funktioner till de tillgängliga 48 universella IO-portar (GPIO).
Processorns acceleratorer och integrerade funktion stöder ett urval krav för typiska smarta produktkonstruktioner. Till exempel stöder ljudprocessorenheten (APU) upp till åtta mikrofoner och innefattar en egen 512-punkters FFT-accelerator. Genom att använda dessa APU-funktioner separat kan utvecklarna effektivt använda mikrofonmatriser för att implementera riktningsidentifiering genom ljudstrålformning som används i talgränssnitt för smarta produkter. För talgränssnittsfunktioner som nyckelfrasaktivering kan utvecklarna använda förbehandlade ljudutsignaler från APU för att driva processorns integrerade CNN-accelerator.
CNN-accelerator
Trots alla dessa funktioner är den mest utmärkande funktionen hos Sipeed MAIX-I-modulen CNN-accelerator som ingår i modulens dubbelkärniga processor. Den neurala nätverksprocessorn, kallas här för KPU (kernel processing unit), är utformad för att påskynda behandlingen av de enskilda kärnfunktionerna under CNN och tillhandahåller maskinvaruimplementeringar av länkning, batchnormalisering, aktivering och poolningskärnfunktioner som utgör de enskilda lagren i CNN-modeller (se Kom igång med maskininlärning med allmänt tillgänglig maskinvara och programvara).
Med dessa funktioner kan utvecklarna implementera lågeffektkonstruktioner som använder CNN för att identifiera talaktiveringsfraser i ljudgränssnitt eller identifiera och klassificera objekt i synbaserade tillämpningar. I själva verket kan KPU använda processorns integrerade SRAM för att utföra realtidsslutledningar med CNN-slutledningsmodeller med fast punkt så stora som 5,9 Mbyte eller förkvantifierade flytpunktsmodeller upp till 11,8 Mbyte. I maskinsyntillämpningar till exempel utföra KPU slutledningar snabbare än 30 bildrutor per sekund med den typ av relativt små bildrutor som används för ansikts- eller objektigenkänning i smarta produkter. För tillämpningar som inte är i realtid kan utvecklarna använda externt flashminne för att hantera modellstorlekar, vilket endast begränsas av flashminnets kapacitet.
Internt kör KPU slutledningsmodeller med en FIFO-buffert (first-in, first-out) för att behandla varje lager i en typisk CNN-modell (figur 2, ovan) i ordningsföljd. För varje lager läser KPU av modellparametrar och data från sitt on-chip SRAM eller externa flashminne och kör lagrets kärnfunktion med den förknippade accelererade kärnfunktionen (figur 2, nedan). I denna lagerbehandlings-pipeline finns en motanropsmekanism som gör det möjligt för utvecklarna att köra sina egna rutiner i takt med att KPU-maskinvaran slutför varje bearbetningssekvens.
Figur 2: När slutlednings utförs består den fullständiga KPU-uppgiften (ovan) av flera lager där varje lager innefattar körning av aktuella kärnfunktionerna (nedan). (Bildkälla: Seeed Technology)
Utvecklingsplattformar
KPU abstraherar komplexiteten i CNN-algoritmkörningen bakom dess dedikerade maskinvara. För utvecklare underlättar Seeed komplexiteten i CNN-baserad utveckling med en kombination av maskinvaruutbud och programvarupaket. Tillsammans med MAIX-I-modulen kan utvecklarna snabbt utvärdera och utveckla MAIX-I-baserade konstruktioner med produkter på Seeed-kortnivå som tillhandahåller ökad funktion.
På basnivån kombinerar Seeed 110991188-utvecklingssatsen en MAIX-I-modul monterad på ett baskort med en 2,4-tums-LCD och en Seeed 114991881 OV2640 fisheye-kamera. Seeed 110991189-satsen tillhandahåller samma funktioner med icke-Wi-Fi-versionen av MAIX-I-modulen.
För prototyputveckling kan Seeed 102991150 Bit-utvecklingskortet montera en MAIX-I-modul på ett kort som är specifikt utformat för prototypkort. Seeed Technologys 110991190 MAIX-I Bit-sats kombinerar Bit-utvärderingskortet, en 2,4-tumsdisplay, en OV2640-kamera samt ett par stiftlister för att ansluta Bit-kortet till ett prototypkort.
För att utveckla mer komplexa tillämpningar kombinerar Seeed 110991191 Sipeed MAIX Go-kortsatsen MAIX-I-modulen med en STMicroelectronics STM32F103C8-mikrostyrenhet, en kamera, en I2S-mikrofon, en högtalare, litiumbatterihantering, en MicroSD-kortplats samt flera gränssnittsanslutningar (figur 3). Genom att ansluta den medföljande 2,8-tums-LCD:n på kortets baksida kan utvecklarna använda satsen effektivt som plattform för ett AI-drivet digitalt videosystem.
Figur 3: Ett av en serie Seeed Technology MAIX-kort, Sipeed MAIX Go-kortet kombinerar MAIX-I-modulen med en STMicroelectronics STM32F103C8-mikrostyrenhet, en kamera, en display samt flera gränssnitt för att tillhandahålla ett fristående bildbehandlingssystem för objektigenkänning. (Bildkälla: Seeed Technology)
Korten tillhandahåller en fristående lösning för många smarta produktkrav och deras stöd för MicroPython gör dem enkla att använda. Genom att använda kombinationen av Seeed Sipeed-korten och MicroPython kan utvecklarna utnyttja en enklare metod för att utveckla AI-baserade smarta produkter.
Snabb utveckling med MicroPython
MicroPython skapades för att tillhandahåll en optimerad underkategori av programmeringsspråket Python för mikrostyrenheter med begränsade resurser. Med dess direktstöd för maskinvaruåtkomst tar MicroPython den relativa enkelheten hos Python-baserad utveckling till programvaruutveckling för inbäddade system.
Istället för C-bibliotek använder utvecklarna den bekanta Python-importmekanismen för att läsa in nödvändiga bibliotek. Till exempel importerar utvecklarna helt enkelt MicroPython-maskinmodulen för att komma åt en mikrostyrenhets I2C-gränssnitt, timers med mera. För utvecklare som använder bildsensorer kan utvecklarna fånga en bild genom att importera sensormodulen och anropa sensor.snapshot(), vilket returnerar en ruta från bildsensorn.
Seeeds MaixPy-projekt utökar MicroPython med stöd för den dubbelkärniga K210-processorn i hjärtat av MAIX-I-modulen och förknippade utvecklingskort. MaixPy MicroPython-tolken körs på MAIX-I modulens K210-processor och använder MicroPython-funktioner och specialiserade MaixPy-moduler som MaixPy KPU-modulen som innehåller processorns KPU-funktion.
Utvecklarna kan använda MaixPy och KPU för att enkelt distribuera en CNN-slutledning. Seeed MaixHub-modellbiblioteket tillhandahåller ett antal förutbildade CNN-modeller för att hjälpa utvecklarna igång med MAIX-I-modulen. För att ladda ner dessa modeller måste utvecklarna tillhandahålla ett tillgängligt maskin-ID genom att köra en ID-generatorfunktion på MAIX-kortet.
Om utvecklarna till exempel använder Seeed Sipeed MAIX Go-satsen med ansluten LCD-skärm kan de läsa in en förinlärd modell för ansiktsigenkänning. Att utföra slutledning med modellen kräver bara några få rader Python-kod (lista 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)
Lista 1: Utvecklarna behöver bara några få rader MicroPython-kod för att implementera slutledning med en flash-lagrad neural nätverksmodell. (Kodkälla: Seeed Technology)
Den förinlärda modellen implementerar en typ av CNN som kallas Yolo (you only look once), som påskyndar slutledningen genom att använda en hel avbildning under inlärning och slutledning istället för att använda en följd av glidande fönster som i tidigare CNN-algoritmer. Ytterligare optimeringar av Yolo visas i Tiny Yolo2-modellen i MaixHub-modellbiblioteket. Resultatet är en högpresterande modell som tillåter ansiktsigenkänning i realtid på MAIX Go (figur 4).
Figur 4: Med Sipeeed MAIX Go-kortet kan utvecklare snabbt utforska ansiktsigenkänning i realtid med en särskild förinlärd CNN-slutledningsmodell. (Bildkälla: Seeed Technology)
Givetvis är slutledning endast distribueringssteget för den komplexa DNN-modellutvecklingsprocessen och den skenbara enkelheten i det här exemplet kan dölja utmaningarna i att implementera en fungerande modell.
För att utveckla en anpassad modell måste utvecklarna skaffa ett tillräckligt stort underlag av prov för modellinlärning. Vid inlärning använder utvecklarna ett djupinlärningssystem som TensorFlow för att konfigurera en modell och utföra inlärning med inlärningsdata.
Trots att dessa steg kan verka krävande gör MAIX-I-ekosystemet slutledningsdistribueringen relativt enkel.
Seeed tillhandahåller omvandlare så att utvecklarna kan omvandla modeller som utvecklats i TensorFlow, Keras eller Darknet till KPU:s särskilda kmodel-format. Som för förinlärda modeller som laddats ner från MaixHub-modellbiblioteket, kan utvecklarna överföra sina egna anpassade modeller till MAIX-I-modulen och utvärdera deras prestanda med MicroPython enligt ovan.
Seeed tillhandahåller även programvaruutvecklingssatser (SDK) för att skapa anpassade programvarutillämpningar i programmeringsspråket C. Separata SDK:er ger stöd för fristående C-tillämpningar eller C-tillämpningar som bygger på RTOS realtidsoperativsystem.
Slutsats
Det snabba antagandet av bild- och talbaserade gränssnitt för smarta produkter fortsätter att driva intresset för maskininlärningsalgoritmer i de resursbegränsade konstruktioner som dessa produkter bygger på. Tidigare fanns det få effektiva alternativ när det gällde lösningar som var enkla att implementera och kraftfulla nog att ge maskinilärningsfunktioner i realtid.
Som visas kan MAIX-I-modulen och förknippade kort från Seeed Technology hjälpa utvecklarna att snabbt distribuera slutledningsmodeller på en maskinvaruplattform som kan leverera realtidsidentifiering av tal eller objekt från strömmade ljud- eller videodata.
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.




