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

זיהוי תמונות עם לוחות K210 ו- Arduino IDE/Micropython: 6 שלבים (עם תמונות)
זיהוי תמונות עם לוחות K210 ו- Arduino IDE/Micropython: 6 שלבים (עם תמונות)

וִידֵאוֹ: זיהוי תמונות עם לוחות K210 ו- Arduino IDE/Micropython: 6 שלבים (עם תמונות)

וִידֵאוֹ: זיהוי תמונות עם לוחות K210 ו- Arduino IDE/Micropython: 6 שלבים (עם תמונות)
וִידֵאוֹ: גוגל תמונות - זיהוי אנשים 2024, נוֹבֶמבֶּר
Anonim
Image
Image

כבר כתבתי מאמר אחד כיצד להריץ הדגמות OpenMV ב- Sipeed Maix Bit וגם עשיתי סרטון של הדגמת זיהוי אובייקטים עם לוח זה. אחת השאלות הרבות שאנשים שאלו היא - כיצד אוכל לזהות אובייקט שהרשת העצבית אינה מאומנת עבורו? במילים אחרות כיצד ליצור מסווג תמונות משלך ולהפעיל אותו בהאצת חומרה.

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

תפסתי אותך! במאמר זה אלמד אותך כיצד ליצור מסווג תמונות מותאם אישית משלך עם למידת העברות ב- Keras, להמיר את המודל המאומן לפורמט.kmodel ולהריץ אותו על לוח Sipeed (יכול להיות כל לוח, Bit/Dock או Go) באמצעות Micropython או Arduino IDE. ורק הדמיון שלך יהיה הגבול למשימות שאתה יכול לבצע עם ידע זה.

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

aXeleRate מבוסס בעצם על אוסף התסריטים בהם השתמשתי לאימון מודלים לזיהוי תמונות/זיהוי אובייקטים - משולבים למסגרת אחת ומותאמים לזרימת עבודה ב- Google Colab. זה נוח יותר לשימוש ועדכני יותר.

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

שלב 1: CNN ולמידת העברות: כמה תיאוריות

CNN ולמידת העברות: כמה תיאוריות
CNN ולמידת העברות: כמה תיאוריות

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

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

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

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

שלב 2: הכינו את הסביבה שלכם

הכינו את הסביבה שלכם
הכינו את הסביבה שלכם

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

סיווג תמונות מחברת Colab

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

סביבת העבודה שלי היא אובונטו 16.04, 64 ביט. אתה יכול להשתמש במכונה וירטואלית להפעלת תמונת אובונטו מכיוון שלא נשתמש ב- GPU לאימון. עם כמה שינויים תוכל גם להריץ את סקריפט האימון ב- Windows, אך לצורך המרת דגמים יהיה עליך להשתמש במערכת לינוקס. לכן, סביבה עדיפה לביצוע הדרכה זו היא אובונטו 16.04, הפועלת באופן מקורי או במכונה וירטואלית.

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

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

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

conda create -n ml python = 3.7

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

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

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

שלב 3: התקן את AXeleRate והפעל בדיקות

התקן את AXeleRate והפעל בדיקות
התקן את AXeleRate והפעל בדיקות

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

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

להורדת דוגמאות הפעלה:

שיבוט git

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

שלב 4: אימון מחדש של המודל, המרת דגם Keras ל-.kmodel

אימון מחדש של המודל, המרת דגם קרס ל-.kmodel
אימון מחדש של המודל, המרת דגם קרס ל-.kmodel

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

הפעל את הפקודה הבאה מתיקיית aXeleRate:

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

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

שלב 5: הפעל את המודל ב- Sipeed Maix Bit

הפעל את המודל ב- Sipeed Maix Bit
הפעל את המודל ב- Sipeed Maix Bit
הפעל את המודל ב- Sipeed Maix Bit
הפעל את המודל ב- Sipeed Maix Bit
הפעל את המודל ב- Sipeed Maix Bit
הפעל את המודל ב- Sipeed Maix Bit

ישנן שתי דרכים להריץ את המודל שיש לך כעת על חומרת Sipeed Maix: קושחת מיקרופייתון ו- Arduino IDE. החומרה של מיקרופייתון קלה יותר לשימוש, אך היא תופסת חלק ניכר מהזיכרון הזמין, כך שנותר פחות מקום לדגם. Arduino IDE הוא בעצם קוד C, שהוא הרבה יותר יעיל ובעל טביעת רגל זיכרון קטנה יותר. הדגם שלי הוא 1.9Mb בלבד, כך ששתי האפשרויות עובדות בשבילו. אתה יכול להשתמש בדגמים בגודל 2.9 Mb עם Micropython, לכל דבר גדול יותר אתה צריך לשקול להשתמש ב- Arduino IDE.

הורד מכאן את OpenMV IDE וקושחה מינימלית של מיקרופיתון מכאן.

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

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

לשימוש עם Arduino IDE, תחילה עליך לבצע את ההליך להוספת לוחות Sipeed ל- Arduino IDE, המתועד כאן. גרסת ה- Arduino IDE שלך צריכה להיות 1.8.12 לפחות. לאחר שהוספת את הלוחות, פתח את הסקיצה mobilenet_v1_transfer_learning.ino והעלה אותה ל- Sipeed Maix Bit. שנה את שם הדגם בכרטיס SD ל"דגם "(או צור עותק בשם זה). תוכל לשנות את שמות התוויות ב- names.cpp. הוא יציג את זרם המצלמות החי על מסך Sipeed Maix יחד עם התוצאה העליונה של זיהוי תמונות.

שלב 6: מסקנות

להלן עוד כמה חומרים לקריאה בנושא CNNs ולמידת העברות:

למידת העברה באמצעות Mobilenet ו- Keras הסבר מצוין ללמידת העברות, הדרכה זו משתמשת בגרסה שונה של הקוד מאותו מאמר.

חתולים וכלבים ורשתות עצביות מתפתלות מסביר את היסודות מאחורי רשתות CNN ומדמיין כמה מהפילטרים. עם חתולים!

התאמן, המר, הפעל MobileNet ב- Sipeed MaixPy ו- MaixDuino! הדרכה מצוות Sipeed כיצד לאמן שיעורי Mobilenet 1000 מאפס (ללא למידת העברה). אתה יכול להוריד את הדגם שהוכשר מראש ולנסות אותו!

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

מוּמלָץ: