Cuprins:

Este asta o mână? (Camera Raspberry Pi + Rețea neuronală) Partea 1/2: 16 pași (cu imagini)
Este asta o mână? (Camera Raspberry Pi + Rețea neuronală) Partea 1/2: 16 pași (cu imagini)

Video: Este asta o mână? (Camera Raspberry Pi + Rețea neuronală) Partea 1/2: 16 pași (cu imagini)

Video: Este asta o mână? (Camera Raspberry Pi + Rețea neuronală) Partea 1/2: 16 pași (cu imagini)
Video: Essential Scale-Out Computing by James Cuff 2024, Decembrie
Anonim
Este asta o mână? (Cameră Raspberry Pi + Rețea neuronală) Partea 1/2
Este asta o mână? (Cameră Raspberry Pi + Rețea neuronală) Partea 1/2
Este asta o mână? (Cameră Raspberry Pi + Rețea neuronală) Partea 1/2
Este asta o mână? (Cameră Raspberry Pi + Rețea neuronală) Partea 1/2
Este asta o mână? (Cameră Raspberry Pi + Rețea neuronală) Partea 1/2
Este asta o mână? (Cameră Raspberry Pi + Rețea neuronală) Partea 1/2

Acum câteva zile, mi-am rănit încheietura mâinii drepte la sala de sport. Ulterior, de fiecare dată când am folosit mouse-ul computerului, a cauzat multă durere din cauza unghiului abrupt al încheieturii mâinii.

Atunci m-a lovit „nu ar fi grozav dacă am putea converti orice suprafață într-un trackpad” și nu știu de ce, dar dintr-un anumit motiv m-am gândit la ea, la filmul HER, vă voi lăsa să vă dați seama afară. A fost un gând emoționant, dar nu știam dacă aș putea să-l fac, am decis să încerc.

Acest articol surprinde ceea ce a ieșit din el.

Înainte de a începe, am un disclaimer-

„La sfârșitul acestui articol, nu puteam converti nicio suprafață într-un trackpad, dar nu învățam multe și adăugam instrumente mari arsenalului meu. Sper că ți se întâmplă și ție

Să începem.

Pasul 1: Video

Image
Image

Iată un minuscul videoclip de 5 minute care acoperă toți pașii. Aruncă o privire.

Pasul 2: Hardware

Hardware
Hardware

Am configurat un raspberry pi împreună cu camera raspberry pi la o înălțime de aproximativ 45 cm. Acest lucru ne oferă o suprafață de monitorizare de aproximativ 25x25 cm sub cameră.

Raspberry pi și camera raspberry pi sunt ușor disponibile, doar google-l și ar trebui să puteți găsi un magazin local.

Aruncați o privire la acest link sau una dintre listele mele de redare Raspberry pi pentru a vă pune în funcțiune pi-ul fără cap.

După această configurare, avem nevoie de o bucată de cod care să decidă dacă există o mână în zona pe care camera o monitorizează și dacă da unde este.

Pasul 3: Bucată de cod

Bucată de cod
Bucată de cod
Bucată de cod
Bucată de cod

O bucată de cod care ne permite să decidem dacă există o zonă de interes utilizează ceva numit Neural Network. Acestea se încadrează în categoria de programare în care nu definim reguli pentru a lua decizii, dar arătăm rețelelor neuronale suficiente date pentru a stabili regulile singure.

În cazul nostru, în loc să codificăm cum arată mâna, prezentăm imagini de rețea neuronală capturate din zmeură pi care conține mână și care nu conține mână. Această fază se numește formarea rețelei neuronale, iar imaginile utilizate sunt denumite seturi de date de formare.

Pasul 4: Obținerea de imagini

Obținerea de imagini
Obținerea de imagini

M-am conectat la distanță la raspberry pi și am capturat o grămadă de imagini folosind următoarea comandă.

sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o cadru% 04d.jpg

Am capturat 80 de imagini cu mâna și 80 de imagini care nu conțin mâna. 160 de imagini nu sunt suficiente pentru a antrena corect o rețea neuronală, dar ar trebui să fie suficiente pentru dovada conceptului.

Pe lângă 160 de imagini, am capturat încă 20 de imagini pentru a testa rețeaua noastră odată ce a fost antrenată.

Odată ce setul de date a fost gata, am început să scriu cod pentru rețeaua neuronală.

Pasul 5: Instrumente și limbă utilizate

Instrumente și limbaj utilizate
Instrumente și limbaj utilizate
Instrumente și limbaj utilizate
Instrumente și limbaj utilizate

Mi-am scris rețeaua neuronală într-o bibliotecă Python Deep Learning numită Keras și codul este scris pe notebook-ul jupyter de la navigatorul anaconda.

Pasul 6: Pregătirea setului de date pentru instruire

Pregătirea setului de date pentru instruire
Pregătirea setului de date pentru instruire
Pregătirea setului de date pentru instruire
Pregătirea setului de date pentru instruire
Pregătirea setului de date pentru instruire
Pregătirea setului de date pentru instruire
Pregătirea setului de date pentru instruire
Pregătirea setului de date pentru instruire

În primul rând (Imaginea # 1) Am inclus toate bibliotecile necesare pentru acest proiect, care include PIL, matplotlib, numpy, os și Keras. În a doua celulă a blocnotesului Python (Imaginea # 2) definesc căile către setul de date și imprim numărul de eșantioane. Acum trebuie să încărcăm toate imaginile într-o matrice numpy, prin urmare, în a treia celulă (imaginea # 2) am creat o matrice numpy de 82 (numărul de eșantion manual) +75 (numărul de eșantion non-manual) adică 157x100x100x3. 157 este numărul total de imagini pe care le am, 100x100 este dimensiunea redimensionată a imaginii și 3 este pentru straturile de culoare roșu, verde și albastru din imagine.

În a patra și a cincea celulă, încărcăm imagini care conțin mână urmate de imagini care nu conțin mână în matricea numpy. În cea de-a șasea celulă, împărțim fiecare valoare la 255, deci limităm intervalul de valori de la 0 la 1. (Imaginea # 3)

Îmi pare rău dacă imaginile atașate nu sunt suficient de bune. Aici este un link către depozitul GITHUB pentru a vedea codul. Nu uitați să înlocuiți numele căilor de director cu calea dvs.:).

Se deplasează de-a lungul.

Apoi trebuie să etichetăm fiecare imagine, deci creăm o matrice unidimensională numpy de 157 în lungime. Primele 82 de intrări sunt setate la 1, iar restul de 75 de intrări sunt setate la 0, care transmit rețeaua neuronală, primele 82 de imagini provin dintr-o clasă și restul provin din alta. (Imaginea # 4)

Acum să creăm o rețea neuronală.

Pasul 7: Rețea neuronală

Retea neurala
Retea neurala
Retea neurala
Retea neurala

În a noua celulă, ne definim rețeaua neuronală. Conține trei repetări ale stratului de convoluție urmate de straturi maxpool cu 8, 12 și respectiv 16 filtre de convoluție. În continuare, avem două plase neuronale dense. Atașarea a două imagini pentru acest pas. În primul rând este captura de cod care creează rețea neuronală și a doua este reprezentarea picturală a rețelei neuronale cu dimensiunea de ieșire și operațiile adnotate.

Pasul 8: Antrenarea rețelei neuronale

Rețea neuronală de formare
Rețea neuronală de formare

În a zecea celulă, configurăm optimizatorul de rețea neuronală la „Adam” și funcția de pierdere la „binary_crossentropy”. Acestea joacă un rol major în actualizarea ponderilor rețelei. În cele din urmă, atunci când rulăm celula a unsprezecea, rețeaua neuronală începe să se antreneze. În timp ce rețeaua se antrenează, uitați-vă la funcția de pierdere și asigurați-vă că aceasta scade.

Pasul 9: Testarea rețelei neuronale

Testarea rețelei neuronale
Testarea rețelei neuronale

Odată ce rețeaua neuronală este antrenată, trebuie să pregătim setul de date de testare. Repetăm procedura făcută pentru a pregăti setul de antrenament în celulele 3, 4, 5 și 6 pe datele de testare pentru a crea setul de testare. De asemenea, pregătim eticheta pentru setul de testare, dar de data aceasta rulăm modelul pe aceste seturi de date pentru a obține predicții și nu pentru a ne antrena.

Pasul 10: Rezultat și partea următoare…

Rezultat și următoarea parte…
Rezultat și următoarea parte…

Am o acuratețe a testului de 88%, dar iau acest lucru cu un vârf de sare, deoarece setul de date folosit pentru antrenament și testarea acestui model sunt foarte foarte foarte mici și inadecvate pentru a antrena corect acest model.

Oricum sper să vă fi plăcut acest articol. Intenția mea din spatele acestui exercițiu nu este încă completă și ai grijă la a doua parte. Îl voi încărca cât de repede pot.

În partea următoare, vom instrui o altă rețea neuronală care ne va spune locația mâinii într-o imagine detectată manual.

Toate interogările sunt binevenite.

Dacă cineva este interesat să folosească micul meu set de date, anunțați-mă în comentarii. Îl voi pune la dispoziție.

Mulțumesc pentru lectură. Ne vedem în curând cu a doua parte până atunci de ce nu creezi și nu antrenezi o rețea neuronală?

Editați: - Pașii următori sunt pentru a doua parte.

Pasul 11: Detectarea obiectelor

Detectarea obiectelor
Detectarea obiectelor

În pașii anteriori am creat un NN care ne spune dacă imaginea de testare conține mână sau nu. Ei bine, ce urmează? Dacă NN clasifică imaginea ca conținând mâna, am dori să aflăm locația mâinii. Aceasta se numește detectarea obiectelor în literatura de viziune pe computer. Deci, să antrenăm NN care face exact același lucru.

Pasul 12: Video

Image
Image

Un videoclip de 3 minute care explică toți pașii rămași. Aruncă o privire.

Pasul 13: Etichetare

Etichetare
Etichetare
Etichetare
Etichetare
Etichetare
Etichetare

Dacă doriți ca o rețea neuronală să scoată locația mâinii, trebuie să o antrenăm într-o astfel de manieră, adică spre deosebire de rețeaua neuronală anterioară în care fiecare imagine a fost etichetată fie cu mână, fie fără mână. De această dată, toate imaginile cu mâna vor avea patru etichete corespunzătoare coordonatelor diagonale ale casetei de delimitare în jurul mâinii din acea imagine.

Imaginea atașată a fișierului CSV conține etichetă pentru fiecare imagine. Rețineți că coordonatele sunt normalizate cu dimensiunea imaginii, adică dacă coordonatele X superioare sunt la 320 de pixeli în imaginea cu lățimea de 640 pixeli, o vom eticheta ca 0,5.

Pasul 14: Etichetarea GUI

Etichetare GUI
Etichetare GUI
Etichetare GUI
Etichetare GUI
Etichetare GUI
Etichetare GUI
Etichetare GUI
Etichetare GUI

S-ar putea să vă întrebați cum am reușit să etichetez toate cele 82 de imagini, ei bine, am scris un GUI în python care m-a ajutat cu această sarcină. Odată ce imaginea este încărcată în GUI. Am făcut clic stânga la coordonata superioară și clic dreapta la coordonata inferioară a casetei de delimitare probabile din jurul mâinii. Aceste coordonate sunt apoi scrise într-un fișier după care fac clic pe butonul Următor pentru a încărca următoarea imagine. Am repetat această procedură pentru toate cele 82 de trenuri și 4 imagini de testare. Odată ce etichetele erau gata, era timpul de antrenament.

Pasul 15: Biblioteci necesare

Biblioteci necesare
Biblioteci necesare
Biblioteci necesare
Biblioteci necesare
Biblioteci necesare
Biblioteci necesare

Mai întâi trebuie să încărcăm toate bibliotecile necesare. Care include

  • PIL pentru manipularea imaginii,
  • matplotlib pentru complot,
  • numpy pentru operarea matricei,
  • OS pentru funcționalitatea dependentă de sistemul de operare și
  • kere pentru rețeaua neuronală.

Pasul 16: Celulele rămase

Celule rămase
Celule rămase
Celule rămase
Celule rămase
Celule rămase
Celule rămase
Celule rămase
Celule rămase

În a 2-a, a 3-a, a 4-a și a 5-a celulă încărcăm imagini în matrice numpy și creăm o matrice cu patru dimensiuni din fișierul CSV pentru a acționa ca etichete. În celula numărul 6 creăm rețeaua noastră neuronală. Arhitectura sa este identică cu rețeaua neuronală utilizată pentru clasificare, cu excepția dimensiunii stratului de ieșire care este 4 și nu 1. O altă diferență vine de la funcția de pierdere utilizată, care este eroarea pătrată medie. În celula numărul 8 începem antrenamentul rețelei noastre neuronale odată ce am fost antrenat. Am rulat acest model pe setul de testare pentru a obține predicții pentru caseta de delimitare pe coordonatele suprapuse ale casetei de delimitare, au arătat destul de precise.

Mulțumesc pentru lectură.

Recomandat: