تصنيف بيانات التجزئة الدلالية وتدريب النموذج باستخدام Amazon SageMaker

عقدة المصدر: 1551223

في رؤية الكمبيوتر ، التقسيم الدلالي هو مهمة تصنيف كل بكسل في صورة مع فئة من مجموعة معروفة من الملصقات بحيث تشترك وحدات البكسل التي لها نفس التسمية في خصائص معينة. يقوم بإنشاء قناع تجزئة لصور الإدخال. على سبيل المثال ، تُظهر الصور التالية قناع تجزئة لـ cat ضع الكلمة المناسبة.

في نوفمبر 2018، الأمازون SageMaker عن إطلاق خوارزمية التجزئة الدلالية SageMaker. باستخدام هذه الخوارزمية ، يمكنك تدريب نماذجك باستخدام مجموعة بيانات عامة أو مجموعة بيانات خاصة بك. تتضمن مجموعات بيانات تجزئة الصور الشائعة مجموعة بيانات الكائنات المشتركة في السياق (COCO) وفئات الكائنات المرئية PASCAL (PASCAL VOC) ، ولكن فئات تسمياتها محدودة وقد ترغب في تدريب نموذج على الكائنات المستهدفة التي لم يتم تضمينها في مجموعات البيانات العامة. في هذه الحالة ، يمكنك استخدام الحقيقة الأمازون SageMaker الأرض لتسمية مجموعة البيانات الخاصة بك.

في هذا المنشور ، أوضح الحلول التالية:

  • استخدام Ground Truth لتسمية مجموعة بيانات التجزئة الدلالية
  • تحويل النتائج من Ground Truth إلى تنسيق الإدخال المطلوب لخوارزمية التجزئة الدلالية المضمنة في SageMaker
  • استخدام خوارزمية التجزئة الدلالية لتدريب نموذج وإجراء الاستدلال

تصنيف البيانات الدلالية التجزئة

لبناء نموذج تعلم آلي للتجزئة الدلالية ، نحتاج إلى تسمية مجموعة بيانات على مستوى البكسل. تمنحك Ground Truth خيار استخدام التعليقات التوضيحية البشرية من خلال الأمازون ميكانيكي تركأو البائعين الخارجيين أو القوى العاملة الخاصة بك. لمعرفة المزيد عن القوى العاملة ، يرجى الرجوع إلى إنشاء وإدارة القوى العاملة. إذا كنت لا ترغب في إدارة قوة العمل المصنفة بنفسك ، أمازون سيج ميكر جراوند تروث بلس يعد خيارًا رائعًا آخر كخدمة جديدة لوضع العلامات على البيانات بنظام تسليم المفتاح تتيح لك إنشاء مجموعات بيانات تدريبية عالية الجودة بسرعة وتقليل التكاليف بنسبة تصل إلى 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 TUR ، ارجع إلى مقدمة إلى 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). من المتوقع أن يتم تقديم مجموعة البيانات في Amazon 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 بتات.

الإخراج من وظيفة وضع العلامات على حقيقة الأرض

تحتوي المخرجات الناتجة من وظيفة وضع العلامات على حقيقة الأرض على بنية المجلد التالية:

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) وقناع التجزئة الخاص بها الذي تم إنشاؤه بواسطة قوة العمل الميكانيكية التركية (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 أدلة لصور المصدر والتعليقات التوضيحية.

قم بتحويل الإخراج من وظيفة وضع العلامات على حقيقة الأرض إلى تنسيق الإدخال المطلوب

لتحويل الإخراج ، أكمل الخطوات التالية:

  1. قم بتنزيل جميع الملفات من وظيفة وضع العلامات من Amazon 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. قم بتحميل مجموعات بيانات القطار والتحقق من الصحة ومجموعات بيانات التعليقات التوضيحية الخاصة بها إلى Amazon 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 الدلالي

في هذا القسم ، نتصفح الخطوات لتدريب نموذج التجزئة الدلالية الخاص بك.

اتبع نموذج دفتر الملاحظات وقم بإعداد قنوات البيانات

يمكنك اتباع التعليمات الموجودة في خوارزمية التجزئة الدلالية متاحة الآن في Amazon SageMaker لتنفيذ خوارزمية التجزئة الدلالية لمجموعة البيانات المصنفة. هذه العينة مفكرة يُظهر مثالاً شاملاً يقدم الخوارزمية. في دفتر الملاحظات ، تتعلم كيفية تدريب واستضافة نموذج تجزئة دلالي باستخدام الشبكة التلافيفية بالكامل (FCN) باستخدام الخوارزمية مجموعة بيانات باسكال المركبات العضوية المتطايرة للتدريب. نظرًا لأنني لا أخطط لتدريب نموذج من مجموعة بيانات 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 ديب لاب- V3 في نموذج دفتر الملاحظات مع مجموعة البيانات الخاصة بك.

تنظيف

احذف نقطة النهاية عند الانتهاء منها لتجنب تكبد تكاليف مستمرة:

ss_predictor.delete_endpoint()

وفي الختام

في هذا المنشور ، أوضحت كيفية تخصيص تسمية بيانات التجزئة الدلالية وتدريب النموذج باستخدام SageMaker. أولاً ، يمكنك إعداد وظيفة وضع العلامات باستخدام أداة التجزئة التلقائية أو استخدام القوى العاملة التركية الميكانيكية (بالإضافة إلى الخيارات الأخرى). إذا كان لديك أكثر من 5,000 عنصر ، فيمكنك أيضًا استخدام تسمية البيانات الآلية. ثم تقوم بتحويل المخرجات من وظيفة وضع العلامات على الحقيقة الأرضية إلى تنسيقات الإدخال المطلوبة لتدريب التجزئة الدلالي المدمج في SageMaker. بعد ذلك ، يمكنك استخدام مثيل حوسبة متسارعة (مثل p2 أو p3) لتدريب نموذج تجزئة دلالي باستخدام ما يلي مفكرة ونشر النموذج إلى مثيل أكثر فعالية من حيث التكلفة (مثل ml.c5.xlarge). أخيرًا ، يمكنك مراجعة نتائج الاستدلال على مجموعة بيانات الاختبار الخاصة بك ببضعة سطور من التعليمات البرمجية.

ابدأ مع التجزئة الدلالية SageMaker تسمية البيانات و تدريب نموذجي مع مجموعة البيانات المفضلة لديك!


عن المؤلف

كارا يانغ هو عالم بيانات في خدمات AWS الاحترافية. إنها متحمسة لمساعدة العملاء على تحقيق أهداف أعمالهم من خلال خدمات AWS السحابية. لقد ساعدت المنظمات في بناء حلول ML عبر العديد من الصناعات مثل التصنيع والسيارات والاستدامة البيئية والفضاء.

الطابع الزمني:

اكثر من التعلم الآلي من AWS