Mundarija:
- 1 -qadam: video
- 2 -qadam: Uskuna
- 3 -qadam: Kod qismi
- 4 -qadam: rasmlarni olish
- 5 -qadam: ishlatiladigan asboblar va til
- 6 -qadam: Ma'lumotlar to'plamini mashg'ulotlarga tayyorlash
- 7 -qadam: neyron tarmoq
- 8 -qadam: Neyron tarmoqlarini o'qitish
- 9 -qadam: Neyron tarmoqlarini sinab ko'rish
- 10 -qadam: Natija va keyingi qism …
- 11 -qadam: Ob'ektlarni aniqlash
- 12 -qadam: video
- 13 -qadam: etiketkalash
- 14 -qadam: GUIni etiketlash
- 15 -qadam: kutubxonalar kerak
- 16 -qadam: Qolgan hujayralar
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
Bir necha kun oldin men sport zalida o'ng qo'limni shikastladim. Keyinchalik, men har safar kompyuter sichqonchasini ishlatganimda, bu bilak burchagi tufayli og'riqni keltirib chiqardi.
O'shanda bu menga "har qanday sirtni sensorli panelga aylantira olsak yaxshi bo'lardi" degan gap menga tegdi va men bilmayman, lekin negadir men u haqida o'yladim, HER filmi, buni sizga tushunishga ruxsat beraman. tashqariga Bu hayajonli fikr edi, lekin buni uddalay olmasligimni bilmasdim, sinab ko'rishga qaror qildim.
Bu maqola undan nima chiqqanini yozib beradi.
Boshlashdan oldin menda rad javobi bor.
Maqolaning oxirida, men hech qanday sirtni sensorli panelga aylantira olmadim, lekin men ko'p narsani o'rgandim va arsenalimga katta asboblarni qo'shdim. Umid qilamanki, sizda ham shunday bo'ladi '
Qani boshladik.
1 -qadam: video
Bu erda barcha qadamlarni o'z ichiga olgan 5 daqiqalik kichik video. Qarab qo'ymoq.
2 -qadam: Uskuna
Men taxminan 45 sm balandlikdagi malina pi kamerasi va malina pi ni o'rnataman. Bu bizga kamera ostida taxminan 25x25 sm o'lchash maydonini beradi.
Raspberry pi va malina pi kameralarini osongina olish mumkin, faqat google -da va siz mahalliy do'konni topishingiz kerak.
Boshsiz boshingizni ishga tushirish uchun ushbu havolani yoki mening Raspberry pi pleylistimdan birini ko'ring.
Ushbu sozlashdan so'ng, bizga kamera kuzatayotgan sohada qo'l bormi yoki yo'qligini aniqlaydigan kod kerak.
3 -qadam: Kod qismi
Qiziqish sohasida qo'l bor yoki yo'qligini aniqlashga imkon beradigan kod bo'lagi neyron tarmoq deb nomlangan narsani ishlatadi. Ular dasturlash toifasiga kiradi, bu erda biz qaror qabul qilish qoidalarini aniqlamaymiz, lekin biz neyron tarmoqqa o'z -o'zidan qoidalarni aniqlaydigan etarli ma'lumotlarni ko'rsatamiz.
Bizning holatlarimizda, qanday ko'rinishga ega ekanligini kodlash o'rniga, biz malinali pi -dan olingan va qo'lda bo'lmagan neyron tarmoq tasvirlarini ko'rsatamiz. Bu bosqich neyron tarmoqni o'rgatish deb ataladi va ishlatilgan tasvirlar o'quv ma'lumotlar to'plami deb ataladi.
4 -qadam: rasmlarni olish
Men malina pi-ga uzoqdan kirdim va quyidagi buyruq yordamida rasmlar to'plamini oldim.
sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o ramka%04d.jpg
Men qo'l bilan 80 ta tasvirni va qo'lda bo'lmagan 80 ta tasvirni oldim. Neyron tarmoqni to'g'ri o'rgatish uchun 160 ta tasvir etarli emas, lekin kontseptsiyani isbotlash uchun etarli bo'lishi kerak.
160 ta tasvirdan tashqari, men tarmoqni o'rgatgandan so'ng sinab ko'rish uchun yana 20 ta tasvirni oldim.
Ma'lumotlar bazasi tayyor bo'lgach, men neyron tarmoq uchun kod yozishni boshladim.
5 -qadam: ishlatiladigan asboblar va til
Men neyron tarmog'imni Keras deb nomlangan python chuqur o'rganish kutubxonasiga yozdim va kod anaconda navigatoridan jupyter daftarchasiga yozilgan.
6 -qadam: Ma'lumotlar to'plamini mashg'ulotlarga tayyorlash
Birinchidan (Rasm #1) Men ushbu loyiha uchun zarur bo'lgan barcha kutubxonalarni o'z ichiga oldim, ular PIL, matplotlib, numpy, os va Kerasni o'z ichiga oladi. Python daftarining ikkinchi katakchasida (2 -rasm) men ma'lumotlar to'plamiga yo'llarni belgilayman va namunalar sonini chop etaman. Endi biz barcha tasvirlarni noaniq qatorga yuklashimiz kerak, shuning uchun uchinchi katakchada (2 -rasm) Men 82 (qo'lda namuna soni) +75 (qo'lda bo'lmagan namunalar soni), ya'ni 157x100x100x3 raqamli massiv yaratdim. 157 - bu menda mavjud bo'lgan rasmlarning umumiy soni, 100x100 - bu bizning o'lchamimiz, 3 - rasmdagi qizil, yashil va ko'k rangli qatlamlar uchun.
To'rtinchi va beshinchi katakchalarga biz qo'lda tasvirlarni yuklaymiz, shundan keyingina numpy massivida qo'l yo'q. Oltinchi katakda biz har bir qiymatni 255 ga ajratamiz, shuning uchun qiymat oralig'ini 0 dan 1 gacha cheklaymiz (Rasm #3)
Kechirasiz, agar biriktirilgan rasmlar etarlicha yaxshi bo'lmasa. Bu erda kodni ko'rish uchun GITHUB omboriga havola. Katalog yo'llari nomlarini o'z yo'lingiz bilan almashtirishni unutmang:).
Yurish.
Keyin biz har bir tasvirni belgilashimiz kerak, shuning uchun biz uzunligi 157 bo'lgan bir o'lchovli numpy massivini yaratamiz. Dastlabki 82 ta yozuv 1 ga, qolgan 75 ta yozuv esa 0 ta neyron tarmoqqa o'rnatiladi, bu birinchi 82 ta rasm bir sinfdan, qolganlari esa boshqa sinfdan. (Rasm #4)
Endi neyron tarmoq yarataylik.
7 -qadam: neyron tarmoq
To'qqizinchi hujayrada biz neyron tarmog'imizni aniqlaymiz. U uchta konvulsion qatlamni o'z ichiga oladi, so'ngra mos ravishda 8, 12 va 16 konvulsiyali filtrli maxpool qatlamlari. Shundan so'ng bizda ikkita zich neyron to'r bor. Ushbu qadam uchun ikkita rasm biriktirilgan. Birinchisi, neyron tarmog'ini yaratadigan kod, ikkinchisi - neyron tarmoqning chiqish o'lchami va operatsiyalari izohlangan tasviriy tasvir.
8 -qadam: Neyron tarmoqlarini o'qitish
O'ninchi hujayrada biz neyron tarmoq optimizatorini "odam" ga, yo'qotish funktsiyasini "binary_crossentropy" ga sozlaymiz. Ular tarmoq og'irliklarini yangilashda katta rol o'ynaydi. Nihoyat, biz o'n birinchi hujayrani ishga tushirganimizda, neyron tarmoq o'rgata boshlaydi. Tarmoq mashg'ulot paytida, yo'qotish funktsiyasini ko'rib chiqing va uning kamayayotganiga ishonch hosil qiling.
9 -qadam: Neyron tarmoqlarini sinab ko'rish
Neyron tarmoqni o'rgatgandan so'ng, biz test ma'lumotlari to'plamini tayyorlashimiz kerak. Test to'plamini yaratish uchun test ma'lumotlari bo'yicha 3 -chi, 4 -chi, 5 -chi va 6 -chi hujayralardagi o'quv majmuasini tayyorlash uchun qilingan protsedurani takrorlaymiz. Shuningdek, biz test to'plami uchun yorliq tayyorlaymiz, lekin bu safar biz bu ma'lumotlar to'plamida bashorat qilish uchun va mashq qilmaslik uchun modelni ishga tushiramiz.
10 -qadam: Natija va keyingi qism …
Menda testning aniqligi 88% ni tashkil etdi, lekin uni bir chimdik tuz bilan oling, chunki bu modelni o'rgatish va sinash uchun ishlatiladigan ma'lumotlar to'plami juda kichik va bu modelni to'g'ri o'rgatish uchun etarli emas.
Qanday bo'lmasin, sizga ushbu maqola yoqdi deb umid qilaman. Bu mashg'ulotning maqsadi hali tugallanmagan va ikkinchi qismga e'tibor bering. Iloji boricha yuklayman.
Keyingi qismda biz qo'l bilan aniqlangan rasmda qo'lning joylashishini ko'rsatadigan boshqa neyron tarmoqni o'rgatamiz.
Barcha so'rovlar qabul qilinadi.
Agar kimdir mening kichik ma'lumotlar to'plamimdan foydalanmoqchi bo'lsa, izohlarda menga xabar bering. Men uni taqdim etaman.
O'qiganingiz uchun tashakkur. Men sizni tez orada ikkinchi qism bilan ko'raman, shu paytgacha nega neyron tarmoq yaratmaysiz va o'rgatmaysiz.
Tartibga solish:- Keyingi qadamlar ikkinchi qism uchun.
11 -qadam: Ob'ektlarni aniqlash
Oldingi bosqichlarda biz NN yaratdik, u bizga test tasviri qo'lda yoki yo'qligini bildiradi. Xo'sh, keyin nima? Agar NN tasvirni qo'lli deb tasniflasa, biz qo'lning joylashishini bilishni xohlaymiz. Bu kompyuter ko'rish adabiyotida ob'ektni aniqlash deb ataladi. Keling, NNni o'rgataylik, bu xuddi shunday.
12 -qadam: video
Qolgan barcha qadamlarni tushuntirib beradigan 3 minutlik video. Qarab qo'ymoq.
13 -qadam: etiketkalash
Agar siz neyron tarmog'ining qo'lda joylashishini xohlasangiz, biz uni shunday o'rgatishimiz kerak, ya'ni oldingi neyron tarmoqdan farqli o'laroq, har bir tasvir qo'lda va qo'lsiz deb belgilangan. Bu safar qo'lda bo'lgan barcha tasvirlar, bu rasmda chegara qutisining diagonal koordinatalariga mos keladigan to'rtta yorliqqa ega bo'ladi.
CSV faylining biriktirilgan tasvirida har bir tasvir uchun yorliq bor. E'tibor bering, koordinatalar tasvir o'lchami bilan normallashadi, agar yuqori X koordinatasi 640 pikselli tasvirning 320 -pikselida bo'lsa, biz uni 0,5 deb belgilaymiz.
14 -qadam: GUIni etiketlash
Siz 82 ta tasvirni qanday belgilashga muvaffaq bo'ldingiz, deb o'ylaysiz, men pythonda GUI yozdim, bu menga bu vazifani bajarishga yordam berdi. Rasm GUI -ga yuklanganidan keyin. Men yuqori koordinatada sichqonchaning chap tugmachasini bosaman va qo'lning atrofidagi mumkin bo'lgan chegara qutisining pastki koordinatasida o'ng tugmasini bosaman. Bu koordinatalar keyinchalik faylga yoziladi va men keyingi rasmni yuklash uchun keyingi tugmani bosaman. Men ushbu protsedurani 82 ta poezd va 4 ta test tasvirlari uchun takrorladim. Yorliqlar tayyor bo'lgach, mashg'ulot vaqti keldi.
15 -qadam: kutubxonalar kerak
Avval biz barcha kerakli kutubxonalarni yuklashimiz kerak. Bu o'z ichiga oladi
- Rasm bilan ishlash uchun PIL,
- chizish uchun matplotlib,
- matritsaning ishlashi uchun numpy,
- os operatsion tizimga bog'liq funksiyalar uchun va
- neyron tarmoq uchun keras.
16 -qadam: Qolgan hujayralar
2 -chi, 3 -chi, 4 -chi va 5 -chi kataklarda rasmlarni numpy qatoriga yuklaymiz va yorliq vazifasini bajarish uchun csv faylidan to'rt o'lchovli massiv yaratamiz. 6 -hujayrada biz neyron tarmog'imizni yaratamiz. Uning arxitekturasi tasniflash uchun ishlatiladigan neyron tarmoq bilan bir xil. Chiqish qatlamining o'lchami 4 emas, balki 1 ga teng. Yana bir farq - yo'qolish funktsiyasidan kelib chiqadi, bu o'rtacha kvadrat xato. 8 -hujayrada biz neyron tarmog'imizni o'qitishni boshlaymiz, men o'rgatganimdan so'ng, men ushbu modelni sinovlar to'plamida ishlatib, chegara qutisi koordinatalarini joylashtirish bo'yicha bashoratlarni oldim.
O'qiganingiz uchun tashakkur.