תוכן עניינים:

האם זו יד? (מצלמת פטל + רשת עצבית) חלק 1/2: 16 שלבים (עם תמונות)
האם זו יד? (מצלמת פטל + רשת עצבית) חלק 1/2: 16 שלבים (עם תמונות)

וִידֵאוֹ: האם זו יד? (מצלמת פטל + רשת עצבית) חלק 1/2: 16 שלבים (עם תמונות)

וִידֵאוֹ: האם זו יד? (מצלמת פטל + רשת עצבית) חלק 1/2: 16 שלבים (עם תמונות)
וִידֵאוֹ: ממכר SCP-261 פאן-ממדי וניסוי התחבר 261 מודעות + שלם De + 2024, יולי
Anonim
האם זו יד? (מצלמת פטל + רשת עצבית) חלק 1/2
האם זו יד? (מצלמת פטל + רשת עצבית) חלק 1/2
האם זו יד? (מצלמת פטל + רשת עצבית) חלק 1/2
האם זו יד? (מצלמת פטל + רשת עצבית) חלק 1/2
האם זו יד? (מצלמת פטל + רשת עצבית) חלק 1/2
האם זו יד? (מצלמת פטל + רשת עצבית) חלק 1/2

לפני כמה ימים פצעתי את כף היד הימנית בחדר הכושר. אחר כך בכל פעם שהשתמשתי בעכבר המחשב שלי, זה גרם לכאבים רבים בגלל זווית תלולה של פרק כף היד.

אז זה פגע בי "האם זה לא יהיה נהדר אם נוכל להפוך כל משטח למשטח עקיבה" ואני לא יודע למה אבל משום מה חשבתי עליה, הסרט שלה, אני אתן לכם להבין את זה הַחוּצָה. זו הייתה מחשבה מרגשת אך לא ידעתי אם אוכל לעשות זאת, החלטתי לנסות.

מאמר זה לוכד את מה שיצא מזה.

לפני שנתחיל יש לי כתב ויתור-

'בסוף מאמר זה, לא יכולתי להפוך כל משטח למשטח עקיבה, אך לא למדתי הרבה והוספתי כלים גדולים לארסנל שלי. אני מקווה שזה יקרה גם לך '

בואו נתחיל.

שלב 1: וידאו

Image
Image

לפניכם סרטון קטנטן של 5 דקות המכסה את כל השלבים. תסתכל.

שלב 2: חומרה

חוּמרָה
חוּמרָה

אני מקימה פאי פאי יחד עם מצלמת פטל פאי בגובה של כ 45 ס"מ. זה נותן לנו אזור ניטור של כ 25x25 ס"מ מתחת למצלמה.

מצלמת פטל פאי ופטל פאי זמינות בקלות, פשוט חפש אותה בגוגל ותוכל למצוא חנות מקומית.

תסתכל בקישור הזה או באחד מרשימת ההשמעה שלי של פטל פטל כדי להפעיל את הפאי חסר הראש שלך.

לאחר התקנה זו, אנו זקוקים לחתיכת קוד שמחליטה אם יש יד באזור שהמצלמה עוקבת אחריה ואם כן היכן היא נמצאת.

שלב 3: פיסת קוד

חתיכת קוד
חתיכת קוד
חתיכת קוד
חתיכת קוד

פיסת קוד המאפשרת לנו להחליט אם יש יד בתחום העניין משתמשת במשהו שנקרא רשת עצבית. הם נכללים בקטגוריית תכנות שבה אנו לא מגדירים כללים לקבלת החלטות אך אנו מראים לרשת העצבית מספיק נתונים כדי שהיא תמצא את הכללים בכוחות עצמם.

במקרה שלנו, במקום לקודד איך יד נראית אנו מציגים תמונות רשת עצביות שצולמו מפאי פטל המכיל יד ושאינה מכילה יד. שלב זה נקרא אימון רשת עצבית ותמונות המשמשות נקראות מערך אימונים.

שלב 4: קבלת תמונות

קבלת תמונות
קבלת תמונות

התחברתי מרחוק לפאי הפטל שלי ולכדתי חבורה של תמונות באמצעות הפקודה הבאה.

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

צילמתי 80 תמונות ביד ו -80 תמונות שאינן מכילות יד. 160 תמונות אינן מספיקות כדי להכשיר כראוי רשת עצבית אלא אמורות להספיק להוכחת הרעיון.

מלבד 160 תמונות, צילמתי 20 תמונות נוספות כדי לבדוק את הרשת שלנו לאחר אימון.

לאחר שמערך הנתונים היה מוכן התחלתי לכתוב קוד לרשת עצבית.

שלב 5: כלים ושפה בשימוש

כלים ושפה בשימוש
כלים ושפה בשימוש
כלים ושפה בשימוש
כלים ושפה בשימוש

כתבתי את הרשת העצבית שלי בספריית הלמידה העמוקה של פייתון בשם Keras והקוד כתוב במחברת jupyter מנווט אנקונדה.

שלב 6: הכנת מערך הנתונים לאימון

הכנת מערך נתונים להכשרה
הכנת מערך נתונים להכשרה
הכנת מערך נתונים להכשרה
הכנת מערך נתונים להכשרה
הכנת מערך נתונים להכשרה
הכנת מערך נתונים להכשרה
הכנת מערך נתונים להכשרה
הכנת מערך נתונים להכשרה

ראשית (תמונה מס '1) כללתי את כל הספריות הדרושות לפרויקט זה, הכולל PIL, matplotlib, numpy, os ו- Keras. בתא השני של מחברת python (תמונה מספר 2) אני מגדיר נתיבים למערך נתונים ומדפיס את ספירת הדגימות. כעת עלינו לטעון את כל התמונות למערך מטומטם, ומכאן שבתא השלישי (תמונה מספר 2) יצרתי מערך numpy של 82 (מספר מדגם יד) +75 (מספר מדגם שאינו יד) כלומר 157x100x100x3. 157 הוא המספר הכולל של התמונות שיש לי, 100x100 הוא ממד התמונה בגודל שלנו ו -3 מיועד לשכבות צבע אדום, ירוק וכחול בתמונה.

בתא הרביעי והחמישי, אנו מעמיסים תמונות המכילות יד ואחריהן תמונות שאינן מכילות יד במערך המטומטם. בתא השישי, אנו מחלקים כל ערך ב -255 ומכאן טווח הערכים המגביל בין 0 ל -1 (תמונה מספר 3)

אני מצטער אם התמונות המצורפות אינן טובות מספיק. להלן קישור למאגר GITHUB שתוכל להסתכל על הקוד. אל תשכח להחליף את שמות נתיבי הספריות בנתיב שלך:).

לנוע יחד.

לאחר מכן עלינו לתייג כל תמונה, לכן אנו יוצרים מערך חד -ממדי באורך של 157 אורך. 82 ערכים ראשונים מוגדרים ל -1 ונותרים 75 ערכים מוגדרים ל- 0 המשדרים רשת עצבית ש -82 תמונות ראשונות הן ממעמד אחד ושאר מהן. (תמונה מס '4)

עכשיו בואו ניצור רשת עצבית.

שלב 7: רשת עצבית

רשת נוירונים
רשת נוירונים
רשת נוירונים
רשת נוירונים

בתא התשיעי, אנו מגדירים את הרשת העצבית שלנו. הוא מכיל שלוש חזרות של שכבת התכווצות ואחריה שכבות מקספול עם 8, 12 ו -16 מסנני התכווצות בהתאמה. לאחר מכן יש לנו שתי רשתות עצביות צפופות. מצרף שתי תמונות לשלב זה. הראשונה היא הצמדת קוד היוצרת רשת עצבית והשנייה היא ייצוג ציורי של רשת עצבית עם ממד פלט ופעולות המבוארות.

שלב 8: הכשרת רשת עצבית

רשת עצבית להכשרה
רשת עצבית להכשרה

בתא העשירי, אנו מגדירים את כלי ייעול הרשת העצבית ל'אדם 'ופונקציית אובדן ל'בינארי_קרוסנטרופיה'. הם ממלאים תפקיד מרכזי באופן עדכון משקל הרשת. לבסוף כאשר אנו מפעילים תא אחד עשר, הרשת העצבית מתחילה להתאמן. בזמן שהרשת מתאמנת, בדוק את תפקוד האובדן וודא שהיא הולכת ופוחתת.

שלב 9: בדיקת רשת עצבית

בדיקת רשת עצבית
בדיקת רשת עצבית

לאחר אימון הרשת העצבית, עלינו להכין מערך נתוני בדיקה. אנו חוזרים על ההליך שנעשה להכנת מערך אימונים בתא השלישי, הרביעי, החמישי והשישי על נתוני הבדיקה ליצירת מערך בדיקה. אנו מכינים גם תווית למערך הבדיקות אך הפעם אנו מריצים מודל על מערך הנתונים הזה כדי לקבל תחזיות ולא כדי להתאמן.

שלב 10: תוצאה וחלק הבא…

תוצאה וחלק הבא…
תוצאה וחלק הבא…

קיבלתי דיוק בדיקה של 88% אבל קח את זה עם קורט מלח מכיוון שמערך הנתונים המשמש לאימון ובדיקת המודל הזה מאוד מאוד קטן ולא מספיק כדי לאמן את המודל הזה כראוי.

בכל מקרה אני מקווה שנהנית מהמאמר הזה. הכוונה שלי מאחורי התרגיל הזה עדיין לא הושלמה ותיזהר מהחלק השני. אעלה אותו בהקדם האפשרי.

בחלק הבא נלמד רשת עצבית נוספת שתספר לנו את מיקום היד בתמונה שזוהתה ביד.

כל השאילתא תתקבל בברכה.

אם מישהו מעוניין להשתמש במערך הנתונים הזעיר שלי, יידע אותי בתגובות. אני אעשה את זה זמין.

תודה שקראתם. אני אראה אותך בקרוב עם חלק שני עד אז למה שלא תיצור ותאמן רשת עצבית.

עריכה:- השלבים הבאים הם לחלק השני.

שלב 11: זיהוי אובייקטים

זיהוי אובייקטים
זיהוי אובייקטים

בשלבים קודמים יצרנו NN שאומר לנו אם תמונת הבדיקה מכילה יד או לא. ובכן מה הלאה? אם NN מסווג את התמונה כמכילה יד נרצה לדעת את מיקום היד. זה נקרא זיהוי אובייקטים בספרות ראיית מחשבים. אז בואו לאמן את NN שעושה בדיוק אותו דבר.

שלב 12: וידאו

Image
Image

סרטון של 3 דקות המסביר את כל השלבים הנותרים. תסתכל.

שלב 13: תיוג

תִיוּג
תִיוּג
תִיוּג
תִיוּג
תִיוּג
תִיוּג

אם אתה רוצה שרשת עצבית תפיק מיקום של יד, עלינו לאמן אותה בצורה כזו כלומר בניגוד לרשת עצבית קודמת שבה כל תמונה סומנה כביד וללא יד. הפעם לכל התמונות עם היד יהיו ארבע תוויות המתאימות לקואורדינטות האלכסוניות של התיבה התוחמת סביב היד באותה תמונה.

התמונה המצורפת של קובץ csv מכילה תווית לכל תמונה. שים לב שקואורדינטות מנורמלות עם ממד התמונה כלומר, אם קואורדינטות X העליונות נמצאות בפיקסל 320 בתמונה ברוחב 640 פיקסלים, נסמן אותה כ- 0.5.

שלב 14: תיוג GUI

GUI תיוג
GUI תיוג
GUI תיוג
GUI תיוג
GUI תיוג
GUI תיוג
GUI תיוג
GUI תיוג

יתכן שאתה תוהה כיצד הצלחתי לתייג את כל 82 התמונות, ובכן כתבתי GUI בפייתון שעזר לי במשימה זו. לאחר טעינת התמונה ב- GUI. הקלקתי שמאלה על הקואורדינטות העליונות ולחיצה ימנית על הקואורדינטה התחתונה של תיבת הגבול הסבירה סביב היד. קואורדינטות אלה נכתבות לאחר מכן לקובץ שאחריו אני לוחץ על הכפתור הבא כדי לטעון את התמונה הבאה. חזרתי על הליך זה עבור כל 82 רכבות ו -4 תמונות הבדיקה. ברגע שהתוויות היו מוכנות, הגיע זמן האימון.

שלב 15: דרושים ספריות

דרושה ספריות
דרושה ספריות
דרושה ספריות
דרושה ספריות
דרושה ספריות
דרושה ספריות

ראשית עלינו לטעון את כל הספריות הדרושות. שכולל

  • PIL למניפולציה של תמונות,
  • matplotlib למזימה,
  • חסר תחושה עבור פעולת מטריצה,
  • מערכת הפעלה לפונקציונליות התלויה במערכת ההפעלה ו
  • keras עבור רשת עצבית.

שלב 16: תאים שנותרו

תאים שנותרו
תאים שנותרו
תאים שנותרו
תאים שנותרו
תאים שנותרו
תאים שנותרו
תאים שנותרו
תאים שנותרו

בתא השני, השלישי, הרביעי והחמישי אנו מעמיסים תמונות למערך numpy ויוצרים מערך ארבעה ממדים מקובץ csv כדי לשמש כתוויות. בתא מספר 6 אנו יוצרים את הרשת העצבית שלנו. הארכיטקטורה שלה זהה לרשת העצבית המשמשת לסיווג למעט ממד שכבת הפלט שהיא 4 ולא 1. הבדל נוסף נובע מפונקציית אובדן המשמשת שגיאה ממוצעת בריבוע. בתא מספר 8 אנו מתחילים להכשיר את הרשת העצבית שלנו לאחר אימון הרצתי את המודל הזה במערך הבדיקות כדי לקבל תחזיות לתיבה מגבילה על קואורדינטות שכבות של תיבה מגבילה, הן נראו די מדויקות.

תודה שקראתם.

מוּמלָץ: