Indholdsfortegnelse:

Billedgenkendelse med K210 -plader og Arduino IDE/Micropython: 6 trin (med billeder)
Billedgenkendelse med K210 -plader og Arduino IDE/Micropython: 6 trin (med billeder)

Video: Billedgenkendelse med K210 -plader og Arduino IDE/Micropython: 6 trin (med billeder)

Video: Billedgenkendelse med K210 -plader og Arduino IDE/Micropython: 6 trin (med billeder)
Video: DKRobotics billedgenkendelse - Visual Processing 2024, Juni
Anonim
Image
Image

Jeg har allerede skrevet en artikel om, hvordan man kører OpenMV -demoer på Sipeed Maix Bit, og lavede også en video af objektdetekteringsdemo med dette kort. Et af de mange spørgsmål, folk har stillet, er - hvordan kan jeg genkende et objekt, som det neurale netværk ikke er uddannet til? Med andre ord hvordan du laver din egen billedklassificering og kører den med hardware acceleration.

Dette er et forståeligt spørgsmål, da du for dit projekt sandsynligvis ikke behøver at genkende nogle generiske objekter, som katte og hunde og fly. Du vil genkende noget specifikt, for eksempel en hundes race til den automatiske kæledyrsdør, eller en planteart til sortering eller andre spændende applikationer, du kan tænke på!

Jeg har dig! I denne artikel vil jeg lære dig, hvordan du opretter din egen brugerdefinerede billedklassificering med overførselsindlæring i Keras, konverterer den uddannede model til.kmodel -format og kører den på Sipeed -bord (kan være et hvilket som helst board, Bit/Dock eller Go) ved hjælp af Micropython eller Arduino IDE. Og kun din fantasi vil være grænsen for opgaver, du kan udføre med denne viden.

OPDATERING MAJ 2020: Da jeg så, hvordan min artikel og video om billedgenkendelse med K210-tavler stadig er meget populære, og blandt de bedste resultater på YouTube og Google, besluttede jeg at opdatere artiklen til at omfatte oplysninger om aXeleRate, Keras-baserede rammer for AI om Edge udvikler jeg.

aXeleRate er hovedsageligt baseret på den samling af scripts, jeg brugte til træning af billedgenkendelse/objektdetekteringsmodeller - kombineret til en enkelt ramme og optimeret til arbejdsgang på Google Colab. Det er mere praktisk at bruge og mere opdateret.

For den gamle version af artiklen kan du stadig se den på steemit.com.

Trin 1: CNN og Transfer Learning: Nogle teorier

CNN og Transfer Learning: Nogle teorier
CNN og Transfer Learning: Nogle teorier

Konvolutionelle neurale netværk eller CNN er en klasse af dybe neurale netværk, der oftest anvendes til analyse af visuelle billeder. Der er meget litteratur på internettet om emnet, og jeg giver nogle links i den sidste del af artiklen. Kort sagt kan du tænke på CNN som en række filtre, der er påført billedet, hvor hvert filter leder efter en bestemt funktion i billedet - på de nederste konvolutionslag er funktionerne normalt linjer og enkle former og på de højere lag funktioner kan være mere specifik, f.eks kropsdele, specifikke teksturer, dele af dyr eller planter osv. En tilstedeværelse af bestemte funktioner kan give os en anelse om, hvad objektet i billedet kan være. Whiskers, to øjne og en sort næse? Skal være kat! Grønne blade, en træstamme? Ligner et træ!

Jeg håber, at du får ideen om arbejdsprincippet for CNN nu. Normalt har et dybt neuralt netværk brug for tusindvis af billeder og timers træningstid (afhænger af den hardware, du bruger til træning) for at "udvikle" filtre, der er nyttige til at genkende de typer objekter, du ønsker. Men der er en genvej.

En model, der er uddannet til at genkende mange forskellige fælles genstande (katte, hunde, husholdningsapparater, transport osv.) Har allerede mange af de nyttige filtre "udviklet", så vi behøver ikke det for at lære at genkende de grundlæggende former og dele af genstandene igen. Vi kan bare genuddanne de sidste lag af netværket til at genkende bestemte klasser af objekter, der er vigtige for os. Dette kaldes "transfer learning". Du har brug for betydeligt meget mindre træningsdata og beregner tid med overførselsindlæring, da du kun træner de sidste lag af netværket, der måske består af få hundrede neuroner.

Lyder fantastisk, ikke? Lad os se, hvordan det implementeres.

Trin 2: Forbered dit miljø

Forbered dit miljø
Forbered dit miljø

To er to måder at bruge aXeleRate på: Kører lokalt på Ubuntu -maskine eller i Google Colab. For at køre i Google Colab, skal du kigge på dette eksempel:

Billedklassificering Colab Notebook

Det er også meget lettere at træne din model lokalt og eksportere den til hardware -acceleration.

Mit arbejdsmiljø er Ubuntu 16.04, 64bit. Du kan bruge virtuel maskine til at køre Ubuntu -image, da vi ikke vil bruge GPU til træning. Med nogle ændringer kan du også køre træningsscriptet på Windows, men til modelkonvertering skal du bruge Linux -system. Så det foretrukne miljø for dig at udføre denne vejledning er Ubuntu 16.04, der kører indbygget eller i en virtuel maskine.

Lad os starte med at installere Miniconda, som er miljøadministrator for Python. Vi skaber isolerede omgivelser, så vi ikke ved et uheld ændrer noget i dit system Python -miljø.

Download installationsprogrammet her

Efter installationen er fuldført, skal du oprette et nyt miljø:

conda create -n ml python = 3,7

Lad os aktivere det nye miljø

conda aktivere ml

Et præfiks før din bash shell vises med miljøets navn, hvilket angiver, at du arbejder nu i det miljø.

Trin 3: Installer AXeleRate og kør test

Installer AXeleRate og kør test
Installer AXeleRate og kør test

Installer aXeleRate på din lokale maskine med

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

For at downloade eksempler, kør:

git -klon

Du kan køre hurtige tests med tests_training.py i aXeleRate -mappen. Det vil køre træning og slutning for hver modeltype, gemme og konvertere uddannede modeller. Da det kun er træning i 5 epoker og datasættet er meget lille, vil du ikke kunne få nyttige modeller, men dette script er kun beregnet til at kontrollere, om der ikke er fejl.

Trin 4: Træn modellen igen, konverter Keras-modellen til.kmodel

Træn modellen igen, konverter Keras-modellen til.kmodel
Træn modellen igen, konverter Keras-modellen til.kmodel

I dette legetøjseksempel træner vi modellen til at genkende julemanden og Arduino Uno. Du kan naturligvis vælge andre klasser. Download datasættet herfra. Opret en kopi af classifier.json -filen i konfigurationsmappen, og rediger den derefter i lighed med konfigurationsfilen i skærmbilledet - sørg for, at stien til trænings- og valideringsmapper er korrekt!

Kør følgende kommando fra aXeleRate -mappen:

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

Uddannelsen starter. Hvis valideringsnøjagtigheden (vores valideringsmetrik) ikke forbedres i 20 epoker, stopper træningen for tidligt. Hver gang valideringsnøjagtigheden forbedres, gemmes modellen i projektmappen. Efter træning er slut, konverterer aXeleRate automatisk den bedste model til angivne formater - du kan vælge "tflite", "k210" eller "edgetpu" fra nu af.

Trin 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

Der er to måder at køre den model, du nu har på Sipeed Maix hardware: micropython firmware og Arduino IDE. Micropython -hardware er lettere at bruge, men det optager en betydelig del af tilgængelig hukommelse, så der er mindre plads tilbage til modellen. Arduino IDE er dybest set C -kode, som er meget mere effektiv og har mindre hukommelsesaftryk. Min model er kun 1,9 Mb, så begge muligheder fungerer til det. Du kan bruge modeller så store som 2,9 Mb med Micropython, for alt større skal du overveje at bruge Arduino IDE.

Download OpenMV IDE herfra og minimal micropython -firmware herfra.

Brænd firmwaren med kflash_gui værktøj. Du kan også vælge at brænde den uddannede model til at blinke, som vist på skærmbilledet. Eller kopier det til SD -kort (i så fald kopier.kmodel til roden af et SD -kort og indsæt SD -kort i Sipeed Maix Bit)

Åbn OpenMV IDE, og tryk på knappen Tilslut. Åbn santa_uno.py script fra mappen example_scripts, og tryk på knappen Start. Du skulle se en livestream fra kameraet, og hvis du åbner Serial Terminal, får du det bedste billedgenkendelsesresultat med tillidsresultatet!

For brug med Arduino IDE skal du først følge proceduren for tilføjelse af Sipeed -tavler til Arduino IDE, som er dokumenteret her. Din Arduino IDE -version skal være mindst 1.8.12. Når du har tilføjet tavlerne, skal du åbne mobilenet_v1_transfer_learning.ino -skitsen og uploade den til Sipeed Maix Bit. Skift navnet på modellen på SD -kortet til "model" (eller lav en kopi med dette navn). Du kan ændre etiketnavne i names.cpp. Det viser live kamerastrømmen på Sipeed Maix -skærmen sammen med det øverste billedgenkendelsesresultat.

Trin 6: Konklusioner

Her er nogle flere materialer til at læse om emnet CNN'er og transfer learning:

Transfer Learning ved hjælp af Mobilenet og Keras En god forklaring på Transfer learning, denne tutorial bruger en modificeret version af koden fra den pågældende artikel.

Katte og hunde og konvolutionelle neurale netværk Forklarer det grundlæggende bag CNN'er og visualiserer nogle af filtrene. Med katte!

Træn, konverter, kør MobileNet på Sipeed MaixPy og MaixDuino! En tutorial fra Sipeed -teamet om, hvordan man træner Mobilenet 1000 -klasser fra bunden (ingen overførselsindlæring). Du kan downloade deres foruddannede model og prøve det!

Håber du kan bruge den viden du har nu til at bygge nogle fantastiske projekter med maskinsyn! Du kan købe Sipeed -tavler her, de er blandt de billigste muligheder for ML på indlejrede systemer.

Anbefalede: