Përmbajtje:

Njohja e imazhit me tabelat K210 dhe Arduino IDE/Micropython: 6 hapa (me fotografi)
Njohja e imazhit me tabelat K210 dhe Arduino IDE/Micropython: 6 hapa (me fotografi)
Anonim
Image
Image

Unë tashmë kam shkruar një artikull se si të ekzekutoni demonstrimet OpenMV në Sipeed Maix Bit dhe gjithashtu bëra një video të demonstrimit të zbulimit të objekteve me këtë tabelë. Një nga pyetjet e shumta që njerëzit kanë bërë është - si mund ta njoh një objekt për të cilin rrjeti nervor nuk është i trajnuar? Me fjalë të tjera, si ta bëni klasifikuesin tuaj të imazhit dhe ta përdorni me përshpejtimin e harduerit.

Kjo është një pyetje e kuptueshme, pasi për projektin tuaj ndoshta nuk keni nevojë të njihni disa objekte të përgjithshme, si macet dhe qentë dhe aeroplanët. Ju dëshironi të njihni diçka specifike, për shembull, një racë qeni për atë derë automatike të kafshëve shtëpiake, ose një specie bimore për klasifikim, ose ndonjë aplikacion tjetër dalës për të cilin mund të mendoni!

Te kuptova! Në këtë artikull do t'ju mësoj se si të krijoni klasifikuesin tuaj personal të imazhit me mësimin e transferimit në Keras, ta shndërroni modelin e trajnuar në formatin.kmodel dhe ta ekzekutoni atë në bordin Sipeed (mund të jetë çdo tabelë, Bit/Dock ose Go) duke përdorur Micropython ose Arduino IDE. Dhe vetëm imagjinata juaj do të jetë kufiri i detyrave që mund të bëni me këtë njohuri.

P URDITSIM MAJ 2020: Duke parë sesi artikulli dhe videoja ime mbi Njohjen e Imazheve janë ende shumë të popullarizuara dhe në mesin e rezultateve kryesore në YouTube dhe Google, vendosa të azhurnoj artikullin për të përfshirë informacionin rreth aXeleRate, kuadrit të bazuar në Keras për AI në Edge unë zhvillohem.

aXeleRate, në thelb, bazohet në koleksionin e skripteve që kam përdorur për trajnimin e modeleve të njohjes së imazhit/zbulimit të objekteve - të kombinuara në një kornizë të vetme dhe të optimizuar për rrjedhën e punës në Google Colab. Moreshtë më i përshtatshëm për t'u përdorur dhe më i përditësuar.

Për versionin e vjetër të artikullit, ende mund ta shihni në steemit.com.

Hapi 1: CNN dhe mësimi transferues: Disa teori

CNN dhe Mësimi Transferues: Disa Teori
CNN dhe Mësimi Transferues: Disa Teori

Rrjetet Nevolucionare Konvolucionare ose CNN është një klasë e rrjeteve nervore të thella, më së shpeshti aplikohet për të analizuar imazhet vizuale. Ka shumë literaturë në internet mbi këtë temë dhe unë do të jap disa lidhje në pjesën e fundit të artikullit. Me pak fjalë, ju mund të mendoni për CNN si një seri filtrash, të aplikuar në imazh, secili filtër kërkon një veçori të veçantë në imazh - në shtresat e poshtme konvolucionare tiparet janë zakonisht linja dhe forma të thjeshta dhe në shtresat më të larta tiparet mund të jetë më specifike, p.sh pjesët e trupit, tekstura të veçanta, pjesë të kafshëve ose bimëve, etj. Prania e një grupi të caktuar karakteristikash mund të na japë një ide se cili mund të jetë objekti në imazh. Mustaqe, dy sy dhe një hundë të zezë? Duhet të jetë mace! Gjethe jeshile, një trung peme? Duket si një pemë!

Shpresoj se e keni marrë idenë për parimin e punës së CNN tani. Normalisht një rrjet nervor i thellë ka nevojë për mijëra imazhe dhe orë të stërvitjes (varet nga pajisjet që përdorni për trajnim) për të "zhvilluar" filtra që janë të dobishëm për njohjen e llojeve të objekteve që dëshironi. Por ka një shkurtore.

Një model i trajnuar për të njohur shumë objekte të ndryshme të zakonshme (mace, qen, pajisje shtëpiake, transport, etj) tashmë ka shumë filtra të dobishëm të "zhvilluar", kështu që ne nuk kemi nevojë për të për të mësuar njohjen e formave dhe pjesëve themelore e objekteve përsëri. Ne thjesht mund të ritrajnojmë shtresat e fundit të rrjetit për të njohur klasa të veçanta të objekteve, të cilat janë të rëndësishme për ne. Kjo quhet "të mësuarit e transferimit". Keni nevojë për shumë më pak të dhëna stërvitore dhe llogaritni kohën me transferimin e mësimit, pasi jeni duke trajnuar vetëm shtresat e fundit të rrjetit, të përbëra ndoshta nga disa qindra neurone.

Tingëllon e mrekullueshme, apo jo? Le të shohim se si ta zbatojmë atë.

Hapi 2: Përgatitni mjedisin tuaj

Përgatitni mjedisin tuaj
Përgatitni mjedisin tuaj

Janë dy mënyra për të përdorur aXeleRate: ekzekutimi lokal në makinën Ubuntu ose në Google Colab. Për të funksionuar në Google Colab, hidhini një sy këtij shembulli:

Klasifikimi i imazheve Fletore Colab

Trajnimi i modelit tuaj në vend dhe eksportimi i tij për t'u përdorur me përshpejtimin e harduerit është gjithashtu shumë më i lehtë tani.

Mjedisi im i punës është Ubuntu 16.04, 64bit. Ju mund të përdorni Virtual machine për të ekzekutuar imazhin Ubuntu pasi ne nuk do të përdorim GPU për trajnim. Me disa modifikime ju gjithashtu mund të ekzekutoni skriptin e trajnimit në Windows, por për konvertimin e modelit do t'ju duhet të përdorni sistemin Linux. Pra, mjedisi i preferuar për ju për të ekzekutuar këtë tutorial është Ubuntu 16.04, që funksionon në vendlindje ose në makinë virtuale.

Le të fillojmë duke instaluar Miniconda, e cila është menaxher i mjedisit për Python. Ne do të krijojmë një mjedis të izoluar, kështu që ne nuk do të ndryshojmë rastësisht asgjë në mjedisin tuaj të sistemit Python.

Shkarkoni instaluesin këtu

Pasi të përfundojë instalimi, krijoni një mjedis të ri:

conda create -n ml piton = 3.7

Le të aktivizojmë mjedisin e ri

conda aktivizoni ml

Një parashtesë para guaskës tuaj bash do të shfaqet me emrin e mjedisit, duke treguar që ju punoni tani në atë mjedis.

Hapi 3: Instaloni AXeleRate dhe Drejtoni Testet

Instaloni testet AXeleRate dhe Run
Instaloni testet AXeleRate dhe Run

Instaloni aXeleRate në makinën tuaj lokale me

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

Për të shkarkuar shembuj ekzekutoni:

git klon

Ju mund të bëni teste të shpejta me tests_training.py në dosjen aXeleRate. Ai do të kryejë trajnime dhe përfundime për secilin lloj modeli, do të kursejë dhe konvertojë modele të trajnuara. Meqenëse është vetëm trajnim për 5 epoka dhe grupi i të dhënave është shumë i vogël, nuk do të jeni në gjendje të merrni modele të dobishme, por ky skenar është menduar vetëm për të kontrolluar mungesën e gabimeve.

Hapi 4: Ri-stërvitni modelin, shndërroni modelin Keras në.kmodel

Ri-trajnoni modelin, shndërroni modelin Keras në.kmodel
Ri-trajnoni modelin, shndërroni modelin Keras në.kmodel

Për këtë shembull lodrash ne do të trajnojmë modelin për të njohur Santa Claus dhe Arduino Uno. Natyrisht që ju mund të zgjidhni klasa të tjera. Shkarkoni bazën e të dhënave nga këtu. Krijoni një kopje të skedarit classifier.json në dosjen e konfigurimit, pastaj ndryshojeni në përputhje me rrethanat, e ngjashme me skedarin e konfigurimit në pamjen e ekranit - sigurohuni që rruga drejt dosjeve të trajnimit dhe vërtetimit është e saktë!

Drejtoni komandën e mëposhtme nga dosja aXeleRate:

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

