לוגו זפירנט

אימון מודל זיהוי אובייקטים משלך של YoloV5

תאריך:


מאמר זה פורסם כחלק מה- בלוגאת מדע הנתונים

"אתה יכול לקבל נתונים בלי מידע אבל אתה לא יכול לקבל מידע בלי נתונים" - דניאל קיז מורן

מבוא

אם אתה כאן אז אולי אתה כבר מתעניין ב- Machine Learning או Deep Learning אז אני לא צריך להסביר מה זה? אז החל מהקדמה קטנה לנושא, זיהוי אובייקטים הוא השיטה לזיהוי אובייקטים רצויים בתמונות או בסרטונים, ובשנים האחרונות היו הרבה דגמים שהוצגו עבור אותו הדבר. YoloV5 הוא אחד מאותם דגמים שנחשבים לאחד המהירים והמדויקים. במאמר זה, אני הולך להסביר כיצד אתה יכול לאמן את YoloV5 מודל על הנתונים שלך הן עבור GPU והן עבור מערכות מבוססות CPU. אני אסביר כיצד תצטרך להגדיר גם GPU או CPU מכיוון שניתן לאמן אותו על כל אחד מהם, אם כי ה-GPU הוא המועדף מכיוון שיידרש כמעט פי שלושה יותר ב-CPU כדי לאמן את אותו הדבר, אם אין לך מבוסס GPU מערכת ולא רוצה לאמן את הדגם שלך ב-Google Colab אז אתה עדיין יכול לאמן את הדגם ב-CPU.

השלבים בהם אנו הולכים לדון במדריך זה הם כדלקמן:

אופציונלי: יצירת סביבה וירטואלית לאימון.

  1. שיבוט מאגר והתקנת תלות עבור YoloV5
  2. צור הערות עבור מערך נתונים מותאם אישית באמצעות הכלי VIA
  3. המרת הערות לפורמט קוקו
  4. יצירת קובץ YAML לאימון
  5. אימון YoloV5
  6. מסקנות של YoloV5

Python 3.6 מומלץ לאימון.

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

$ pip להתקין virtualenv

לאחר התקנת החבילה אתה יכול להמשיך וליצור את הסביבה הווירטואלית לאימון YoloV5:

 $ virtualenv yolov5_training_env

הפלט של הפקודה ייראה כך:

env וירטואלי
מקור: מקומי

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

יוניקס:

מקור $ yolov5_training_env/bin/activate

Windows:

$ yolov5_training_envScriptsactivate
חלונות סביבה וירטואלית | מודל זיהוי אובייקטים של YoloV5
מקור: מקומי

מאגר שיבוט והתקנת תלות

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

$ git clone https://github.com/ultralytics/yolov5
לשכפל מאגר ולהתקין תלות
מקור: מקומי

אחרת, תוכל להוריד את הקוד ישירות מהאתר הבא:

קוד YoloV5: https://github.com/ultralytics/yolov5

מאגר yolov5 זה מגיע עם קובץ "requirements.txt" המכיל את כל הספריות הנדרשות לאימון המודל. דבר אחד שצריך לזכור כאן הוא לפיד ספריה שתהיה שונה הן עבור סביבות GPU והן עבור סביבת מעבד, כך שנצטרך להסיר לפיד ו-torchvision מקבצי הדרישות ולהתקין את הספריות האחרות. כדי להתקין ספריות אחרות מהקובץ "requirements.txt" נעשה שימוש בפקודה הבאה.

$ pip התקנת -r requirements.txt
דרישות התקנה | מודל זיהוי אובייקטים של YoloV5
מקור: מקומי

לאחר התקנת ספריות אחרות נתקין לפיד ו-torchvision שהם עמוד השדרה לאימון.

התקנת גרסת מעבד לפיד:

מערכת ניהול חבילות Python (pip) יכולה לשמש להתקנת לפיד ו-torchvision עבור CPU.

Windows ולינוקס:

$ pip להתקין torch==1.7.0+cpu torchvision==0.8.0+cpu torchaudio==0.7.0 -f https://download.pytorch.org/whl/torch_stable.html

Mac:

$ pip install torch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0

התקנת גרסת GPU של לפיד: 

Conda עדיפה להתקנת ספריות לפיד ו-Torchvision מבוססות GPU מכיוון שהיא כבר מרכיבה אותה עם CUDA. כמו כן, אם נתקלת בבעיה כלשהי בהתקנת קונדה, תוכל להשתמש בהתקנת pip. לפני התקנות ודא שאתה מתקין את גרסת הלפיד תואמת CUDA אותה תוכל למצוא כאן https://pytorch.org/get-started/previous-versions/.

Windows ולינוקס:

$ conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=10.1 -c pytorch

or

$ pip install torch==1.7.0+cu101 torchvision==0.8.0+cu101 torchaudio==0.7.0 -f https://download.pytorch.org/whl/torch_stable.html

Mac:

$ conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 -c pytorch

or

$ pip install torch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0
התקנת חלונות תלות
מקור: מקומי

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

אנחנו צריכים להוריד את המשקולות המאומנות מראש גם כדי להשתמש במודל לנתונים מותאמים אישית. ניתן להוריד משקולות מהקישור הבא https://github.com/ultralytics/yolov5/releases. לאחר הורדת המשקולות עלינו ליצור תיקייה "Yolov5/weights" ולהדביק שם את קובץ המשקולות. אתה יכול להוריד כל אחד מהדגמים בהתאם לשימוש שלך (מומלץ: yolov5x.pt or yolov5x6.pt).

צור הערות באמצעות כלי VIA

הלב של אימון כל מודל זיהוי אובייקט הוא הערת נתונים (הכנת נתונים לאימון). הערת נתונים היא טכניקה שבה אנו יוצרים צורות גיאומטריות שונות על האובייקטים שאנו רוצים שמודל זיהוי האובייקטים שלנו יזהה. ישנם מספר כלים להערת נתונים זמינים, אבל זה שקל לי להשתמש בו הוא כלי VIA (VGG Image Annotator). ערכתי כמה שינויים בכלי כדי שתוכל להשתמש בו על האובייקטים שלך. אתה יכול להוריד את הכלי מכאן https://drive.google.com/file/d/1rJx0fNgnnhODM7H3GP9RQQ5QEsWdkYEd/view?usp=sharing. הכלי הזה הוא רק דף HTML פשוט שמספק לך מספר סוגי הערות כמו פורמט נתונים COCO, פורמט CSV וכו'. דף הכלים נראה כך:

צור הערות | מודל זיהוי אובייקטים של YoloV5
מקור: מקומי

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

כפתורים | מודל זיהוי אובייקטים של YoloV5
מקור: מקומי

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

כפתור תכונה
מקור: מקומי

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

טען תמונות | מודל זיהוי אובייקטים של YoloV5
מקור: מקומי

לאחר סיום כל ההערות, תוכל לייצא אותן בפורמט CSV במיקום הרצוי.

המר הערות CSV לפורמט COCO

YoloV5 המודל דורש שהנתונים יהיו בפורמט קוקו:

פורמט קוקו
מקור: מקומי

כדי להמיר הערות CSV לפורמט COCO אתה יכול להשתמש בנתח הקוד הבא:

התחל עם ייבוא ​​תלות ליצירת מערך נתונים של COCO.

ייבוא ​​מערכת הפעלה יבוא numpy כ-np יבוא פנדות כ-pd יבוא shutil כ-sh מ-PIL יבוא תמונה מ-tqdm.auto import tqdm

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

data_path = '/Users/gouravbais//Final_Cleaned_Dataset/' df = pd.read_csv(data_path+'train/via_region_export.csv') ## צור x, y, w, h עמודות x, y, w, h = [], [ ], [], [] עבור שורה ב-df['region_shape_attributes']: row = row.replace('{}', '').replace('}', '') row = row.split(',' ) x.append(int(row[1].split(':')[-1])) y.append(int(row[2].split(':')[-1])) w.append (int(row[3].split(':')[-1])) h.append(int(row[4].split(':')[-1])) ## חישוב x, y, קואורדינטות רוחב וגובה df['x'], df['y'], df['w'], df['h'] = x, y, w, h ## יצירת שם עמודה image_id עם שמות תמונות כ id df['image_id'] = [name.split('.')[0] עבור שם ב-df['filename']] ## יצירת שתי עמודות לאחסון ערכי מרכז x ו-y df['x_center'] = df ['x'] + df['w']/2 df['y_center'] = df['y'] + df['h']/2 ## מגדירים את מספר המחלקות תוויות = df['region_attributes'] .unique() labels_to_dict = dict(zip(lables, range(0, len(labels)))) print('Lables Directory:', labels_to_dict) df['classes'] = df['region_attributes'] df.replace( {'classes':labels_to_dict}, inplace=True) df = df[['image_id','x', 'y', 'w', 'h','x_center','y_center','classes']] ## set index of images index = list(set(df.image_id))

ולבסוף יצירת מערך הנתונים על ידי העתקת תמונות ויצירת קבצי טקסט.

source = 'רכבת' אם נכון: עבור קיפול [0]: val_index = index[len(index)*fold//5:len(index)*(fold+1)//5] עבור name,mini ב-tqdm( df.groupby('image_id')): if name in val_index: path2save = 'val2017/' else: path2save = 'train2017/' if not os.path.exists('convertor/fold{}/labels/'.format( fold)+path2save): os.makedirs('convertor/fold{}/labels/'.format(fold)+path2save) עם open('convertor/fold{}/labels/'.format(fold)+path2save+name+ ".txt", 'w+') בתור f: row = mini[['classes','x_center','y_center','w','h']].astype(float).values ​​imagename = data_path+"/ {}/{}.jpg".format(source,name) check_image_width_height = Image.open(imagename) img_width, img_height = check_image_width_height.size for r in (שורה): r[1] = r[1]/img_width r[ 2] = r[2]/img_height r[3] = r[3]/img_width r[4] = r[4]/img_height row = row.astype(str) עבור j in range(len(row)): print(row[j], 'n') row[j][0] = str(int(float(row[j][0]))) text = ' '.join(row[j]) f.write (טקסט) f.write("n") if not os.path.exists('convertor/fold{}/images/{}'.format(fold,path2save)): os.makedirs('convertor/fold{} /images/{}'.format(fold,path2save)) sh.copy(data_path+"/{}/{}.jpg".format(source,name),'convertor/fold{}/images/{}/{ }.jpg'.format(fold,path2save,name))

הקוד הבא יפיק תיקיה בשם "ממיר/קיפול0" המכיל תמונות ו תוויות תיקיות שאתה צריך להעתיק ולהדביק בתוך מאגר YoloV5 המשובט "YoloV5/coco/" תיקייה.

יצירת קובץ YAML לאימון

לאחר התקנת התלות והנתונים מוכנים כעת עלינו להגדיר את a ימל קובץ כדי להכשיר את הדגם. לשם כך, אתה פותח כל עורך טקסט ויוצר קובץ "coco.yml" בתוך התיקיה "YoloV5/data/". תוכן הקובץ יהיה כזה:

# נתוני רכבת ו- Val כ- 1) ספרייה: path/images/, 2) file: path/images.txt, או 3) רשימה: [path1/images/, path2/images/] רכבת: /Users/gouravbais/yolov5/ coco/images/train2017 val: /Users/gouravbais/yolov5/coco/images/val2017

# מספר כיתות

nc: 3

# שמות כיתות

שמות: ['object1', 'object2', 'object3']

אנא שמור את המחלקות באותו סדר שאתה מקבל בעת המרת מערך הנתונים של ה-CSV למערך הנתונים של COCO.

אימון יולוב5

ההגדרה של קובץ YAML לא משאירה הרבה מה לעשות לאחר מכן, עכשיו אנחנו רק צריכים לכתוב את הפקודה ולספק לה את הנתונים והמשקלים כדי לאמן את המודל על מערך הנתונים המותאם אישית שלנו. עליך לעבור לתיקיית YoloV5 דרך הפקודה מסוף או anaconda ולהפעיל את הפקודה הבאה:

$ python train.py --img 416 --batch 12 --epochs 50 --data ./data/coco.yml --weights ./weights/yolov5x.pt

הסבר פקודה:

train.py: קובץ python המכיל את קוד האימון.

תמונה: גודל התמונה מוגדר כברירת מחדל ל-640, בהתאם לזיכרון ה-GPU או המעבד, אתה יכול לשנות אותו.

קבוצה: גודל אצווה שהוא שוב תלוי ישירות בזיכרון שלך.

נתונים: הנתיב של קובץ ה-YAML שלך.

משקלים: קובץ הנתיב של משקלים שהורדנו בשלב 1.

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

הכשרת דוגמניות | מודל זיהוי אובייקטים של YoloV5
מקור: מקומי

לאחר השלמת האימון תוכל למצוא את המשקולות המאומנות ב- "YoloV5/ריצות/רכבת" תיקייה, שתכלול שני קובץ משקלים "best.pt" ו "last.pt" אתה יכול להשתמש בכל אחד מהם בהתבסס על ההכשרה שלך ("best.pt" מוּמלָץ). אתה יכול להעתיק את הקובץ ולהדביק אותו בתוך "YoloV5/משקלות" תיקייה. דבר אחד שתצטרך לשים לב כאן הוא שאם ההפסד עדיין יורד לאחר 50 עידנים אתה יכול להפעיל אותו לתקופות נוספות בהתאם לנתונים שלך.

הסקת מסקנות של YoloV5

לסיכום, מה שאתה צריך זה מודל Deep Learning שעובד על נתוני הבדיקות שלך. אז כדי לבדוק את המודל שלך על נתוני בדיקה תצטרך להשתמש ב "YoloV5/detect.py" סקריפט קיים באותו מיקום כמו "train.py". הפקודה לבדיקת המודל על הנתונים שלך היא כדלקמן:

$ python detect.py --img 416 --source ./detect/test_data --weights ./weights/best.pt --conf-thres 0.4

הסבר פקודה:

detect.py: קובץ python להסקת מסקנות.

תמונה: גודל תמונה שחייב להיות זהה לגודל התמונה באימון.

מקור: הנתיב של בדיקת נתונים או קובץ תמונה לבדיקה.

משקלים: הנתיב של קובץ משקולות מאומנות.

conf-thres: סף ביטחון שמעליו יש לזהות אובייקט.

הפעלת הפקודה לעיל תיצור תיקיה "YoloV5/רץ/זיהוי" שיהיו כל הקבצים שנוצרו עליהם הפעלת את המודל.

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

תודה שקראת מאמר זה עשה לייק אם למדת משהו חדש, אל תהסס להגיב נתראה בפעם הבאה !!! ❤️ 

אמצעי התקשורת המוצגים במאמר זה אינם בבעלות Analytics Vidhya ומשמשים את שיקול הדעת של המחבר.

PlatoAi. Web3 מחדש. מודיעין נתונים מוגבר.
לחץ כאן לגישה.

מקור: https://www.analyticsvidhya.com/blog/2021/08/train-your-own-yolov5-object-detection-model/

ספוט_ימג

המודיעין האחרון

ספוט_ימג