Satura rādītājs:

Vai tā ir roka? (Raspberry Pi kamera + neironu tīkls) 1/2. Daļa: 16 soļi (ar attēliem)
Vai tā ir roka? (Raspberry Pi kamera + neironu tīkls) 1/2. Daļa: 16 soļi (ar attēliem)

Video: Vai tā ir roka? (Raspberry Pi kamera + neironu tīkls) 1/2. Daļa: 16 soļi (ar attēliem)

Video: Vai tā ir roka? (Raspberry Pi kamera + neironu tīkls) 1/2. Daļa: 16 soļi (ar attēliem)
Video: Как достать Тирана ► 2 Прохождение Resident Evil 2 (remake 2019) 2024, Novembris
Anonim
Vai tā ir roka? (Raspberry Pi kamera + neironu tīkls) 1/2 daļa
Vai tā ir roka? (Raspberry Pi kamera + neironu tīkls) 1/2 daļa
Vai tā ir roka? (Raspberry Pi kamera + neironu tīkls) 1/2 daļa
Vai tā ir roka? (Raspberry Pi kamera + neironu tīkls) 1/2 daļa
Vai tā ir roka? (Raspberry Pi kamera + neironu tīkls) 1/2 daļa
Vai tā ir roka? (Raspberry Pi kamera + neironu tīkls) 1/2 daļa

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

Image
Image

Šeit ir neliels 5 minūšu video, kas aptver visus soļus. Paskaties.

2. darbība. Aparatūra

Aparatūra
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
Koda gabals
Koda gabals
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

Attēlu iegūšana
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

Izmantotie rīki un valoda
Izmantotie rīki un valoda
Izmantotie rīki un valoda
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

Datu kopas sagatavošana apmācībai
Datu kopas sagatavošana apmācībai
Datu kopas sagatavošana apmācībai
Datu kopas sagatavošana apmācībai
Datu kopas sagatavošana apmācībai
Datu kopas sagatavošana apmācībai
Datu kopas sagatavošana apmācībai
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

Neironu tīkls
Neironu tīkls
Neironu tīkls
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

Apmācības neironu tīkls
Apmācības neironu tīkls

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

Neironu tīkla pārbaude
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…

Rezultāts un nākamā daļa …
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

Objekta noteikšana
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

Image
Image

3 minūšu video, kurā izskaidrotas visas atlikušās darbības. Paskaties.

13. darbība. Marķēšana

Marķēšana
Marķēšana
Marķēšana
Marķēšana
Marķēšana
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

GUI marķēšana
GUI marķēšana
GUI marķēšana
GUI marķēšana
GUI marķēšana
GUI marķēšana
GUI marķēšana
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

Nepieciešamas bibliotēkas
Nepieciešamas bibliotēkas
Nepieciešamas bibliotēkas
Nepieciešamas bibliotēkas
Nepieciešamas bibliotēkas
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

Atlikušās šūnas
Atlikušās šūnas
Atlikušās šūnas
Atlikušās šūnas
Atlikušās šūnas
Atlikušās šūnas
Atlikušās šūnas
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: