תיוג נתוני פילוח סמנטי והכשרת מודלים באמצעות Amazon SageMaker

צומת המקור: 1551223

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

בחודש נובמבר 2018, אמזון SageMaker הודיעה על השקת אלגוריתם הפילוח הסמנטי של SageMaker. עם אלגוריתם זה, אתה יכול לאמן את המודלים שלך עם מערך נתונים ציבורי או מערך נתונים משלך. מערכי נתונים פופולריים של פילוח תמונות כוללים את מערך הנתונים Common Objects in Context (COCO) ואת PASCAL Visual Object Classes (PASCAL VOC), אך המחלקות של התוויות שלהם מוגבלות וייתכן שתרצה לאמן מודל על אובייקטי יעד שאינם כלולים ב- מערכי נתונים ציבוריים. במקרה זה, אתה יכול להשתמש האמת של אמזון SageMaker כדי לתייג את מערך הנתונים שלך.

בפוסט זה, אני מדגים את הפתרונות הבאים:

  • שימוש ב-Ground Truth כדי לתייג מערך נתונים של פילוח סמנטי
  • הפיכת התוצאות מ-Ground Truth לפורמט הקלט הנדרש עבור אלגוריתם הפילוח הסמנטי המובנה של SageMaker
  • שימוש באלגוריתם הפילוח הסמנטי כדי להכשיר מודל ולבצע הסקה

תיוג נתוני פילוח סמנטי

כדי לבנות מודל למידת מכונה לפילוח סמנטי, עלינו לתייג מערך נתונים ברמת הפיקסלים. Ground Truth נותן לך את האפשרות להשתמש במגיבים אנושיים דרך אמזון מכני, ספקי צד שלישי או כוח העבודה הפרטי שלך. למידע נוסף על כוח אדם, עיין ב צור ונהל כוח אדם. אם אינך רוצה לנהל את כוח העבודה המתייג בעצמך, Amazon SageMaker Ground Truth Plus הוא עוד אפשרות מצוינת כשירות חדש לתיוג נתונים סוהר המאפשר לך ליצור מערכי הדרכה באיכות גבוהה במהירות ומפחית עלויות בעד 40%. עבור פוסט זה, אני מראה לך כיצד לתייג באופן ידני את מערך הנתונים עם תכונת הפילוח האוטומטי של Ground Truth ותיוג במקור המונים עם כוח עבודה מכני טורקי.

תיוג ידני עם Ground Truth

בדצמבר 2019, Ground Truth הוסיפה תכונת פילוח אוטומטי לממשק המשתמש של תיוג פילוח סמנטי כדי להגדיל את תפוקת התיוג ולשפר את הדיוק. למידע נוסף, עיין ב פילוח אוטומטי של אובייקטים בעת ביצוע תיוג פילוח סמנטי עם Amazon SageMaker Ground Truth. עם תכונה חדשה זו, אתה יכול להאיץ את תהליך התיוג שלך במשימות פילוח. במקום לצייר מצולע המתאים היטב או להשתמש בכלי המברשת כדי ללכוד אובייקט בתמונה, אתה מצייר רק ארבע נקודות: בנקודות העליונה ביותר, התחתונה ביותר, השמאלית ביותר והימינה ביותר של האובייקט. Ground Truth לוקח את ארבע הנקודות הללו כקלט ומשתמש באלגוריתם Deep Extreme Cut (DEXTR) כדי לייצר מסיכה הדוקה סביב האובייקט. למדריך באמצעות Ground Truth עבור תיוג פילוח סמנטי של תמונה, עיין ב פילוח סמנטי של תמונה. להלן דוגמה לאופן שבו כלי הפילוח האוטומטי יוצר מסכת פילוח באופן אוטומטי לאחר בחירת ארבע נקודות הקיצון של אובייקט.

תיוג מיקור המונים עם כוח עבודה מכני טורקי

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

צור עבודת תיוג

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

  1. במסוף SageMaker בחר עבודות תיוג בחלונית הניווט.
  2. לבחור צור עבודת תיוג.
  3. הזן שם לעבודה שלך.
  4. בעד הגדרת נתוני קלט, בחר הגדרת נתונים אוטומטית.
    זה יוצר מניפסט של נתוני קלט.
  5. בעד מיקום S3 עבור מערכי נתונים של קלט, הזן את הנתיב עבור מערך הנתונים.
  6. בעד קטגוריית המשימות, בחר תמונה.
  7. בעד בחירת משימות, בחר פילוח סמנטי.
  8. בעד סוגי עובדים, בחר אמזון מכני.
  9. הגדר את ההגדרות שלך לזמן קצוב למשימה, זמן תפוגה של משימה ומחיר למשימה.
  10. הוסף תווית (עבור פוסט זה, sea turtle), ולספק הוראות תיוג.
  11. לבחור צור.

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

שינוי ערכת נתונים

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

ערוצי נתוני קלט מבוקשים

הפילוח הסמנטי של SageMaker מצפה שמערך ההדרכה שלך יאוחסן שירות אחסון פשוט של אמזון (אמזון S3). מערך הנתונים באמזון S3 צפוי להיות מוצג בשני ערוצים, אחד עבור train ואחד עבור validation, באמצעות ארבע ספריות, שתיים לתמונות ושתיים להערות. הערות צפויות להיות תמונות PNG לא דחוסות. למערך הנתונים עשויה להיות גם מפת תווית המתארת ​​כיצד מיפוי ההערות נוצרים. אם לא, האלגוריתם משתמש בברירת מחדל. לשם מסקנות, נקודת קצה מקבלת תמונות עם image/jpeg סוג תוכן. להלן המבנה הנדרש של ערוצי הנתונים:

s3://bucket_name |- train | - image1.jpg | - image2.jpg |- validation | - image3.jpg | - image4.jpg |- train_annotation | - image1.png | - image2.png |- validation_annotation | - image3.png | - image4.png |- label_map | - train_label_map.json | - validation_label_map.json

לכל תמונת JPG בספריות הרכבת והאימות יש תמונת תווית PNG מתאימה עם אותו שם ב- train_annotation ו validation_annotation ספריות. מוסכמות שמות זו עוזרת לאלגוריתם לשייך תווית לתמונה המתאימה לה במהלך האימון. הרכבת, train_annotation, אימות ו validation_annotation ערוצים הם חובה. ההערות הן תמונות PNG חד ערוציות. הפורמט עובד כל עוד המטא-נתונים (המצבים) בתמונה עוזרים לאלגוריתם לקרוא את תמונות ההערה למספר שלם של 8 סיביות חד ערוצי ללא סימן.

פלט מעבודת התיוג של Ground Truth

לפלטים שנוצרו מעבודת התיוג של Ground Truth יש את מבנה התיקיות הבא:

s3://turtle2022/labelturtles/ |- activelearning |- annotation-tool |- annotations | - consolidated-annotation | - consolidation-request | - consolidation-response | - output | -0_2022-02-10T17:40:03.294994.png | -0_2022-02-10T17:41:04.530266.png | - intermediate | - worker-response |- intermediate |- manifests | - output | - output.manifest

מסכות הפילוח נשמרות ב s3://turtle2022/labelturtles/annotations/consolidated-annotation/output. כל תמונת הערה היא קובץ .png הנקרא על שם האינדקס של תמונת המקור והזמן שבו הושלמה תיוג תמונה זו. לדוגמה, להלן תמונת המקור (Image_1.jpg) ומסיכת הפילוח שלה שנוצרה על ידי כוח העבודה Mechanical Turk (0_2022-02-10T17:41:04.724225.png). שימו לב שהאינדקס של המסכה שונה מהמספר בשם תמונת המקור.

מניפסט הפלט מעבודת התיוג נמצא ב- /manifests/output/output.manifest קוֹבֶץ. זה קובץ JSON, וכל שורה מתעדת מיפוי בין תמונת המקור והתווית שלה ומטא נתונים אחרים. שורת ה-JSON הבאה מתעדת מיפוי בין תמונת המקור המוצגת לבין ההערה שלה:

{"source-ref":"s3://turtle2022/Image_1.jpg","labelturtles-ref":"s3://turtle2022/labelturtles/annotations/consolidated-annotation/output/0_2022-02-10T17:41:04.724225.png","labelturtles-ref-metadata":{"internal-color-map":{"0":{"class-name":"BACKGROUND","hex-color":"#ffffff","confidence":0.25988},"1":{"class-name":"Turtle","hex-color":"#2ca02c","confidence":0.25988}},"type":"groundtruth/semantic-segmentation","human-annotated":"yes","creation-date":"2022-02-10T17:41:04.801793","job-name":"labeling-job/labelturtles"}}

תמונת המקור נקראת Image_1.jpg, ושם ההערה הוא 0_2022-02-10T17:41: 04.724225.png. כדי להכין את הנתונים כפורמטים של ערוץ הנתונים הנדרשים של אלגוריתם הפילוח הסמנטי של SageMaker, עלינו לשנות את שם ההערה כך שיהיה לו שם זהה לתמונות המקור JPG. ואנחנו גם צריכים לפצל את מערך הנתונים ל train ו validation ספריות לתמונות מקור והביאורים.

הפוך את הפלט מעבודת תיוג Ground Truth לפורמט הקלט המבוקש

כדי להפוך את הפלט, בצע את השלבים הבאים:

  1. הורד את כל הקבצים מעבודת התיוג מאמזון S3 לספרייה מקומית:
    !aws s3 cp s3://turtle2022/ Seaturtles --recursive

  2. קרא את קובץ המניפסט ושנה את שמות ההערה לאותם שמות כמו תמונות המקור:
    import os
    import re label_job='labelturtles'
    manifest_path=dir_name+'/'+label_job+'/'+'manifests/output/output.manifest' file = open(manifest_path, "r") txt=file.readlines()
    output_path=dir_name+'/'+label_job+'/'+'annotations/consolidated-annotation/output'
    S3_name='turtle2022/'
    im_list=[]
    for i in range(len(txt)): string = txt[i] try: im_name = re.search(S3_name+'(.+)'+'.jpg', string).group(1) print(im_name) im_png=im_name+'.png' im_list.append(im_name) annotation_name = re.search('output/(.+?)"', string).group(1) os.rename(annotation_name, im_png) except AttributeError: pass

  3. פיצול מערכי הרכבת והאימות:
    import numpy as np
    from random import sample # Prints list of random items of given length
    train_num=len(im_list)*0.8
    test_num=len(im_list)*0.2
    train_name=sample(im_list,int(train_num))
    test_name = list(set(im_list) - set(train_name))

  4. צור ספרייה בפורמט הנדרש עבור ערוצי הנתונים של אלגוריתם הפילוח הסמנטי:
    os.chdir('./semantic_segmentation_pascalvoc_2022-01-11')
    os.mkdir('train')
    os.mkdir('validation')
    os.mkdir('train_annotation')
    os.mkdir('validation_annotation')

  5. העבר את תמונות הרכבת והאימות וההערות שלהן לספריות שנוצרו.
    1. לתמונות, השתמש בקוד הבא:
      for i in range(len(train_name)): train_im=train_name[i]+'.jpg' train_im_path=dir_name+'/'+train_im train_new_path='train/'+train_im shutil.move(train_im_path,train_new_path) train_annotation=train_name[i]+'.png' train_annotation_path=dir_name+'/labelturtles/annotations/consolidated-annotation/output/'+train_annotation train_annotation_new_path='train_annotation/'+train_annotation shutil.move(train_annotation_path,train_annotation_new_path)

    2. להערות, השתמש בקוד הבא:
      for i in range(len(test_name)): val_im=test_name[i]+'.jpg' val_im_path=dir_name+'/'+val_im val_new_path='validation/'+val_im shutil.move(val_im_path,val_new_path) val_annotation=test_name[i]+'.png' val_annotation_path=dir_name+'/labelturtles/annotations/consolidated-annotation/output/'+val_annotation val_annotation_new_path='validation_annotationT/'+val_annotation shutil.move(val_annotation_path,val_annotation_new_path)

  6. העלה את מערכי הרכבת והאימות ואת מערכי ההערות שלהם לאמזון S3:
    !aws s3 cp train s3://turtle2022/train/ --recursive
    !aws s3 cp train_annotation s3://turtle2022/train_annotation/ --recursive
    !aws s3 cp validation s3://turtle2022/validation/ --recursive
    !aws s3 cp validation_annotation s3://turtle2022/validation_annotation/ --recursive

אימון מודל פילוח סמנטי של SageMaker

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

עקוב אחר המחברת לדוגמה והגדר ערוצי נתונים

אתה יכול לעקוב אחר ההוראות ב אלגוריתם פילוח סמנטי זמין כעת באמזון SageMaker ליישם את אלגוריתם הפילוח הסמנטי במערך הנתונים המסומן שלך. המדגם הזה מחברה מציג דוגמה מקצה לקצה המציגה את האלגוריתם. במחברת, אתה לומד כיצד לאמן ולארח מודל פילוח סמנטי באמצעות הרשת הקונבולוציונית המלאה (FCN) אלגוריתם המשתמש ב- מערך VOC של פסקל לאימון. מכיוון שאני לא מתכנן לאמן מודל ממערך הנתונים של Pascal VOC, דילגתי על שלב 3 (הכנת נתונים) במחברת זו. במקום זאת, יצרתי ישירות train_channel, train_annotation_channe, validation_channel, ו validation_annotation_channel באמצעות מיקומי S3 שבהם אחסנתי את התמונות וההערות שלי:

Train_channel=’s3://turtle2022/train’
train_annotation_channel=’s3://turtle2022/train_annotation’
validation_channel=’s3://turtle2022/validation’
validation_annotation_channel=’s3://turtle2022/validation_annotation’

התאם היפרפרמטרים עבור מערך הנתונים שלך באומדן SageMaker

עקבתי אחרי המחברת ויצרתי אובייקט הערכה של SageMaker (ss_estimator) כדי לאמן את אלגוריתם הפילוח שלי. דבר אחד שעלינו להתאים אישית עבור מערך הנתונים החדש נמצא ss_estimator.set_hyperparameters: אנחנו צריכים לשנות num_classes=21 ל num_classes=2 (turtle ו background), וגם אני שיניתי epochs=10 ל epochs=30 כי 10 הוא רק למטרות הדגמה. לאחר מכן השתמשתי במופע p3.2xlarge לאימון מודלים לפי הגדרה instance_type="ml.p3.2xlarge". האימון הסתיים תוך 8 דקות. הכי טוב MIoU (צומת ממוצע על איחוד) של 0.846 מושגת בעידן 11 עם pix_acc (אחוז הפיקסלים בתמונה שלך שמסווגים נכון) של 0.925, שזו תוצאה טובה למדי עבור מערך הנתונים הקטן הזה.

תוצאות מסקנות מודל

אירחתי את הדגם במופע של ml.c5.xlarge בעלות נמוכה:

training_job_name = 'ss-notebook-demo-2022-02-12-03-37-27-151'
ss_estimator = sagemaker.estimator.Estimator.attach(training_job_name)
ss_predictor = ss_estimator.deploy(initial_instance_count=1, instance_type="ml.c5.xlarge")

לבסוף, הכנתי סט מבחן של 10 תמונות צבים כדי לראות את תוצאת ההסקה של מודל הפילוח המאומן:

import os path = "testturtle/"
img_path_list=[]
files = os.listdir(path) for file in files: if file.endswith(('.jpg', '.png', 'jpeg')): img_path = path + file img_path_list.append(img_path) colnum=5
fig, axs = plt.subplots(2, colnum, figsize=(20, 10)) for i in range(len(img_path_list)): print(img_path_list[i]) img = mpimg.imread(img_path_list[i]) with open(img_path_list[i], "rb") as imfile: imbytes = imfile.read() cls_mask = ss_predictor.predict(imbytes) axs[int(i/colnum),i%colnum].imshow(img, cmap='gray') axs[int(i/colnum),i%colnum].imshow(np.ma.masked_equal(cls_mask,0), cmap='jet', alpha=0.8) plt.show()

התמונות הבאות מציגות את התוצאות.

מסכות הפילוח של צבי הים נראות מדויקות ואני מרוצה מהתוצאה הזו שאומנה על מערך נתונים של 300 תמונות שסומן על ידי עובדי מכני טורק. אתה יכול גם לחקור רשתות זמינות אחרות כגון רשת ניתוח סצינות פירמידה (PSP) or DeepLab-V3 במחברת לדוגמה עם מערך הנתונים שלך.

לנקות את

מחק את נקודת הקצה כשתסיים איתה כדי למנוע המשך עלויות:

ss_predictor.delete_endpoint()

סיכום

בפוסט זה, הראיתי כיצד להתאים אישית את תיוג נתוני פילוח סמנטי ואימון מודלים באמצעות SageMaker. ראשית, אתה יכול להגדיר עבודת תיוג עם כלי הפילוח האוטומטי או להשתמש בכוח עבודה מכני טורק (כמו גם אפשרויות אחרות). אם יש לך יותר מ-5,000 אובייקטים, תוכל גם להשתמש בתיוג נתונים אוטומטי. לאחר מכן אתה הופך את הפלטים מעבודת התיוג של Ground Truth שלך לפורמטי הקלט הנדרשים עבור אימון פילוח סמנטי מובנה של SageMaker. לאחר מכן, אתה יכול להשתמש במופע מחשוב מואץ (כגון p2 או p3) כדי לאמן מודל פילוח סמנטי עם האפשרויות הבאות מחברה ולפרוס את המודל למופע חסכוני יותר (כגון ml.c5.xlarge). לבסוף, אתה יכול לסקור את תוצאות ההסקה במערך הנתונים של הבדיקה שלך עם כמה שורות קוד.

התחל עם פילוח סמנטי של SageMaker תיוג נתונים ו אימון מודל עם מערך הנתונים המועדף עליך!


על המחבר

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

בול זמן:

עוד מ למידת מכונות AWS