「Amazon SageMakerを使用して、マルチモダリティモデルを用いた画像からテキストへの生成型AIアプリケーションを構築する」
「Amazon SageMakerを活用して、画像からテキストへ変換するためのマルチモダリティモデルを使用したAIアプリケーションを作成する」
デジタル時代に進むにつれて、マルチモダリティモデルの開発は、機械の理解を向上させるために重要な役割を果たしてきました。これらのモデルは、テキストや画像などのさまざまなデータ形式を処理および生成します。これらのモデルの主な特徴は、画像からテキストへの変換能力であり、画像キャプションや視覚的な質問に対する回答などのタスクで非常に優れた能力を示しています。
画像をテキストに変換することで、視覚データに含まれる情報の豊富さを引き出し、利用することができます。たとえば、電子商取引では、画像に基づいて製品のカテゴリ分類を自動化することができ、検索の効率と正確性を向上させることができます。同様に、製品のタイトルや説明に含まれていない情報を提供する自動的な写真の説明の生成にも役立ち、ユーザーエクスペリエンスを向上させることができます。
この記事では、人気のあるマルチモダリティモデルの概要を紹介します。また、これらの事前学習済みモデルをAmazon SageMakerで展開する方法についても説明します。さらに、電子商取引におけるゼロショットのタグや属性生成、および画像からの自動プロンプト生成など、実際のシナリオに焦点を当てたさまざまなアプリケーションについても詳しく取り上げます。
マルチモダリティモデルの背景
機械学習(ML)モデルは、自然言語処理(NLP)やコンピュータビジョンなどの分野で顕著な進展を遂げており、モデルは単一のデータソースからのコンテンツの分析や生成において人間のようなパフォーマンスを発揮することができます。最近では、さまざまなモダリティでのコンテンツの処理と生成が可能なマルチモダリティモデルの開発に注目が集まっています。ビジョンと言語のネットワークの融合など、これらのモデルは、さまざまな情報源やモダリティから情報を統合する能力により、それらの理解力と表現能力を向上させることができるため、注目を集めています。
- 「大規模言語モデルの品質をどのように向上させることができるのか? PIT:暗黙の自己改善フレームワークに会ってください」
- Mistral AIは、Mistral 7Bをオープンソース化します:多くのユースケースに適応可能な小型だけどパワフルな言語モデル
- 「Amazon SageMakerでのMLOpsによる堅牢な時系列予測」
このセクションでは、2つの人気のあるマルチモダリティモデルであるCLIP(Contrastive Language-Image Pre-training)とBLIP(Bootstrapping Language-Image Pre-training)の概要を紹介します。
CLIPモデル
CLIPは、画像とテキストの類似性やゼロショットの画像分類に使用できるマルチモーダルなビジョンと言語のモデルです。CLIPは、インターネット上のさまざまな公開ソースから収集された4億組の画像とテキストのデータセットでトレーニングされています。モデルのアーキテクチャは、次の図に示すように、画像エンコーダとテキストエンコーダで構成されています。
トレーニング中に、画像と対応するテキストの断片はエンコーダを通じて渡され、画像特徴ベクトルとテキスト特徴ベクトルが取得されます。目標は、一致するペアの画像とテキストの特徴が高いコサイン類似性を持つようにし、不一致のペアの特徴が類似性が低くなるようにすることです。これはコントラスティブ損失を使用して行われます。このコントラスティブプレトレーニングにより、画像とテキストが意味的に整列された共通の埋め込み空間にマッピングされるエンコーダが得られます。
エンコーダは、ダウンストリームのタスクのためのゼロショット転移学習に使用することができます。推論時に、画像とテキストの事前トレーニングエンコーダは、それぞれの入力を処理し、高次元のベクトル表現または埋め込みに変換します。画像とテキストの埋め込みは、コサイン類似性などによって比較され、類似性が最も高い(たとえば、距離が最も小さい)画像埋め込みに対応するテキストプロンプト(画像クラス、カテゴリ、またはタグ)が最も関連があると見なされ、それに応じて画像が分類されます。
BLIPモデル
もう1つの人気のあるマルチモダリティモデルはBLIPです。BLIPは、多様なビジョン・ランゲージのタスクに適応できるユニークなモデルアーキテクチャを導入し、ノイズのあるウェブデータから学習するためのユニークなデータセットブートストラップ手法を使用しています。BLIPアーキテクチャには、画像エンコーダとテキストエンコーダが含まれています。画像に基づくテキストエンコーダは、テキストエンコーダのトランスフォーマーブロックに視覚情報を注入し、画像に基づくテキストデコーダは、視覚情報をトランスフォーマーデコーダブロックに組み込みます。このアーキテクチャにより、BLIPは、画像ベースの検索やコンテンツ生成から対話的なビジュアルダイアログシステムまで、視覚的および言語的情報の融合を必要とするさまざまなビジョン・ランゲージのタスクで優れたパフォーマンスを発揮します。以前の記事では、コンピュータビジョンのユニモーダルMLアプローチを使用した多くの課題を解決したBLIPモデルに基づくコンテンツモデレーションソリューションを提案しました。
ユースケース1:イコールショットタグまたは属性の生成 – 電子商取引プラットフォーム用
電子商取引プラットフォームは、アイデア、商品、サービスが溢れるダイナミックなマーケットとして機能します。数百万もの商品がリストされているため、効果的なソートや分類は大きな課題となります。ここで、自動タグ付けと属性生成の力が発揮されます。MLやNLPなどの高度なテクノロジーを活用することで、これらの自動化プロセスは電子商取引プラットフォームの運営を革新することができます。
自動タグ付けや属性生成の主な利点の1つは、検索性の向上です。正確にタグ付けされた商品は、顧客が迅速かつ効率的に見つけることができます。たとえば、顧客が「ロゴ入りのコットンクルーネックTシャツ」を検索している場合、自動タグ付けや属性生成により、検索エンジンは単に「Tシャツ」のより広範なカテゴリーだけでなく、「コットン」と「クルーネック」という特定の属性に一致する商品を特定することができます。このような正確な一致は、より個人に合わせたショッピング体験を提供し、顧客満足度を向上させることができます。さらに、自動生成されたタグや属性は、製品の推奨アルゴリズムを大幅に向上させることができます。製品属性を深く理解することで、システムは顧客により関連性の高い製品を提案することができ、購入の可能性を高め、顧客満足度を向上させることができます。
CLIPは、タグや属性の自動生成プロセスの自動化に向けた有望な解決策を提供しています。製品画像と説明またはタグのリストを入力として受け取り、各タグに対してベクトル表現または埋め込みを生成します。これらの埋め込みは、意味的な関係を反映した高次元空間に存在し、相対的な距離と方向が入力間の意味的な関連性を示します。CLIPは、これらの意味のある埋め込みをカプセル化するために、大規模な画像テキストペアの事前トレーニングを行います。タグや属性が画像を正確に説明する場合、それらの埋め込みはこの空間内で比較的近くに存在するはずです。対応するタグや属性を生成するためには、潜在的なタグのリストをCLIPモデルのテキスト部分に入力し、生成された埋め込みを保存します。理想的には、このリストはすべての潜在的なカテゴリーや製品に関連する属性を網羅しており、電子商取引プラットフォーム上の製品に関連するものです。以下の図はいくつかの例を示しています。
CLIPモデルをSageMakerで展開するには、以下のGitHubリポジトリのノートブックに従うことができます。SageMakerプリビルトの大規模モデルインファレンス(LMI)コンテナを使用してモデルを展開します。LMIコンテナはDJL Servingを使用してモデルを推論用に提供します。SageMakerで大規模モデルをホストする方法の詳細については、DJLServingとDeepSpeedモデルパラレル推論を使用してAmazon SageMakerに大規模モデルを展開するとFasterTransformerを使用してAmazon SageMakerで高パフォーマンスな大規模モデルを展開するを参照してください。
この例では、モデルアーティファクトを準備し、それらをターボールファイルに保存するために、serving.properties
、model.py
、およびrequirements.txt
というファイルが提供されます。
serving.properties
は、DJL Servingが使用するモデル並列化と推論最適化ライブラリを指定するために使用できる設定ファイルです。必要に応じて適切な設定を行うことができます。設定オプションや詳細なリストについては、設定を参照してください。model.py
は、サービングリクエストを処理するスクリプトです。requirements.txt
は、追加のpipホイールを含むテキストファイルです。
Hugging Faceからモデルを直接ダウンロードする場合は、serving.properties
ファイルでoption.model_id
パラメータをモデルリポジトリ内の事前トレーニングされたモデルのモデルIDに設定します。huggingface.co。コンテナは、このモデルIDを使用してデプロイ時に対応するモデルをダウンロードします。また、model_id
をAmazon Simple Storage Service(Amazon S3)のURLに設定すると、DJLはAmazon S3からモデルアーティファクトをダウンロードし、model_id
をモデルアーティファクトの実際の場所に交換します。スクリプトでは、この値を指して事前トレーニングされたモデルをロードすることができます。この例では、デプロイ時のモデルの読み込み速度を大幅に向上させるためにLMIコンテナがs5cmdを使用してAmazon S3からデータをダウンロードするため、後者のオプションを使用しています。以下のコードを参照してください:
# ノートブックが実行されている地域に基づいて、適切なモデルの場所を `serving.properties` ファイルに挿入します。
template = jinja_env.from_string(Path("clip/serving.properties").open().read())
Path("clip/serving.properties").open("w").write(
template.render(s3url=pretrained_model_location)
)
!pygmentize clip/serving.properties | cat -n
model.pyスクリプトでは、プロパティファイルで指定されたモデルIDを使用してモデルパスをロードします:
def load_clip_model(self, properties):
if self.config.caption_model is None:
model_path = properties["model_id"]
... ...
print(f'model path: {model_path}')
model = CLIPModel.from_pretrained(model_path, cache_dir="/tmp",)
self.caption_processor = CLIPProcessor.from_pretrained(model_path)
モデルアーティファクトが準備され、Amazon S3にアップロードされた後、数行のコードでSageMakerホスティングにCLIPモデルをデプロイできます:
from sagemaker.model import Model
model = Model(
image_uri=inference_image_uri,
model_data=s3_code_artifact,
role=role,
name=model_name,
)
model.deploy(
initial_instance_count=1,
instance_type="ml.g5.2xlarge",
endpoint_name=endpoint_name
)
エンドポイントがサービスである場合、入力画像とラベルのリストを入力プロンプトとしてエンドポイントを呼び出して、ラベルの確率を生成できます:
def encode_image(img_file):
with open(img_file, "rb") as image_file:
img_str = base64.b64encode(image_file.read())
base64_string = img_str.decode("latin1")
return base64_string
def run_inference(endpoint_name, inputs):
response = smr_client.invoke_endpoint(
EndpointName=endpoint_name, Body=json.dumps(inputs)
)
return response["Body"].read().decode('utf-8')
base64_string = encode_image(test_image)
inputs = {"image": base64_string, "prompt": ["猫の写真", "犬の写真"]}
output = run_inference(endpoint_name, inputs)
print(json.loads(output)[0])
ユースケース2:画像からの自動プロンプト生成
マルチモダリティモデルを使用した革新的なアプリケーションの1つは、画像から情報豊かなプロンプトを生成することです。生成型AIでは、プロンプトは言語モデルや他の生成モデルに提供される入力であり、どのようなタイプのコンテンツや応答が求められるかを指示するために使用されます。プロンプトは基本的にはモデルの生成プロセスをガイドする出発点または指示のセットです。文、質問、部分テキスト、またはモデルにコンテキストや望ましい出力を伝える任意の入力形式にすることができます。適切に作成されたプロンプトは、高品質な画像を精度と関連性を持って生成するために重要です。プロンプトエンジニアリングは、言語モデルから望ましい応答を達成するためにテキスト入力を最適化または作成するプロセスです。このプロセスでは、使い方、フォーマット、またはコンテキストの調整がしばしば含まれます。プロンプトエンジニアリングは、ビジュアルコンセプトを正確に定義することが課題となります。単語でビジュアルコンセプトを説明することは、正確さに欠けたり曖昧さがあることがあり、正確な画像を伝えるのが困難になることがあります。詳細な情景や複雑なシーンをテキストプロンプトでキャプチャすることは簡単ではありません。具体的なスタイルの指定方法も課題です。ムード、カラーパレット、芸術的なスタイルなどの具体的なスタイルの好みをテキストだけで伝えることは難しい場合があります。抽象的な美的コンセプトをモデルに具体的な指示に変換することは難しいことがあります。モデルを過負荷にすることなく、複雑さのバランスをとることも重要です。複雑なプロンプトはモデルを混乱させたり、情報を過負荷にする可能性があり、生成される出力に影響を与えることがあります。適切なガイダンスを提供し、圧倒的な複雑さを避ける適切なバランスを見つけることが重要です。したがって、画像生成のための効果的なプロンプトの作成は時間がかかり、反復的な実験と改善が必要であり、高度な人間の専門知識に大いに依存するリソース集約型のタスクです。
CLIPインターロゲーターは、与えられた画像に合わせてテキストプロンプトを最適化するために、CLIPとBLIPを組み合わせた自動プロンプトエンジニアリングツールです。CLIPインターロゲーターで作成されたプロンプトは、画像の基本的な要素だけでなく、芸術的なスタイル、画像の背後にある潜在的なインスピレーション、画像が使用された可能性のあるVoAGIなど、包括的な説明を提供します。CLIPインターロゲーターのソリューションをSageMakerで簡単に展開することができ、完全管理されたサービスが提供するスケーラビリティ、コスト効率、堅牢なセキュリティを活用することができます。以下の図は、このソリューションのフローロジックを示しています。
SageMaker上でCLIPインターロゲーターソリューションを展開するために、次のノートブックを使用することができます。同様に、CLIPモデルのホスティングには、SageMaker LMIコンテナを使用してSageMaker上でソリューションをホストします。この例では、SageMakerエンドポイントに展開されるモデルを指定するモデルアーティファクトと呼ばれる追加の入力ファイルを提供しました。キャプションモデル名とクリップモデル名をmodel_name.json
ファイルで指定することによって、異なるCLIPまたはBLIPモデルを選択できます。以下のコードで作成されたmodel_name.json
ファイルを使用して指定します:
model_names = { "caption_model_name":'blip2-2.7b', #@param ["blip-base", "blip-large", "git-large-coco"] "clip_model_name":'ViT-L-14/openai' #@param ["ViT-L-14/openai", "ViT-H-14/laion2b_s32b_b79k"]}with open("clipinterrogator/model_name.json",'w') as file: json.dump(model_names, file)
推論スクリプトmodel.py
には、ハンドル関数が含まれており、DJL Servingがこの関数を呼び出してリクエストを処理します。このエントリーポイントスクリプトを準備するために、clip_interrogator.pyファイルからコードを引用し、SageMakerホスティングでDJL Servingと連携するように修正しました。1つの更新点は、BLIPモデルの読み込みです。BLIPとCLIPモデルは、インターロゲーターオブジェクトの初期化時にload_caption_model()
およびload_clip_model()
関数を介してロードされます。BLIPモデルを読み込むために、まずHugging Faceからモデルアーティファクトをダウンロードし、Amazon S3にアップロードしました。このとき、model_id
のターゲット値としてプロパティファイルにAmazon S3の場所を指定しました。これは、BLIPモデルが15 GB以上の大きなファイルである場合、blip2-opt-2.7bモデルのような場合です。モデルをHugging Faceからダウンロードすると、エンドポイントの作成により時間がかかります。そのため、model_id
をBLIP2モデルのAmazon S3の場所に指定し、プロパティファイルで指定されたモデルパスからモデルをロードします。なお、デプロイ時には、モデルアーティファクトがDJL ServingによってAmazon S3の場所からダウンロードされたローカルコンテナパスにスワップされます。以下のコードを参照してください:
if "model_id" in properties and any(os.listdir(properties["model_id"])): model_path = properties["model_id"]... ... caption_model = Blip2ForConditionalGeneration.from_pretrained(model_path, torch_dtype=self.dtype)
CLIPモデルのサイズは大きくないため、open_clip
を使用してモデルを直接Hugging Faceからロードしています。これは、元のclip_interrogator
の実装と同じです:
self.clip_model, _, self.clip_preprocess = open_clip.create_model_and_transforms(clip_model_name, pretrained=clip_model_pretrained_name, precision='fp16' if config.device == 'cuda' else 'fp32', device=config.device, jit=False, cache_dir=config.clip_model_path)
CLIPインターロゲーターソリューションをSageMakerエンドポイントに展開し、入力画像でエンドポイントを呼び出して類似画像を生成するためのプロンプトを取得するために、類似のコードを使用しています。
次の画像を例に取ってみましょう。SageMaker上の展開済みCLIPインターロゲーターエンドポイントを使用すると、次のテキストの説明が生成されます:皿の上のクロワッサン、pexelsコンテスト優勝者、縦横比16:9、cgsocietywlop、8時間、金のヒビ、アーティストは明るい色を使用しており、朝のロフトの写真、特徴のあるオブジェクト、スタイライズされたボーダー、ペストリー、フランスの皇帝。
CLIPインターロゲーターソリューションをStable Diffusionおよびプロンプトエンジニアリングの技術と組み合わせることで、創造的な可能性の新たな次元が浮かび上がります。この統合により、画像のテキストによる説明だけでなく、元の画像の多様なバリエーションを操作および生成することができます。Stable Diffusionは生成された出力を反復的に洗練することによって制御された画像合成を保証し、戦略的なプロンプトエンジニアリングは望ましい結果への生成プロセスをガイドします。
ノートブックの2番目のパートでは、Stable Diffusionモデル(Stable Diffusion XL 1.0)を使用して画像を再スタイルするためのプロンプトエンジニアリングの手順について詳しく説明しています。このモデルはAWS マーケットプレイスで購読した後、SageMaker JumpStartからこのモデルを展開するためにStability AI SDKを使用します。これは、Stability AIが提供する画像生成のための新しくて優れたバージョンなので、元の入力画像に基づいて高品質な画像を取得することができます。さらに、前述の説明にプレフィックスを付け加え、既知のアーティストと彼の作品の1つを言及するプロンプトを追加すると、リスタイリングに驚くべき結果が得られます。次の画像は、以下のプロンプトを使用しています:このシーンはヴァン・ゴッホの『星月夜』のスタイルで、皿の上のクロワッサン、pexelsコンテスト優勝者、アスペクト比16:9、cgsocietywlop、8時間、金のヒビ、アーティストは明るい色を使用しており、朝のロフトの写真、特徴のあるオブジェクト、スタイライズされたボーダー、ペストリー、フランスの皇帝。
次の画像は、次のプロンプトを使用しています:このシーンは北斎の『神奈川沖浪裏』のスタイルで、皿の上のクロワッサン、pexelsコンテスト優勝者、縦横比16:9、cgsocietywlop、8時間、金のヒビ、アーティストは明るい色を使用しており、朝のロフトの写真、特徴のあるオブジェクト、スタイライズされたボーダー、ペストリー、フランスの皇帝。
結論
CLIPやBLIPなどのマルチモダリティモデルとその応用は、画像からテキストへの変換の風景を急速に変えています。視覚情報と意味情報の間のギャップを埋めることで、これらのモデルは、以前想像できなかった方法で視覚データの広大なポテンシャルを活用するためのツールを提供しています。
このポストでは、多様なモードのモデルの異なる応用例を紹介しました。これらの例は、自動タグ付けやカテゴリ分類によるECサイト内での検索の効率と正確性を高めることから、Stable Diffusionのようなテキストから画像を生成するモデルのプロンプト作成まで、さまざまなものです。これらの応用は、ユニークで魅力的なコンテンツを作成するための新しい可能性を開いています。SageMakerのさまざまな多様なモードのモデルを探索し、ビジネスにイノベーティブなソリューションを構築することをお勧めします。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- コンセプトグラフの紹介:3Dシーンのためのオープンボキャブラリーグラフ構造表現
- アクセンチュアは、AWS上でジェネレーティブAIサービスを使用して、ナレッジアシストソリューションを作成しました
- 「DEHBを使用したXGBoostとPythonを使った機械学習モデルの最適化:包括的なガイド」
- 「メタのCode Llamaコード生成モデルは、Amazon SageMaker JumpStartを介して利用可能になりました」
- エッジでの視覚品質検査のためのエンド・ツー・エンドMLOpsパイプラインの構築-パート2
- エッジでのビジュアル品質検査のためのエンドツーエンドのMLOpsパイプラインの構築-パート3
- カスタム分類モデルでの予測の品質を向上させるには、Amazon Comprehendを使用します