Innholdsfortegnelse:
- Trinn 1: CNN og Transfer Learning: Some Theory
- Trinn 2: Forbered miljøet
- Trinn 3: Installer AXeleRate og kjør tester
- Trinn 4: Tren modellen på nytt, konverter Keras-modellen til.kmodel
- Trinn 5: Kjør modellen på Sipeed Maix Bit
- Trinn 6: Konklusjoner
Video: Bildegjenkjenning med K210 -kort og Arduino IDE/Micropython: 6 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
Jeg har allerede skrevet en artikkel om hvordan du kjører OpenMV -demoer på Sipeed Maix Bit, og gjorde også en video av objektdeteksjonsdemo med dette brettet. Et av de mange spørsmålene folk har stilt er - hvordan kan jeg gjenkjenne et objekt som nevrale nettverk ikke er opplært til? Med andre ord hvordan lage din egen image classifier og kjøre den med maskinvareakselerasjon.
Dette er et forståelig spørsmål, siden du for prosjektet ditt sannsynligvis ikke trenger å gjenkjenne noen generiske objekter, som katter og hunder og fly. Du vil kjenne igjen noe spesifikt, for eksempel en hunderase for den automatiske kjæledyrdøren, eller en planteart for sortering, eller andre spennende applikasjoner du kan tenke på!
Jeg har deg! I denne artikkelen vil jeg lære deg hvordan du lager din egen tilpassede bildeklassifisering med overføringslæring i Keras, konverterer den opplærte modellen til.kmodel -format og kjører den på Sipeed -bord (kan være et hvilket som helst brett, Bit/Dock eller Go) ved hjelp av Micropython eller Arduino IDE. Og bare fantasien din vil være grensen for oppgaver du kan gjøre med denne kunnskapen.
OPPDATERING MAI 2020: Da jeg så hvordan artikkelen min og videoen om bildegjenkjenning med K210-tavler fremdeles er veldig populære, og blant toppresultater på YouTube og Google bestemte jeg meg for å oppdatere artikkelen for å inkludere informasjon om aXeleRate, Keras-basert rammeverk for AI på Edge utvikler jeg.
aXeleRate er i hovedsak basert på samlingen av skript jeg brukte for å trene modeller for bildegjenkjenning/objektgjenkjenning - kombinert til et enkelt rammeverk og optimalisert for arbeidsflyt på Google Colab. Det er mer praktisk å bruke og mer oppdatert.
For den gamle versjonen av artikkelen kan du fremdeles se den på steemit.com.
Trinn 1: CNN og Transfer Learning: Some Theory
Convolutional Neural Networks eller CNN er en klasse med dype nevrale nettverk, som oftest brukes til å analysere visuelle bilder. Det er mye litteratur på internett om emnet, og jeg skal gi noen lenker i den siste delen av artikkelen. Kort sagt, du kan tenke på CNN som en serie filtre, brukt på bildet, og hvert filter ser etter en bestemt funksjon i bildet - på de nedre konvolusjonelle lagene er funksjonene vanligvis linjer og enkle former og på de høyere lagene funksjonene kan være mer spesifikk, f.eks kroppsdeler, spesifikke teksturer, deler av dyr eller planter, etc. En tilstedeværelse av visse sett med funksjoner kan gi oss en anelse om hva objektet i bildet kan være. Værhår, to øyne og en svart nese? Må være katt! Grønne blader, en trestamme? Ser ut som et tre!
Jeg håper du får ideen om arbeidsprinsippet til CNN nå. Normalt trenger et dypt neuralt nettverk tusenvis av bilder og timer med treningstid (avhenger av maskinvaren du bruker til trening) for å "utvikle" filtre som er nyttige for å gjenkjenne typer objekter du vil ha. Men det er en snarvei.
En modell som er opplært til å gjenkjenne mange forskjellige vanlige gjenstander (katter, hunder, husholdningsapparater, transport osv.) Har allerede mange av de nyttige filtrene "utviklet", så vi trenger ikke den for å lære å kjenne igjen de grunnleggende formene og delene av gjenstandene igjen. Vi kan bare trene de siste lagene i nettverket på nytt for å gjenkjenne spesifikke klasser av objekter, som er viktige for oss. Dette kalles "transfer learning". Du trenger betydelig mye mindre treningsdata og beregner tid med overføringslæring, siden du bare trener de siste lagene i nettverket, kanskje bestående av noen hundre nevroner.
Høres fantastisk ut, ikke sant? La oss se hvordan vi implementerer det.
Trinn 2: Forbered miljøet
To er to måter å bruke aXeleRate på: å kjøre lokalt på Ubuntu -maskinen eller i Google Colab. For å kjøre i Google Colab, kan du se på dette eksemplet:
Bildeklassifisering Colab Notebook
Det er også mye lettere å trene modellen din lokalt og eksportere den til maskinvareakselerasjon.
Arbeidsmiljøet mitt er Ubuntu 16.04, 64bit. Du kan bruke virtuell maskin til å kjøre Ubuntu -image siden vi ikke vil bruke GPU til trening. Med noen modifikasjoner kan du også kjøre treningsskriptet på Windows, men for modellkonvertering må du bruke Linux -systemet. Så et foretrukket miljø for deg å utføre denne opplæringen er Ubuntu 16.04, som kjører innfødt eller i virtuell maskin.
La oss starte med å installere Miniconda, som er miljøbehandling for Python. Vi lager et isolert miljø, så vi vil ikke tilfeldigvis endre noe i systemets Python -miljø.
Last ned installasjonsprogrammet her
Etter at installasjonen er fullført, opprett et nytt miljø:
conda create -n ml python = 3,7
La oss aktivere det nye miljøet
konda aktivere ml
Et prefiks før bash -skallet ditt vil vises med navnet på miljøet, som indikerer at du jobber nå i det miljøet.
Trinn 3: Installer AXeleRate og kjør tester
Installer aXeleRate på din lokale maskin med
pip installer git+https://github.com/AIWintermuteAI/aXeleRate
For å laste ned eksempler, kjør:
git -klon
Du kan kjøre hurtigtester med tests_training.py i aXeleRate -mappen. Det vil kjøre opplæring og slutning for hver modelltype, lagre og konvertere trente modeller. Siden det bare er trening for 5 epoker og datasettet er veldig lite, vil du ikke kunne få nyttige modeller, men dette skriptet er bare ment for å sjekke om det ikke er feil.
Trinn 4: Tren modellen på nytt, konverter Keras-modellen til.kmodel
I dette lekeeksemplet skal vi trene modellen til å gjenkjenne julenissen og Arduino Uno. Tydeligvis kan du velge andre klasser. Last ned datasettet herfra. Lag en kopi av classifier.json -filen i konfigurasjonsmappen, og endre den deretter, tilsvarende konfigurasjonsfilen i skjermbildet - sørg for at banen til trenings- og valideringsmapper er riktig!
Kjør følgende kommando fra aXeleRate -mappen:
python axelerate/train.py - c configs/santa_uno.json
Treningen starter. Hvis valideringsnøyaktigheten (vår valideringsberegning) ikke forbedres for 20 epoker, vil treningen stoppe for tidlig. Hver gang valideringsnøyaktigheten forbedres, lagres modellen i prosjektmappen. Etter at treningen er over, konverterer aXeleRate automatisk den beste modellen til spesifiserte formater - du kan velge "tflite", "k210" eller "edgetpu" fra nå av.
Trinn 5: Kjør modellen på Sipeed Maix Bit
Det er to måter å kjøre modellen du har nå på Sipeed Maix -maskinvare: micropython -fastvare og Arduino IDE. Micropython -maskinvare er enklere å bruke, men den opptar en betydelig del av tilgjengelig minne, så det er mindre plass igjen til modellen. Arduino IDE er i utgangspunktet C -kode, som er mye mer effektiv og har mindre minneavtrykk. Min modell er bare 1,9 Mb, så begge alternativene fungerer for den. Du kan bruke modeller så store som 2,9 Mb med Micropython, for alt større må du vurdere å bruke Arduino IDE.
Last ned OpenMV IDE herfra og minimal micropython -fastvare herfra.
Brenn fastvaren med kflash_gui -verktøyet. Du kan også velge å brenne den opplærte modellen for å blinke også, som vist på skjermbildet. Eller kopier det til SD -kort (i så fall kopier.kmodel til roten til et SD -kort og sett inn SD -kortet i Sipeed Maix Bit)
Åpne OpenMV IDE og trykk på tilkoblingsknappen. Åpne santa_uno.py -skriptet fra mappen example_scripts og trykk på Start -knappen. Du bør se en direktesending fra kameraet, og hvis du åpner Serial Terminal, får du det beste bildegjenkjenningsresultatet med tillitspoengene!
For bruk med Arduino IDE må du først følge prosedyren for å legge Sipeed -plater til Arduino IDE, som er dokumentert her. Arduino IDE -versjonen din må være minst 1.8.12. Etter at du har lagt til tavlene, åpner du mobilenet_v1_transfer_learning.ino -skissen og laster den opp til Sipeed Maix Bit. Endre navnet på modellen på SD -kortet til "modell" (eller lag en kopi med dette navnet). Du kan endre etikettnavnene i names.cpp. Det vil vise live kamerastrømmen på Sipeed Maix -skjermen sammen med det beste bildegjenkjenningsresultatet.
Trinn 6: Konklusjoner
Her er noen flere materialer for å lese om emnet CNN og overføringslæring:
Overføringslæring ved hjelp av Mobilenet og Keras En flott forklaring på overføringslæring, denne opplæringen bruker en modifisert versjon av koden fra den artikkelen.
Katter og hunder og konvolusjonelle nevrale nettverk Forklarer det grunnleggende bak CNN og visualiserer noen av filtrene. Med katter!
Tren, konverter, kjør MobileNet på Sipeed MaixPy og MaixDuino! En opplæring fra Sipeed -teamet om hvordan du trener Mobilenet 1000 -klasser fra bunnen av (ingen overføringslæring). Du kan laste ned deres ferdigutdannede modell og prøve den!
Håper du kan bruke kunnskapen du har nå til å bygge noen fantastiske prosjekter med maskinsyn! Du kan kjøpe Sipeed -brett her, de er blant de billigste alternativene som er tilgjengelige for ML på innebygde systemer.
Anbefalt:
Objektdeteksjon med Sipeed MaiX -plater (Kendryte K210): 6 trinn
Objektdeteksjon med Sipeed MaiX -plater (Kendryte K210): Som en fortsettelse av min forrige artikkel om bildegjenkjenning med Sipeed MaiX -plater, bestemte jeg meg for å skrive en annen opplæring med fokus på gjenkjenning av objekter. Det dukket opp noen interessant maskinvare nylig med Kendryte K210 -brikken, inkludert S
Kunstig intelligens og bildegjenkjenning ved bruk av HuskyLens: 6 trinn (med bilder)
Kunstig intelligens og bildegjenkjenning ved bruk av HuskyLens: Hei, hva skjer, gutter! Akarsh her fra CETech. I dette prosjektet skal vi se på HuskyLens fra DFRobot. Det er en AI-drevet kameramodul som er i stand til å utføre flere kunstige intelligensoperasjoner som Face Recognitio
DIY Smart Scale With Alarm Clock (med Wi-Fi, ESP8266, Arduino IDE og Adafruit.io): 10 trinn (med bilder)
DIY Smart Scale With Alarm Clock (med Wi-Fi, ESP8266, Arduino IDE og Adafruit.io): I mitt forrige prosjekt utviklet jeg en smart badevekt med Wi-Fi. Den kan måle brukerens vekt, vise den lokalt og sende den til nettskyen. Du kan få mer informasjon om dette på lenken nedenfor: https: //www.instructables.com/id/Wi-Fi-Smart-Scale-wi
Komme i gang med MicroPython på ESP8266: 10 trinn (med bilder)
Komme i gang med MicroPython på ESP8266: Vil du ha en annen måte å programmere de ESP8266-baserte kortene i stedet for den vanlige metoden ved å bruke Arduino IDE sammen med C/C ++ programmeringsspråk? I denne opplæringen lærer vi hvem du skal konfigurere og kontrollere et ESP8266 bord med MicroPython.BUIL
Bildegjenkjenning med TensorFlow på Raspberry Pi: 6 trinn
Bildegjenkjenning med TensorFlow på Raspberry Pi: Google TensorFlow er et programvarebibliotek med åpen kildekode for numerisk beregning ved hjelp av datastrømningsgrafer. Den brukes av Google på de forskjellige feltene Machine Learning og Deep Learning Technologies. TensorFlow ble opprinnelig utviklet av Google Brai