برچسب‌گذاری داده‌های تقسیم‌بندی معنایی و آموزش مدل با استفاده از Amazon SageMaker

گره منبع: 1551223

در بینایی کامپیوتری، تقسیم معنایی وظیفه طبقه‌بندی هر پیکسل در یک تصویر با یک کلاس از مجموعه‌ای از برچسب‌های شناخته شده است، به طوری که پیکسل‌هایی با برچسب یکسان دارای ویژگی‌های خاصی هستند. این یک ماسک تقسیم بندی از تصاویر ورودی تولید می کند. به عنوان مثال، تصاویر زیر یک ماسک تقسیم بندی را نشان می دهد cat برچسب.

در نوامبر 2018، آمازون SageMaker راه اندازی الگوریتم تقسیم بندی معنایی SageMaker را اعلام کرد. با استفاده از این الگوریتم، می توانید مدل های خود را با مجموعه داده های عمومی یا مجموعه داده های خود آموزش دهید. مجموعه داده‌های تقسیم‌بندی تصویر رایج شامل مجموعه داده‌های Common Objects in Context (COCO) و کلاس‌های شیء بصری PASCAL (PASCAL VOC) است، اما کلاس‌های برچسب‌های آن‌ها محدود هستند و ممکن است بخواهید مدلی را بر روی اشیاء هدف آموزش دهید که در آن گنجانده نشده‌اند. مجموعه داده های عمومی در این صورت می توانید استفاده کنید Amazon SageMaker Ground Truth برای برچسب گذاری مجموعه داده های خود

در این پست راه حل های زیر را نشان می دهم:

  • استفاده از Ground Truth برای برچسب گذاری مجموعه داده های تقسیم بندی معنایی
  • تبدیل نتایج از Ground Truth به فرمت ورودی مورد نیاز برای الگوریتم تقسیم بندی معنایی داخلی SageMaker
  • استفاده از الگوریتم تقسیم بندی معنایی برای آموزش یک مدل و انجام استنتاج

برچسب گذاری داده های تقسیم بندی معنایی

برای ساخت یک مدل یادگیری ماشینی برای تقسیم بندی معنایی، باید مجموعه داده ای را در سطح پیکسل برچسب گذاری کنیم. Ground Truth به شما این امکان را می دهد که از حاشیه نویس های انسانی استفاده کنید آمازون مکانیک ترک، فروشندگان شخص ثالث یا نیروی کار خصوصی شما. برای آشنایی بیشتر با نیروی کار به ادامه مطلب مراجعه کنید ایجاد و مدیریت نیروی کار. اگر نمی خواهید نیروی کار برچسب زدن را به تنهایی مدیریت کنید، Amazon SageMaker Ground Truth Plus یکی دیگر از گزینه های عالی به عنوان یک سرویس برچسب گذاری اطلاعات کلید در دست جدید است که به شما امکان می دهد مجموعه داده های آموزشی با کیفیت بالا را به سرعت ایجاد کنید و هزینه ها را تا 40٪ کاهش می دهد. برای این پست، من به شما نشان می‌دهم که چگونه به صورت دستی مجموعه داده را با ویژگی قطعه‌سازی خودکار Ground Truth و برچسب‌گذاری crowdsource با نیروی کار Mechanical Turk برچسب‌گذاری کنید.

برچسب زدن دستی با حقیقت پایه

در دسامبر 2019، Ground Truth یک ویژگی تقسیم خودکار را به رابط کاربری برچسب‌گذاری تقسیم‌بندی معنایی اضافه کرد تا توان عملیاتی برچسب‌گذاری را افزایش دهد و دقت را بهبود بخشد. برای اطلاعات بیشتر مراجعه کنید قطعه‌بندی خودکار اشیا هنگام انجام برچسب‌گذاری تقسیم‌بندی معنایی با Amazon SageMaker Ground Truth. با این ویژگی جدید، می‌توانید فرآیند برچسب‌گذاری خود را در وظایف بخش‌بندی تسریع کنید. به جای ترسیم یک چند ضلعی محکم یا استفاده از ابزار قلم مو برای گرفتن یک شی در یک تصویر، فقط چهار نقطه را ترسیم می کنید: در بالای ترین، پایین ترین، سمت چپ ترین و راست ترین نقطه شی. Ground Truth این چهار نقطه را به عنوان ورودی می گیرد و از الگوریتم Deep Extreme Cut (DEXTR) برای تولید یک ماسک محکم در اطراف جسم استفاده می کند. برای آموزش استفاده از Ground Truth برای برچسب‌گذاری تقسیم‌بندی معنایی تصویر، به تقسیم بندی معنایی تصویر. در زیر نمونه‌ای از این است که چگونه ابزار تقسیم‌بندی خودکار پس از انتخاب چهار نقطه انتهایی یک شی، یک ماسک تقسیم‌بندی را به‌طور خودکار ایجاد می‌کند.

برچسب‌گذاری جمع‌سپاری با نیروی کار ترک مکانیکال

اگر مجموعه داده بزرگی دارید و نمی‌خواهید صدها یا هزاران تصویر را به صورت دستی برچسب‌گذاری کنید، می‌توانید از Mechanical Turk استفاده کنید، که نیروی انسانی بر اساس تقاضا، مقیاس‌پذیر و مقیاس‌پذیر برای تکمیل کارهایی که انسان‌ها می‌توانند بهتر از رایانه‌ها انجام دهند، فراهم می‌کند. نرم افزار Mechanical Turk پیشنهادهای شغلی را به هزاران کارگری که مایل به انجام کارهای تکه تکه هستند، به صورت رسمی در اختیار آنها قرار می دهد. این نرم افزار همچنین کار انجام شده را بازیابی می کند و آن را برای شما، درخواست کننده، که برای کار رضایت بخش (فقط) به کارگران پرداخت می کند، جمع آوری می کند. برای شروع کار با مکانیکال ترک مراجعه کنید آشنایی با آمازون مکانیکال ترک.

یک کار برچسب زدن ایجاد کنید

در زیر نمونه ای از کار برچسب زدن 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 انتظار دارد مجموعه داده آموزشی شما در آن ذخیره شود سرویس ذخیره سازی ساده آمازون (Amazon 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 دارای ساختار پوشه زیر هستند:

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

در این بخش، مراحل آموزش مدل تقسیم بندی معنایی شما را طی می کنیم.

نوت بوک نمونه را دنبال کنید و کانال های داده را راه اندازی کنید

می توانید دستورالعمل های موجود را دنبال کنید الگوریتم Semantic Segmentation اکنون در Amazon SageMaker در دسترس است برای پیاده سازی الگوریتم تقسیم بندی معنایی در مجموعه داده برچسب گذاری شده شما. این نمونه دفتر یادداشت یک مثال سرتاسری را نشان می دهد که الگوریتم را معرفی می کند. در نوت بوک، نحوه آموزش و میزبانی یک مدل تقسیم بندی معنایی را با استفاده از شبکه کاملاً کانولوشن می آموزید (FCN) الگوریتم با استفاده از مجموعه داده پاسکال VOC برای تمرین. از آنجایی که قصد آموزش مدلی از مجموعه داده پاسکال 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 تصویری که توسط کارگران Mechanical Turk آموزش داده شده، خوشحالم. همچنین می توانید سایر شبکه های موجود مانند شبکه تجزیه هرمی صحنه (PSP) or DeepLab-V3 در دفترچه نمونه با مجموعه داده شما.

پاک کردن

برای جلوگیری از متحمل شدن هزینه های مداوم، نقطه پایانی را پس از اتمام کار حذف کنید:

ss_predictor.delete_endpoint()

نتیجه

در این پست، نحوه سفارشی سازی برچسب گذاری داده های تقسیم بندی معنایی و آموزش مدل را با استفاده از SageMaker نشان دادم. ابتدا، می توانید یک کار برچسب زدن را با ابزار تقسیم خودکار تنظیم کنید یا از نیروی کار Mechanical Turk (و همچنین گزینه های دیگر) استفاده کنید. اگر بیش از 5,000 شی دارید، می توانید از برچسب گذاری خودکار داده نیز استفاده کنید. سپس خروجی‌ها را از کار برچسب‌گذاری Ground Truth به قالب‌های ورودی مورد نیاز برای آموزش تقسیم‌بندی معنایی داخلی SageMaker تبدیل می‌کنید. پس از آن، می توانید از یک نمونه محاسباتی تسریع شده (مانند p2 یا p3) برای آموزش یک مدل تقسیم بندی معنایی با موارد زیر استفاده کنید. دفتر یادداشت و مدل را در یک نمونه مقرون به صرفه تر (مانند ml.c5.xlarge) مستقر کنید. در نهایت، می توانید نتایج استنتاج را در مجموعه داده آزمایشی خود با چند خط کد بررسی کنید.

با تقسیم بندی معنایی SageMaker شروع کنید برچسب گذاری داده ها و آموزش مدل با مجموعه داده مورد علاقه شما!


درباره نویسنده

کارا یانگ دانشمند داده در خدمات حرفه ای AWS است. او مشتاق کمک به مشتریان برای دستیابی به اهداف تجاری خود با خدمات ابری AWS است. او به سازمان‌ها کمک کرده است تا راه‌حل‌های ML را در صنایع مختلف مانند تولید، خودرو، پایداری محیطی و هوافضا بسازند.

تمبر زمان:

بیشتر از آموزش ماشین AWS