Taula de continguts:

És això una mà? (Càmera Raspberry Pi + xarxa neuronal) Part 1/2: 16 passos (amb imatges)
És això una mà? (Càmera Raspberry Pi + xarxa neuronal) Part 1/2: 16 passos (amb imatges)

Vídeo: És això una mà? (Càmera Raspberry Pi + xarxa neuronal) Part 1/2: 16 passos (amb imatges)

Vídeo: És això una mà? (Càmera Raspberry Pi + xarxa neuronal) Part 1/2: 16 passos (amb imatges)
Vídeo: Основы горизонтально масштабируемых вычислений Джеймса Каффа 2024, Desembre
Anonim
És això una mà? (Càmera Raspberry Pi + xarxa neuronal) Part 1/2
És això una mà? (Càmera Raspberry Pi + xarxa neuronal) Part 1/2
És això una mà? (Càmera Raspberry Pi + Xarxa neuronal) Part 1/2
És això una mà? (Càmera Raspberry Pi + Xarxa neuronal) Part 1/2
És això una mà? (Càmera Raspberry Pi + Xarxa neuronal) Part 1/2
És això una mà? (Càmera Raspberry Pi + Xarxa neuronal) Part 1/2

Fa uns dies, em vaig ferir el canell a la mà dreta al gimnàs. Després, cada vegada que feia servir el ratolí de l'ordinador, causava molt dolor a causa de l'angle fort del canell.

Va ser llavors quan em va tocar "no seria fantàstic que poguéssim convertir cap superfície en un trackpad" i no sé per què, però per alguna raó vaig pensar en ella, la pel·lícula HER, us deixaré que ho calculeu fora. Va ser un pensament emocionant, però no sabia si podia fer-ho, vaig decidir provar-ho.

Aquest article recull el que en va sortir.

Abans de començar tinc una exempció de responsabilitat-

Al final d'aquest article, no podia convertir cap superfície en un trackpad, però no vaig aprendre molt i vaig afegir grans eines al meu arsenal. Espero que això també us passi '

Comencem.

Pas 1: vídeo

Image
Image

Aquí teniu un petit vídeo de 5 minuts que abasta tots els passos. Fes un cop d'ull.

Pas 2: maquinari

Maquinari
Maquinari

He configurat un raspberry pi juntament amb una càmera raspberry pi a una alçada d’uns 45 cm. Això ens proporciona una superfície de control d’uns 25x25 cm a sota de la càmera.

Les càmeres Raspberry pi i raspberry pi estan fàcilment disponibles, només cal buscar-ne Google i hauríeu de trobar una botiga local.

Mireu aquest enllaç o una de les meves llistes de reproducció de Raspberry pi per posar en marxa el vostre pi sense cap.

Després d'aquesta configuració, necessitem un fragment de codi que decideixi si hi ha una mà a la zona que la càmera està supervisant i, en cas afirmatiu, on és.

Pas 3: tros de codi

Peça de codi
Peça de codi
Peça de codi
Peça de codi

Un tros de codi que ens permet decidir si hi ha una àrea d'interès que utilitza alguna cosa anomenada Neural Network. Es troben dins de la categoria de programació en què no definim regles per prendre decisions, però mostrem prou dades de la xarxa neuronal perquè esbrini les regles per si mateixes.

En el nostre cas, en lloc de codificar l’aspecte de la mà, mostrem imatges de la xarxa neuronal capturades des de raspberry pi que conté mà i que no conté mà. Aquesta fase s’anomena entrenament de la xarxa neuronal i les imatges utilitzades s’anomenen conjunt de dades d’entrenament.

Pas 4: Obtenir imatges

Obtenir imatges
Obtenir imatges

Vaig iniciar la sessió a distància al meu raspberry pi i vaig capturar un munt d'imatges amb l'ordre següent.

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

He capturat 80 imatges amb mà i 80 imatges que no contenen mà. 160 imatges no són suficients per entrenar correctament una xarxa neuronal, sinó que n'hi hauria prou per demostrar el concepte.

A més de 160 imatges, vaig capturar 20 imatges més per provar la nostra xarxa un cop entrenada.

Un cop preparat el conjunt de dades, vaig començar a escriure codi per a la xarxa neuronal.

Pas 5: eines i idioma usats

Eines i llenguatge utilitzat
Eines i llenguatge utilitzat
Eines i llenguatge utilitzat
Eines i llenguatge utilitzat

Vaig escriure la meva xarxa neuronal a la biblioteca d'aprenentatge profund Python anomenada Keras i el codi està escrit a la llibreta jupyter des del navegador anaconda.

Pas 6: Preparació del conjunt de dades per a la formació

Preparació del conjunt de dades per a la formació
Preparació del conjunt de dades per a la formació
Preparació del conjunt de dades per a la formació
Preparació del conjunt de dades per a la formació
Preparació del conjunt de dades per a la formació
Preparació del conjunt de dades per a la formació
Preparació del conjunt de dades per a la formació
Preparació del conjunt de dades per a la formació

Primer (imatge # 1) He inclòs totes les biblioteques necessàries per a aquest projecte, que inclou PIL, matplotlib, numpy, os i Keras. A la segona cel·la del bloc de notes Python (imatge núm. 2) defineixo camins cap al conjunt de dades i imprimeixo el recompte de mostres. Ara hem de carregar totes les imatges en una matriu numpy, per tant, a la tercera cel·la (imatge núm. 2) he creat una matriu numpy de 82 (nombre de mostra manual) +75 (nombre de mostra no manual) és a dir, 157x100x100x3. 157 és el nombre total d'imatges que tinc, 100x100 és la mida de la imatge redimensionada i 3 correspon a capes de color vermell, verd i blau a la imatge.

A la quarta i cinquena cel·la, carreguem imatges que contenen mà seguida d’imatges que no contenen mà a la matriu numpy. A la sisena cel·la, dividim cada valor per 255, per tant, limitem l'interval de valors de 0 a 1. (Imatge # 3)

Em sap greu si les imatges adjuntes no són prou bones. Aquí hi ha un enllaç al dipòsit de GITHUB per veure el codi. No oblideu substituir els noms de camins de directori pel vostre camí:).

Avançant.

A continuació, hem d’etiquetar cada imatge, de manera que creem una matriu numpy unidimensional de 157 de longitud. Les primeres 82 entrades s’estableixen a 1 i les 75 entrades restants s’estableixen a 0 que transmeten una xarxa neuronal que les primeres 82 imatges són d’una classe i les restants són d’una altra. (Imatge # 4)

Ara anem a crear una xarxa neuronal.

Pas 7: xarxa neuronal

Xarxa neuronal
Xarxa neuronal
Xarxa neuronal
Xarxa neuronal

A la novena cèl·lula, definim la nostra xarxa neuronal. Conté tres repeticions de capa de convolució seguides de capes maxpool amb 8, 12 i 16 filtres de convolució respectivament. Després, tenim dues denses xarxes neuronals. Adjuntant dues imatges per a aquest pas. El primer és un fragment de codi que crea xarxa neuronal i el segon és la representació pictòrica de la xarxa neuronal amb dimensió de sortida i operacions anotades.

Pas 8: formació de la xarxa neuronal

Xarxa neuronal d’entrenament
Xarxa neuronal d’entrenament

A la desena cel·la, configurem l’optimitzador de xarxa neuronal a “Adam” i la funció de pèrdua a “binary_crossentropy”. Tenen un paper important en l’actualització dels pesos de la xarxa. Finalment, quan executem l’onzena cèl·lula, la xarxa neuronal comença a entrenar-se. Mentre la xarxa s’està entrenant, mireu la funció de pèrdua i assegureu-vos que disminueix.

Pas 9: provar la xarxa neuronal

Prova de la xarxa neuronal
Prova de la xarxa neuronal

Un cop entrenada la xarxa neuronal, hem de preparar un conjunt de dades de proves. Repetim el procediment realitzat per preparar el conjunt d'entrenament a la 3a, 4a, 5a i 6a cel·la sobre les dades de prova per crear el conjunt de proves. També preparem etiquetes per al conjunt de proves, però aquesta vegada executem el model d’aquest conjunt de dades per obtenir prediccions i no per entrenar.

Pas 10: Resultat i següent part …

Resultat i següent part…
Resultat i següent part…

Tinc una precisió de prova del 88%, però agafo això amb una mica de sal, ja que el conjunt de dades que s’utilitza per entrenar i provar aquest model són molt, molt petits i insuficients per entrenar correctament aquest model.

De tota manera espero que us hagi agradat aquest article. La meva intenció darrere d’aquest exercici encara no està completa i vés amb compte amb la 2a part. El penjaré tan aviat com pugui.

A la següent part, entrenarem una altra xarxa neuronal que ens indicarà la ubicació de la mà en una imatge detectada a mà.

Totes les consultes són benvingudes.

Si algú està interessat en utilitzar el meu petit conjunt de dades, feu-m'ho saber als comentaris. Ho posaré disponible.

Gràcies per llegir. Aviat ens veurem amb la segona part fins llavors, per què no creeu i no formeu una xarxa neuronal?

Edita: - Els passos següents són per a la segona part.

Pas 11: Detecció d'objectes

Detecció d'objectes
Detecció d'objectes

En passos anteriors vam crear un NN que ens indica si la imatge de prova conté o no mà. Doncs què després? Si NN classifica la imatge com a mà que conté, ens agradaria saber la ubicació de la mà. Això s’anomena detecció d’objectes en la literatura de visió per computador. Així que formem NN que fa exactament el mateix.

Pas 12: vídeo

Image
Image

Un vídeo de 3 minuts que explica tots els passos restants. Fes un cop d'ull.

Pas 13: etiquetatge

Etiquetatge
Etiquetatge
Etiquetatge
Etiquetatge
Etiquetatge
Etiquetatge

Si voleu que una xarxa neuronal produeixi la ubicació de la mà, l’hem de formar d’una manera tal, és a dir, a diferència de la xarxa neuronal anterior, on cada imatge s’etiquetava amb la mà i sense la mà. Aquesta vegada, totes les imatges amb mà tindran quatre etiquetes que corresponen a les coordenades diagonals de la caixa delimitadora al voltant de la mà en aquesta imatge.

La imatge adjunta del fitxer CSV conté etiquetes per a cada imatge. Tingueu en compte que les coordenades es normalitzen amb la dimensió de la imatge, és a dir, si la coordenada X superior es troba al 320è píxel de la imatge amb una amplada de 640 píxels, l’etiquetarem com a 0,5.

Pas 14: etiquetatge de la GUI

Etiquetatge GUI
Etiquetatge GUI
Etiquetatge GUI
Etiquetatge GUI
Etiquetatge GUI
Etiquetatge GUI
Etiquetatge GUI
Etiquetatge GUI

Potser us preguntareu com he aconseguit etiquetar les 82 imatges, així que he escrit una GUI en python que em va ajudar amb aquesta tasca. Un cop carregada la imatge a la GUI. Vaig fer clic esquerre a la coordenada superior i fer clic dret a la coordenada inferior del quadre de delimitació probable al voltant de la mà. Aquestes coordenades s'escriuen a un fitxer després de fer clic al botó següent per carregar la següent imatge. Vaig repetir aquest procediment per a totes les imatges de prova de 82 tren i 4. Un cop llestes les etiquetes, era hora d’entrenar.

Pas 15: cal biblioteques

Es necessiten biblioteques
Es necessiten biblioteques
Es necessiten biblioteques
Es necessiten biblioteques
Es necessiten biblioteques
Es necessiten biblioteques

Primer hem de carregar totes les biblioteques necessàries. Que inclou

  • PIL per a la manipulació d’imatges,
  • matplotlib per traçar,
  • numpy per a l'operació de matriu,
  • OS per a funcionalitats i sistemes dependents del sistema operatiu
  • keres per a xarxa neuronal.

Pas 16: Cèl·lules restants

Cèl·lules restants
Cèl·lules restants
Cèl·lules restants
Cèl·lules restants
Cèl·lules restants
Cèl·lules restants
Cèl·lules restants
Cèl·lules restants

A la 2a, 3a, 4a i 5a cel·la, carreguem imatges en una matriu numpy i creem una matriu de quatre dimensions a partir del fitxer csv perquè actuïn com a etiquetes. A la cel·la número 6 creem la nostra xarxa neuronal. La seva arquitectura és idèntica a la xarxa neuronal utilitzada per a la classificació, excepte la dimensió de la capa de sortida que és 4 i no 1. Una altra diferència prové de la funció de pèrdua utilitzada, que és l’error quadrat mitjà. A la cel·la número 8, comencem l’entrenament de la nostra xarxa neuronal un cop entrenat. Vaig executar aquest model en el conjunt de proves per obtenir prediccions sobre la caixa delimitadora sobre les coordenades superposades de la caixa delimitadora que semblaven bastant precises.

Gràcies per llegir.

Recomanat: