Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Equipment >> Industriële robot

Cijferherkenning implementeren met TensorFlow Lite met een i.MX RT1060 Crossover MCU

Dit artikel kijkt naar cijferdetectie en -herkenning met behulp van MNIST eIQ als voorbeeld, dat uit verschillende delen bestaat — de cijferherkenning wordt uitgevoerd door een TensorFlow Lite-model , en een GUI wordt gebruikt om de bruikbaarheid van het i.MX RT1060-apparaat te vergroten.

De i.MX RT1060 crossover MCU is zowel geschikt voor kosteneffectieve industriële toepassingen als voor hoogwaardige en data-intensieve consumentenproducten die weergavefunctionaliteit vereisen. Dit artikel demonstreert de mogelijkheden van deze op Arm® Cortex®-M7 gebaseerde MCU door uit te leggen hoe een embedded machine learning-toepassing kan worden geïmplementeerd die de handgeschreven invoer van een gebruiker kan detecteren en classificeren.

Voor dat doel concentreert dit artikel zich op het populaire MNIST eIQ-voorbeeld, dat uit verschillende delen bestaat - de cijferherkenning wordt uitgevoerd door een TensorFlow Lite-model en een GUI wordt gebruikt om de bruikbaarheid van het i.MX RT1060-apparaat te vergroten.

Een blik op de MNIST-dataset en het model

De dataset die in dit artikel wordt gebruikt, bestaat uit 60.000 trainings- en 10.000 testvoorbeelden van gecentreerde grijswaardenafbeeldingen van handgeschreven cijfers. Elk voorbeeld heeft een resolutie van 28x28 pixels:

Figuur 1. MNIST dataset voorbeeld

De monsters zijn verzameld bij middelbare scholieren en medewerkers van het Census Bureau in de VS. Daarom bevat de dataset voornamelijk voorbeelden van getallen zoals ze in Noord-Amerika zijn geschreven. Voor getallen in Europese stijl moet bijvoorbeeld een andere dataset worden gebruikt. Convolutionele neurale netwerken geven doorgaans het beste resultaat bij gebruik met deze dataset, en zelfs eenvoudige netwerken kunnen een hoge nauwkeurigheid bereiken. Daarom was TensorFlow Lite een geschikte optie voor deze taak.

De implementatie van het MNIST-model die voor dit artikel is gekozen, is beschikbaar op GitHub als een van de officiële TensorFlow-modellen en is geschreven in Python. Het script gebruikt de Keras-bibliotheek en tf.data, tf.estimator.Estimator en tf.layers API, en het bouwt een convolutioneel neuraal netwerk dat hoge nauwkeurigheid kan bereiken op de testvoorbeelden:

Figuur 2. Een visualisatie van het gebruikte model.

De bijbehorende modeldefinitie wordt hieronder weergegeven in figuur 3.

Figuur 3. De modeldefinitie die overeenkomt met de visualisatie van het model.

Wat is TensorFlow Lite en hoe wordt het in dit voorbeeld gebruikt?

TensorFlow is een bekend deep learning-framework dat veel wordt gebruikt in de productie door grote bedrijven. Het is een open-source, platformonafhankelijke deep learning-bibliotheek die is ontwikkeld en onderhouden door Google. Er is een low-level Python API beschikbaar, die handig is voor ervaren ontwikkelaars en high-level bibliotheken zoals die in dit geval worden gebruikt. Daarnaast wordt TensorFlow ondersteund door een grote community en uitstekende online documentatie, leermiddelen, handleidingen en voorbeelden van Google.

Om computergestuurde machines zoals mobiele apparaten en embedded oplossingen de mogelijkheid te geven om TensorFlow-applicaties uit te voeren, heeft Google het TensorFlow Lite-framework ontwikkeld, dat niet de volledige reeks bewerkingen van het TensorFlow-framework ondersteunt. Hiermee kunnen dergelijke apparaten gevolgtrekkingen uitvoeren op vooraf getrainde TensorFlow-modellen die zijn geconverteerd naar TensorFlow Lite. Als uitbetaling kunnen deze geconverteerde modellen niet verder worden getraind, maar kunnen ze worden geoptimaliseerd door middel van technieken zoals kwantisering en snoeien.

Het model converteren naar TensorFlow Lite

Het hierboven besproken getrainde TensorFlow-model moet worden geconverteerd naar TensorFlow Lite voordat het kan worden gebruikt op de i.MX RT1060 MCU. Voor dat doel werd het geconverteerd met tflite_convert en om compatibiliteitsredenen werd versie 1.13.2 van TensorFlow gebruikt voor het trainen en converteren van het model:

tflite_convert

--saved_model_dir=

--output_file=converted_model.tflite

--input_shape=1,28,28

--input_array=Plaatsaanduiding

--output_array=Softmax

--inference_type=FLOAT

--input_data_type=FLOAT

--post_training_quantize

--target_ops TFLITE_BUILTINS

Ten slotte werd het xdd-hulpprogramma gebruikt om het TensorFlow Lite-model om te zetten in een binaire array om door de toepassing te worden geladen:

xxd -i convert_model.tflite> convert_model.h

xdd is een hex dump-hulpprogramma dat kan worden gebruikt om de binaire vorm van een bestand te converteren naar de corresponderende hex dump-representatie en vice versa. In dit geval wordt het binaire bestand van TensorFlow Lite geconverteerd naar een C/C++-headerbestand dat kan worden toegevoegd aan een eIQ-project. Het conversieproces en het hulpprogramma tflite_convert worden in meer detail beschreven in de eIQ-gebruikershandleidingen. Het hulpprogramma wordt ook beschreven in de officiële Google-documentatie.

Een snelle introductie tot Embedded Wizard Studio

Om gebruik te maken van de grafische mogelijkheden van de MIMXRT1060-EVK, werd in dit project een GUI opgenomen. Voor dat doel werd Embedded Wizard Studio gebruikt, een IDE voor het ontwikkelen van GUI's voor applicaties die op embedded apparaten zullen draaien. Hoewel er een gratis evaluatieversie van de IDE beschikbaar is, beperkt deze versie de maximale complexiteit van de grafische gebruikersinterface en voegt het ook een watermerk toe aan de GUI.

Een van de voordelen van Embedded Wizard Studio is de mogelijkheid om MCUXpresso- en IAR-projecten te genereren op basis van XNP's SDK, wat betekent dat de ontwikkelaar na het maken van de gebruikersinterface in de IDE deze onmiddellijk op zijn apparaat kan testen.

De IDE biedt objecten en hulpmiddelen zoals knoppen, aanraakgevoelige gebieden, vormen en nog veel meer, die op een canvas worden geplaatst. Hun eigenschappen worden vervolgens aangepast aan de behoeften en verwachtingen van de ontwikkelaar. Dit alles werkt op een intuïtieve en gebruiksvriendelijke manier, en het versnelt grotendeels het GUI-ontwikkelingsproces.

Verschillende conversiestappen moeten het GUI-project echter samenvoegen met het bestaande eIQ-toepassingsproject, aangezien het gegenereerde GUI-project in C is en de qIQ-voorbeelden in C/C++. Daarom moet de inhoud van sommige headerbestanden worden omgeven door:

#ifdef __cplusplus

externe "C" {

#endif

/* C-code */

#ifdef __cplusplus

}

#endif

Bovendien zijn de meeste bron- en headerbestanden verplaatst naar een nieuwe map in de middlewaremap van de SDK en zijn er nieuwe include-paden toegevoegd om deze wijzigingen weer te geven. Ten slotte werden enkele apparaatspecifieke configuratiebestanden vergeleken en correct samengevoegd.

De voltooide applicatie en zijn functies

De GUI van de applicatie wordt weergegeven op een aanraakgevoelig LCD-scherm. Het bevat een invoergebied voor het schrijven van cijfers en een die het resultaat van de classificatie weergeeft. De knop Inferentie uitvoeren voert de inferentie uit en de knop Wissen wist de invoer- en uitvoervelden. De applicatie voert het resultaat en de betrouwbaarheid van de voorspelling uit naar de standaarduitvoer.

Figuur 4. De GUI van de voorbeeld-app bevat een invoerveld, een uitvoerveld en twee knoppen. Het resultaat en de betrouwbaarheid worden ook afgedrukt naar de standaarduitvoer.

Nauwkeurigheid TensorFlow Lite-model

Zoals hierboven vermeld, kan het model een hoge nauwkeurigheid bereiken op de trainings- en testgegevens wanneer het een handgeschreven nummer in Amerikaanse stijl classificeert. Dit is echter niet het geval bij gebruik in deze toepassing, vooral omdat cijfers die met een vinger op een LCD-scherm worden geschreven nooit hetzelfde zijn als cijfers die met een pen op papier worden geschreven. Dit benadrukt het belang van het trainen van productiemodellen op echte productiegegevens.

Voor betere resultaten moet een nieuwe set gegevens worden verzameld. Bovendien zouden de middelen hetzelfde moeten zijn. In dit geval moeten de monsters worden verzameld met behulp van een touchscreen-invoer om de nummers te tekenen. Er bestaan ​​nog meer technieken om de nauwkeurigheid van de voorspellingen te vergroten. De NXP Community-website bevat een uitleg over het gebruik van de transferleertechniek.

Implementatiedetails

Embedded Wizard gebruikt slots als triggers om te reageren op GUI-interacties, bijvoorbeeld wanneer een gebruiker zijn vinger over het invoergebied sleept. In dat geval trekt de sleuf continu een pixelbrede lijn onder de vinger. De kleur van die lijn wordt bepaald door de hoofdkleurconstante.

Het slot van de wisknop stelt de kleur van elke pixel in beide velden in op de achtergrondkleur, en de knop Inferentie uitvoeren slaat verwijzingen op naar het invoergebied, de onderliggende bitmap en de breedte en hoogte van het gebied, en geeft deze vervolgens door aan een native C-programma dat ze verwerkt.

Aangezien de bitmaps van het machine learning-model slechts 28x28 pixels groot zijn en het invoergebied is gemaakt als een vierkant van 112x112 om het gebruik van de toepassing comfortabeler te maken, is extra voorbewerking vereist bij het verkleinen van de afbeelding. Anders zou dat proces het beeld te veel vervormen.

Eerst wordt een array van 8-bits gehele getallen met de afmetingen van het invoergebied gemaakt en gevuld met nullen. Vervolgens worden de afbeelding en array herhaald en wordt elke getekende pixel in de afbeelding opgeslagen als 0xFF in de array. Bij het verwerken van de invoer worden pixels van de hoofdkleur als wit beschouwd en al het andere als zwart. Bovendien wordt elke pixel uitgebreid tot een vierkant van 3x3 om de lijn dikker te maken, wat het verkleinen van het beeld veel veiliger maakt. Voordat de afbeelding wordt geschaald naar de vereiste resolutie van 28x28, wordt de tekening bijgesneden en gecentreerd om op de MNIST-afbeeldingen te lijken:

Figuur 5. Een visualisatie van de array die de voorbewerkte invoergegevens bevat.

Het machine learning-model wordt toegewezen, geladen en voorbereid wanneer de toepassing wordt gestart. Bij elk verzoek tot gevolgtrekking wordt de invoertensor van het model geladen met de preprocessing-invoer en doorgegeven aan het model. De invoer moet pixel voor pixel naar de tensor worden gekopieerd en de gehele waarden moeten daarbij worden geconverteerd naar drijvende-kommawaarden. Deze NXP-toepassingsnotitie bevat een gedetailleerde geheugenvoetafdruk van de code.

TensorFlow Lite:een levensvatbare oplossing

Handgeschreven cijferherkenning met behulp van machine learning kan problemen opleveren voor embedded systemen, en TensorFlow Lite biedt een haalbare oplossing. Met deze oplossing kunnen complexere use-cases, zoals een pin-invoerveld op een digitaal slot, worden geïmplementeerd. Zoals besproken in dit artikel, zijn het trainen van productiemodellen op echte productiegegevens van cruciaal belang. De trainingsgegevens die in dit artikel zijn gebruikt, bestonden uit getallen die met een pen op een stuk papier waren geschreven. Dit vermindert op zijn beurt de algehele nauwkeurigheid van het model wanneer het wordt gebruikt om getallen te detecteren die op een aanraakscherm zijn getekend. Bovendien moet er rekening worden gehouden met regionale verschillen.

De i.MX RT crossover MCU-serie kan worden geïmplementeerd in een verscheidenheid aan embedded applicaties, zoals in het voorbeeld in dit artikel. NXP heeft voldoende informatie over de i.MX RT crossover MCU-serie die kan helpen de kloof tussen prestaties en bruikbaarheid te overbruggen.

Ga voor meer informatie over i.MX RT Crossover MCU's naar de i.MX RT-productpagina.

Industrieartikelen zijn een vorm van inhoud waarmee branchepartners nuttig nieuws, berichten en technologie kunnen delen met lezers van All About Circuits op een manier waarop redactionele inhoud niet goed geschikt is. Alle brancheartikelen zijn onderworpen aan strikte redactionele richtlijnen met de bedoeling de lezers nuttig nieuws, technische expertise of verhalen te bieden. De standpunten en meningen in brancheartikelen zijn die van de partner en niet noodzakelijk die van All About Circuits of zijn schrijvers.


Industriële robot

  1. Verspilling verminderen met autonome robots
  2. AI-cijferherkenning met PiCamera
  3. Energiebeheer optimaliseren met de i.MX RT500 Crossover MCU van NXP
  4. DSP-activering begrijpen met behulp van de i.MX RT500 Crossover MCU van NXP
  5. Hoe bouw je een variabele auto-encoder met TensorFlow
  6. Epoxyhars gebruiken met artwork
  7. Wat is interface in Java:hoe een interface met voorbeeld te implementeren?
  8. CNC-machines onderhouden? Hier leest u hoe u het doet met een cobot
  9. Aan de slag met Yaskawa-robotprogrammering
  10. Aan de slag met RoboDK voor Raspberry Pi
  11. Een functieblok aanroepen vanuit een OPC UA-client met behulp van een informatiemodel