Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence で画像セグメンテーションを実行します。 垂直検索。 あい。

Amazon SageMaker JumpStart で画像セグメンテーションを実行する

12月の2020では、 AWSが発表 の一般的な可用性 Amazon SageMaker ジャンプスタート、の機能 アマゾンセージメーカー これにより、機械学習(ML)をすばやく簡単に開始できます。 JumpStartは、一般的なMLタスク全体で、事前にトレーニングされたさまざまなモデルのワンクリックの微調整と展開、および一般的なビジネス上の問題を解決するエンドツーエンドのソリューションの選択を提供します。 これらの機能により、MLプロセスの各ステップの負担が軽減され、高品質のモデルの開発が容易になり、デプロイまでの時間が短縮されます。

この記事は、特定の ML タスクに JumpStart を使用するシリーズの XNUMX 回目です。 の中に 最初の投稿では、JumpStart で画像分類のユース ケースを実行する方法を示しました。 の中に 2番目の投稿では、JumpStart でテキスト分類のユース ケースを実行する方法を示しました。 この投稿では、MXNet のトレーニング済みモデルを使用して、画像セグメンテーション モデルを微調整してデプロイする方法について、段階的なウォークスルーを提供します。 同じ結果を得る XNUMX つの方法を検討します。 Amazon SageMakerスタジオ、およびプログラムによって JumpStart API.

この投稿で説明するJumpStartAPIコードに直接ジャンプしたい場合は、次のサンプルJupyterノートブックを参照できます。

JumpStartの概要

JumpStart を使用すると、コードを XNUMX 行も書かずに、さまざまなタスクの ML モデルを使い始めることができます。 執筆時点では、JumpStart を使用すると、次のことが可能になります。

  • 一般的なMLタスク用に事前トレーニング済みモデルを展開する – JumpStart を使用すると、公開されている大規模なデータセットで事前トレーニングされたモデルを簡単にデプロイできるため、開発作業を行うことなく一般的な ML タスクに対処できます。 ML 研究コミュニティは、最近開発されたモデルの大部分を公開して使用できるようにするために多大な努力を払ってきました。 JumpStart は、オブジェクト検出、テキスト分類、テキスト生成など、最も一般的な 300 の ML タスクにまたがる 15 を超えるモデルのコレクションをホストしているため、初心者でも簡単に使用できます。 これらのモデルは、TensorFlow、PyTorch、Hugging Face、MXNet などの一般的なモデル ハブから抽出されています。
  • 事前にトレーニングされたモデルを微調整する – JumpStartを使用すると、独自のトレーニングアルゴリズムを作成しなくても、事前にトレーニングされたモデルを微調整できます。 MLでは、あるドメインで学習した知識を別のドメインに転送する機能は、 転移学習。 転移学習を使用すると、元のモデルのトレーニングに関連するトレーニングコストよりもはるかに低いトレーニングコストで、より小さなデータセットで正確なモデルを生成できます。 JumpStartには、LightGBM、CatBoost、XGBoost、およびScikit-learnに基づく一般的なトレーニングアルゴリズムも含まれています。これらのアルゴリズムは、表形式の回帰と分類のために最初からトレーニングできます。
  • 構築済みのソリューションを使用する – JumpStartは、需要予測や産業および金融アプリケーションなどの一般的なMLユースケース向けの17のソリューションのセットを提供し、数回クリックするだけでデプロイできます。 ソリューションは、特定のビジネスユースケースを解決するためにさまざまなAWSサービスをつなぎ合わせるエンドツーエンドのMLアプリケーションです。 彼らは使用します AWS CloudFormation 迅速な展開のためのテンプレートとリファレンスアーキテクチャ。つまり、完全にカスタマイズ可能です。
  • SageMakerアルゴリズムについては、ノートブックの例を参照してください – SageMakerは、データサイエンティストとML実践者が、MLモデルのトレーニングとデプロイを迅速に開始できるようにする一連の組み込みアルゴリズムを提供します。 JumpStartは、これらのアルゴリズムをすばやく使用するために使用できるサンプルノートブックを提供します。
  • トレーニングビデオとブログを確認する – JumpStartは、SageMaker内でさまざまな機能を使用する方法を教える多数のブログ投稿とビデオも提供します。

JumpStartはカスタムVPC設定を受け入れ、 AWSキー管理サービス (AWS KMS)暗号化キー。これにより、エンタープライズ環境内で利用可能なモデルとソリューションを安全に使用できます。 セキュリティ設定は、Studio内またはSageMakerPythonSDKを介してJumpStartに渡すことができます。

セマンティックセグメンテーション

セマンティック セグメンテーションは、入力画像に表示されるオブジェクトの各クラスを表します。 入力画像の各ピクセルに、事前定義された一連のクラスからのクラス ラベルをタグ付け (分類) します。 同じクラスの複数のオブジェクトが同じマスクにマップされます。

微調整に使用できるモデルは、ベース ネットワークの上に完全な畳み込みネットワーク (FCN) の「ヘッド」を構築します。 微調整ステップでは、モデルの残りのパラメーターを固定したまま FCNHead を微調整し、微調整されたモデルを返します。 目的は、ピクセルごとのソフトマックス クロス エントロピー損失を最小限に抑えて、FCN をトレーニングすることです。 微調整によって返されたモデルは、推論のためにさらに展開できます。

トレーニング データに XNUMX つの画像が含まれている場合、入力ディレクトリは次のコードのようになります。 .png ファイルの名前は何でもかまいません。

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

マスク ファイルには、各ピクセルのクラス ラベル情報が必要です。

インスタンスのセグメンテーション

インスタンス セグメンテーションは、画像に表示される対象となる個々の個別のオブジェクトを検出して描写します。 インスタンス ラベルですべてのピクセルにタグを付けます。 セマンティック セグメンテーションでは、同じクラスの複数のオブジェクトのピクセルに同じタグが割り当てられますが、インスタンス セグメンテーションでは、画像上のオブジェクトの出現ごとに対応するピクセルに別のタグが付けられます。

現在、JumpStart はインスタンス セグメンテーション用の推論のみのモデルを提供しており、微調整はサポートしていません。

次の図は、セマンティック セグメンテーションとインスタンス セグメンテーションの推論の違いを示しています。 元の画像には XNUMX 人の人物が写っています。 セマンティック セグメンテーションは、画像内の複数の人を XNUMX つのエンティティとして扱います。 Person. ただし、インスタンス セグメンテーションは、インスタンス内の個人を識別します。 Person カテゴリ。

ソリューションの概要

次のセクションでは、Studio UI と JumpStart API の両方を介して、JumpStart でセマンティック セグメンテーションを実行するための段階的なデモを提供します。

次の手順を実行します。

  1. StudioUIからJumpStartにアクセスします。
    1. 事前にトレーニングされたモデルで推論を実行します。
    2. 事前にトレーニングされたモデルを微調整します。
  2. プログラムでSageMakerPythonSDKを使用してJumpStartを使用します。
    1. 事前にトレーニングされたモデルで推論を実行します。
    2. 事前にトレーニングされたモデルを微調整します。

また、JumpStart のその他の高度な機能についても説明します。

StudioUIからJumpStartにアクセスします

このセクションでは、StudioUIを介してJumpStartモデルをトレーニングおよびデプロイする方法を示します。

事前にトレーニングされたモデルで推論を実行する

次のビデオでは、JumpStart で事前トレーニング済みのセマンティック セグメンテーション モデルを見つけて展開する方法を示します。 モデル ページには、モデル、その使用方法、予想されるデータ形式、微調整の詳細に関する貴重な情報が含まれています。 JumpStart で利用可能な事前トレーニング済みのモデルをデプロイできます。 推論のために、ml.g4dn.xlarge インスタンス タイプを選択します。 低価格で低推論レイテンシーに必要な GPU アクセラレーションを提供します。 SageMaker ホスティングインスタンスを設定したら、選択します 配備します。 永続的なエンドポイントが稼働するまで、5〜10分かかる場合があります。

数分後、エンドポイントが操作可能になり、推論リクエストに応答する準備が整います。

同様に、JumpStart 検索バーでセマンティック セグメンテーションではなくインスタンス セグメンテーションを検索しながら、前のビデオと同じ手順に従って、事前トレーニング済みのインスタンス セグメンテーション モデルをデプロイできます。

事前にトレーニングされたモデルを微調整します

次のビデオは、JumpStart でセマンティック セグメンテーション モデルを見つけて微調整する方法を示しています。 ビデオでは、 PennFudanPed データセット、JumpStart でデフォルトで提供されます。これは、 Apache2.0ライセンス.

独自のデータセットの微調整には、(モデル ページで説明されているように) データの正しい形式を取得し、それを にアップロードすることが含まれます。 Amazon シンプル ストレージ サービス (Amazon S3)、およびデータ ソース設定でその場所を指定します。 デフォルトで設定されているのと同じハイパーパラメータ値 (エポック数、学習率、バッチ サイズ) を使用します。 SageMaker トレーニング インスタンスとして、GPU を利用した ml.p3.2xlarge も使用します。

Studio コンソールで実行されているトレーニング ジョブを直接監視でき、完了時に通知されます。 トレーニングが完了したら、トレーニング ジョブの詳細を保持している同じページから、微調整されたモデルをデプロイできます。 デプロイ ワークフローは、事前トレーニング済みモデルのデプロイと同じです。

SageMakerSDKでJumpStartをプログラムで使用する

前のセクションでは、数回クリックするだけで、JumpStart UI を使用して事前トレーニング済みのモデルをデプロイし、インタラクティブに微調整する方法を示しました。 ただし、SageMaker SDK に統合された API を使用して、JumpStart のモデルと簡単な微調整をプログラムで使用することもできます。 ここで、前のプロセスを再現する方法の簡単な例を見ていきます。 このデモのすべての手順は、付属のノートブックで利用できます JumpStartの概要–インスタンスのセグメンテーション & JumpStartの概要–セマンティックセグメンテーション.

事前にトレーニングされたモデルで推論を実行する

このセクションでは、JumpStart で適切な事前トレーニング済みモデルを選択し、このモデルを SageMaker エンドポイントにデプロイして、デプロイされたエンドポイントで推論を実行します。

SageMakerは、Dockerコンテナに基づくプラットフォームです。 JumpStartは、利用可能なフレームワーク固有を使用します SageMakerディープラーニングコンテナ (DLC)。 選択したタスクのトレーニングと推論を処理するためのスクリプトだけでなく、追加のパッケージもフェッチします。 最後に、事前にトレーニングされたモデルアーティファクトは、 model_uris、プラットフォームに柔軟性を提供します。 XNUMXつのトレーニングまたは推論スクリプトで、同じタスクに対して事前にトレーニングされたモデルをいくつでも使用できます。 次のコードを参照してください。

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 は、インスタンスのセグメンテーションに対応します。

次に、リソースをにフィードします 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と、トレーニングスクリプトおよびトレーニングに使用されるコンテナイメージのURIを取得する必要があります。 ありがたいことに、これらのXNUMXつの入力は、モデル名、バージョンのみに依存します(使用可能なモデルのリストについては、を参照してください。 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 以前に使用したのと同じモデルに対応します。 SageMaker SDK を使用して、独自のカスタム データセットでこの JumpStart モデルを微調整できるようになりました。 Amazon 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 estimator をインスタンス化し、 .fit メソッドを使用してモデルの微調整を開始し、トレーニング データの Amazon S3 URI を渡します。 の entry_point 提供されるスクリプトの名前は transfer_learning.py (他のタスクとモデルでも同じ) で、入力データ チャネルはに渡されます。 .fit 名前を付ける必要があります training.

アルゴリズムのトレーニング中は、コード自体を実行しているSageMakerノートブックまたはでその進行状況を監視できます。 アマゾンクラウドウォッチ. トレーニングが完了すると、微調整されたモデル アーティファクトが、トレーニング設定で指定された Amazon S3 出力場所にアップロードされます。 これで、事前トレーニング済みモデルと同じ方法でモデルをデプロイできます。

高度な機能

事前トレーニング済みモデルの微調整とデプロイに加えて、JumpStart は多くの高度な機能を提供します。

最初は、 自動モデル調整。 これにより、ML モデルを自動的に調整して、SageMaker API によって提供される範囲内で最高の精度を持つハイパーパラメータ値を見つけることができます。

2番目は インクリメンタルトレーニング. これにより、以前の微調整の実行で考慮されなかった基本的なパターンを含む拡張データセットを使用して、既に微調整したモデルをトレーニングできます。これにより、モデルのパフォーマンスが低下します。 増分トレーニングでは、モデルを最初から再トレーニングする必要がないため、時間とリソースの両方を節約できます。

まとめ

この投稿では、事前トレーニング済みのセマンティック セグメンテーション モデルを微調整してデプロイする方法と、JumpStart を使用してインスタンス セグメンテーションに適応させる方法を示しました。 これは、コードを記述しなくても実現できます。 ご自身で解決策を試し、ご意見をお寄せください。

JumpStart の詳細と、オープンソースの事前トレーニング済みモデルを他のさまざまな ML タスクに使用する方法については、以下をご覧ください。 AWS re:Invent2020ビデオ.


著者について

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence で画像セグメンテーションを実行します。 垂直検索。 あい。ヴィヴェック・マダン博士 Amazon SageMaker JumpStart チームの応用科学者です。 イリノイ大学アーバナ シャンペーン校で博士号を取得し、ジョージア工科大学で博士研究員を務めました。 彼は機械学習とアルゴリズム設計の活発な研究者であり、EMNLP、ICLR、COLT、FOCS、および SODA カンファレンスで論文を発表しています。

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence で画像セグメンテーションを実行します。 垂直検索。 あい。サントッシュクルカルニ は、オーストラリアのスポーツ顧客と協力するアマゾン ウェブ サービスのエンタープライズ ソリューション アーキテクトです。 彼は、AI/ML、ビッグデータ、およびソフトウェア開発に関する知識を使用して、ビジネス上の問題を解決する大規模な分散アプリケーションを構築することに情熱を注いでいます。

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence で画像セグメンテーションを実行します。 垂直検索。 あい。レオナルド・バチェガ Amazon SageMaker JumpStart チームの上級科学者兼マネージャーです。 彼は、コンピューター ビジョン用の AI サービスの構築に情熱を注いでいます。

タイムスタンプ:

より多くの AWS機械学習