Satura rādītājs:
- 1. darbība: video
- 2. darbība. Aparatūra
- 3. darbība. Koda gabals
- 4. darbība: attēlu iegūšana
- 5. darbība. Izmantotie rīki un valoda
- 6. darbība: datu kopas sagatavošana apmācībai
- 7. solis: neironu tīkls
- 8. solis: Neironu tīkla apmācība
- 9. solis: neironu tīkla pārbaude
- 10. solis: rezultāts un nākamā daļa…
- 11. darbība. Objekta noteikšana
- 12. darbība: video
- 13. darbība. Marķēšana
- 14. darbība. GUI marķēšana
- 15. darbība. Nepieciešamas bibliotēkas
- 16. darbība. Atlikušās šūnas
Video: Vai tā ir roka? (Raspberry Pi kamera + neironu tīkls) 1/2. Daļa: 16 soļi (ar attēliem)
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:57
Pirms dažām dienām sporta zālē es savainoju labās rokas plaukstas locītavu. Pēc tam katru reizi, kad izmantoju datora peli, tas radīja daudz sāpju stāva plaukstas leņķa dēļ.
Tieši tad mani piemeklēja "vai nebūtu lieliski, ja mēs varētu pārvērst jebkuru virsmu skārienpaliktnī", un es nezinu, kāpēc, bet nez kāpēc es domāju par viņu, filma VIŅA, es ļaušu jums to izdomāt ārā. Tā bija aizraujoša doma, bet es nezināju, vai es to varu, es nolēmu pamēģināt.
Šis raksts atspoguļo to, kas no tā iznāca.
Pirms sākam, man ir atruna-
“Šī raksta beigās es nevarēju nevienu virsmu pārvērst par skārienpaliktni, bet es daudz neuzzinu un pievienoju lielus rīkus savam arsenālam. Es ceru, ka tas notiek arī ar jums '
Sāksim.
1. darbība: video
Šeit ir neliels 5 minūšu video, kas aptver visus soļus. Paskaties.
2. darbība. Aparatūra
Es iestatīju aveņu pi kopā ar aveņu pi kameru apmēram 45 cm augstumā. Tas dod mums uzraudzības laukumu aptuveni 25x25 cm zem kameras.
Raspberry pi un aveņu pi kamera ir viegli pieejama, vienkārši google to, un jums vajadzētu būt iespējai atrast vietējo veikalu.
Apskatiet šo saiti vai kādu no maniem Raspberry pi atskaņošanas sarakstiem, lai izveidotu savu bezgalvaino pi.
Pēc šīs iestatīšanas mums ir nepieciešams koda gabals, kas izlemj, vai kameras uzraudzītajā zonā ir roka un, ja jā, kur tā atrodas.
3. darbība. Koda gabals
Koda gabals, kas ļauj mums izlemt, vai ir interesējošā joma, izmanto kaut ko, ko sauc par neironu tīklu. Tie ietilpst programmēšanas kategorijā, kur mēs nenosakām noteikumus, lai pieņemtu lēmumu, bet mēs parādām neironu tīklam pietiekami daudz datu, lai tas pats noteiktu noteikumus.
Mūsu gadījumā tā vietā, lai kodētu, kā izskatās roka, mēs parādām neironu tīkla attēlus, kas uzņemti no aveņu pi, kurā ir roka un kurā nav rokas. Šo posmu sauc par neironu tīkla apmācību, un izmantotos attēlus sauc par mācību datu kopu.
4. darbība: attēlu iegūšana
Es attāli pieteicos savā aveņu pi un uzņemu vairākus attēlus, izmantojot šādu komandu.
sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o frame%04d.jpg
Es uzņēmu 80 attēlus ar roku un 80 attēlus, kuros nav rokas. Ar 160 attēliem nepietiek, lai pareizi apmācītu neironu tīklu, bet ar tiem vajadzētu pietikt koncepcijas pierādīšanai.
Papildus 160 attēliem es iemūžināju vēl 20 attēlus, lai pārbaudītu mūsu tīklu, kad tas ir apmācīts.
Kad datu kopa bija gatava, es sāku rakstīt kodu neironu tīklam.
5. darbība. Izmantotie rīki un valoda
Es uzrakstīju savu neironu tīklu Python dziļo mācību bibliotēkā ar nosaukumu Keras, un kods ir uzrakstīts uz Jupyter piezīmjdatora no anaconda navigatora.
6. darbība: datu kopas sagatavošana apmācībai
Vispirms (1. attēls) es iekļāvu visas šim projektam nepieciešamās bibliotēkas, tostarp PIL, matplotlib, numpy, os un Keras. Python piezīmjdatora otrajā šūnā (2. attēls) es definēju ceļus uz datu kopu un izdrukāju paraugu skaitu. Tagad mums ir jāielādē visi attēli numpy masīvā, tāpēc trešajā šūnā (2. attēls) es izveidoju numpy masīvu 82 (roku parauga skaits) +75 (parauga, kas nav roku skaits), ti, 157x100x100x3. 157 ir kopējais manu attēlu skaits, 100x100 ir mūsu mainītā attēla izmērs, bet 3 - sarkanās, zaļās un zilās krāsas slāņiem attēlā.
Ceturtajā un piektajā šūnā mēs ielādējam attēlus, kas satur roku, kam seko attēli, kas nesatur roku numpy masīvā. Sestajā šūnā mēs katru vērtību dalām ar 255, tādējādi ierobežojot vērtību diapazonu no 0 līdz 1. (Attēls #3)
Atvainojiet, ja pievienotie attēli nav pietiekami labi. Šeit ir saite uz GITHUB repozitoriju, lai jūs varētu apskatīt kodu. Neaizmirstiet aizstāt direktoriju ceļu nosaukumus ar savu ceļu:).
Virzoties līdzi.
Tālāk mums ir jāmarķē katrs attēls, tāpēc mēs izveidojam viendimensiju numura masīvu 157 garumā. Pirmie 82 ieraksti ir iestatīti uz 1, bet pārējie 75 ieraksti ir iestatīti uz 0, kas pārraida neironu tīklu, pirmie 82 attēli ir no vienas klases, bet pārējie - no citas. (Attēls #4)
Tagad izveidosim neironu tīklu.
7. solis: neironu tīkls
Devītajā šūnā mēs definējam savu neironu tīklu. Tas satur trīs konvolūcijas slāņa atkārtojumus, kam seko maxpool slāņi ar attiecīgi 8, 12 un 16 konvolūcijas filtriem. Pēc tam mums ir divi blīvi neironu tīkli. Šim solim pievieno divus attēlus. Pirmais ir koda snap, kas rada neironu tīklu, un otrais ir neironu tīkla attēlojums ar izvades dimensiju un operācijām.
8. solis: Neironu tīkla apmācība
Desmitajā šūnā mēs konfigurējam neironu tīkla optimizētāju uz “adam” un zaudējumu funkciju uz “binary_crossentropy”. Tiem ir liela nozīme tīkla svaru atjaunināšanā. Visbeidzot, kad mēs vadām vienpadsmito šūnu, neironu tīkls sāk trenēties. Kamēr tīkls trenējas, apskatiet zaudējumu funkciju un pārliecinieties, ka tā samazinās.
9. solis: neironu tīkla pārbaude
Kad neironu tīkls ir apmācīts, mums ir jāsagatavo testa datu kopa. Lai izveidotu testa kopu, mēs atkārtojam procedūru, kas veikta, lai sagatavotu apmācības komplektu testa datu 3., 4., 5. un 6. šūnā. Mēs arī sagatavojam marķējumu testu kopai, taču šoreiz mēs izmantojam modeli uz šīm datu kopām, lai iegūtu prognozes un netiktu apmācīti.
10. solis: rezultāts un nākamā daļa…
Es saņēmu 88% testa precizitāti, bet ņemu to ar šķipsniņu sāls, jo šī modeļa apmācībai un testēšanai izmantotā datu kopa ir ļoti, ļoti maza un nepietiekama, lai pareizi apmācītu šo modeli.
Jebkurā gadījumā es ceru, ka jums patika šis raksts. Mans nodoms aiz šī vingrinājuma vēl nav pabeigts, un esiet uzmanīgs otrajai daļai. Es to augšupielādēšu, tiklīdz varēs.
Nākamajā daļā mēs apmācīsim citu neironu tīklu, kas mums pateiks rokas atrašanās vietu ar roku noteiktā attēlā.
Visi jautājumi ir laipni gaidīti.
Ja kāds ir ieinteresēts izmantot manu mazo datu kopu, informējiet mani komentāros. Es darīšu to pieejamu.
Paldies, ka izlasījāt. Tiksimies drīz ar otro daļu līdz tam, kāpēc neveidot un netrenēt neironu tīklu.
Rediģēt:- Nākamās darbības ir paredzētas otrajai daļai.
11. darbība. Objekta noteikšana
Iepriekšējās darbībās mēs izveidojām NN, kas mums norāda, vai testa attēlā ir roka vai nē. Nu un kas tālāk? Ja NN klasificē attēlu kā roku, mēs vēlētos uzzināt rokas atrašanās vietu. Datoru redzes literatūrā to sauc par objektu noteikšanu. Tāpēc apmācīsim NN, kas dara tieši to pašu.
12. darbība: video
3 minūšu video, kurā izskaidrotas visas atlikušās darbības. Paskaties.
13. darbība. Marķēšana
Ja vēlaties, lai neironu tīkls izvadītu rokas atrašanās vietu, mums tas ir jāapmāca tādā veidā, ti, atšķirībā no iepriekšējā neironu tīkla, kur katrs attēls tika apzīmēts kā ar roku un bez rokām. Šoreiz visiem attēliem ar roku būs četras etiķetes, kas atbilst ierobežojošā lodziņa diagonālajām koordinātām ap roku šajā attēlā.
Pievienotajā csv faila attēlā ir katra attēla etiķete. Lūdzu, ņemiet vērā, ka koordinātas tiek normalizētas ar attēla izmēru, t.i., ja augšējā X koordināta ir 320. pikseļa attēlā ar platumu 640 pikseļi, mēs to apzīmēsim kā 0.5.
14. darbība. GUI marķēšana
Jums varētu rasties jautājums, kā man izdevās iezīmēt visus 82 attēlus, labi, es uzrakstīju GUI python, kas man palīdzēja veikt šo uzdevumu. Kad attēls ir ielādēts GUI. Es noklikšķināju ar peles kreiso pogu augšējā koordinātā un ar peles labo pogu - zem iespējamās robežas lodziņa apakšējās koordinātas ap roku. Šīs koordinātas pēc tam tiek ierakstītas failā, pēc tam noklikšķinot uz pogas Tālāk, lai ielādētu nākamo attēlu. Es atkārtoju šo procedūru visiem 82 vilcienu un 4 testa attēliem. Kad etiķetes bija gatavas, bija treniņu laiks.
15. darbība. Nepieciešamas bibliotēkas
Vispirms mums jāielādē visas nepieciešamās bibliotēkas. Kas iekļauj
- PIL attēlu manipulācijām,
- matplotlib zīmēšanai,
- skaitlis matricas darbībai,
- os operētājsistēmas atkarīgai funkcionalitātei un
- keras neironu tīklam.
16. darbība. Atlikušās šūnas
Otrajā, trešajā, ceturtajā un piektajā šūnā mēs ielādējam attēlus numpy masīvā un izveidojam četru dimensiju masīvu no csv faila, lai tie darbotos kā etiķetes. Šūnā 6 mēs izveidojam savu neironu tīklu. Tās arhitektūra ir identiska klasificēšanai izmantotajam neironu tīklam, izņemot izejas slāņa izmēru, kas ir 4, nevis 1. Vēl viena atšķirība rodas no izmantotās zaudējumu funkcijas, kas ir vidējā kvadrāta kļūda. Šūnā Nr. 8 mēs sākam apmācīt savu neironu tīklu, kad esam apmācīti. Es izpildīju šo modeli testa komplektā, lai iegūtu prognozes par ierobežojošo lodziņu uz ierobežojošās kastes pārklājuma koordinātām, tās izskatījās diezgan precīzas.
Paldies, ka izlasījāt.
Ieteicams:
Neironu tīkla darbināms planetārijs, izmantojot Python, Electron un Keras: 8 soļi
Neironu tīkla darbināms planetārijs, izmantojot Python, Electron un Keras: Šajā pamācībā es jums parādīšu, kā es uzrakstīju automātisku 3D planetārija ģeneratoru, izmantojot Python un Electron. Iepriekš redzamajā videoklipā ir redzams viens no programmas ģenerētajiem nejaušajiem planetārijiem. ** Piezīme: šī programma nekādā ziņā nav perfekta un kaut kur
Robotiskā roka ar Zio moduļiem 3. daļa: 4 soļi
Robotiskā roka ar Zio moduļiem 3. daļa: Šis emuāra ziņojums ir daļa no Zio Robotics sērijas. Ievads Iepriekšējā emuārā mēs ievietojām 1. un 2. daļas pamācību par to, kā vadīt robotu roku, izmantojot Zio moduļus. Pirmā daļa galvenokārt koncentrējās uz jūsu robotizētā rokas naga automātisku vadību
Smadzeņu kaste: neironu apjoma izsekošana laika gaitā: 20 soļi
Smadzeņu kaste: neironu apjoma izsekošana laika gaitā: virzība uz garāku cilvēka dzīves robežu ir izraisījusi tādu slimību pieaugumu, kuras civilizācijas pirms mūsu nav redzējušas. Starp tiem Alcheimera slimība 2017. gadā skāra aptuveni 5, 3 miljonus dzīvojošu vecāka gadagājuma amerikāņu jeb aptuveni 1 no 10 e
Arduino neironu tīkla robots: 21 solis (ar attēliem)
Arduino neironu tīkla robots: šī pamācība ir balstīta uz 3 daļu sēriju, kuru es izveidoju Make YouTube kanālam, kas parāda, kā tieši izveidot, projektēt, salikt un programmēt savu Arduino neironu tīkla robotu. Pēc pilnas sērijas skatīšanās jums vajadzētu būt labākam
Trešā roka ++: daudzfunkcionāla palīdzīga roka elektronikai un citiem delikātiem darbiem: 14 soļi (ar attēliem)
Trešā roka ++: daudzfunkcionāla palīdzīga roka elektronikai un citiem delikātiem darbiem .: Agrāk esmu izmantojis trešās rokas/palīdzības rokas, kas pieejamas ķēdes elektronikas veikalos, un esmu neapmierināts ar to lietojamību. Es nekad nevarēju iegūt klipus tieši tur, kur es tos vēlējos, vai arī iestatīšana prasīja vairāk laika, nekā vajadzētu