تقسیم‌بندی تصویر را با Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence اجرا کنید. جستجوی عمودی Ai.

بخش بندی تصویر را با Amazon SageMaker JumpStart اجرا کنید

در ماه دسامبر 2020 AWS اعلام کرد در دسترس بودن عمومی Amazon SageMaker JumpStart، قابلیتی از آمازون SageMaker که به شما کمک می کند تا به سرعت و به راحتی با یادگیری ماشینی (ML) شروع کنید. JumpStart تنظیم دقیق و استقرار طیف گسترده ای از مدل های از پیش آموزش داده شده را با یک کلیک در سراسر وظایف محبوب ML و همچنین مجموعه ای از راه حل های پایان به انتها که مشکلات رایج تجاری را حل می کند، ارائه می دهد. این ویژگی‌ها بار سنگین را از هر مرحله از فرآیند ML حذف می‌کنند و توسعه مدل‌های با کیفیت بالا را آسان‌تر می‌کنند و زمان استقرار را کاهش می‌دهند.

این پست سومین مطلب از سری استفاده از JumpStart برای وظایف خاص ML است. در اولین پست، ما نشان دادیم که چگونه می توانید موارد استفاده طبقه بندی تصاویر را در JumpStart اجرا کنید. در پست دوم، ما نشان دادیم که چگونه می توانید موارد استفاده طبقه بندی متن را در JumpStart اجرا کنید. در این پست، با استفاده از مدل‌های آموزش‌دیده از MXNet، توضیحی گام به گام در مورد نحوه تنظیم دقیق و استقرار یک مدل تقسیم‌بندی تصویر ارائه می‌کنیم. ما دو راه برای به دست آوردن یک نتیجه را بررسی می کنیم: از طریق رابط گرافیکی JumpStart در Amazon SageMaker Studio، و به صورت برنامه ای از طریق API های JumpStart.

اگر می خواهید مستقیماً به کد JumpStart API که در این پست توضیح می دهیم بروید، می توانید به نمونه نوت بوک های Jupyter زیر مراجعه کنید:

نمای کلی JumpStart

JumpStart به شما کمک می کند تا با مدل های ML برای کارهای مختلف بدون نوشتن یک خط کد شروع کنید. در زمان نوشتن، JumpStart شما را قادر می سازد تا کارهای زیر را انجام دهید:

  • استقرار مدل های از پیش آموزش دیده برای کارهای رایج ML – JumpStart شما را قادر می‌سازد تا با ارائه استقرار آسان مدل‌های از پیش آموزش‌دیده‌شده در مجموعه داده‌های بزرگ و در دسترس عموم، به وظایف رایج ML بدون هیچ تلاشی برای توسعه رسیدگی کنید. جامعه تحقیقاتی ML تلاش زیادی کرده است تا اکثر مدل‌های توسعه‌یافته اخیر را برای استفاده در دسترس عموم قرار دهد. JumpStart مجموعه ای از بیش از 300 مدل را میزبانی می کند که شامل 15 کار محبوب ML مانند تشخیص اشیا، طبقه بندی متن و تولید متن است و استفاده از آنها را برای مبتدیان آسان می کند. این مدل ها از هاب های مدل محبوب مانند TensorFlow، PyTorch، Hugging Face و MXNet گرفته شده اند.
  • مدل های از پیش آموزش دیده را تنظیم کنید - JumpStart به شما امکان می دهد مدل های از پیش آموزش دیده را بدون نیاز به نوشتن الگوریتم آموزشی خود تنظیم کنید. در ML به توانایی انتقال دانش آموخته شده در یک حوزه به حوزه دیگر گفته می شود انتقال یادگیری. می‌توانید از یادگیری انتقالی برای تولید مدل‌های دقیق روی مجموعه داده‌های کوچک‌تر خود، با هزینه‌های آموزشی بسیار پایین‌تر از مواردی که در آموزش مدل اصلی دخیل هستند، استفاده کنید. JumpStart همچنین شامل الگوریتم‌های آموزشی محبوب مبتنی بر LightGBM، CatBoost، XGBoost و Scikit-learn است که می‌توانید از ابتدا برای رگرسیون جدولی و طبقه‌بندی آموزش دهید.
  • از راه حل های از پیش ساخته شده استفاده کنید – JumpStart مجموعه‌ای از 17 راه‌حل را برای موارد استفاده رایج از ML، مانند پیش‌بینی تقاضا و برنامه‌های صنعتی و مالی ارائه می‌کند که می‌توانید تنها با چند کلیک آن‌ها را اجرا کنید. راه‌حل‌ها برنامه‌های کاربردی ML سرتاسری هستند که خدمات مختلف AWS را برای حل یک مورد استفاده تجاری خاص با هم ترکیب می‌کنند. آنها استفاده می کنند AWS CloudFormation قالب ها و معماری های مرجع برای استقرار سریع، به این معنی که آنها کاملا قابل تنظیم هستند.
  • به نمونه های نوت بوک برای الگوریتم های SageMaker مراجعه کنید – SageMaker مجموعه‌ای از الگوریتم‌های داخلی را برای کمک به دانشمندان داده و پزشکان ML ارائه می‌کند تا با آموزش و استقرار سریع مدل‌های ML شروع کنند. JumpStart نمونه نوت بوک هایی را ارائه می دهد که می توانید برای استفاده سریع از این الگوریتم ها از آنها استفاده کنید.
  • ویدئوهای آموزشی و وبلاگ ها را مرور کنید – JumpStart همچنین پست‌ها و ویدیوهای وبلاگ متعددی را ارائه می‌کند که به شما می‌آموزد چگونه از قابلیت‌های مختلف در SageMaker استفاده کنید.

JumpStart تنظیمات سفارشی VPC و سرویس مدیریت کلید AWS (AWS KMS) کلیدهای رمزگذاری، بنابراین می توانید از مدل ها و راه حل های موجود به طور ایمن در محیط سازمانی خود استفاده کنید. می توانید تنظیمات امنیتی خود را در استودیو یا از طریق SageMaker Python SDK به JumpStart منتقل کنید.

تقسیم بندی معنایی

تقسیم بندی معنایی هر دسته از اشیاء را که در یک تصویر ورودی ظاهر می شوند مشخص می کند. هر پیکسل از تصویر ورودی را با یک برچسب کلاس از مجموعه ای از کلاس های از پیش تعریف شده برچسب گذاری می کند (طبقه بندی می کند). چندین شی از یک کلاس به یک ماسک نگاشت می شوند.

مدل موجود برای تنظیم دقیق یک شبکه کاملاً پیچیده (FCN) "سر" در بالای شبکه پایه ایجاد می کند. مرحله تنظیم دقیق FCNHead را در حالی که پارامترهای بقیه مدل را ثابت نگه می دارد تنظیم می کند و مدل تنظیم شده را برمی گرداند. هدف به حداقل رساندن افت آنتروپی متقاطع softmax هر پیکسل برای آموزش FCN است. مدل بازگشتی با تنظیم دقیق را می توان برای استنتاج بیشتر به کار برد.

دایرکتوری ورودی باید مانند کد زیر باشد اگر داده های آموزشی حاوی دو تصویر باشد. نام فایل های .png می تواند هر چیزی باشد.

input_directory
    |--images
        |--abc.png
        |--def.png
    |--masks
        |--abc.png
        |--def.png
    class_label_to_prediction_index.json

فایل های ماسک باید دارای اطلاعات برچسب کلاس برای هر پیکسل باشند.

تقسیم بندی نمونه

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

در حال حاضر، JumpStart مدل‌های فقط استنتاج را برای نمونه‌بندی ارائه می‌کند و از تنظیم دقیق پشتیبانی نمی‌کند.

تصاویر زیر تفاوت بین استنتاج در تقسیم بندی معنایی و تقسیم بندی نمونه را نشان می دهد. تصویر اصلی دارای دو نفر در تصویر است. تقسیم‌بندی معنایی چندین نفر را در تصویر به‌عنوان یک موجودیت در نظر می‌گیرد: Person. با این حال، تقسیم‌بندی نمونه، افراد منفرد را در داخل شناسایی می‌کند Person رده است.

بررسی اجمالی راه حل

بخش‌های زیر یک نسخه نمایشی گام به گام برای انجام بخش‌بندی معنایی با JumpStart، هم از طریق رابط کاربری استودیو و هم از طریق APIهای JumpStart ارائه می‌کنند.

مراحل زیر را طی می کنیم:

  1. از طریق رابط کاربری Studio به JumpStart دسترسی پیدا کنید:
    1. استنتاج را بر روی مدل از پیش آموزش دیده اجرا کنید.
    2. مدل از پیش آموزش دیده را تنظیم دقیق کنید.
  2. از JumpStart به صورت برنامه نویسی با SageMaker Python SDK استفاده کنید:
    1. استنتاج را بر روی مدل از پیش آموزش دیده اجرا کنید.
    2. مدل از پیش آموزش دیده را تنظیم دقیق کنید.

همچنین ویژگی‌های پیشرفته دیگر JumpStart را مورد بحث قرار می‌دهیم.

از طریق رابط کاربری Studio به JumpStart دسترسی پیدا کنید

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

استنتاج را بر روی مدل از پیش آموزش دیده اجرا کنید

ویدئوی زیر به شما نشان می‌دهد که چگونه یک مدل تقسیم‌بندی معنایی از قبل آموزش‌دیده‌شده را در JumpStart پیدا کرده و آن را به کار بگیرید. صفحه مدل حاوی اطلاعات ارزشمندی در مورد مدل، نحوه استفاده از آن، فرمت داده مورد انتظار و برخی جزئیات تنظیم دقیق است. شما می توانید هر یک از مدل های از پیش آموزش دیده موجود در JumpStart را مستقر کنید. برای استنباط، نوع نمونه ml.g4dn.xlarge را انتخاب می کنیم. شتاب GPU مورد نیاز برای تأخیر استنتاج کم، اما با قیمت پایین‌تر را فراهم می‌کند. پس از پیکربندی نمونه میزبانی SageMaker، را انتخاب کنید گسترش. ممکن است 5 تا 10 دقیقه طول بکشد تا نقطه پایان دائمی شما آماده و اجرا شود.

پس از چند دقیقه، نقطه پایانی شما عملیاتی شده و آماده پاسخگویی به درخواست‌های استنتاج است.

به طور مشابه، می‌توانید یک مدل تقسیم‌بندی نمونه از پیش آموزش‌دیده را با دنبال کردن مراحل مشابه در ویدیوی قبل، در حین جستجوی تقسیم‌بندی نمونه به جای تقسیم‌بندی معنایی در نوار جستجوی JumpStart، اجرا کنید.

مدل از پیش آموزش دیده را تنظیم دقیق کنید

ویدئوی زیر نحوه یافتن و تنظیم دقیق یک مدل تقسیم بندی معنایی در JumpStart را نشان می دهد. در ویدیو، مدل را با استفاده از دکمه تنظیم می کنیم مجموعه داده PennFudanPed، به طور پیش فرض در JumpStart ارائه شده است که می توانید آن را در زیر دانلود کنید مجوز آپاچی 2.0.

تنظیم دقیق مجموعه داده های خود شامل قالب بندی صحیح داده ها (همانطور که در صفحه مدل توضیح داده شده است)، بارگذاری آن ها در سرویس ذخیره سازی ساده آمازون (Amazon S3) و تعیین مکان آن در پیکربندی منبع داده. ما از همان مقادیر فراپارامتر تنظیم شده به طور پیش فرض استفاده می کنیم (تعداد دوره ها، نرخ یادگیری و اندازه دسته). ما همچنین از یک ml.p3.2xlarge با پشتیبانی GPU به عنوان نمونه آموزشی SageMaker خود استفاده می کنیم.

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

از JumpStart به صورت برنامه نویسی با SageMaker SDK استفاده کنید

در بخش‌های قبل، نشان دادیم که چگونه می‌توانید از JumpStart UI برای استقرار یک مدل از پیش آموزش‌دیده و تنظیم دقیق آن به صورت تعاملی، در چند کلیک استفاده کنید. با این حال، می‌توانید با استفاده از APIهایی که در SageMaker SDK ادغام شده‌اند، از مدل‌های JumpStart استفاده کنید و به‌صورت برنامه‌نویسی تنظیم دقیق آن را آسان کنید. ما اکنون به یک مثال سریع می پردازیم که چگونه می توانید فرآیند قبلی را تکرار کنید. تمامی مراحل این دمو در نوت بوک های همراه موجود است مقدمه ای بر JumpStart – Instance Segmentation و مقدمه ای بر JumpStart – Semantic Segmentation.

استنتاج را بر روی مدل از پیش آموزش دیده اجرا کنید

در این بخش، یک مدل از پیش آموزش‌دیده مناسب را در JumpStart انتخاب می‌کنیم، این مدل را در یک نقطه پایانی SageMaker مستقر می‌کنیم و استنتاج را روی نقطه پایانی مستقر شده اجرا می‌کنیم.

SageMaker یک پلتفرم مبتنی بر کانتینرهای Docker است. JumpStart از چارچوب خاص موجود استفاده می کند ظروف یادگیری عمیق SageMaker (DLC ها). ما هر بسته اضافی و همچنین اسکریپت هایی را برای رسیدگی به آموزش و استنتاج برای کار انتخاب شده دریافت می کنیم. در نهایت، مصنوعات مدل از پیش آموزش دیده به طور جداگانه با آنها واکشی می شوند model_uris، که انعطاف پذیری را برای پلتفرم فراهم می کند. شما می توانید از هر تعداد مدل از قبل آموزش دیده برای همان کار با یک آموزش یا اسکریپت استنتاج استفاده کنید. کد زیر را ببینید:

model_id, model_version = "mxnet-semseg-fcn-resnet50-ade", "*"

# Retrieve the inference docker container uri
deploy_image_uri = image_uris.retrieve(
    region=None,
    framework=None,  # automatically inferred from model_id
    image_scope="inference",
    model_id=model_id,
    model_version=model_version,
    instance_type=inference_instance_type,
)

# Retrieve the inference script uri
deploy_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="inference")

base_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="inference")

به عنوان مثال تقسیم بندی، می توانیم تنظیم کنیم model_id به mxnet-semseg-fcn-resnet50-ade. is در شناسه مربوط به تقسیم بندی نمونه است.

در مرحله بعد، منابع را به a تغذیه می کنیم مدل SageMaker نمونه و استقرار یک نقطه پایانی:

# Create the SageMaker model instance
model = Model(
    image_uri=deploy_image_uri,
    source_dir=deploy_source_uri,
    model_data=base_model_uri,
    entry_point="inference.py",  # entry point file in source_dir and present in deploy_source_uri
    role=aws_role,
    predictor_cls=Predictor,
    name=endpoint_name,
)

# deploy the Model. Note that we need to pass Predictor class when we deploy model through Model class,
# for being able to run inference through the sagemaker API.
base_model_predictor = model.deploy(
    initial_instance_count=1,
    instance_type=inference_instance_type,
    predictor_cls=Predictor,
    endpoint_name=endpoint_name,
)

پس از چند دقیقه، مدل ما مستقر می شود و می توانیم پیش بینی هایی را در زمان واقعی از آن دریافت کنیم!

قطعه کد زیر به شما نگاهی اجمالی به تقسیم بندی معنایی می دهد. ماسک پیش بینی شده برای هر پیکسل تجسم می شود. برای به دست آوردن استنتاج از یک مدل مستقر، یک تصویر ورودی باید در قالب باینری ارائه شود. پاسخ نقطه پایانی یک برچسب پیش بینی شده برای هر پیکسل در تصویر است. ما استفاده می کنیم query_endpoint و parse_response توابع کمکی، که در تعریف شده است دفترچه همراه:

query_response = query(base_model_predictor, pedestrian_img)
predictions, labels, image_labels = parse_response(query_response)
print("Objects present in the picture:", image_labels)

مدل از پیش آموزش دیده را تنظیم دقیق کنید

برای تنظیم دقیق یک مدل انتخاب شده، باید URI آن مدل و همچنین اسکریپت آموزشی و تصویر ظرف مورد استفاده برای آموزش را دریافت کنیم. خوشبختانه، این سه ورودی صرفاً به نام مدل، نسخه بستگی دارد (برای لیستی از مدل های موجود، نگاه کنید به جدول مدل موجود JumpStart)و نوع نمونه ای که می خواهید روی آن آموزش دهید. این در قطعه کد زیر نشان داده شده است:

from sagemaker import image_uris, model_uris, script_uris

model_id, model_version = "mxnet-semseg-fcn-resnet50-ade", "*"
training_instance_type = "ml.p3.2xlarge"
train_image_uri = image_uris.retrieve(
    region=None,
    framework=None,
    model_id=model_id,
    model_version=model_version,
    image_scope="training",
    instance_type=training_instance_type,)# Retrieve the training script

train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training")# Retrieve the pre-trained model tarball to further fine-tune

train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

ما را بازیابی می کنیم model_id مطابق با همان مدلی که قبلا استفاده کردیم. اکنون می توانید این مدل JumpStart را با استفاده از SageMaker SDK روی مجموعه داده های سفارشی خود تنظیم کنید. ما از مجموعه داده ای استفاده می کنیم که به طور عمومی در آمازون S3 میزبانی می شود و به راحتی بر تقسیم بندی معنایی متمرکز است. مجموعه داده باید برای تنظیم دقیق همانطور که در بخش قبل توضیح داده شد، ساختار یافته باشد. کد نمونه زیر را ببینید:

# URI of your training dataset
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/PennFudanPed_SemSeg/"
training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"
training_job_name = name_from_base(f"jumpstart-example-{model_id}-transfer-learning")# Create SageMaker Estimator instance
semseg_estimator = Estimator(
    role=aws_role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,)# Launch a SageMaker Training job by passing s3 path of the training data
semseg_estimator.fit({"training": training_dataset_s3_path}, logs=True)

ما همان هایپرپارامترهای پیش فرض را برای مدل انتخابی خود مانند آنچه در بخش قبل دیدیم، با استفاده از آن به دست می آوریم sagemaker.hyperparameters.retrieve_default(). سپس یک برآوردگر SageMaker را نمونه‌سازی می‌کنیم و با آن تماس می‌گیریم .fit روشی برای شروع به تنظیم دقیق مدل، ارسال آن به آمازون S3 URI برای داده های آموزشی ما. را entry_point اسکریپت ارائه شده transfer_learning.py نام دارد (همانطور برای کارها و مدل های دیگر) و کانال داده ورودی به .fit باید نام برد training.

در حالی که الگوریتم تمرین می کند، می توانید پیشرفت آن را در نوت بوک SageMaker که در آن خود کد را اجرا می کنید یا در CloudWatch آمازون. هنگامی که آموزش کامل شد، مصنوعات مدل تنظیم شده در محل خروجی آمازون S3 مشخص شده در پیکربندی آموزشی آپلود می شوند. اکنون می توانید مدل را به همان روشی که مدل از قبل آموزش داده شده استقرار دهید.

خصوصیات پیشرفته

علاوه بر تنظیم دقیق و استقرار مدل های از پیش آموزش دیده، JumpStart بسیاری از ویژگی های پیشرفته را ارائه می دهد.

اول است تنظیم خودکار مدل این به شما امکان می دهد مدل های ML خود را به طور خودکار تنظیم کنید تا مقادیر هایپرپارامتر را با بالاترین دقت در محدوده ارائه شده از طریق SageMaker API بیابید.

دوم این است که آموزش افزایشی. این به شما امکان می‌دهد مدلی را که قبلاً تنظیم دقیق کرده‌اید با استفاده از یک مجموعه داده توسعه‌یافته که شامل یک الگوی زیربنایی است که در اجرای تنظیم دقیق قبلی در نظر گرفته نشده است، آموزش دهید، که منجر به عملکرد ضعیف مدل شد. آموزش افزایشی باعث صرفه جویی در زمان و منابع می شود زیرا نیازی به آموزش مجدد مدل از ابتدا ندارید.

نتیجه

در این پست، نحوه تنظیم دقیق و استقرار یک مدل تقسیم‌بندی معنایی از پیش آموزش‌دیده و نحوه تطبیق آن برای نمونه‌سازی با استفاده از JumpStart را نشان دادیم. شما می توانید این کار را بدون نیاز به نوشتن کد انجام دهید. راه حل را خودتان امتحان کنید و نظرات خود را برای ما ارسال کنید.

برای کسب اطلاعات بیشتر در مورد JumpStart و نحوه استفاده از مدل های از پیش آموزش داده شده منبع باز برای انواع دیگر وظایف ML، موارد زیر را بررسی کنید. ویدیوی AWS re:Invent 2020.


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

تقسیم‌بندی تصویر را با Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence اجرا کنید. جستجوی عمودی Ai.دکتر ویوک مدان یک دانشمند کاربردی با تیم آمازون SageMaker JumpStart است. او دکترای خود را از دانشگاه ایلینویز در Urbana-Champaign گرفت و پژوهشگر پست دکترا در جورجیا تک بود. او یک محقق فعال در یادگیری ماشین و طراحی الگوریتم است و مقالاتی در کنفرانس های EMNLP، ICLR، COLT، FOCS و SODA منتشر کرده است.

تقسیم‌بندی تصویر را با Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence اجرا کنید. جستجوی عمودی Ai.سانتوش کولکارنی یک معمار راه حل های سازمانی در خدمات وب آمازون است که با مشتریان ورزشی در استرالیا کار می کند. او مشتاق ساخت برنامه های کاربردی توزیع شده در مقیاس بزرگ برای حل مشکلات تجاری با استفاده از دانش خود در AI/ML، داده های بزرگ و توسعه نرم افزار است.

تقسیم‌بندی تصویر را با Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence اجرا کنید. جستجوی عمودی Ai.لئوناردو باچگا یک دانشمند و مدیر ارشد در تیم آمازون SageMaker JumpStart است. او مشتاق ساخت خدمات هوش مصنوعی برای بینایی کامپیوتر است.

تمبر زمان:

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