Innholdsfortegnelse:

Bildegjenkjenning med K210 -kort og Arduino IDE/Micropython: 6 trinn (med bilder)
Bildegjenkjenning med K210 -kort og Arduino IDE/Micropython: 6 trinn (med bilder)

Video: Bildegjenkjenning med K210 -kort og Arduino IDE/Micropython: 6 trinn (med bilder)

Video: Bildegjenkjenning med K210 -kort og Arduino IDE/Micropython: 6 trinn (med bilder)
Video: Bildegjenkjenning med maskinlæring 2024, November
Anonim
Image
Image

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

CNN og Transfer Learning: Some Theory
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

Forbered miljøet
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 og kjør tester
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

Tren modellen på nytt, konverter Keras-modellen til.kmodel
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

Kjør modellen på Sipeed Maix Bit
Kjør modellen på Sipeed Maix Bit
Kjør modellen på Sipeed Maix Bit
Kjør modellen på Sipeed Maix Bit
Kjør modellen på Sipeed Maix Bit
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: