Innehållsförteckning:

Bildigenkänning med K210 -kort och Arduino IDE/Micropython: 6 steg (med bilder)
Bildigenkänning med K210 -kort och Arduino IDE/Micropython: 6 steg (med bilder)

Video: Bildigenkänning med K210 -kort och Arduino IDE/Micropython: 6 steg (med bilder)

Video: Bildigenkänning med K210 -kort och Arduino IDE/Micropython: 6 steg (med bilder)
Video: Capture, IT-plattform för bildigenkänning och förvaltning | Trafikverket 2024, Juni
Anonim
Image
Image

Jag skrev redan en artikel om hur man kör OpenMV -demos på Sipeed Maix Bit och gjorde också en video med objektdetekteringsdemo med detta kort. En av de många frågorna människor har ställt är - hur kan jag känna igen ett objekt som det neurala nätverket inte är utbildat för? Med andra ord hur du gör din egen bildklassificering och kör den med hårdvaruacceleration.

Detta är en begriplig fråga, eftersom du för ditt projekt förmodligen inte behöver känna igen några generiska objekt, som katter och hundar och flygplan. Du vill känna igen något specifikt, till exempel en hundras för den automatiska sällskapsdörren, eller en växtart för sortering eller andra spännande applikationer du kan tänka på!

Jag fick dig! I den här artikeln kommer jag att lära dig hur du skapar din egen anpassade bildklassificerare med överföringsinlärning i Keras, konverterar den utbildade modellen till.kmodel -format och kör den på Sipeed -kort (kan vara vilket kort som helst, Bit/Dock eller Go) med Micropython eller Arduino IDE. Och bara din fantasi kommer att vara gränsen för uppgifter du kan utföra med denna kunskap.

UPPDATERING MAY 2020: När jag såg hur min artikel och video om bildigenkänning med K210-kort fortfarande är mycket populära och bland toppresultat på YouTube och Google bestämde jag mig för att uppdatera artikeln så att den innehåller information om aXeleRate, Keras-baserat ramverk för AI på Edge utvecklar jag.

aXeleRate är i huvudsak baserat på samlingen av skript jag använde för att träna modeller för bildigenkänning/objektdetektering - kombinerade till ett enda ramverk och optimerat för arbetsflöde på Google Colab. Det är mer bekvämt att använda och mer uppdaterat.

För den gamla versionen av artikeln kan du fortfarande se den på steemit.com.

Steg 1: CNN och Transfer Learning: Some Theory

CNN och Transfer Learning: Some Theory
CNN och Transfer Learning: Some Theory

Convolutional Neural Networks eller CNN är en klass av djupa neurala nätverk, som oftast används för att analysera visuella bilder. Det finns mycket litteratur på internet om ämnet och jag ger några länkar i den sista delen av artikeln. Kort sagt kan du tänka på CNN som en serie filter, applicerade på bilden, varje filter letar efter en specifik funktion i bilden - på de nedre konvolutionslagren är funktionerna vanligtvis linjer och enkla former och på de högre lagren funktioner kan vara mer specifik, t.ex. kroppsdelar, specifika strukturer, delar av djur eller växter, etc. Närvaron av vissa funktioner kan ge oss en aning om vad objektet i bilden kan vara. Morrhår, två ögon och en svart näsa? Måste vara katt! Gröna blad, en trädstam? Ser ut som ett träd!

Jag hoppas att du förstår tanken om arbetsprincipen för CNN nu. Normalt behöver ett djupt neuralt nätverk tusentals bilder och timmars utbildningstid (beror på hårdvaran du använder för träning) för att "utveckla" filter som är användbara för att känna igen vilka typer av objekt du vill ha. Men det finns en genväg.

En modell som är utbildad för att känna igen många olika vanliga föremål (katter, hundar, hushållsapparater, transporter, etc) har redan många av de användbara filtren "utvecklade", så vi behöver det inte för att lära känna igen de grundläggande formerna och delarna av föremålen igen. Vi kan bara träna om de sista lagren i nätverket för att känna igen specifika klasser av objekt, som är viktiga för oss. Detta kallas "transfer learning". Du behöver betydligt mindre träningsdata och beräkna tid med överföringsinlärning, eftersom du bara tränar de sista lagren av nätverket, som kanske består av några hundra neuroner.

Låter fantastiskt, eller hur? Låt oss se hur man implementerar det.

Steg 2: Förbered din miljö

Förbered din miljö
Förbered din miljö

To är två sätt att använda aXeleRate: kör lokalt på Ubuntu -maskin eller i Google Colab. För att köra i Google Colab, ta en titt på detta exempel:

Bildklassificering Colab Notebook

Att träna din modell lokalt och exportera den för att användas med hårdvaruacceleration är också mycket enklare nu.

Min arbetsmiljö är Ubuntu 16.04, 64bit. Du kan använda virtuell maskin för att köra Ubuntu -image eftersom vi inte kommer att använda GPU för utbildning. Med vissa ändringar kan du också köra träningsskriptet på Windows, men för modellkonvertering måste du använda Linux -system. Så, en föredragen miljö för dig att utföra den här självstudien är Ubuntu 16.04, körs inbyggt eller i virtuell maskin.

Låt oss börja med att installera Miniconda, som är miljöhanterare för Python. Vi skapar en isolerad miljö, så vi kommer inte av misstag att ändra någonting i din system -Python -miljö.

Ladda ner installationsprogrammet här

När installationen är klar skapar du en ny miljö:

conda create -n ml python = 3,7

Låt oss aktivera den nya miljön

konda aktivera ml

Ett prefix före bash -skalet visas med namnet på miljön, vilket indikerar att du arbetar nu i den miljön.

Steg 3: Installera AXeleRate och kör tester

Installera AXeleRate och kör tester
Installera AXeleRate och kör tester

Installera aXeleRate på din lokala maskin med

pip installera git+https://github.com/AIWintermuteAI/aXeleRate

För att ladda ner exempelkörningar:

git -klon

Du kan köra snabba tester med tests_training.py i aXeleRate -mappen. Det kommer att köra utbildning och slutsatser för varje modelltyp, spara och konvertera utbildade modeller. Eftersom det bara är utbildning för fem epoker och datauppsättningen är mycket liten kommer du inte att kunna få användbara modeller, men detta skript är endast avsett för att kontrollera om det inte finns några fel.

Steg 4: Återutbilda modellen, konvertera Keras-modellen till.kmodel

Träna om modellen, konvertera Keras-modellen till.kmodel
Träna om modellen, konvertera Keras-modellen till.kmodel

För detta leksaksexempel kommer vi att träna modellen att känna igen jultomten och Arduino Uno. Självklart kan du välja andra klasser. Ladda ner datasetet härifrån. Skapa en kopia av classifier.json -filen i konfigurationsmappen och ändra den därefter, liknande konfigurationsfilen på skärmdumpen - se till att sökvägen till tränings- och valideringsmappar är korrekt!

Kör följande kommando från aXeleRate -mappen:

python axelerate/train.py - c configs/santa_uno.json

Träningen startar. Om valideringsnoggrannheten (vårt valideringsstatistik) inte förbättras under 20 epoker kommer träningen att avbrytas i förtid. Varje gång valideringsnoggrannheten förbättras sparas modellen i projektmappen. När träningen är över konverterar aXeleRate automatiskt den bästa modellen till angivna format - du kan välja "tflite", "k210" eller "edgetpu" från och med nu.

Steg 5: Kör modellen på Sipeed Maix Bit

Kör modellen på Sipeed Maix Bit
Kör modellen på Sipeed Maix Bit
Kör modellen på Sipeed Maix Bit
Kör modellen på Sipeed Maix Bit
Kör modellen på Sipeed Maix Bit
Kör modellen på Sipeed Maix Bit

Det finns två sätt att köra den modell du har nu på Sipeed Maix -maskinvara: micropython -firmware och Arduino IDE. Micropython -hårdvara är lättare att använda, men det tar en betydande del av tillgängligt minne, så det finns mindre utrymme kvar för modellen. Arduino IDE är i grunden C -kod, som är mycket mer effektiv och har mindre minnesavtryck. Min modell är bara 1,9 Mb, så båda alternativen fungerar för det. Du kan använda modeller så stora som 2,9 Mb med Micropython, för allt större måste du överväga att använda Arduino IDE.

Ladda ner OpenMV IDE härifrån och minimal micropython -firmware här.

Bränn firmware med kflash_gui -verktyget. Du kan också välja att bränna den utbildade modellen för att blinka också, som visas på skärmdumpen. Eller kopiera det till SD -kort (i så fall kopiera.kmodel till roten på ett SD -kort och sätt in SD -kortet i Sipeed Maix Bit)

Öppna OpenMV IDE och tryck på anslutningsknappen. Öppna santa_uno.py -skriptet från mappen example_scripts och tryck på Start -knappen. Du borde se en livestream från kameran och om du öppnar Serial Terminal får du det bästa bildigenkänningsresultatet med förtroendepoäng!

För användning med Arduino IDE måste du först följa proceduren för att lägga till Sipeed -kort till Arduino IDE, som dokumenteras här. Din Arduino IDE -version måste vara minst 1.8.12. När du har lagt till korten öppnar du mobilenet_v1_transfer_learning.ino -skissen och laddar upp den till Sipeed Maix Bit. Ändra namnet på modellen på SD -kortet till "modell" (eller gör en kopia med detta namn). Du kan ändra etikettnamnen i names.cpp. Det kommer att visa livekameraströmmen på Sipeed Maix -skärmen tillsammans med det bästa bildigenkänningsresultatet.

Steg 6: Slutsatser

Här är några fler material att läsa om ämnet CNN och överföringsinlärning:

Överföringsinlärning med Mobilenet och Keras En bra förklaring till överföringsinlärning, den här självstudien använder en modifierad version av koden från den artikeln.

Katter och hundar och konvolutionella neurala nätverk Förklarar grunderna bakom CNN och visualiserar några av filtren. Med katter!

Träna, konvertera, köra MobileNet på Sipeed MaixPy och MaixDuino! En handledning från Sipeed -teamet om hur du tränar Mobilenet 1000 -klasser från grunden (ingen överföringsinlärning). Du kan ladda ner deras förutbildade modell och prova!

Hoppas du kan använda den kunskap du har nu för att bygga några fantastiska projekt med maskinsyn! Du kan köpa Sipeed -brädor här, de är bland de billigaste alternativen som finns tillgängliga för ML på inbyggda system.

Rekommenderad: