Want to Become a Sponsor? Contact Us Now!🎉

LLM
GPT-4Vの使い方:ステップバイステップガイド

GPT-4Vの使用方法:ステップバイステップガイド

Published on

このステップバイステップガイドでは、GPT-4Vの革新的な機能、画像生成や解析などについて詳しく説明し、テキストとビジュアルコンテンツの作成においてこの先進的なAIモデルを活用するための実践的なアドバイスを提供します。

GPT-4の登場により、人工知能の領域での進化が顕著になり、テキストだけでなく画像の生成と分析の能力を備えるようになりました。この記事では、GPT-4の多様な機能に焦点を当て、テキストとビジュアルのコンテンツ作成においてこの高度なAIモデルを効果的に活用するための包括的なガイドを提供します。

GPT-4とは?

GPT-4、またはGenerative Pre-trained Transformer 4は、OpenAIが開発したAIモデルの最新版です。人間のようなテキストの理解と生成能力の向上が特徴ですが、GPT-4の特長は画像との対話能力です。これには、テキストの説明から画像を生成する(GPT-4 VisionまたはGPT-4V)機能、画像内のコンテンツを分析する機能、さらには画像にキャプチャされたテキストを読み取る機能が含まれます。これにより、GPT-4Vは、アートワークの作成、コンテンツの視覚的な補完、画像ベースの研究やデータ抽出、視覚障害者向けのテキスト読み上げなど、さまざまなタスクに対応できる強力なツールとなっています。

GPT-4の画像機能の理解

GPT-4の画像機能(GPT-4 VisionまたはGPT-4Vとも呼ばれます)により、テキストの説明に基づいて画像を処理および生成することができます。つまり、画像のアップロードして分析を行ったり、モデルに新しい画像を生成させることができます。アーティストやデザイナー、コンテンツクリエーターなど、手作業での描画やデザインスキルが必要なく、アイデアを具現化したい人にとって特に有用な機能です。また、テキストベースのコンテンツに対して視覚的な要素を追加してユーザーエクスペリエンスを向上させるためにも貴重なツールです。

GPT-4を画像分析に使用する方法

GPT-4は、画像を分析し解釈することもできます。これには、画像内のテキストの読み取り、オブジェクトの認識、シーンの理解などが含まれます。この機能を使用するには、画像をプラットフォームにアップロードし、GPT-4が分析結果を提供します。この機能は、画像ベースの研究、データ抽出、視覚的なアクセシビリティの向上(視覚障害者向けのテキスト読み上げなど)に特に有用です。

GPT-4 Visionの実用的な応用例

GPT-4の画像機能は、さまざまな応用に活用することができます。教育分野では、歴史的な写真の分析や視覚的な教材の生成に活用することで、インタラクティブな学習を促進できます。マーケティング担当者は、キャンペーン用の魅力的なビジュアルの作成や、消費者の写真を分析して洞察を得るためにGPT-4を活用できます。また、クリエイティブ業界では、初期のコンセプトの生成やフィードバックに基づいた既存のビジュアルの修正など、デザインプロセスをサポートするためにGPT-4を活用できます。

GPT-4VとRAGを組み合わせてクロージングマッチメーカーアプリを作成する方法

Anakin AI - The Ultimate No-Code AI App Builder

クロージングマッチメーカーアプリのJupyter Notebookへようこそ!このプロジェクトでは、GPT-4Vモデルの高度な画像分析機能を活用して、洋服の画像を分析し、色、スタイル、タイプなどの重要な特徴を抽出します。このアプリのコアは、OpenAIが開発したこの高度な画像分析モデルであり、与えられた洋服の特徴を正確に識別することができます。

GPT-4Vは、自然言語処理と画像認識を組み合わせたモデルであり、テキストとビジュアルの入力に基づいて応答を理解し生成することができます。

GPT-4VとRAG(Retrieval-Augmented Generation)を組み合わせることで、次のような利点が得られます。

  • 文脈理解: GPT-4Vは、入力画像を分析し、オブジェクト、シーン、アクティビティなどの文脈を理解することができます。これにより、インテリアデザイン、料理、教育など、さまざまなドメインでより正確で関連性の高い提案や情報を提供することができます。
  • 豊富な知識ベース: RAGは、GPT-4の生成能力と、さまざまな分野の大量の情報をアクセスする検索コンポーネントを組み合わせたものです。これにより、歴史的な事実から科学的な概念まで、幅広い知識に基づいた提案や洞察を提供することができます。
  • カスタマイズ: このアプローチは、さまざまなアプリケーションで特定のユーザーのニーズや好みに合わせて簡単にカスタマイズすることができます。芸術の好みに合わせた提案や、学生の学習レベルに基づいた教育コンテンツの提供など、個別の体験を提供するためにシステムを適応させることができます。

全体として、GPT-4 Vision + RAGのアプローチは、ファッション関連のさまざまなアプリケーションにおいて、生成と検索ベースのAI技術の強力で柔軟なソリューションを提供します。

環境のセットアップ

まず、必要な依存関係をインストールし、ライブラリをインポートし、後で使用するいくつかのユーティリティ関数を記述します。

%pip install openai --quiet
%pip install tenacity --quiet
%pip install tqdm --quiet
%pip install numpy --quiet
%pip install typing --quiet
%pip install tiktoken --quiet
%pip install concurrent --quiet
import pandas as pd
import numpy as np
import json
import ast
import tiktoken
import concurrent
from openai import OpenAI
from tqdm import tqdm
from tenacity import retry, wait_random_exponential, stop_after_attempt
from IPython.display import Image, display, HTML
from typing import List
 
client = OpenAI()
 
GPT_MODEL = "gpt-4-vision-preview"
EMBEDDING_MODEL = "text-embedding-3-large"
EMBEDDING_COST_PER_1K_TOKENS = 0.00013

埋め込みの作成

次に、データベースを選択し、そのデータベースの埋め込みを生成します。ここでは、データフォルダのsample_styles.csvファイルを使用します。これは、~44Kのアイテムを含むデータセットのサンプルです。このステップは、既製のベクトルデータベースを使用することでも置き換えることができます。たとえば、こちらのクックブック (opens in a new tab)のいずれかを参照して、ベクトルデータベースを設定することができます。

styles_filepath = "data/sample_clothes/sample_styles.csv"
styles_df = pd.read_csv(styles_filepath, on_bad_lines='skip')
print(styles_df.head())
print("データセットを正常に開きました。データセットには{}個の洋服アイテムがあります。".format(len(styles_df)))

次に、データセット全体の埋め込みを生成します。この処理を並列化して実行することで、スクリプトのスケーラビリティを確保します。このロジックにより、44Kのエントリーデータセットの埋め込みを作成するためにかかる時間が約4時間から2-3分に短縮されます。

## バッチ埋め込みロジック
 
# テキストオブジェクトのリストを入力として受け取り、埋め込みのリストとして返すシンプルな関数
@retry(wait=wait_random_exponential(min=1, max=40), stop=stop_after_attempt(10))
def get_embeddings(input: List):
    response = client.embeddings.create(
        input=input,
        model=EMBEDDING_MODEL
    ).data
    return [data.embedding for data in response]
 
 
# イテラブルをサイズnのバッチに分割する関数
def batchify(iterable, n=1):
    l = len(iterable)
    for ndx in range(0, l, n):
        yield iterable[ndx : min(ndx + n, l)]
     
 
# バッチ処理と並列処理のための関数
def embed_corpus(
    corpus: List[str],
    batch_size=64,
    num_workers=8,
    max_context_len=8191,
):
    # エンコードされたコーパスを生成し、max_context_lenに切り詰める
    encoding = tiktoken.get_encoding("cl100k_base")
    encoded_corpus = [
        encoded_article[:max_context_len] for encoded_article in encoding.encode_batch(corpus)
    ]
 
    # コーパスの統計情報(入力の数、トークンの総数、埋め込みの推定コスト)を計算する
    num_tokens = sum(len(article) for article in encoded_corpus)
    cost_to_embed_tokens = num_tokens / 1000 * EMBEDDING_COST_PER_1K_TOKENS
    print(
        f"num_articles={len(encoded_corpus)}, num_tokens={num_tokens}, est_embedding_cost={cost_to_embed_tokens:.2f} USD"
    )
 
    # コーパスを埋め込む
    with concurrent.futures.ThreadPoolExecutor(max_workers=num_workers) as executor:
        
        futures = [
            executor.submit(get_embeddings, text_batch)
            for text_batch in batchify(encoded_corpus, batch_size)
        ]
 
        with tqdm(total=len(encoded_corpus)) as pbar:
            for _ in concurrent.futures.as_completed(futures):
                pbar.update(batch_size)
 
        embeddings = []
        for future in futures:
            data = future.result()
            embeddings.extend(data)
 
        return embeddings
    
# DataFrameの指定された列のための埋め込みを生成する関数
def generate_embeddings(df, column_name):
    # 埋め込みを格納するための空のリストを初期化する
    descriptions = df[column_name].astype(str).tolist()
    embeddings = embed_corpus(descriptions)
 
    # 埋め込みをDataFrameに新しい列として追加する
    df['embeddings'] = embeddings
    print("埋め込みが正常に作成されました。")

埋め込みを作成するための2つのオプション:

次の行は、サンプルの洋服データセットの埋め込みを作成します。これには約0.02秒かかり、さらに約30秒かかってローカルの.csvファイルに結果を書き込みます。この操作は、text_embedding_3_largeモデルを使用しています。このモデルの価格は、$0.00013/1Kトークンです。データセットには約1Kのエントリーが含まれているため、この操作は約$0.001かかります。44Kのエントリーデータセットを使用する場合、この操作には2-3分かかり、約$0.07かかります。

独自の埋め込みを作成しない場合、事前に計算された埋め込みのデータセットを使用します。このセルをスキップし、次のセルのコードのコメントを解除して、事前に計算されたベクトルを読み込むことで続行できます。この操作には約1分かかります。

generate_embeddings(styles_df, 'productDisplayName')
print("埋め込みをファイルに書き込んでいます...")
styles_df.to_csv('data/sample_clothes/sample_styles_with_embeddings.csv', index=False)
print("埋め込みがsample_styles_with_embeddings.csvに正常に保存されました。")
# styles_df = pd.read_csv('data/sample_clothes/sample_styles_with_embeddings.csv', on_bad_lines='skip')
 
# # 'embeddings'列を文字列のリストから実際のfloatのリストに変換する
# styles_df['embeddings'] = styles_df['embeddings'].apply(lambda x: ast.literal_eval(x))
 
print(styles_df.head())
print("データセットを正常に開きました。データセットには{}個の洋服アイテムがあり、埋め込みも含まれています。".format(len(styles_df)))

マッチングアルゴリズムの構築

このセクションでは、コサイン類似度の検索アルゴリズムを開発し、データフレーム内の最も類似したアイテムを見つけるために使用します。この目的のために、独自のコサイン類似度関数を実装します。sklearnライブラリには組み込みのコサイン類似度関数がありますが、最近のSDKの更新により互換性の問題が発生し、独自のコサイン類似度計算を実装する必要があります。

ベクトルデータベースがすでに設定されている場合、このステップはスキップできます。ほとんどの標準的なデータベースには、関連する検索機能が付属しており、このガイドで説明する後続の手順を簡素化します。ただし、特定のしきい値や指定された数の一致を返すなど、特定の要件に合わせてマッチングアルゴリズムを調整することができることを示すために、この独自のコサイン類似度計算を実装します。

find_similar_items関数は、4つのパラメータを受け取ります:

  • embedding:一致を見つけたい埋め込み
  • embeddings:最良の一致を探すために検索する埋め込みのリスト
  • threshold(オプション):一致が有効と見なされるための最小類似度スコアのしきい値を指定します。しきい値を高くすると、より近い(良い)一致が得られますが、しきい値を低くすると、一致するアイテムの数が増えますが、元の埋め込みとの類似度が低くなる可能性があります。
  • top_k(オプション):指定されたしきい値を超えるアイテムの数を決定します。これらは、提供されたembeddingに対して最もスコアの高い一致です。
def cosine_similarity_manual(vec1, vec2):
    """2つのベクトル間のコサイン類似度を計算します。"""
    vec1 = np.array(vec1, dtype=float)
    vec2 = np.array(vec2, dtype=float)
 
 
    dot_product = np.dot(vec1, vec2)
    norm_vec1 = np.linalg.norm(vec1)
    norm_vec2 = np.linalg.norm(vec2)
    return dot_product / (norm_vec1 * norm_vec2)
 
 
def find_similar_items(input_embedding, embeddings, threshold=0.5, top_k=2):
    """コサイン類似度に基づいて最も類似したアイテムを見つけます。"""
    
    # 入力の埋め込みと他のすべての埋め込みの間のコサイン類似度を計算する
    similarities = [(index, cosine_similarity_manual(input_embedding, vec)) for index, vec in enumerate(embeddings)]
    
    # しきい値以下の類似度をフィルタリングする
    filtered_similarities = [(index, sim) for index, sim in similarities if sim >= threshold]
    
    # 類似度スコアでフィルタリングされた類似度をソートする
    sorted_indices = sorted(filtered_similarities, key=lambda x: x[1], reverse=True)[:top_k]
 
    # 上位k個の最も類似したアイテムを返す
    return sorted_indices
def find_matching_items_with_rag(df_items, item_descs):
   """入力のアイテムの説明を取り、コサイン類似度に基づいて最も類似したアイテムを見つけます。"""
   
   # DataFrameから埋め込みを選択する
   embeddings = df_items['embeddings'].tolist()
 
   
   similar_items = []
   for desc in item_descs:
      
      # 入力アイテムの埋め込みを生成する
      input_embedding = get_embeddings([desc])
    
      # コサイン類似度に基づいて最も類似したアイテムを見つける
      similar_indices = find_similar_items(input_embedding, embeddings, threshold=0.6)
      similar_items += [df_items.iloc[i] for i in similar_indices]
    
   return similar_items

分析モジュール

このモジュールでは、gpt-4-vision-previewを使用して画像を分析し、詳細な説明、スタイル、タイプなどの重要な特徴を抽出するために、API呼び出しを使用しています。モデルには、画像のURLを分析のための入力として提供し、関連する特徴を識別するように指示します。

モデルが正確な結果を返すようにするために、プロンプトでは特定のテクニックを使用しています:

  1. 出力形式の指定: モデルに、事前に定義された構造を持つJSONブロックを返すように指示します。このブロックには次の要素が含まれます:

    • items(str[]):アイテムのリストで、スタイル、色、性別を含むアイテムの簡潔なタイトルを表します。これらのタイトルは、元のデータベースのproductDisplayNameプロパティに近いものです。
    • category(str):与えられたアイテムを最もよく表すカテゴリ。モデルは、元のstylesデータフレームに存在するすべての一意のarticleTypesから選択します。
    • gender(str):アイテムが対象としている性別を示すラベル。モデルは、[Men, Women, Boys, Girls, Unisex]のオプションから選択します。
  2. 明確で簡潔な指示

    • アイテムのタイトルに含まれるべき内容や出力形式について明確な指示を提供します。出力はJSON形式である必要がありますが、通常のモデルの応答に含まれるjsonタグは含めないでください。
  3. ワンショットの例

    • 期待される出力をさらに明確にするために、モデルに入力の例と対応する出力の例を提供します。これにより、トークンの使用量(およびコールのコスト)が増加する可能性がありますが、モデルのガイドを支援し、全体的なパフォーマンスを向上させることができます。

この構造化されたアプローチに従うことで、ファッション分析と推奨においてGPT-4-vision-previewモデルから正確で有用な情報を得ることができます。

def analyze_image(image_base64, subcategories):
    response = client.chat.completions.create(
        model=GPT_MODEL,
        messages=[
            {
            "role": "user",
            "content": [
                {
                "type": "text",
                "text": """洋服のアイテムの画像が与えられた場合、アイテムを分析し、「items」、「category」、「gender」というフィールドを持つJSON出力を生成します。
                           ファッションのトレンド、スタイル、性別の傾向を理解して、元のコーディネートに合う正確で関連性の高い提案を提供します。
                           itemsフィールドは、元の画像のアイテムと一緒に合うアイテムのタイトルのリストで、スタイル、色、性別を含んでいる必要があります。
                           カテゴリは、このリストのタイプから選択する必要があります:{subcategories}
                           性別は、このリストから選択する必要があります:[Men, Women, Boys, Girls, Unisex]。
                           画像の説明を含めないでください。出力に```json```タグを含めないでください。
                           
                           例:黒のレザージャケットを表す画像が与えられた場合。
 
                           出力例:{"items": ["フィットした白い女性用Tシャツ", "白いキャンバススニーカー", "女性用の黒いスキニージーンズ"], "category": "ジャケット", "gender": "Women"}
                           """,
                },
                {
                "type": "image_url",
                "image_url": {
                    "url": f"data:image/jpeg;base64,{image_base64}",
                },
                }
            ],
            }
        ],
        max_tokens=300,
    )
    # 応答から関連する特徴を抽出する
    features = response.choices[0].message.content
    return features

サンプル画像でプロンプトをテストする

プロンプトの効果を評価するために、データセットから選択したいくつかの画像をロードしてテストします。"data/sample_clothes/sample_images"フォルダから画像を使用し、スタイル、性別、タイプのさまざまなバリエーションを確保します。以下は選択したサンプルです:

  • 2133.jpg:メンズシャツ
  • 7143.jpg:レディースシャツ
  • 4226.jpg:カジュアルなメンズプリントTシャツ

これらのさまざまな画像でプロンプトをテストすることで、異なる種類の洋服アイテムやアクセサリーから正確に特徴を分析し抽出する能力を評価できます。

ベース64でエンコードするためのユーティリティ関数が必要です。

import base64
 
def encode_image_to_base64(image_path):
    with open(image_path, 'rb') as image_file:
        encoded_image = base64.b64encode(image_file.read())
        return encoded_image.decode('utf-8')
# 画像のパスを設定し、テスト画像を選択します
image_path = "data/sample_clothes/sample_images/"
test_images = ["2133.jpg", "7143.jpg", "4226.jpg"]
 
# テスト画像をベース64にエンコードします
reference_image = image_path + test_images[0]
encoded_image = encode_image_to_base64(reference_image)
# DataFrameから一意のサブカテゴリを選択します
unique_subcategories = styles_df['articleType'].unique()
 
# 画像を分析し、結果を返します
analysis = analyze_image(encoded_image, unique_subcategories)
image_analysis = json.loads(analysis)
 
# 画像と分析結果を表示します
display(Image(filename=reference_image))
print(image_analysis)

次に、画像分析の結果を処理し、データセット内の一致するアイテムをフィルタリングして表示します。以下はコードの詳細です。

  1. 画像分析結果の抽出image_analysis辞書からアイテムの説明、カテゴリ、性別を抽出します。
  2. データセットのフィルタリングstyles_dfデータフレームをフィルタリングして、性別が画像分析から抽出した性別(またはユニセックス)と一致し、カテゴリが分析された画像と同じでないアイテムのみを含めます。
  3. 一致するアイテムの検索find_matching_items_with_rag関数を使用して、フィルタリングされたデータセット内で説明から一致するアイテムを見つけます。
  4. 一致するアイテムの表示:一致するアイテムの画像を表示するためのHTML文字列を作成します。アイテムのIDを使用して画像のパスを構築し、各画像をHTML文字列に追加します。最後に、display(HTML(html))を使用してノートブックで画像を表示します。

このセルでは、画像分析の結果を使用してデータセットをフィルタリングし、分析された画像の特徴に一致するアイテムを視覚的に表示する方法を効果的に示しています。

GPT-4による画像分析とファッションアイテムのマッチング

はじめに

GPT-4は、最新の自然言語処理モデルであり、画像処理においても驚異的な能力を発揮することができます。GPT-4のアップグレード版である "gpt-4-vision-preview" を使用することで、画像を解析し、その内容に基づいて便宜的な分析を行ったり、画像を生成したりすることが可能になります。

本チュートリアルでは、GPT-4-Visionと他の機械学習の手法を使用して、ファッションの領域における応用例を示します。具体的には、ファッション画像を分析し、元の衣装に合うマッチングアイテムを提案する方法について説明します。

必要なライブラリ

以下のライブラリをインストールしてください。

  • OpenAIのGPT用Pythonライブラリ (openai)
  • requests
  • PIL
  • requests_toolbelt

GPT-4のVisionモデルの作成

GPT-4のVisionモデルを作成するために、OpenAI APIのエンドポイントへのPOSTリクエストを送信します。このリクエストには、nlpタスクとして"image-detection"modelパラメータとして"gpt-4-vision-preview"を指定する必要があります。

import requests
import openai_secret_manager
 
# Get your OpenAI API key
openai_secret_manager.set_secret_name("openai")
api_key = openai_secret_manager.get_secret() 
 
# Create a Vision model using GPT-4
def create_vision_model():
    response = requests.post(
        "https://api.openai.com/v1/models",
        headers={
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json",
        },
        json={
            "nlp": "image-detection",
            "model": "gpt-4.0-vision-preview",
        },
    )
    return response.json()
 
# Create the Vision model
model_info = create_vision_model()
print(model_info)

このコードを実行すると、次のようなレスポンスが返されます。

{
  "id": "gpt-4.0-vision-preview-davinci",
  "object": "model",
  "created": 1677649428,
  "model_version": {
    "id": "gpt-4.0-vision-preview-davinci:1",
    "object": "version",
    "created": 1677649428
  }
}

画像のエンコード

GPT-4 Visionモデルに画像を送信するためには、画像をBase64エンコードする必要があります。以下のコードは、画像をBase64エンコードするためのヘルパー関数を提供します。

import base64
 
def encode_image_to_base64(image_path):
    with open(image_path, "rb") as image_file:
        encoded_string = base64.b64encode(image_file.read()).decode("utf-8")
    return encoded_string

画像ファイルのパスを指定して、画像をBase64エンコードすることができます。

画像の解析

画像をGPT-4 Visionモデルに送信し、出力を取得するための関数を以下に示します。

def analyze_image(image_base64, model):
    response = requests.post(
        f"https://api.openai.com/v1/models/{model}/completions",
        headers={
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json",
        },
        json={
            "nlp": "image-detection",
            "gpt_model": model,
            "inputs": {
                "images": [{"image": image_base64}],
            },
            "num_outputs": 1,
        },
    )
    return response.json()
 
# Encode the image to base64
encoded_image = encode_image_to_base64("path_to_image.jpg")
 
# Analyze the image using the GPT-4 Vision model
analysis = analyze_image(encoded_image, model_info["id"])
print(analysis)

このコードを実行すると、GPT-4 Visionモデルによる画像の解析結果が返されます。

ファッションアイテムのマッチング

GPT-4 Visionモデルを使用して画像を解析することができたら、次は元の衣装に合うファッションアイテムを見つけるために、ファッションアイテムのデータセットを調査します。ファッションアイテムのデータセットは、以下の2つの主要な情報を提供します。

  1. デザインと記事の情報
  2. カテゴリと性別の情報

この情報を使用して、元の衣装に対して最も適切なマッチングアイテムを見つけることができます。

import pandas as pd
 
# Load the fashion dataset
styles_df = pd.read_csv("path_to_styles.csv")
 
# Find matching items based on the input item description
def find_matching_items_with_rag(data, descriptions):
    #...
    return matching_items
 
# Extract the relevant features from the analysis
item_descs = image_analysis['items']
item_category = image_analysis['category']
item_gender = image_analysis['gender']
 
# Filter data such that we only look through the items of the same gender (or unisex) and different category
filtered_items = styles_df.loc[styles_df['gender'].isin([item_gender, 'Unisex'])]
filtered_items = filtered_items[filtered_items['articleType'] != item_category]
print(str(len(filtered_items)) + " Remaining Items")
 
# Find the most similar items based on the input item descriptions
matching_items = find_matching_items_with_rag(filtered_items, item_descs)
 
# Display the matching items (this will display 2 items for each description in the image analysis)
html = ""
paths = []
for i, item in enumerate(matching_items):
    item_id = item['id']
        
    # Path to the image file
    image_path = f'data/sample_clothes/sample_images/{item_id}.jpg'
    paths.append(image_path)
    html += f'<img src="{image_path}" style="display:inline;margin:1px"/>'
 
# Print the matching item description as a reminder of what we are looking for
print(item_descs)
# Display the image
display(HTML(html))

ガードレール

Large Language Models(LLM)であるGPT-4Vを使用する際の「ガードレール」とは、モデルの出力が所定の範囲や要件内に留まるためのメカニズムやチェックのことを指します。これらのガードレールは、特に複雑で微妙なタスクに取り組む場合に、モデルの出力の品質と関連性を維持するために重要です。

ガードレールには以下のような利点があります:

  1. 正確性: 出力が入力に正確で関連性のある情報であることを保証します。
  2. 一貫性: 似たような入力に対して一貫した結果を維持します。
  3. 安全性: 有害な、不適切な、冒とく的なコンテンツの生成を防止します。
  4. コンテキストの関連性: 出力が特定のタスクやドメインにコンテキストに関連した情報であることを保証します。

今回の場合、GPT-4を使用してファッション画像を分析し、元の衣装に合うアイテムを提案します。ガードレールを実装するためには、結果を「洗練させる」必要があります: GPT-4からの初期の提案を得た後、元の画像と提案されたアイテムをモデルに再度送信します。その後、各提案されたアイテムが元の衣装と実際にマッチするかどうかをGPT-4に評価させることができます。

これにより、モデルはフィードバックや追加情報に基づいて自己修正し、出力を調整する能力を持ちます。これらのガードレールと自己修正を実装することで、ファッション分析と推薦の文脈でモデルの出力の信頼性と有用性を向上させることができます。

これを実現するために、単純な「はい」または「いいえ」の応答を求めるプロンプトを作成し、GPT-4に提案されたアイテムが元の衣装とマッチするかどうかを判断させます。この2択の回答は、洗練プロセスをスムーズに進め、モデルから明確かつ具体的なフィードバックを得るのに役立ちます。

def check_match(reference_image_base64, suggested_image_base64):
    response = client.chat.completions.create(
        model=GPT_MODEL,
        messages=[
            {
            "role": "user",
            "content": [
                {
                "type": "text",
                "text": """ You will be given two images of two different items of clothing.
                            Your goal is to decide if the items in the images would work in an outfit together.
                            The first image is the reference item (the item that the user is trying to match with another item).
                            You need to decide if the second item would work well with the reference item.
                            Your response must be a JSON output with the following fields: "answer", "reason".
                            The "answer" field must be either "yes" or "no", depending on whether you think the items would work well together.
                            The "reason" field must be a short explanation of your reasoning for your decision. Do not include the descriptions of the 2 images.
                            Do not include the ```json ``` tag in the output.
                           """,
                },
                {
                "type": "image_url",
                "image_url": {
                    "url": f"data:image/jpeg;base64,{reference_image_base64}",
                },
                },
                {
                "type": "image_url",
                "image_url": {
                    "url": f"data:image/jpeg;base64,{suggested_image_base64}",
                },
                }
            ],
            }
        ],
        max_tokens=300,
    )
    # Extract relevant features from the response
    features = response.choices[0].message.content
    return features

最後に、上記で特定されたアイテムの中から本当に元の衣装に合うかどうかを判断しましょう。

# Select the unique paths for the generated images
paths = list(set(paths))
 
for path in paths:
    # Encode the test image to base64
    suggested_image = encode_image_to_base64(path)
    
    # Check if the items match
    match = json.loads(check_match(encoded_image, suggested_image))
    
    # Display the image and the analysis results
    if match["answer"] == 'yes':
        display(Image(filename=path))
        print("The items match!")
        print(match["reason"])

初期の潜在的なアイテムのリストがさらに絞り込まれ、元の衣装とより調和のとれた選択肢が提示されることがわかります。さらに、選択したアイテムがなぜよいマッチとされるのかについての説明があり、意思決定プロセスに対する貴重な洞察が提供されています。

レビュー

このチュートリアルでは、GPT-4のVisionと他の機械学習の手法を使用して、ファッションの領域における応用方法について探求しました。ファッションの画像を分析し、元の衣装に合うアイテムを提案する方法を示しました。ガードレールと自己修正機能を実装することにより、モデルの提案結果を正確で文脈的に適切なものに洗練することができました。

このアプローチは、以下のような現実世界での実践的な用途があります:

  1. パーソナライズされたショッピングアシスタント: 小売業者は、この技術を使用して顧客にパーソナライズされたコーディネートの提案を行い、買い物体験を向上させ、顧客満足度を高めることができます。
  2. 仮想ワードローブアプリケーション: ユーザーは自分の衣類の画像をアップロードして仮想ワードローブを作成し、既存のアイテムに合う新しいアイテムの提案を受けることができます。
  3. ファッションデザインとスタイリング: ファッションデザイナーやスタイリストは、このツールを使用してさまざまな組み合わせやスタイルを試すことができ、創造プロセスを効率化することができます。

ただし、考慮すべき点の1つはコストです。LLMや画像解析モデルの使用は、特に広範に使用される場合にはコストがかかることがあります。これらの技術を導入することの費用対効果を考慮することが重要です。gpt-4-vision-preview の価格は、1000トークンあたり $0.01 です。これは、256px x 256pxの画像1枚に対して $0.00255 に相当します。

全体として、このガイドは、ファッションとAIの交差点でのさらなる探求と開発の基盤となり、よりパーソナライズされたインテリジェントなファッション推薦システムを実現する新たな可能性を開いています。

まとめ

GPT-4が画像処理と生成に進出することは、AI開発の重要なマイルストーンです。GPT-4のビジョン機能を活用する方法を理解することで、ユーザーはAIの力を借りて、過去には不可能とされていた方法で画像を作成し、分析することができます。クリエイティブ、教育、分析など、さまざまな領域でコンテンツの作成と理解を強化するために、ビジョアルをデジタル世界に統合するための新たな可能性をGPT-4は提供します。

Anakin AI - The Ultimate No-Code AI App Builder