Sisällysluettelo:
- Vaihe 1: Video
- Vaihe 2: Laitteisto
- Vaihe 3: Koodikappale
- Vaihe 4: Kuvien saaminen
- Vaihe 5: Käytetyt työkalut ja kieli
- Vaihe 6: Tietojoukon valmistelu harjoitusta varten
- Vaihe 7: Hermoverkko
- Vaihe 8: Neuraaliverkoston koulutus
- Vaihe 9: Neuraaliverkon testaus
- Vaihe 10: Tulos ja seuraava osa…
- Vaihe 11: Kohteen tunnistus
- Vaihe 12: Video
- Vaihe 13: Merkintä
- Vaihe 14: Käyttöliittymän merkitseminen
- Vaihe 15: Tarvittavat kirjastot
- Vaihe 16: Jäljellä olevat solut
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-13 06:57
Muutama päivä sitten loukkasin oikean käden ranteeni kuntosalilla. Jälkeenpäin joka kerta kun käytin tietokonehiiriäni, se aiheutti paljon kipua jyrkän rannekulman vuoksi.
Silloin se osui minuun "eikö olisi hienoa, jos voisimme muuttaa minkä tahansa pinnan ohjauslevyksi", enkä tiedä miksi, mutta jostain syystä ajattelin häntä, elokuva HER, annan sinun ymmärtää sen ulos. Se oli jännittävä ajatus, mutta en tiennyt pystynkö siihen, päätin kokeilla sitä.
Tämä artikkeli kuvaa mitä siitä tuli.
Ennen kuin aloitamme, minulla on vastuuvapauslauseke-
'' Tämän artikkelin lopussa en voinut muuttaa mitään pintaa ohjauslevyksi, mutta en opi paljon ja lisäsin isoja työkaluja arsenaaliini. Toivottavasti niin käy myös sinulle '
Aloitetaan.
Vaihe 1: Video
Tässä on pieni 5 minuutin video, joka kattaa kaikki vaiheet. Katso.
Vaihe 2: Laitteisto
Asensin vadelmapi: n yhdessä vadelmapi -kameran kanssa noin 45 cm: n korkeudelle. Tämä antaa meille seuranta -alueen noin 25x25 cm kameran alla.
Raspberry pi- ja vadelmapi -kamera ovat helposti saatavilla, googlettamalla voit löytää paikallisen myymälän.
Tutustu tähän linkkiin tai johonkin Raspberry pi -soittolistastani saadaksesi pääsi käyttöösi.
Tämän asennuksen jälkeen tarvitsemme koodin, joka päättää, onko kameran valvomalla alueella käsi ja jos on, missä se on.
Vaihe 3: Koodikappale
Koodikappale, jonka avulla voimme päättää, onko kiinnostavalla alueella käsi, käyttää jotain hermoverkkoa. Ne kuuluvat ohjelmointiluokkaan, jossa emme määrittele sääntöjä päätöksentekoon, mutta näytämme hermoverkolle tarpeeksi tietoa, jotta se selvittää säännöt yksin.
Meidän tapauksessamme sen sijaan, että koodattaisimme miltä käsi näyttää, näytämme hermoverkkokuvat, jotka on otettu vadelmasta pi, joka sisältää käden ja joka ei sisällä kättä. Tätä vaihetta kutsutaan hermoverkon koulutukseksi ja käytettyjä kuvia harjoitustietojoukkoksi.
Vaihe 4: Kuvien saaminen
Etäkirjauduin sisään vadelmapiini ja otin joukon kuvia seuraavan komennon avulla.
sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o frame%04d.jpg
Otin 80 kuvaa kädellä ja 80 kuvaa, jotka eivät sisällä kättä. 160 kuvaa ei riitä hermoverkon asianmukaiseen kouluttamiseen, mutta niiden pitäisi riittää todisteeksi konseptista.
160 kuvan lisäksi otin vielä 20 kuvaa testataksemme verkkoa, kun se on koulutettu.
Kun tietojoukko oli valmis, aloin kirjoittaa koodia hermoverkolle.
Vaihe 5: Käytetyt työkalut ja kieli
Kirjoitin hermoverkoni python -syväoppimiskirjastossa nimeltä Keras ja koodi kirjoitetaan jupyter -muistikirjaan anaconda -navigaattorista.
Vaihe 6: Tietojoukon valmistelu harjoitusta varten
Ensin (kuva #1) sisällytin kaikki tähän projektiin tarvittavat kirjastot, mukaan lukien PIL, matplotlib, numpy, os ja Keras. Python -muistikirjan toisessa solussa (kuva #2) määritän polut tietojoukkoon ja tulostan näytteen määrän. Nyt meidän on ladattava kaikki kuvat numpy -matriisiin, joten kolmanteen soluun (kuva #2) loin numpy -taulukon 82 (käsinäytteen määrä) +75 (ei -käden otoksen määrä) eli 157x100x100x3. 157 on omistamieni kuvien kokonaismäärä, 100 x 100 on muutettu kuva -ulottuvuutemme ja 3 on tarkoitettu kuvan punaisille, vihreille ja sinisille väreille.
Neljänteen ja viidenteen soluun lataamme kuvia, jotka sisältävät käden, ja kuvia, jotka eivät sisällä kättä numpy -taulukossa. Kuudennessa solussa jaamme kukin arvo 255: llä, jolloin raja -arvoalue on 0 - 1. (Kuva #3)
Olen pahoillani, jos liitetyt kuvat eivät ole tarpeeksi hyviä. Tässä on linkki GITHUB -arkistoon, josta voit tarkastella koodia. Muista korvata hakemistopolun nimet polullasi:).
Liikkeellä mukana.
Seuraavaksi meidän on nimettävä jokainen kuva, joten luomme yksiulotteisen numeerisen taulukon, jonka pituus on 157. Ensimmäiset 82 merkintää ovat 1 ja loput 75 merkintää 0 välittävää hermoverkkoa, joista 82 ensimmäistä kuvaa ovat yhdestä luokasta ja loput toisesta luokasta. (Kuva #4)
Luodaan nyt hermoverkko.
Vaihe 7: Hermoverkko
Yhdeksännessä solussa määritämme hermoverkostomme. Se sisältää kolme konvoluutiokerran toistoa ja sen jälkeen maxpool -kerrokset 8, 12 ja 16 kiertosuodattimella. Tämän jälkeen meillä on kaksi tiheää hermoverkkoa. Liitä kaksi kuvaa tähän vaiheeseen. Ensimmäinen on koodin napsautus, joka luo hermoverkon, ja toinen on kuvallinen esitys neuroverkosta, jossa on ulottuvuus ja toiminnot.
Vaihe 8: Neuraaliverkoston koulutus
Kymmenennessä solussa määritämme hermoverkko -optimointityökaluksi "adam" ja häviöfunktioksi "binary_crossentropy". Niillä on tärkeä rooli verkon painojen päivittämisessä. Lopuksi, kun suoritamme yhdestoista solua, hermoverkko alkaa harjoittaa. Kun verkko harjoittelee, katso häviötoimintoa ja varmista, että se vähenee.
Vaihe 9: Neuraaliverkon testaus
Kun hermoverkko on koulutettu, meidän on valmisteltava testidatajoukko. Toistamme menettelyn, joka on tehty harjoitussarjan valmistamiseksi testitiedon 3., 4., 5. ja 6. solussa testisarjan luomiseksi. Valmistamme myös etiketin testisarjalle, mutta tällä kertaa käytämme mallia näillä tietojoukoilla saadaksemme ennusteita eikä harjoittaaksemme.
Vaihe 10: Tulos ja seuraava osa…
Sain testin tarkkuuden 88%, mutta otan tämän ripauksella suolaa, koska tämän mallin kouluttamiseen ja testaamiseen käytetyt aineistot ovat hyvin hyvin pieniä ja riittämättömiä tämän mallin asianmukaiseen kouluttamiseen.
Toivon kuitenkin, että pidit tästä artikkelista. Tarkoitukseni tämän harjoituksen takana ei ole vielä valmis ja varo toista osaa. Lähetän sen heti kun voin.
Seuraavassa osassa koulutamme toisen hermoverkon, joka kertoo kätemme sijainnin käsin havaitussa kuvassa.
Kaikki kyselyt ovat tervetulleita.
Jos joku on kiinnostunut käyttämään pientä tietojoukkoani, ilmoita siitä minulle kommenteissa. Teen sen saataville.
Kiitos lukemisesta. Nähdään pian toisen osan kanssa siihen asti, miksi et luo ja kouluta hermoverkkoa.
Edit:- Seuraavat vaiheet koskevat toista osaa.
Vaihe 11: Kohteen tunnistus
Aiemmissa vaiheissa loimme NN: n, joka kertoo, sisältääkö testikuva kättä vai ei. No mitä seuraavaksi? Jos NN luokittelee kuvan käsiksi, haluamme tietää käden sijainnin. Tätä kutsutaan tietokonenäkökirjallisuudessa esineiden havaitsemiseksi. Joten koulutetaan NN, joka tekee täsmälleen saman.
Vaihe 12: Video
3 minuutin video, joka selittää kaikki jäljellä olevat vaiheet. Katso.
Vaihe 13: Merkintä
Jos haluat, että hermoverkko tulostaa käden sijainnin, meidän on koulutettava se tällä tavalla, toisin kuin edellinen hermoverkko, jossa jokainen kuva oli merkitty joko kädellä ja ilman kättä. Tällä kertaa kaikissa käsin otetuissa kuvissa on neljä tarraa, jotka vastaavat kuvan ympärillä olevan rajauslaatikon diagonaalikoordinaatteja.
Liitteenä oleva csv -tiedoston kuva sisältää jokaisen kuvan tunnisteen. Huomaa, että koordinaatit normalisoidaan kuvan mitan kanssa eli jos ylempi X -koordinaatti on 320. pikselissä kuvassa, jonka leveys on 640 pikseliä, merkitsemme sen arvoksi 0.5.
Vaihe 14: Käyttöliittymän merkitseminen
Saatat ihmetellä, kuinka onnistuin merkitsemään kaikki 82 kuvaa, ja kirjoitin python -käyttöliittymän, joka auttoi minua tässä tehtävässä. Kun kuva on ladattu graafiseen käyttöliittymään. Napsautin hiiren vasemmalla painikkeella ylemmässä koordinaatissa ja hiiren kakkospainikkeella käden ympärillä olevan todennäköisen rajausruudun alemmassa koordinaatissa. Nämä koordinaatit kirjoitetaan tiedostoon sen jälkeen, kun napsautan seuraavaa painiketta ladataksesi seuraavan kuvan. Toistin tämän menettelyn kaikille 82 juna- ja 4 testikuvalle. Kun tarrat olivat valmiit, oli harjoittelun aika.
Vaihe 15: Tarvittavat kirjastot
Ensin meidän on ladattava kaikki tarvittavat kirjastot. Johon sisältyy
- PIL kuvankäsittelyyn,
- matplotlib piirtämiseen,
- numpy matriisitoimintoa varten,
- käyttöjärjestelmästä riippuvaisiin toimintoihin ja
- kerat hermoverkolle.
Vaihe 16: Jäljellä olevat solut
Toisessa, kolmannessa, neljännessä ja viidennessä solussa lataamme kuvia numpy -matriisiin ja luomme neliulotteisen taulukon csv -tiedostosta toimimaan tarroina. Solussa numero 6 luomme hermoverkon. Sen arkkitehtuuri on identtinen luokitteluun käytettävän hermoverkon kanssa, paitsi lähtökerroksen mitat, jotka ovat 4 eikä 1. Toinen ero johtuu käytetystä häviöfunktiosta, joka on keskimääräinen neliövirhe. Solussa numero 8 aloitamme hermoverkostomme harjoittelun, kun olen koulutettu. Suoritin tämän mallin testisarjassa saadakseni ennusteita rajauslaatikosta rajauslaatikon päällekkäisillä koordinaateilla, ne näyttivät melko tarkilta.
Kiitos lukemisesta.