Trajnimi do të fillojë. Nëse saktësia e vlerësimit (metrika jonë e vlefshmërisë) nuk po përmirësohet për 20 epoka, trajnimi do të ndalet para kohe. Sa herë që saktësia e vlerësimit përmirësohet, modeli ruhet në dosjen e projektit. Pas përfundimit të trajnimit, aXeleRate konverton automatikisht modelin më të mirë në formate të specifikuara - tani mund të zgjidhni, "tflite", "k210" ose "edgetpu".

Hapi 5: Drejtoni modelin në Sipeed Maix Bit

Drejtoni modelin në Sipeed Maix Bit
Drejtoni modelin në Sipeed Maix Bit
Drejtoni modelin në Sipeed Maix Bit
Drejtoni modelin në Sipeed Maix Bit
Drejtoni modelin në Sipeed Maix Bit
Drejtoni modelin në Sipeed Maix Bit

Ekzistojnë dy mënyra për të drejtuar modelin që keni tani në pajisjen Sipeed Maix: firmware micropython dhe Arduino IDE. Pajisjet Micropython janë më të lehta për t'u përdorur, por zënë një pjesë të konsiderueshme të kujtesës në dispozicion, kështu që ka më pak hapësirë për modelin. Arduino IDE është në thelb kodi C, i cili është shumë më efikas dhe ka gjurmë më të vogël të kujtesës. Modeli im është vetëm 1.9Mb, kështu që të dy opsionet funksionojnë për të. Ju mund të përdorni modele të mëdha deri në 2.9 Mb me Micropython, për çdo gjë më të madhe që duhet të merrni parasysh duke përdorur Arduino IDE.

Shkarkoni OpenMV IDE nga këtu dhe firmware minimal micropython nga këtu.

Djeg firmware me mjetin kflash_gui. Ju gjithashtu mund të zgjidhni të digjni modelin e stërvitur për të ndezur gjithashtu, siç tregohet në pamjen e ekranit. Ose kopjojeni atë në kartën SD (në atë rast kopjoni.kmodel në rrënjën e një karte SD dhe futni kartën SD në Sipeed Maix Bit)

Hapni OpenMV IDE dhe shtypni butonin e lidhjes. Hapni skriptin santa_uno.py nga dosja example_scripts dhe shtypni butonin Start. Ju duhet të shihni një transmetim të drejtpërdrejtë nga kamera dhe nëse hapni Terminalin Serial do të arrini rezultatin kryesor të njohjes së imazhit me rezultatin e besimit!

Për ta përdorur me Arduino IDE, së pari duhet të ndiqni procedurën për shtimin e pllakave Sipeed në Arduino IDE, e cila është e dokumentuar këtu. Versioni juaj Arduino IDE duhet të jetë së paku 1.8.12. Pasi të keni shtuar bordet, hapni skicën mobilenet_v1_transfer_learning.ino dhe ngarkojeni në Sipeed Maix Bit. Ndryshoni emrin e modelit në kartën SD në "model" (ose bëni një kopje me këtë emër). Ju mund të ndryshoni emrat e etiketave në names.cpp. Do të shfaqë transmetimin e drejtpërdrejtë të kamerës në ekranin e Sipeed Maix së bashku me rezultatin kryesor të njohjes së imazhit.

Hapi 6: Përfundime

Këtu janë disa materiale të tjera për të lexuar në temën e CNN -ve dhe për të transferuar mësimin:

Transferimi i të mësuarit duke përdorur Mobilenet dhe Keras Një shpjegim i shkëlqyeshëm i transferimit të mësimit, ky tutorial përdor një version të modifikuar të kodit nga ai artikull.

Macet dhe qentë dhe rrjetet nervore konvolucionale Shpjegon bazat pas CNN -ve dhe vizualizon disa nga filtrat. Me macet!

Trajnoni, Konvertoni, Drejtoni MobileNet në Sipeed MaixPy dhe MaixDuino! Një mësim nga ekipi i Sipeed se si të stërvitni klasat Mobilenet 1000 nga e para (pa mësim transferimi). Ju mund të shkarkoni modelin e tyre të para-trajnuar dhe ta provoni!

Shpresoj se mund të përdorni njohuritë që keni tani për të ndërtuar disa projekte të mrekullueshme me vizion makinerik! Ju mund të blini bordet Sipeed këtu, ato janë ndër opsionet më të lira të disponueshme për ML në sistemet e ngulitura.

Recommended: