Ez egy kéz? (Raspberry Pi kamera + neurális hálózat) 1/2 rész: 16 lépés (képekkel)
Ez egy kéz? (Raspberry Pi kamera + neurális hálózat) 1/2 rész: 16 lépés (képekkel)
Anonim
Ez egy kéz? (Málna Pi kamera + neurális hálózat) 1/2 rész
Ez egy kéz? (Málna Pi kamera + neurális hálózat) 1/2 rész
Ez egy kéz? (Málna Pi kamera + neurális hálózat) 1/2 rész
Ez egy kéz? (Málna Pi kamera + neurális hálózat) 1/2 rész
Ez egy kéz? (Málna Pi kamera + neurális hálózat) 1/2 rész
Ez egy kéz? (Málna Pi kamera + neurális hálózat) 1/2 rész

Néhány nappal ezelőtt az edzőteremben megsérült a jobb csuklóm. Később minden alkalommal, amikor a számítógépes egeret használtam, sok fájdalmat okozott a meredek csuklószög miatt.

Ekkor ütött belém "nem lenne jó, ha bármilyen felületet átalakíthatnánk trackpadre", és nem tudom miért, de valamiért rá gondoltam, az Ő filmje, hagyom, hogy kitaláljátok ki. Izgalmas gondolat volt, de nem tudtam, hogy meg tudom -e csinálni, úgy döntöttem, hogy kipróbálom.

Ez a cikk rögzíti, hogy mi sült ki belőle.

Mielőtt elkezdenénk, van egy lemondásom-

„A cikk végén egyetlen felületet sem tudtam átalakítani trackpad -re, de nem sokat tanulok, és nagy eszközöket adtam hozzá az arzenálomhoz. Remélem veled is ez történik '

Lássunk neki.

1. lépés: Videó

Image
Image

Itt egy apró 5 perces videó, amely minden lépést tartalmaz. Nézd meg.

2. lépés: Hardver

Hardver
Hardver

Egy málna pi -t a málna pi kamerával együtt beállítok körülbelül 45 cm magasságban. Ez körülbelül 25x25 cm -es megfigyelési területet biztosít a kamera alatt.

A Raspberry pi és a Raspberry pi kamera könnyen beszerezhető, csak google -olja fel, és meg kell találnia a helyi üzletet.

Nézze meg ezt a linket vagy a Raspberry pi lejátszási listám egyikét, hogy elindulhasson a fej nélküli pi.

A beállítás után szükségünk van egy kódrészletre, amely eldönti, hogy van -e kéz a területen, amelyet a kamera figyel, és ha igen, hol van.

3. lépés: Kódrészlet

Kóddarab
Kóddarab
Kóddarab
Kóddarab

A kódrészlet, amely lehetővé teszi számunkra, hogy eldöntsük, van -e kéz az érdeklődési körben, valami neurális hálózatot használ. A programozás kategóriájába tartoznak, ahol nem határozunk meg szabályokat a döntéshozatalhoz, de elegendő adatot mutatunk a neurális hálózatról ahhoz, hogy önmagában kitalálja a szabályokat.

Esetünkben ahelyett, hogy kódolnánk, hogy néz ki a kéz, inkább a málna pi -ből készített ideghálózati képeket mutatjuk be, amelyek tartalmazzák a kezet, és amelyek nem tartalmazzák a kezet. Ezt a fázist az ideghálózat betanításának, a használt képeket képzési adathalmaznak nevezzük.

4. lépés: Képek készítése

Képek beszerzése
Képek beszerzése

A következő paranccsal távolról bejelentkeztem a málna pi-be, és rengeteg képet készítettem.

sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o frame%04d.jpg

80 képet készítettem kézzel és 80 olyan képet, amely nem tartalmaz kezet. 160 kép nem elegendő a neurális hálózat megfelelő képzéséhez, de elegendő a koncepció bizonyításához.

A 160 kép mellett még 20 képet készítettem, hogy tesztelhessük hálózatunkat, miután képzett.

Miután az adatkészlet készen állt, elkezdtem kódot írni a neurális hálózathoz.

5. lépés: Használt eszközök és nyelv

Használt eszközök és nyelv
Használt eszközök és nyelv
Használt eszközök és nyelv
Használt eszközök és nyelv

Ideghálózatomat a Keras nevű python deep learning könyvtárba írtam, és a kódot az anaconda navigátor jupyter notebookjára írtam.

6. lépés: Az adatkészlet felkészítése az edzésre

Az adatkészlet felkészítése az edzésre
Az adatkészlet felkészítése az edzésre
Az adatkészlet felkészítése az edzésre
Az adatkészlet felkészítése az edzésre
Az adatkészlet felkészítése az edzésre
Az adatkészlet felkészítése az edzésre
Az adatkészlet felkészítése az edzésre
Az adatkészlet felkészítése az edzésre

Először (1. kép) a projekthez szükséges összes könyvtárat beleírtam, beleértve a PIL, a matplotlib, a numpy, az os és a Keras programokat. A python notebook második cellájában (2. kép) definiálom az adathalmaz elérési útjait, és kinyomtatom a minta számát. Most be kell töltenünk az összes képet egy numpy tömbbe, ezért a harmadik cellában (2. kép) létrehoztam egy 82 -es (kézi minta száma) +75 (nem kézi minta száma), azaz 157x100x100x3 számjegyű tömböt. A 157 az összes képem, 100x100 a mi átméretezett képméretünk, a 3 pedig a kép piros, zöld és kék színű rétegeire vonatkozik.

A negyedik és ötödik cellába betöltjük a kézt tartalmazó képeket, majd azokat, amelyek nem tartalmazzák a kezet a számjegy tömbben. A hatodik cellában minden értéket elosztunk 255 -tel, így a határérték 0 és 1 között van. (3. kép)

Sajnálom, ha a csatolt képek nem elég jók. Itt van egy link a GITHUB adattárhoz, ahol megtekintheti a kódot. Ne felejtse el lecserélni a könyvtárútvonalak nevét az útvonalra:).

Továbbmegy.

Ezután meg kell jelölnünk az egyes képeket, ezért létre kell hoznunk egy egydimenziós, 157 hosszú numerikus tömböt. Az első 82 bejegyzés 1 -re, a fennmaradó 75 bejegyzés pedig 0 -ra van továbbítva, és az első 82 kép az egyik osztályból származik, a többi pedig egy másikból. (4. kép)

Most hozzunk létre egy neurális hálózatot.

7. lépés: Ideghálózat

Neurális hálózat
Neurális hálózat
Neurális hálózat
Neurális hálózat

A kilencedik cellában definiáljuk neurális hálózatunkat. Három ismétlést tartalmaz a konvolúciós réteg, majd a maxpool rétegek, 8, 12 és 16 konvolúciós szűrővel. Ezt követően két sűrű ideghálónk van. Két kép csatolása ehhez a lépéshez. Az első a neuronhálózatot létrehozó kódrészlet, a második pedig a neurális hálózat képi megjelenítése a kimeneti dimenzióval és a műveletekkel.

8. lépés: A neurális hálózat képzése

Képzési ideghálózat
Képzési ideghálózat

A tizedik cellában a neurális hálózat optimalizálóját „adam” -ra, a veszteségfüggvényt „binary_crossentropy” -ra állítjuk be. Nagy szerepet játszanak a hálózati súlyok frissítésében. Végül, amikor a tizenegyedik cellát futtatjuk, a neurális hálózat elkezd edzeni. Amíg a hálózat edz, nézze meg a veszteség funkciót, és győződjön meg arról, hogy csökken.

9. lépés: A neurális hálózat tesztelése

A neurális hálózat tesztelése
A neurális hálózat tesztelése

A neurális hálózat képzése után elő kell készítenünk a tesztadatkészletet. Megismételjük az eljárást, amelyet a 3., 4., 5. és 6. cella képzési készletének előkészítésére végeztünk a tesztadatokon a tesztkészlet létrehozásához. A tesztkészlethez címkét is készítünk, de ezúttal modellt futtatunk ezeken az adatkészleteken, hogy előrejelzéseket kapjunk, és ne edzjünk.

10. lépés: Eredmény és következő rész…

Eredmény és következő rész…
Eredmény és következő rész…

88% -os vizsgálati pontosságot kaptam, de vegyük ezt egy csipet sóval, mivel a modell betanításához és teszteléséhez használt adatkészlet nagyon -nagyon kicsi, és nem megfelelő a modell megfelelő betanításához.

Mindenesetre remélem tetszett ez a cikk. Szándékom e gyakorlat mögött még nem teljes, és vigyázz a 2. részre. Amint lehet feltöltöm.

A következő részben egy másik neurális hálózatot fogunk betanítani, amely meg fogja mondani a kéz helyét egy kézzel észlelt képen.

Minden kérdést szívesen fogadunk.

Ha valakit érdekel az apró adatkészletem használata, jelezze megjegyzésekben. Elérhetővé teszem.

Köszönöm, hogy elolvasta. Hamarosan találkozunk a második részben, addig miért nem hoz létre és nem képez ki egy neurális hálózatot.

Szerkesztés:- A következő lépések a második részhez tartoznak.

11. lépés: Objektumészlelés

Objektum észlelése
Objektum észlelése

Az előző lépésekben létrehoztunk egy NN -t, amely megmondja, hogy a tesztkép tartalmaz -e kezet vagy sem. Nos, mi lesz ezután? Ha az NN a képet kéztartónak minősíti, szeretnénk megtudni a kéz helyét. Ezt a számítógépes látás szakirodalmában tárgyfelismerésnek nevezik. Tehát tanítsuk az NN -t, amely pontosan ugyanezt teszi.

12. lépés: Videó

Image
Image

Egy 3 perces videó, amely elmagyarázza az összes többi lépést. Nézd meg.

13. lépés: Címkézés

Címkézés
Címkézés
Címkézés
Címkézés
Címkézés
Címkézés

Ha azt szeretné, hogy egy ideghálózat adja ki a kéz helyét, akkor ezt ilyen módon kell kiképeznünk, azaz ellentétben a korábbi neurális hálózattal, ahol minden kép kézzel és kéz nélkül volt megjelölve. Ezúttal minden kézzel készített képnek négy címkéje lesz, amelyek megfelelnek a kép körül lévő határoló doboz átlós koordinátáinak.

A csv fájl csatolt képe minden képhez címkét tartalmaz. Kérjük, vegye figyelembe, hogy a koordinátákat a képméret normalizálja, azaz ha a felső X koordináta a 320. pixelnél van a 640 képpont szélességű képen, akkor 0.5 -nek fogjuk címkézni.

14. lépés: A GUI címkézése

Címkézés GUI
Címkézés GUI
Címkézés GUI
Címkézés GUI
Címkézés GUI
Címkézés GUI
Címkézés GUI
Címkézés GUI

Lehet, hogy kíváncsi vagy, hogyan sikerült címkézni mind a 82 képet, nos, írtam egy GUI -t pythonban, ami segített nekem ebben a feladatban. Miután a kép betöltődött a GUI -ba. Bal klikk a felső koordinátán, jobb gombbal pedig a kéz körüli valószínű határoló mező alsó koordinátáján. Ezeket a koordinátákat egy fájlba írják, majd rákattintok a következő gombra a következő kép betöltéséhez. Ezt az eljárást megismételtem mind a 82 vonat és 4 tesztkép esetében. Amikor a címkék készen voltak, eljött az edzés ideje.

15. lépés: Könyvtárak szükségesek

Könyvtárak szükségesek
Könyvtárak szükségesek
Könyvtárak szükségesek
Könyvtárak szükségesek
Könyvtárak szükségesek
Könyvtárak szükségesek

Először be kell töltenünk az összes szükséges könyvtárat. Ami magában foglalja

  • PIL képkezeléshez,
  • matplotlib a rajzoláshoz,
  • mátrix mûvelet,
  • os operációs rendszertől függő funkcionalitást és
  • keras neurális hálózathoz.

16. lépés: Maradék sejtek

Maradék sejtek
Maradék sejtek
Maradék sejtek
Maradék sejtek
Maradék sejtek
Maradék sejtek
Maradék sejtek
Maradék sejtek

A 2., 3., 4. és 5. cellában a képeket betöltjük a numpy tömbbe, és létrehozunk egy négydimenziós tömböt a csv fájlból, hogy címkékként működjenek. A 6. számú cellában létrehozzuk ideghálózatunkat. Az architektúrája megegyezik az osztályozáshoz használt neurális hálózattal, kivéve a kimeneti réteg dimenzióját, amely 4 és nem 1. Egy másik különbség az alkalmazott veszteségfüggvényből származik, amely az átlagos négyzet hiba. A 8 -as számú cellában elkezdjük ideghálózatunk képzését, miután betanítottam. Ezt a modellt a tesztkészleten futtattam, hogy előrejelzéseket kapjak a határoló dobozról a határoló doboz átfedő koordinátáin, amelyek elég pontosnak tűntek.

Köszönöm, hogy elolvasta.

Ajánlott: