Amazon SageMaker JumpStart を使用してテキストから画像への Stable Diffusion モデルを微調整する

Amazon SageMaker JumpStart を使用してテキストから画像への Stable Diffusion モデルを微調整する

ソースノード: 1968900

2022年XNUMX月、私たちは 発表の AWS のお客様は、テキストから画像を生成できる 安定拡散 モデルイン Amazon SageMaker ジャンプスタート. Stable Diffusion は、リアルで高品質な画像と見事なアートをわずか数秒で生成できるディープ ラーニング モデルです。 印象的な画像を作成することは、アートから NFT まで、さまざまな業界で使用できますが、今日では、AI がパーソナライズ可能であることも期待されています。 本日、カスタム データセットで画像生成モデルを微調整することにより、ユース ケースに合わせて画像生成モデルをパーソナライズできることを発表します。 Amazon SageMaker ジャンプスタート. これは、アート、ロゴ、カスタム デザイン、NFT などを作成する場合や、ペットや自分のアバターのカスタム AI 画像を生成するなどの楽しいものを作成する場合に役立ちます。

この投稿では、Stable Diffusion モデルを微調整する方法の概要を XNUMX つの方法で説明します。 JumpStart API で利用可能 SageMaker Python SDK、および JumpStart のユーザー インターフェイス (UI) Amazon SageMakerスタジオ. また、データセットの品質、トレーニング データセットのサイズ、ハイパーパラメーター値の選択、複数のデータセットへの適用性など、設計上の選択を行う方法についても説明します。 最後に、最近 JumpStart に追加された、さまざまな入力言語とスタイルを備えた、公開されている 80 を超える微調整されたモデルについて説明します。

安定拡散と転移学習

Stable Diffusion は、テキスト プロンプトだけから写真のようにリアルなイメージを作成できるテキストからイメージへのモデルです。 拡散モデルは、実際の画像に追加されたノイズを除去することを学習することによってトレーニングされます。 このノイズ除去プロセスにより、リアルな画像が生成されます。 これらのモデルは、テキストの生成プロセスを調整することにより、テキストのみから画像を生成することもできます。 たとえば、Stable Diffusion は、モデルが純粋なノイズ画像内の形状を認識することを学習し、形状が入力テキスト内の単語と一致する場合にこれらの形状に徐々に焦点を合わせる潜在的な拡散です。 テキストは、最初に言語モデルを使用して潜在空間に埋め込まれなければなりません。 次に、一連のノイズ追加およびノイズ除去操作が、U-Net アーキテクチャを使用して潜在空間で実行されます。 最後に、ノイズ除去された出力がピクセル空間にデコードされます。

機械学習 (ML) では、あるドメインで学習した知識を別のドメインに移す能力を呼びます。 転移学習. 転移学習を使用すると、元のモデルのトレーニングにかかる​​コストよりもはるかに低いトレーニング コストで、小規模なデータセットで正確なモデルを生成できます。 転移学習を使用すると、わずか XNUMX つの画像を使用して、独自のデータセットで安定した拡散モデルを微調整できます。 たとえば、左側はモデルを微調整するために使用されたドップラーという名前の犬のトレーニング画像で、真ん中と右側はビーチでのドップラー画像を予測するように求められたときに微調整されたモデルによって生成された画像と鉛筆画です。

左側は、モデルの微調整に使用された白い椅子の画像と、微調整されたモデルによって生成された赤色の椅子の画像です。 右側には、モデルを微調整するために使用されるオットマンのイメージと、オットマンに座っている猫のイメージがあります。

Stable Diffusion のような大きなモデルを微調整するには、通常、トレーニング スクリプトを提供する必要があります。 メモリ不足の問題、ペイロード サイズの問題など、多くの問題があります。 さらに、エンド ツー エンドのテストを実行して、スクリプト、モデル、および目的のインスタンスが効率的に連携することを確認する必要があります。 JumpStart は、しっかりとテストされたすぐに使えるスクリプトを提供することで、このプロセスを簡素化します。 Stable Diffusion モデルの JumpStart 微調整スクリプトは、 ドリームブース. これらのスクリプトには、Studio UI からワンクリックでアクセスできます。 JumpStart API.

安定拡散モデルを使用することにより、以下に同意することに注意してください。 CreativeML Open RAIL++-M ライセンス.

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

このセクションでは、モデルをトレーニングしてデプロイする方法について説明します。 SageMaker Python SDK. JumpStart で適切な事前トレーニング済みモデルを選択し、このモデルを SageMaker トレーニング ジョブでトレーニングし、トレーニング済みモデルを SageMaker エンドポイントにデプロイします。 さらに、すべて SageMaker Python SDK を使用して、デプロイされたエンドポイントで推論を実行します。 次の例には、コード スニペットが含まれています。 このデモのすべてのステップを含む完全なコードについては、 JumpStart の紹介 – テキストから画像へ ノートブックの例。

Stable Diffusion モデルのトレーニングと微調整

各モデルは一意の model_id. 次のコードは、によって識別される Stable Diffusion 2.1 基本モデルを微調整する方法を示しています。 model_id model-txt2img-stabilityai-stable-diffusion-v2-1-base カスタム トレーニング データセットで。 完全なリストについては、 model_id 値と微調整可能なモデルについては、を参照してください。 事前トレーニング済みのモデル テーブルを使用した組み込みアルゴリズム。 それぞれについて model_id、SageMaker トレーニングジョブを起動するために、 推定量 SageMaker Python SDK のクラスを使用するには、SageMaker で提供されるユーティリティ関数を使用して、Docker イメージ URI、トレーニング スクリプト URI、事前トレーニング済みモデル URI を取得する必要があります。 トレーニング スクリプト URI には、データ処理、事前トレーニング済みモデルの読み込み、モデル トレーニング、推論用のトレーニング済みモデルの保存に必要なすべてのコードが含まれています。 事前トレーニング済みモデルの URI には、事前トレーニング済みモデル アーキテクチャの定義とモデル パラメーターが含まれています。 事前トレーニング済みのモデル URI は、特定のモデルに固有です。 事前トレーニング済みのモデル tarball は、Hugging Face から事前にダウンロードされ、適切なモデル署名とともに .xml に保存されています。 Amazon シンプル ストレージ サービス (Amazon S3) バケット。トレーニング ジョブがネットワーク分離で実行されるようにします。 次のコードを参照してください。

from sagemaker import image_uris, model_uris, script_uris # Currently, not all the stable diffusion models in jumpstart support finetuning. Thus, we manually select a model
# which supports finetuning.
train_model_id, train_model_version, train_scope = ( "model-txt2img-stabilityai-stable-diffusion-v2-1-base", "*", "training",
) # Tested with ml.g4dn.2xlarge (16GB GPU memory) and ml.g5.2xlarge (24GB GPU memory) instances. Other instances may work as well.
# If ml.g5.2xlarge instance type is available, please change the following instance type to speed up training.
training_instance_type = "ml.g4dn.2xlarge" # Retrieve the docker image
train_image_uri = image_uris.retrieve(
region=None,
framework=None, # automatically inferred from model_id
model_id=train_model_id,
model_version=train_model_version,
image_scope=train_scope,
instance_type=training_instance_type,
) # Retrieve the training script. This contains all the necessary files including data processing, model training etc.
train_source_uri = script_uris.retrieve(
model_id=train_model_id, model_version=train_model_version, script_scope=train_scope
) # Retrieve the pre-trained model tarball to further fine-tune
train_model_uri = model_uris.retrieve(
model_id=train_model_id, model_version=train_model_version, model_scope=train_scope
)

これらのモデル固有のトレーニング アーティファクトを使用して、 推定量 クラス:

# Create SageMaker Estimator instance
sd_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", # Entry-point file in source_dir and present in train_source_uri. instance_count=1, instance_type=training_instance_type, max_run=360000, hyperparameters=hyperparameters, output_path=s3_output_location, base_job_name=training_job_name,
) # Launch a SageMaker Training job by passing s3 path of the training data
sd_estimator.fit({"training": training_dataset_s3_path}, logs=True)

トレーニングデータセット

以下は、トレーニング データをフォーマットする方法の手順です。

  • 入力 – インスタンス イメージを含むディレクトリ dataset_info.json、次の構成で:
    • 画像は .png、.jpg、または .jpeg 形式の場合があります
    •   dataset_info.json ファイルは次の形式である必要があります {'instance_prompt':<<instance_prompt>>}
  • 出力 – 推論のためにデプロイできるトレーニング済みモデル

S3 パスは次のようになります。 s3://bucket_name/input_directory/。 末尾に注意してください / 必要とされている。

以下は、トレーニング データの形式の例です。

input_directory |---instance_image_1.png |---instance_image_2.png |---instance_image_3.png |---instance_image_4.png |---instance_image_5.png |---dataset_info.json

事前保存を使用しながらデータをフォーマットする方法については、セクションを参照してください。 事前保存 このポストで。

猫の画像のデフォルトのデータセットを提供しています。 これは、クラス イメージのない XNUMX 匹の猫の XNUMX つのイメージ (インスタンス プロンプトに対応するインスタンス イメージ) で構成されます。 からダウンロードできます。 GitHubの. デフォルトのデータセットを使用している場合は、デモ ノートブックで推論を行っているときに、プロンプト「リオバガー 猫の写真」を試してください。

ライセンス: マサチューセッツ工科大学(MIT).

ハイパーパラメータ

次に、カスタム データセットの転移学習のために、トレーニング ハイパーパラメーターの既定値を変更する必要がある場合があります。 これらのハイパーパラメータの Python ディクショナリをデフォルト値で取得するには、次を呼び出します。 hyperparameters.retrieve_default必要に応じて更新し、Estimator クラスに渡します。 次のコードを参照してください。

from sagemaker import hyperparameters
# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(
model_id=train_model_id, model_version=train_model_version
) # [Optional] Override default hyperparameters with custom values
hyperparameters["max_steps"] = "400"

微調整アルゴリズムでは、次のハイパーパラメータがサポートされています。

  • 事前保存あり – 事前保存損失を追加するためのフラグ。 事前保存は、オーバーフィッティングを回避する正則化です。 (選択肢: [“True”,“False”]、 デフォルト: “False”.)
  • num_class_images – 事前保存損失の最小クラス イメージ。 もしも with_prior_preservation = True すでに存在する十分な画像がありません class_data_dir、追加の画像はでサンプリングされます class_prompt. (値: 正の整数、デフォルト: 100。)
  • エポック – 微調整アルゴリズムがトレーニング データセットを通過する回数。 (値: 正の整数、デフォルト: 20。)
  • 最大ステップ数 – 実行するトレーニング ステップの総数。 そうでない場合 None、エポックをオーバーライドします。 (値: “None” または整数の文字列、デフォルト: “None”.)
  • バッチサイズ –: モデルの重みが更新される前に実行されるトレーニング例の数。 次の場合、クラス イメージ生成時のバッチ サイズと同じ with_prior_preservation = True. (値: 正の整数、デフォルト: 1。)
  • Learning_rate – トレーニング例の各バッチを処理した後にモデルの重みが更新されるレート。 (値: 正の浮動小数点数、デフォルト: 2e-06。)
  • 以前の損失重量 – 事前保存損失の重み。 (値: 正のフロート、デフォルト: 1.0。)
  • センタークロップ – 目的の解像度にサイズ変更する前に画像をトリミングするかどうか。 (選択肢: [“True”/“False”]、 デフォルト: “False”.)
  • lr_スケジューラー – 学習率スケジューラーのタイプ。 (選択肢: ["linear", "cosine", "cosine_with_restarts", "polynomial", "constant", "constant_with_warmup"]、 デフォルト: "constant") 詳細については、を参照してください。 学習率スケジューラ.
  • adam_weight_decay – すべてのバイアスとすべてのレイヤーを除くすべてのレイヤーに (ゼロでない場合) 適用する重み減衰。 LayerNorm ウェイト AdamW オプティマイザ。 (値: float、デフォルト: 1e-2)
  • アダム_ベータ1 – beta1 ハイパーパラメータ (一次モーメント推定値の指数関数的減衰率) AdamW オプティマイザ。 (値: float、デフォルト: 0.9)
  • アダム_ベータ2 – beta2 ハイパーパラメータ (一次モーメント推定値の指数関数的減衰率) AdamW オプティマイザ。 (値: float、デフォルト: 0.999)
  • アダムイプシロン - epsilon のハイパーパラメータ AdamW オプティマイザ。 通常、0 による除算を避けるために小さい値に設定されます (値: float、デフォルト: 1e-8)。
  • gradient_accumulation_steps – 逆方向/更新パスを実行する前に累積する更新ステップの数。 (値: 整数、デフォルト: 1)
  • max_grad_norm – 最大勾配ノルム (勾配クリッピング用)。 (値: float、デフォルト: 1.0)
  • シード – ランダムな状態を修正して、トレーニングで再現可能な結果を​​達成します。 (値: 整数、デフォルト: 0)

