Turinys:
- 1 žingsnis: vaizdo įrašas
- 2 žingsnis: Aparatūra
- 3 žingsnis: kodo dalis
- 4 žingsnis: gaukite vaizdus
- 5 veiksmas: naudojami įrankiai ir kalba
- 6 veiksmas: duomenų rinkinio paruošimas mokymui
- 7 žingsnis: neuroninis tinklas
- 8 žingsnis: neuronų tinklo mokymas
- 9 veiksmas: neuroninio tinklo testavimas
- 10 veiksmas: rezultatas ir kita dalis…
- 11 veiksmas: objekto aptikimas
- 12 žingsnis: vaizdo įrašas
- 13 žingsnis: ženklinimas
- 14 žingsnis: GUI žymėjimas etiketėmis
- 15 žingsnis: reikalingos bibliotekos
- 16 žingsnis: Likusios ląstelės
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-13 06:57
Prieš kelias dienas sporto salėje susižeidžiau dešinės rankos riešą. Vėliau kiekvieną kartą, kai naudoju savo kompiuterio pelę, ji sukeldavo daug skausmo dėl staažo riešo kampo.
Būtent tada mane užklupo „ar nebūtų puiku, jei bet kokį paviršių galėtume paversti jutikliniu kilimėliu“, ir aš nežinau kodėl, bet kažkodėl pagalvojau apie ją, filmą JA, aš leisiu jums tai suprasti išeiti. Tai buvo įdomi mintis, bet nežinojau, ar galiu tai padaryti, nusprendžiau pabandyti.
Šiame straipsnyje užfiksuota, kas iš to išėjo.
Prieš pradedant, turiu atsakomybės atsisakymą-
„Šio straipsnio pabaigoje negalėjau paversti jokio paviršiaus į jutiklinę kilimėlį, bet daug neišmokstu ir į savo arsenalą įtraukiau didelių įrankių. Tikiuosi, kad ir tau taip atsitiks '
Pradėkime.
1 žingsnis: vaizdo įrašas
Čia yra nedidelis 5 minučių vaizdo įrašas, apimantis visus veiksmus. Pažiūrėk.
2 žingsnis: Aparatūra
„Aviečių pi“kartu su „Raspberry pi“kamera sumontuoju maždaug 45 cm aukštyje. Tai suteikia mums apie 25x25 cm stebėjimo plotą po kamera.
„Raspberry pi“ir „Raspberry pi“fotoaparatai yra lengvai prieinami, tiesiog „google“ir turėtumėte rasti vietinę parduotuvę.
Pažvelkite į šią nuorodą arba vieną iš mano „Raspberry pi“grojaraščio, kad pradėtumėte kurti savo begalį.
Po šios sąrankos mums reikia kodo, kuris nuspręstų, ar fotoaparato stebimoje srityje yra ranka ir, jei taip, kur ji yra.
3 žingsnis: kodo dalis
Kodo gabalas, leidžiantis mums nuspręsti, ar yra interesų sritis, naudoja kažką, vadinamą neuroniniu tinklu. Jie patenka į programavimo kategoriją, kur mes neapibrėžiame taisyklių, kad galėtume priimti sprendimą, bet parodome pakankamai neuroninio tinklo duomenų, kad jis pats išsiaiškintų taisykles.
Mūsų atveju, užuot kodavę, kaip atrodo ranka, rodome neuroninio tinklo vaizdus, užfiksuotus iš aviečių pi, kuriame yra ranka ir kuriame nėra rankos. Šis etapas vadinamas nervų tinklo mokymu, o naudojami vaizdai - mokymo duomenų rinkiniu.
4 žingsnis: gaukite vaizdus
Aš nuotoliniu būdu prisijungiau prie savo „Raspberry Pi“ir užfiksavau daugybę vaizdų naudodami šią komandą.
sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o kadras%04d.jpg
Aš padariau 80 vaizdų ranka ir 80 vaizdų, kuriuose nėra rankos. 160 vaizdų nepakanka tinkamai apmokyti neuroninį tinklą, tačiau jų turėtų pakakti koncepcijai įrodyti.
Be 160 vaizdų, užfiksavau dar 20 vaizdų, kad išbandyčiau mūsų tinklą, kai jis bus apmokytas.
Kai duomenų rinkinys buvo paruoštas, pradėjau rašyti neuroninio tinklo kodą.
5 veiksmas: naudojami įrankiai ir kalba
Aš parašiau savo nervų tinklą „Python“giluminio mokymosi bibliotekoje, pavadintoje „Keras“, o kodas įrašytas į „Jupyter“sąsiuvinį iš „anaconda“navigatoriaus.
6 veiksmas: duomenų rinkinio paruošimas mokymui
Pirmiausia (1 paveikslas) įtraukiau visas šiam projektui reikalingas bibliotekas, įskaitant PIL, matplotlib, numpy, os ir Keras. Antrame „python“nešiojamojo kompiuterio langelyje (2 paveikslas) aš apibrėžiu kelius į duomenų rinkinį ir atspausdinu mėginių skaičių. Dabar turime įkelti visus vaizdus į „numpy“masyvą, taigi trečiame langelyje (vaizdas Nr. 2) sukūriau skaičiavimo masyvą 82 (rankų mėginio skaičius) +75 (ne rankinio pavyzdžio skaičius), ty 157x100x100x3. 157 yra bendras mano turimų vaizdų skaičius, 100x100 yra mūsų pakeisto vaizdo matmenys, o 3 - raudonos, žalios ir mėlynos spalvos vaizdo sluoksniai.
Ketvirtame ir penktame langeliuose įkeliame vaizdus, kuriuose yra ranka, o po to vaizdus, kuriuose nėra skaičiaus masyvo. Šeštame langelyje kiekvieną vertę padalijame iš 255, taigi ribinė reikšmių riba yra nuo 0 iki 1. (3 pav.)
Atsiprašau, jei pridėtos nuotraukos nėra pakankamai geros. Čia yra nuoroda į GITHUB saugyklą, kad galėtumėte peržiūrėti kodą. Nepamirškite pakeisti katalogo kelių pavadinimų savo keliu:).
Judėjimas kartu.
Toliau turime pažymėti kiekvieną vaizdą, todėl sukuriame 157 ilgio vienmatį skaičiavimo masyvą. Pirmieji 82 įrašai yra 1, o likę 75 įrašai - 0, perduodantys neuroninį tinklą, kuriame pirmieji 82 vaizdai yra iš vienos klasės, o likę - iš kitos. (4 pav.)
Dabar sukurkime neuronų tinklą.
7 žingsnis: neuroninis tinklas
Devintojoje ląstelėje mes apibrėžiame savo nervų tinklą. Jame yra trys kartotiniai konvoliucijos sluoksniai, po kurių seka maxpool sluoksniai su atitinkamai 8, 12 ir 16 konvoliucijos filtrais. Po to turime du tankius nervinius tinklus. Šiam žingsniui pridedami du vaizdai. Pirmasis yra kodo sukūrimas, sukuriantis neuroninį tinklą, o antrasis - vaizdinis neuroninio tinklo vaizdavimas su išvesties matmenimis ir operacijomis.
8 žingsnis: neuronų tinklo mokymas
Dešimtajame langelyje neuronų tinklo optimizatorių sukonfigūruojame į „adam“, o praradimo funkciją į „binary_crossentropy“. Jie vaidina svarbų vaidmenį atnaujinant tinklo svorius. Galiausiai, kai paleidžiame vienuoliktą ląstelę, nervų tinklas pradeda treniruotis. Kol tinklas mokosi, pažvelkite į nuostolių funkciją ir įsitikinkite, kad ji mažėja.
9 veiksmas: neuroninio tinklo testavimas
Išmokę neuroninį tinklą, turime paruošti bandymų duomenų rinkinį. Norėdami sukurti bandymų rinkinį, pakartojame procedūrą, atliktą ruošiant treniruočių rinkinį 3, 4, 5 ir 6 langeliuose. Mes taip pat ruošiame bandymų rinkinio etiketę, tačiau šį kartą vykdome modelį pagal šiuos duomenų rinkinius, kad gautume prognozes, o ne mokytume.
10 veiksmas: rezultatas ir kita dalis…
Gavau 88% bandymo tikslumą, tačiau tai paimkite su žiupsneliu druskos, nes duomenų rinkinys, naudojamas šiam modeliui mokyti ir išbandyti, yra labai labai mažas ir netinkamas tinkamai mokyti šio modelio.
Bet kokiu atveju tikiuosi, kad jums patiko šis straipsnis. Mano ketinimas atlikti šį pratimą dar nėra baigtas ir saugokitės antrosios dalies. Įkelsiu, kai tik galėsiu.
Kitoje dalyje mes apmokysime kitą neuronų tinklą, kuris mums pasakys rankos vietą rankoje aptiktame vaizde.
Visos užklausos laukiamos.
Jei kas nors nori naudoti mano mažą duomenų rinkinį, praneškite man komentaruose. Aš padarysiu jį prieinamą.
Ačiū, kad perskaitėte. Netrukus pasimatysime su antrąja dalimi, kodėl gi nesukūrus ir neišmokius neuroninio tinklo.
Redaguoti:- Kiti veiksmai skirti antrai daliai.
11 veiksmas: objekto aptikimas
Ankstesniuose žingsniuose mes sukūrėme NN, kuris mums nurodo, ar bandomajame vaizde yra ranka, ar ne. Na ir kas toliau? Jei NN klasifikuoja vaizdą kaip ranką, norėtume žinoti rankos vietą. Tai vadinama objektų aptikimu kompiuterinės regos literatūroje. Taigi mokykime NN, kuris daro tą patį.
12 žingsnis: vaizdo įrašas
3 minučių vaizdo įrašas, paaiškinantis visus likusius veiksmus. Pažiūrėk.
13 žingsnis: ženklinimas
Jei norite, kad nervų tinklas išvestų rankos vietą, turime jį išmokyti tokiu būdu, ty skirtingai nei ankstesnis neuroninis tinklas, kuriame kiekvienas vaizdas buvo pažymėtas kaip ranka ir be rankos. Šį kartą visi vaizdai su ranka turės keturias etiketes, atitinkančias tame vaizde esančių ribojančių langelių įstrižąsias koordinates.
Pridėtame csv failo paveikslėlyje yra kiekvieno vaizdo etiketė. Atminkite, kad koordinatės normalizuojamos atsižvelgiant į vaizdo matmenis, t. Y. Jei viršutinė X koordinatė yra 320 -asis pikselis, kurio plotis 640 pikselių, tai pažymėsime kaip 0,5.
14 žingsnis: GUI žymėjimas etiketėmis
Jums gali būti įdomu, kaip man pavyko pažymėti visus 82 vaizdus, na, aš parašiau GUI python, kuris padėjo man atlikti šią užduotį. Kai vaizdas įkeliamas į GUI. Spustelėjau kairiuoju pelės klavišu viršutinėje koordinatėje, o dešiniuoju pelės klavišu - apatinėje galimo ribojimo langelio aplink ranką koordinatėje. Tada šios koordinatės įrašomos į failą, paspaudus mygtuką Kitas, kad įkelčiau kitą vaizdą. Šią procedūrą pakartojau visiems 82 traukinių ir 4 bandomiesiems vaizdams. Kai etiketės buvo paruoštos, atėjo treniruočių laikas.
15 žingsnis: reikalingos bibliotekos
Pirmiausia turime įkelti visas reikalingas bibliotekas. Į kurį įeina
- PIL manipuliavimui vaizdais,
- matplotlib braižymui,
- matricos operacija,
- operacinės sistemos funkcinėms funkcijoms ir
- nervų tinklo keras.
16 žingsnis: Likusios ląstelės
2, 3, 4 ir 5 langeliuose įkeliame vaizdus į numpy masyvą ir iš csv failo sukuriame keturių matmenų masyvą, kuris veikia kaip etiketės. 6 ląstelėje mes sukuriame savo nervų tinklą. Jo architektūra yra identiška klasifikavimui naudojamam neuroniniam tinklui, išskyrus išvesties sluoksnio matmenį, kuris yra 4, o ne 1. Kitas skirtumas yra dėl prarastos funkcijos, kuri yra vidutinė kvadrato klaida. Ląstelėje Nr. 8 mes pradedame treniruoti savo neuroninį tinklą, kai tik išmokiau, aš išbandžiau šį modelį bandymų rinkinyje, kad gaučiau ribojimo langelio prognozes pagal ribojančios dėžutės perdengimo koordinates, jos atrodė gana tiksliai.
Ačiū, kad perskaitėte.