Sisukord:
- Samm: video
- Samm: riistvara
- Samm: kooditükk
- 4. samm: piltide hankimine
- Samm: kasutatud tööriistad ja keel
- 6. samm: andmekogumi ettevalmistamine treeninguks
- Samm: närvivõrk
- 8. samm: närvivõrgu koolitamine
- 9. samm: närvivõrgu testimine
- Samm 10: Tulemus ja järgmine osa…
- 11. samm: objektide tuvastamine
- 12. samm: video
- 13. samm: märgistamine
- 14. samm: GUI märgistamine
- 15. samm. Vajalikud raamatukogud
- 16. samm: ülejäänud rakud
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-13 06:57
Paar päeva tagasi vigastasin jõusaalis parema käe randme. Pärast seda, kui kasutasin arvutihiiri, tekitas see järsu randmenurga tõttu palju valu.
See oli siis, kui see tabas mind "kas poleks tore, kui saaksime mis tahes pinna puuteplaadiks muuta" ja ma ei tea miks, aga mingil põhjusel mõtlesin ma temale, film TEMA, ma lasen teil seda arvata välja. See oli põnev mõte, kuid ma ei teadnud, kas saan sellega hakkama, otsustasin proovida.
See artikkel kajastab, mis sellest välja tuli.
Enne kui alustame, on mul lahtiütlemine-
"Selle artikli lõpus ei suutnud ma ühtegi pinda puuteplaadiks muuta, kuid ma ei õpi palju ja lisasin oma arsenali suured tööriistad. Loodan, et see juhtub ka teiega"
Alustame.
Samm: video
Siin on väike 5 -minutiline video, mis hõlmab kõiki samme. Vaata.
Samm: riistvara
Seadistasin vaarika pi koos vaarika pi kaameraga umbes 45 cm kõrgusele. See annab kaamera alla umbes 25x25 cm seireala.
Vaarika pi ja vaarika pi kaamera on kergesti kättesaadavad, lihtsalt googeldage ja peaksite leidma kohaliku poe.
Vaadake seda linki või ühte minu Raspberry pi esitusloendist, et oma peata pi üles panna.
Pärast seda seadistamist vajame koodi, mis otsustab, kas kaamera jälgitavas piirkonnas on käsi ja kui jah, siis kus see asub.
Samm: kooditükk
Kooditükk, mis võimaldab meil otsustada, kas huvipakkuv valdkond on olemas, kasutab nn närvivõrku. Need kuuluvad programmeerimise kategooriasse, kus me ei määratle reegleid otsuste tegemiseks, kuid näitame närvivõrgust piisavalt andmeid, et see saaks reeglid ise välja mõelda.
Meie puhul näeme käe väljanägemise kodeerimise asemel närvivõrgu pilte, mis on tehtud vaarika pi -st, mis sisaldab kätt ja mis ei sisalda kätt. Seda etappi nimetatakse närvivõrgu koolitamiseks ja kasutatud pilte koolitusandmeteks.
4. samm: piltide hankimine
Logisin oma vaarika pi sisse sisse ja pildistasin järgmise käsu abil hulga pilte.
sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o frame%04d.jpg
Pildistasin 80 pilti käsitsi ja 80 pilti, mis ei sisalda käsi. 160 pildist ei piisa närvivõrgu nõuetekohaseks koolitamiseks, kuid sellest peaks piisama kontseptsiooni tõendamiseks.
Lisaks 160 pildile tegin veel 20 pilti, et testida meie võrku, kui see on treenitud.
Kui andmekogum oli valmis, hakkasin närvivõrgu jaoks koodi kirjutama.
Samm: kasutatud tööriistad ja keel
Kirjutasin oma närvivõrgu pythoni süvaõppekogusse Keras ja kood on kirjutatud Anaconda navigaatori jupyteri märkmikku.
6. samm: andmekogumi ettevalmistamine treeninguks
Esiteks (pilt nr 1) kaasasin kõik selle projekti jaoks vajalikud teegid, sealhulgas PIL, matplotlib, numpy, os ja Keras. Pythoni sülearvuti teises lahtris (pilt #2) määratlen teed andmestiku juurde ja prindin välja proovide arvu. Nüüd peame laadima kõik pildid numbrimassiivi, seega lõin kolmandasse lahtrisse (pilt #2) numbrimassiivi 82 (käsiproovi arv) +75 (mittekäeproovi arv), st 157x100x100x3. 157 on minu piltide koguarv, 100x100 on meie muudetud suurusega pilt ja 3 on punase, rohelise ja sinise värvikihi jaoks.
Neljandasse ja viiendasse lahtrisse laadime pilte, mis sisaldavad kätt, millele järgnevad pildid, mis ei sisalda kätt numpy massiivis. Kuuendas lahtris jagame iga väärtuse 255 -ga ja seega piirame väärtuste vahemikku 0 kuni 1. (Pilt #3)
Vabandan, kui lisatud pildid pole piisavalt head. Siin on link GITHUBi hoidlasse, kus saate koodi vaadata. Ärge unustage kataloogiteede nimesid asendada oma teega:).
Liikudes kaasa.
Järgmisena peame iga pildi sildistama, nii et loome ühemõõtmelise numbrimassiivi pikkusega 157. Esimesed 82 kirjet on seatud väärtusele 1 ja ülejäänud 75 kirje väärtuseks on 0 edastav närvivõrk, kus esimesed 82 pilti pärinevad ühest klassist ja ülejäänud on teisest klassist. (Pilt #4)
Nüüd loome närvivõrgu.
Samm: närvivõrk
Üheksandas lahtris määratleme oma närvivõrgu. See sisaldab kolme konvolutsioonikihi kordust, millele järgnevad maxpool -kihid vastavalt 8, 12 ja 16 konvolutsioonifiltriga. Pärast seda on meil kaks tihedat närvivõrku. Selle sammu jaoks lisatakse kaks pilti. Esiteks on koodivõrk, mis loob närvivõrgu, ja teine on närvivõrgu piltlik esitus koos väljundimõõdu ja toimingutega.
8. samm: närvivõrgu koolitamine
Kümnendas lahtris konfigureerime närvivõrgu optimeerijaks „adam” ja kadumisfunktsiooniks „binary_crossentropy”. Neil on suur roll võrgu kaalude uuendamisel. Lõpuks, kui käivitame üheteistkümnenda raku, hakkab närvivõrk treenima. Kui võrk treenib, vaadake kadude funktsiooni ja veenduge, et see väheneb.
9. samm: närvivõrgu testimine
Kui närvivõrk on koolitatud, peame ette valmistama testandmete kogumi. Kordame protseduuri, mis on tehtud katseandmete 3., 4., 5. ja 6. lahtris treeningkomplekti ettevalmistamiseks, et luua testikomplekt. Valmistame ette ka testikomplekti etiketi, kuid seekord kasutame nende andmekogumite mudelit, et saada ennustusi ja mitte treenida.
Samm 10: Tulemus ja järgmine osa…
Sain testi täpsuse 88%, kuid võtan selle näpuotsaga soola, kuna selle mudeli koolitamiseks ja testimiseks kasutatud andmekogum on väga väga väike ja selle mudeli nõuetekohaseks koolitamiseks ebapiisav.
Igatahes loodan, et teile meeldis see artikkel. Minu kavatsus selle harjutuse taga ei ole veel lõpule jõudnud ja jälgige 2. osa. Laadin selle üles nii kiiresti kui võimalik.
Järgmises osas koolitame teist närvivõrku, mis ütleb meile käe asukoha käsitsi tuvastatud pildil.
Kõik küsimused on teretulnud.
Kui keegi on huvitatud minu väikese andmekogumi kasutamisest, andke mulle sellest kommentaarides teada. Teen selle kättesaadavaks.
Täname lugemise eest. Näeme varsti teise osaga, kuni selle ajani, miks mitte luua ja treenida närvivõrku.
Muuda:- Järgmised sammud on teise osa jaoks.
11. samm: objektide tuvastamine
Eelmistes sammudes lõime NN, mis ütleb meile, kas testpilt sisaldab kätt või mitte. No mis edasi? Kui NN liigitab pildi kätt sisaldavaks, tahaksime teada käe asukohta. Seda nimetatakse arvutinägemise kirjanduses objektide tuvastamiseks. Nii et treenime NN -i, kes teeb täpselt sama.
12. samm: video
3 -minutiline video, mis selgitab kõiki ülejäänud samme. Vaata.
13. samm: märgistamine
Kui soovite, et närvivõrk väljastaks käe asukoha, peame seda koolitama sellisel viisil, st erinevalt eelmisest närvivõrgust, kus iga pilt oli märgistatud kas käega ja ilma käeta. Seekord on kõigil käega tehtud piltidel neli silti, mis vastavad selle pildi ümber oleva piirangukasti diagonaalkoordinaatidele.
Manustatud csv -faili pilt sisaldab iga pildi silti. Pange tähele, et koordinaadid normaliseeritakse pildi mõõtmetega, st kui ülemine X -koordinaat on 320. pikslil pildil laiusega 640 pikslit, märgime selle väärtuseks 0.5.
14. samm: GUI märgistamine
Teil võib tekkida küsimus, kuidas mul õnnestus kõik 82 pilti sildistada, kirjutasin pythonis graafilise kasutajaliidese, mis aitas mind selle ülesande täitmisel. Kui pilt on GUI -sse laaditud. Vasak klõps ülemisel koordinaadil ja paremklõps käe ümber asetseva tõenäolise piirikarbi alumisel koordinaadil. Need koordinaadid kirjutatakse seejärel faili, millele järgneva pildi laadimiseks klõpsan nuppu Järgmine. Kordasin seda protseduuri kõigi 82 rongi- ja 4 testpildi puhul. Kui sildid olid valmis, oli koolituse aeg.
15. samm. Vajalikud raamatukogud
Esiteks peame laadima kõik vajalikud teegid. Mis sisaldab
- PIL piltide manipuleerimiseks,
- matplotlib joonistamiseks,
- numbrid maatriksi toimimiseks,
- os operatsioonisüsteemist sõltuvate funktsioonide jaoks ja
- keras närvivõrgu jaoks.
16. samm: ülejäänud rakud
Teises, kolmandas, neljandas ja viiendas lahtris laadime pildid numpy massiivi ja loome csv -failist neljamõõtmelise massiivi, mis toimib siltidena. Rakus number 6 loome oma närvivõrgu. Selle arhitektuur on identne klassifitseerimiseks kasutatava närvivõrguga, välja arvatud väljundkihi mõõde, mis on 4, mitte 1. Teine erinevus tuleneb kasutatavast kadumisfunktsioonist, mis on keskmine ruutviga. Rakus number 8 alustame oma närvivõrgu treenimist, kui olen treeninud, käivitasin selle mudeli testikomplektis, et saada piirdekasti ennustusi piirikastide katvate koordinaatide kohta, need nägid üsna täpsed.
Täname lugemise eest.