細かくトレーニングされたモデルをデプロイする

モデルのトレーニングが完了したら、永続的なリアルタイム エンドポイントにモデルを直接デプロイできます。 必要な Docker イメージ URI とスクリプト URI をフェッチし、モデルをデプロイします。 次のコードを参照してください。

inference_instance_type = "ml.g4dn.2xlarge" # 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=train_model_id, model_version=train_model_version, instance_type=inference_instance_type,
) # Retrieve the inference script uri. This includes scripts for model loading, inference handling etc.
deploy_source_uri = script_uris.retrieve( model_id=train_model_id, model_version=train_model_version, script_scope="inference"
) # Use the estimator from the previous step to deploy to a SageMaker endpoint
finetuned_predictor = sd_estimator.deploy( initial_instance_count=1, instance_type=inference_instance_type, entry_point="inference.py", # entry point file in source_dir and present in deploy_source_uri image_uri=deploy_image_uri, source_dir=deploy_source_uri, endpoint_name=endpoint_name,
)

左側は、モデルを微調整するために使用された riobugger という名前の猫のトレーニング画像です (デフォルト パラメーターを除く)。 max_steps = 400)。 中央と右は、浜辺での riobugger の画像を予測するように求められたときに、微調整されたモデルによって生成された画像と鉛筆画です。

サポートされているパラメーター、応答形式など、推論の詳細については、次を参照してください。 Amazon SageMaker JumpStart で安定した拡散モデルを使用してテキストから画像を生成する.

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

このセクションでは、Studio UI を使用して JumpStart モデルをトレーニングおよびデプロイする方法を示します。 次のビデオは、事前トレーニング済みの Stable Diffusion モデルを JumpStart で見つけてトレーニングし、デプロイする方法を示しています。 モデル ページには、モデルとその使用方法に関する貴重な情報が含まれています。 SageMaker トレーニング インスタンスを設定したら、選択します。 トレーニング. モデルがトレーニングされた後、選択してトレーニング済みのモデルをデプロイできます。 配備します. エンドポイントが「サービス中」の段階になると、推論リクエストに応答する準備が整います。

推論までの時間を短縮するために、JumpStart には、新しく作成されたエンドポイントで推論を実行する方法を示すサンプル ノートブックが用意されています。 Studio でノートブックにアクセスするには、 ノートブックを開く セクションに StudioのEndpointを使用する モデル エンドポイント ページのセクション。

JumpStart は、安定した拡散モデルを微調整し、微調整されたモデルを展開するために使用できるシンプルなノートブックも提供します。 これを使用して、犬の楽しい画像を生成できます。 ノートブックにアクセスするには、JumpStart 検索バーで「犬の楽しい画像を生成する」を検索します。 ノートブックを実行するには、わずか 3 つのトレーニング画像を使用して、ローカルのスタジオ フォルダーにアップロードできます。 画像が 20 つ以上ある場合は、それらもアップロードできます。 ノートブックはトレーニング画像を SXNUMX にアップロードし、データセットでモデルをトレーニングして、結果のモデルをデプロイします。 トレーニングが完了するまでに XNUMX 分かかる場合があります。 ステップ数を変更して、トレーニングをスピードアップできます。 Notebook には、デプロイされたモデルで試すためのサンプル プロンプトがいくつか用意されていますが、好きなプロンプトを試すことができます。 ノートブックを調整して、自分やペットのアバターを作成することもできます。 たとえば、犬の代わりに、最初のステップで猫の画像をアップロードしてから、プロンプトを犬から猫に変更すると、モデルが猫の画像を生成します。

微調整に関する考慮事項

Stable Diffusion モデルのトレーニングは、すぐにオーバーフィットする傾向があります。 高品質の画像を取得するには、トレーニング ステップ数や学習率などの利用可能なトレーニング ハイパーパラメーターの間で適切なバランスを見つける必要があります。 このセクションでは、いくつかの実験結果を示し、これらのパラメーターの設定方法に関するガイダンスを提供します。

提言

次の推奨事項を検討してください。

  • 高品質のトレーニング画像 (4 ~ 20) から始めます。 人間の顔でトレーニングする場合は、より多くの画像が必要になる場合があります。
  • 犬や猫、その他の人間以外の対象でトレーニングする場合は、200 ~ 400 歩のトレーニングを行います。 人間の顔でトレーニングする場合は、さらに多くの手順が必要になる場合があります。 オーバーフィッティングが発生した場合は、ステップ数を減らします。 フィッティングが不十分な場合 (微調整されたモデルが対象の被写体の画像を生成できない場合)、ステップ数を増やします。
  • 人間以外の顔でトレーニングする場合は、 with_prior_preservation = False パフォーマンスに大きな影響を与えないためです。 人間の顔では、設定する必要がある場合があります with_prior_preservation=True.
  • 設定する場合 with_prior_preservation=True、ml.g5.2xlarge インスタンス タイプを使用します。
  • 複数の被験者を順番にトレーニングする場合、被験者が非常に似ている場合 (たとえば、すべての犬)、モデルは最後の被験者を保持し、前の被験者を忘れます。 被験者が異なる場合 (たとえば、最初に猫、次に犬)、モデルは両方の被験者を保持します。
  • 低い学習率を使用し、結果が満足できるものになるまで段階的にステップ数を増やすことをお勧めします。

トレーニングデータセット

微調整されたモデルの品質は、トレーニング画像の品質に直接影響されます。 したがって、良い結果を得るには、高品質の画像を収集する必要があります。 ぼやけた画像や低解像度の画像は、微調整されたモデルの品質に影響します。 次の追加パラメータに注意してください。

  • トレーニング画像の数 – わずか 4 つのトレーニング イメージでモデルを微調整できます。 最小 16 枚の画像から最大 XNUMX 枚の画像のサイズのトレーニング データセットを実験しました。 どちらの場合も、微調整により、モデルを対象に適合させることができました。
  • データセット形式 – .png、.jpg、および .jpeg 形式の画像で微調整アルゴリズムをテストしました。 他の形式も機能する場合があります。
  • 画像解像度 – トレーニング画像は任意の解像度で構いません。 微調整アルゴリズムは、微調整を開始する前にすべてのトレーニング画像のサイズを変更します。 そうは言っても、トレーニング画像のトリミングとサイズ変更をより細かく制御したい場合は、画像をモデルの基本解像度 (この例では 512×512 ピクセル) に合わせてサイズ変更することをお勧めします。

実験設定

この投稿の実験では、特に指定がない限り、ハイパーパラメーターのデフォルト値を微調整しながら使用します。 さらに、XNUMX つのデータセットのいずれかを使用します。

  • 犬1-8 – 犬 1 と 8 つの画像
  • 犬1-16 – 犬 1 と 16 つの画像
  • 犬2-4 – 犬 2 と XNUMX つの画像
  • 猫 - 8 – 8枚の画像を持つ猫

煩雑さを軽減するために、データセット名とともに各セクションにデータセットの代表的な画像を XNUMX つだけ表示します。 セクションで完全なトレーニング セットを見つけることができます。 実験データセット このポストで。

オーバーフィット

Stable Diffusion モデルは、いくつかの画像を微調整するときにオーバーフィットする傾向があります。 したがって、次のようなパラメータを選択する必要があります。 epochs, max_epochs、および学習率を慎重に検討します。 このセクションでは、Dog1-16 データセットを使用しました。

モデルのパフォーマンスを評価するために、微調整されたモデルを XNUMX つのタスクで評価します。

  • 微調整されたモデルは、訓練されたのと同じ設定で被験者 (ドップラー犬) の画像を生成できますか?
    • 観察 – はい、できます。 トレーニング ステップの数に応じてモデルのパフォーマンスが向上することは注目に値します。
  • 微調整されたモデルは、トレーニングされたものとは異なる設定で被写体の画像を生成できますか? たとえば、ビーチでのドップラー画像を生成できますか?
    • 観察 – はい、できます。 モデルのパフォーマンスは、特定のポイントまでのトレーニング ステップの数に応じて向上することに注意してください。 ただし、モデルのトレーニングが長すぎると、モデルがオーバーフィットする傾向があるため、モデルのパフォーマンスが低下します。
  • 微調整されたモデルは、トレーニング対象が属するクラスの画像を生成できますか? たとえば、一般的な犬の画像を生成できますか?
    • 観察 – トレーニング ステップの数を増やすと、モデルがオーバーフィットし始めます。 その結果、犬の一般的なクラスは忘れられ、対象に関連する画像のみが生成されます。
  • 微調整されたモデルは、トレーニング データセットにないクラスまたは科目の画像を生成できますか? たとえば、猫の画像を生成できますか?
    • 観察 – トレーニング ステップの数を増やすと、モデルがオーバーフィットし始めます。 その結果、指定されたクラスに関係なく、対象に関連する画像のみが生成されます。

異なるステップ数でモデルを微調整します (設定により) max_steps ハイパーパラメータ)、微調整されたモデルごとに、次の XNUMX つのプロンプトのそれぞれで画像を生成します (次の例では左から右に示されています)。

  • 「ドップラー犬の写真」
  • 「ビーチにいるドップラー犬の写真」
  • 「犬の写真」
  • 「猫の写真」

次の画像は、50 ステップでトレーニングされたモデルからのものです。

次のモデルは、100 ステップでトレーニングされました。

次のモデルを 200 ステップでトレーニングしました。

次の画像は、400 ステップでトレーニングされたモデルからのものです。

最後に、以下の画像は 800 ステップの結果です。

複数のデータセットでトレーニングする

微調整中に、複数の主題を微調整し、微調整されたモデルですべての主題の画像を生成できるようにすることができます。 残念ながら、JumpStart は現在、XNUMX つのテーマのトレーニングに限定されています。 複数のサブジェクトで同時にモデルを微調整することはできません。 さらに、さまざまな被験者のモデルを順次微調整すると、被験者が類似している場合、モデルは最初の被験者を忘れてしまいます。

このセクションでは、次の実験を検討します。

  1. 被験者 A のモデルを微調整します。
  2. サブジェクト B のステップ 1 で得られたモデルを微調整します。
  3. ステップ 2 の出力モデルを使用して、被験者 A と被験者 B の画像を生成します。

次の実験では、次のことがわかります。

  • A が犬 1 で B が犬 2 の場合、ステップ 3 で生成されたすべての画像は犬 2 に似ています
  • A が犬 2 で B が犬 1 の場合、ステップ 3 で生成されたすべての画像は犬 1 に似ています
  • A が犬 1 で B が猫の場合、犬のプロンプトで生成された画像は犬 1 に似ており、猫のプロンプトで生成された画像は猫に似ています。

犬 1 を訓練してから犬 2 を訓練する

ステップ 1 では、犬 200 の 1 つの画像で 2 ステップのモデルを微調整します。ステップ 200 では、犬 2 の XNUMX つの画像でモデルをさらに XNUMX ステップで微調整します。

以下は、さまざまなプロンプトに対してステップ 2 の最後に微調整されたモデルによって生成された画像です。

犬 2 を訓練してから犬 1 を訓練する

ステップ 1 では、犬 200 の 2 つの画像で 2 ステップのモデルを微調整します。ステップ 200 では、犬 1 の XNUMX つの画像でモデルをさらに XNUMX ステップで微調整します。

以下は、ステップ 2 の最後に微調整されたモデルによってさまざまなプロンプトで生成された画像です。

犬や猫の訓練

ステップ 1 では、猫の 200 つの画像で 200 ステップのモデルを微調整します。 次に、犬 1 の XNUMX つの画像で XNUMX ステップのモデルをさらに微調整します。

以下は、ステップ 2 の最後に微調整されたモデルによって生成された画像です。猫関連のプロンプトを含む画像は、微調整のステップ 1 の猫のように見え、犬関連のプロンプトを含む画像は、微調整の第2段階。

事前保存

事前保存は、トレーニングしようとしている同じクラスの追加の画像を使用する手法です。 たとえば、トレーニング データが特定の犬の画像で構成されている場合、事前に保存して、一般的な犬のクラス画像を組み込みます。 特定の犬のトレーニング中に、さまざまな犬の画像を表示することで、過剰適合を回避しようとします。 インスタンス プロンプトに存在する特定の犬を示すタグが、クラス プロンプトにありません。 たとえば、インスタンス プロンプトは「リオバガー 猫の写真」であり、クラス プロンプトは「猫の写真」である場合があります。 ハイパーパラメータを設定することで事前保存を有効にすることができます with_prior_preservation = True. 設定する場合 with_prior_preservation = True、含める必要があります class_prompt in dataset_info.json また、利用可能なクラスの画像が含まれる場合があります。 以下は設定時のトレーニングデータセットのフォーマットです with_prior_preservation = True:

  • 入力 – インスタンス イメージを含むディレクトリ dataset_info.json および (オプション) ディレクトリ class_data_dir。 次の点に注意してください。
    • 画像は .png、.jpg、.jpeg 形式の場合があります。
    •   dataset_info.json ファイルは次の形式である必要があります {'instance_prompt':<<instance_prompt>>,'class_prompt':<<class_prompt>>}.
    •   class_data_dir ディレクトリにはクラス イメージが必要です。 もしも class_data_dir が存在しないか、すでに存在する十分な画像がありません class_data_dir、追加の画像はでサンプリングされます class_prompt.

猫や犬などのデータセットの場合、事前保存は微調整されたモデルのパフォーマンスに大きな影響を与えないため、回避できます。 ただし、顔でトレーニングする場合は、これが必要です。 詳細については、次を参照してください。 ディフューザーを使用した Dreambooth での安定拡散のトレーニング.

インスタンスタイプ

Stable Diffusion モデルの微調整には、GPU 対応インスタンスによって提供される高速化された計算が必要です。 ml.g4dn.2xlarge (16 GB CUDA メモリ、1 GPU) および ml.g5.2xlarge (24 GB CUDA メモリ、1 GPU) インスタンスで微調整を実験します。 クラス イメージを生成するときは、メモリ要件が高くなります。 したがって、設定する場合 with_prior_preservation=True、ml.g5.2dn.4xlarge インスタンスでトレーニングが CUDA のメモリ不足の問題に遭遇するため、ml.g2xlarge インスタンス タイプを使用します。 JumpStart 微調整スクリプトは現在、単一の GPU を使用しているため、マルチ GPU インスタンスで微調整してもパフォーマンスは向上しません。 さまざまなインスタンス タイプの詳細については、次を参照してください。 AmazonEC2インスタンスタイプ.

制限とバイアス

Stable Diffusion は画像の生成において優れたパフォーマンスを発揮しますが、いくつかの制限や偏りがあります。 これらには以下が含まれますが、これらに限定されません。

  • トレーニング データにこれらの機能を備えた十分な画像が含まれていないため、モデルは正確な顔や手足を生成しない場合があります
  • モデルは、 LAION-5B データセット、成人向けコンテンツが含まれており、さらに考慮しないと製品の使用に適さない可能性があります
  • モデルは英語のテキストでトレーニングされているため、モデルは英語以外の言語ではうまく機能しない可能性があります
  • モデルは画像内に適切なテキストを生成できません

制限とバイアスの詳細については、次を参照してください。 安定拡散 v2-1 ベース モデル カード. 事前トレーニング済みモデルのこれらの制限は、微調整済みモデルにも引き継がれます。

クリーンアップ

ノートブックの実行が完了したら、プロセスで作成されたすべてのリソースを必ず削除して、請求が停止されるようにしてください。 エンドポイントをクリーンアップするコードは、関連する JumpStart の紹介 – テキストから画像へ ノートブックの例。

JumpStart で微調整されたモデルを公開

によってリリースされた Stable Diffusion モデルにもかかわらず、 安定性AI 印象的なパフォーマンスを持っていますが、トレーニングされた言語またはドメインに関して制限があります。 たとえば、Stable Diffusion モデルは英語のテキストでトレーニングされましたが、英語以外のテキストから画像を生成する必要がある場合があります。 または、Stable Diffusion モデルはフォトリアリスティックな画像を生成するようにトレーニングされましたが、アニメーションまたは芸術的な画像を生成する必要がある場合があります。

JumpStart は、さまざまな言語とテーマで公開されている 80 以上のモデルを提供します。 これらのモデルは、多くの場合、StabilityAI によってリリースされた Stable Diffusion モデルから微調整されたバージョンです。 ユース ケースが微調整されたモデルのいずれかと一致する場合は、独自のデータセットを収集して微調整する必要はありません。 Studio UI または使いやすい JumpStart API を使用して、これらのモデルの XNUMX つを簡単にデプロイできます。 JumpStart で事前トレーニング済みの Stable Diffusion モデルをデプロイするには、次を参照してください。 Amazon SageMaker JumpStart で安定した拡散モデルを使用してテキストから画像を生成する.

以下は、JumpStart で使用可能なさまざまなモデルによって生成されたイメージの例の一部です。

これらのモデルは、JumpStart スクリプトまたは DreamBooth スクリプトを使用して微調整されていないことに注意してください。 公開されている微調整されたモデルの完全なリストとサンプル プロンプトをダウンロードできます。 こちら.

これらのモデルから生成された画像の例については、セクションを参照してください オープンソースの微調整モデル 付録の。

まとめ

この投稿では、テキストから画像への Stable Diffusion モデルを微調整し、JumpStart を使用して展開する方法を示しました。 さらに、モデルを微調整する際に考慮する必要があるいくつかの考慮事項と、それが微調整されたモデルのパフォーマンスに与える影響について説明しました。 また、JumpStart で利用できる、すぐに使用できる微調整済みの 80 を超えるモデルについても説明しました。 この投稿ではコード スニペットを示しました。このデモのすべてのステップを含む完全なコードについては、 JumpStart の紹介 – テキストから画像へ 例のノート。 ご自身で解決策を試し、ご意見をお寄せください。

モデルと DreamBooth の微調整について詳しくは、次のリソースを参照してください。

JumpStart の詳細については、次のブログ投稿をご覧ください。


著者について

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

ヘイコ・ホッツ 自然言語処理 (NLP)、大規模言語モデル (LLM)、および生成 AI に特に重点を置いた、AI および機械学習のシニア ソリューション アーキテクトです。 この役職に就く前は、Amazon の EU カスタマー サービスのデータ サイエンス責任者でした。 Heiko は、お客様が AWS で AI/ML ジャーニーを成功させるのを支援し、保険、金融サービス、メディアとエンターテイメント、ヘルスケア、公益事業、製造など、多くの業界の組織と協力してきました。 余暇には、平子はできるだけ旅行に出かけます。


付録: 実験データセット

このセクションには、この投稿の実験で使用されたデータセットが含まれています。

犬1-8

犬1-16

犬2-4

犬3-8

付録: オープンソースの微調整モデル

以下は、JumpStart で使用可能なさまざまなモデルによって生成されたイメージの例の一部です。 各画像にはキャプションが付いています model_id プレフィックスで始まる huggingface-txt2img- 次の行でイメージを生成するために使用されるプロンプトが続きます。

タイムスタンプ:

より多くの AWS機械学習