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

זיהוי אובייקטים עם לוחות Sipeed MaiX (Kendryte K210): 6 שלבים
זיהוי אובייקטים עם לוחות Sipeed MaiX (Kendryte K210): 6 שלבים

וִידֵאוֹ: זיהוי אובייקטים עם לוחות Sipeed MaiX (Kendryte K210): 6 שלבים

וִידֵאוֹ: זיהוי אובייקטים עם לוחות Sipeed MaiX (Kendryte K210): 6 שלבים
וִידֵאוֹ: Полный курс Redux Toolkit + RTK Query для начинающих | Редакс за 2 часа! 2024, יולי
Anonim
Image
Image

בהמשך למאמר הקודם שלי בנושא זיהוי תמונות באמצעות לוחות Sipeed MaiX, החלטתי לכתוב הדרכה נוספת, המתמקדת בזיהוי אובייקטים. לאחרונה צצה חומרה מעניינת עם שבב Kendryte K210, כולל Seeed AI Hat for Computing Edge, M5StickV של M5 Stack ו- HuskyLens של DFRobot (אם כי יש לזה קושחה קניינית ומיועדת יותר למתחילים שלמים). בגלל המחיר הזול, Kendryte K210 פנה לאנשים, ורוצה להוסיף ראייה ממוחשבת לפרויקטים שלהם. אבל כרגיל במוצרי חומרה סיניים, התמיכה הטכנית לוקה בחסר וזה משהו שאני מנסה לשפר בעזרת המאמרים והסרטונים שלי. אך זכור כי אינני בצוות המפתחים של קנדריט או Sipeed ואיני יכול לענות על כל השאלות הקשורות למוצר שלהם.

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

עדכון מאי 2020: כשראיתי כיצד המאמר והווידאו שלי בנושא זיהוי אובייקטים עם לוחות K210 עדיין פופולריים מאוד ובין התוצאות המובילות ביוטיוב ובגוגל, החלטתי לעדכן את המאמר כך שיכלול את המידע אודות aXeleRate, מסגרת מבוססת Keras ל- AI על ה- אדג 'אני מפתח. aXeleRate מבוסס בעצם על אוסף התסריטים בהם השתמשתי לאימון מודלים לזיהוי תמונות/זיהוי אובייקטים - משולבים למסגרת אחת ומותאמים לזרימת עבודה ב- Google Colab. זה נוח יותר לשימוש ועדכני יותר.

לגרסה הישנה של המאמר, אתה עדיין יכול לראות אותה ב- steemit.com.

שלב 1: אדריכלות מודל זיהוי אובייקטים מוסברת

מוסבר אדריכלות מודל זיהוי אובייקטים
מוסבר אדריכלות מודל זיהוי אובייקטים
מוסבר אדריכלות מודל זיהוי אובייקטים
מוסבר אדריכלות מודל זיהוי אובייקטים

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

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

אנו מנסים לקבוע אילו אובייקטים קיימים בתמונה ומה הם הקואורדינטות שלהם. מכיוון שלמידת מכונה אינה קסם ולא "מכונת חשיבה", אלא רק אלגוריתם העושה שימוש בסטטיסטיקות כדי לייעל את הפונקציה (רשת עצבית) כדי לפתור טוב יותר בעיה מסוימת. עלינו לנסח את הבעיה הזו על מנת להפוך אותה ל"אופטימלית "יותר. גישה נאיבית כאן היא שהאלגוריתם ימזער את ההפסד (ההבדל) בין התחזית שלו לקואורדינטות הנכונות של האובייקט. זה יעבוד די טוב, כל עוד יש לנו רק אובייקט אחד בתמונה. עבור אובייקטים מרובים אנו נוקטים בגישה שונה - אנו מוסיפים את הרשת וגורמים לרשת שלנו לחזות את הנוכחות (או היעדרות) של האובייקטים בכל רשת. נשמע נהדר, אבל עדיין משאיר יותר מדי אי וודאות לרשת - כיצד ניתן להוציא את התחזית ומה לעשות כשיש מספר אובייקטים עם מרכז בתוך תא רשת אחד? עלינו להוסיף עוד מגבלה אחת - מה שנקרא עוגנים. עוגנים הם גדלים ראשוניים (רוחב, גובה) שחלקם (הקרובים ביותר לגודל האובייקט) ישתנו לגודל האובייקט - באמצעות כמה תפוקות מהרשת העצבית (מפת תכונה סופית).

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

שלב 2: הכנת הסביבה

הכינו את הסביבה
הכינו את הסביבה

aXeleRate מבוסס על פרויקט נפלא של גלאי ספרות penny4860, SVHN yolo-v2. aXeleRate לוקחת את יישום זה של גלאי YOLO בקראס לשלב הבא ומשתמשת במערכת התצורה הנוחה שלה לביצוע הדרכה והמרה של רשתות זיהוי/זיהוי אובייקטים ופילוח תמונות עם תלויי גב שונים.

To הן שתי דרכים לשימוש ב- aXeleRate: הפעלה מקומית במכשיר אובונטו או ב- Google Colab. להפעלה ב- Google Colab, עיין בדוגמה זו:

מחברת Colab זיהוי אובייקטים PASCAL-VOC

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

הורד את ההתקנה כאן.

לאחר השלמת ההתקנה, צור סביבה חדשה:

conda create -n yolo python = 3.7

בואו נפעיל את הסביבה החדשה

קונדה להפעיל yolo

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

התקן aXeleRate במחשב המקומי שלך עם

pip install git+https://github.com/AIWintermuteAI/aXeleRate

ואז הפעל את זה כדי להוריד סקריפטים שתזדקק להם לאימון והסקת מסקנות:

שיבוט git

אתה יכול להריץ בדיקות מהירות עם tests_training.py בתיקייה aXeleRate. הוא יפעיל הדרכה והסקת כל סוג דגם, ישמור וימיר דגמים מאומנים. מכיוון שהוא אימון רק ל -5 עידנים ומערך הנתונים הוא קטן מאוד, לא תוכל להשיג מודלים שימושיים, אך סקריפט זה מיועד רק לבדיקת היעדר טעויות.

שלב 3: אימון מודל לגילוי אובייקטים באמצעות Keras

אמן מודל לגילוי אובייקטים עם קראס
אמן מודל לגילוי אובייקטים עם קראס

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

נתחיל בדוגמת צעצוע ונאמן גלאי דביבון. יש קובץ config בתוך התיקייה /config, raccoon_detector.json. אנו בוחרים את MobileNet7_5 כאדריכלות (כאשר 7_5 הוא פרמטר אלפא של היישום המקורי של Mobilenet, שולט ברוחב הרשת) ו- 224x224 כגודל קלט. בואו נסתכל על הפרמטרים החשובים ביותר בתצורה:

סוג הוא מודל חזיתי של דגם - מסווג, גלאי או Segnet הארכיטקטורה היא מודל אחורי של מודל (מחלץ תכונה)

- Yolo מלא - Yolo זעיר - MobileNet1_0 - MobileNet7_5 - MobileNet5_0 - MobileNet2_5 - SqueezeNet - VGG16 - ResNet50

למידע נוסף על עוגנים, אנא קרא כאן

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

object_scale קובע כמה להעניש חיזוי שגוי של ביטחון של מנבאי אובייקטים

no_object_scale קובע כמה להעניש חיזוי שגוי של ביטחון של מנבאים שאינם אובייקטים

coord_scale קובע כמה להעניש תחזיות מיקום וגודל לא נכון (x, y, w, h)

class_scale קובע כמה להעניש חיזוי כיתתי שגוי

augumentation - הגדלת התמונה, שינוי גודל, הסטה וטשטוש התמונה על מנת למנוע התאמת יתר ולהיות בעלי מגוון גדול יותר במערך הנתונים.

train_times, validation_times - כמה פעמים יש לחזור על מערך הנתונים. שימושי אם יש לך הנחיות

מופעל

first_trainable_layer - מאפשר לך להקפיא שכבות מסוימות אם אתה משתמש ברשת תכונות שהוכשרה מראש

כעת עלינו להוריד את מערך הנתונים, אותו שיתפתי ב- Google Drive שלי (מערך הנתונים המקורי), שהוא מערך זיהוי דביבון, המכיל 150 תמונות עם הערות.

הקפד לשנות את השורות בקובץ התצורה (train_image_folder, train_annot_folder) בהתאם ולאחר מכן התחל את האימון באמצעות הפקודה הבאה:

python axelerate/train.py -c configs/raccoon_detector.json

train.py קורא את התצורה מקובץ.json ומאמן את המודל עם axelerate/networks/yolo/yolo_frontend.py. yolo/backend/loss.py הוא המקום בו מיושמת פונקציית אובדן מותאמת אישית ו- yolo/backend/network.py הוא המקום בו נוצר המודל (קלט, חולץ תכונה ושכבות זיהוי יחד). axelerate/networks/common_utils/fit.py הוא סקריפט שמיישם תהליך אימון ו axelerate/networks/common_utils/feature.py מכיל תמציות תכונה. אם אתה מתכוון להשתמש בדגם מאומן עם שבב K210 וקושחת Micropython, בשל מגבלות הזיכרון אתה יכול לבחור בין MobileNet (2_5, 5_0 ו- 7_5) ו- TinyYolo, אך מצאתי MobileNet נותן דיוק זיהוי טוב יותר.

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

שלב 4: המר אותו לפורמט.kmodel

המר אותו לפורמט.kmodel
המר אותו לפורמט.kmodel

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

אם ה- mAP, ממוצע הדיוק הממוצע (מדד האימות שלנו) לא משתפר במשך 20 תקופות, האימון ייפסק בטרם עת. בכל פעם שה- mAP משתפר, המודל נשמר בתיקיית הפרויקט. לאחר סיום האימון, aXeleRate ממיר אוטומטית את הדגם הטוב ביותר לפורמטים שצוינו - תוכל לבחור "tflite", "k210" או "edgetpu" נכון לעכשיו.

עכשיו לשלב האחרון, למעשה הפעלת הדגם שלנו על חומרת Sipeed!

שלב 5: הפעל את הקושחה של Micropython

הפעל על הקושחה של Micropython
הפעל על הקושחה של Micropython

אפשר להסיק מסקנה של מודל זיהוי האובייקטים שלנו עם קוד C, אך מטעמי נוחות נשתמש במקום זאת בקושחת Micropython וב- MaixPy IDE.

הורד את MaixPy IDE מכאן ואת הקושחה של micropython מכאן. אתה יכול להשתמש ב- script python kflash.py כדי לצרוב את הקושחה או להוריד כאן כלי פלאש נפרד של GUI.

העתק model.kmodel לשורש כרטיס SD והכנס כרטיס SD לתוך Sipeed Maix Bit (או מכשיר K210 אחר). לחלופין תוכל לצרוב.kmodel לזיכרון הבזק של המכשיר. התסריט לדוגמה שלי קורא.kmodel מזיכרון פלאש. אם אתה משתמש בכרטיס SD, שנה את השורה הזו

task = kpu.load (0x200000)

ל

task = kpu.load ("/sd/model.kmodel")

פתח את MaixPy IDE ולחץ על כפתור החיבור. פתח את סקריפט raccoon_detector.py מתיקיית example_scripts/k210/גלאי ולחץ על כפתור התחל. אתה אמור לראות שידור חי מהמצלמה עם תיבות מגבילות מסביב … ובכן, דביבונים. אתה יכול להגדיל את הדיוק של המודל על ידי מתן דוגמאות הדרכה נוספות, אך זכור שמדובר בדגם קטן לפיות (1.9 מ ') ויהיה לו בעיה לאתר אובייקטים קטנים (בשל רזולוציה נמוכה).

אחת השאלות שקיבלתי בתגובות למאמר הקודם שלי בנושא זיהוי תמונות היא כיצד לשלוח את תוצאות הזיהוי באמצעות UART/I2C למכשיר אחר המחובר ללוחות פיתוח של Sipeed. במאגר github שלי תוכל למצוא סקריפט דוגמה אחר, raccoon_detector_uart.py, אשר (ניחשת נכון) מזהה דביבונים ושולח את קואורדינטות תיבות הגבול מעל UART. זכור כי סיכות המשמשות לתקשורת UART שונות מלוחות שונים, זה משהו שאתה צריך לבדוק בעצמך בתיעוד.

שלב 6: סיכום

Kendryte K210 הוא שבב מוצק לראיית מחשב, גמיש, אם כי עם זכרון מוגבל. עד כה, בהדרכות שלי סקרנו את השימוש בו לזיהוי אובייקטים מותאמים אישית, גילוי אובייקטים מותאמים אישית והפעלת כמה משימות ראיית מחשב מבוססות OpenMV. אני יודע שזה מתאים גם לזיהוי פנים ועם קצת התעסקות צריך להיות אפשרי לבצע זיהוי תנוחות ופילוח תמונות (אתה יכול להשתמש ב- aXeleRate לאימון מודל פילוח סמנטי, אך עדיין לא יישמתי את המסקנה עם K210). אל תהסס להסתכל על בעיות מאגר aXeleRate ולעשות יחסי ציבור אם אתה חושב שיש כמה שיפורים שאתה יכול לתרום!

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

גלאי אובייקט קופסת גבולות: הבנת YOLO, אתה מסתכל רק פעם אחת

הבנת YOLO (עוד מתמטיקה)

מדריך עדין כיצד פועל לוקליזציית אובייקטים של YOLO עם Keras (חלק 2)

זיהוי אובייקטים בזמן אמת עם YOLO, YOLOv2 ועכשיו YOLOv3

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

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

מוּמלָץ: