Why Nostr? What is Njump?
2024-06-18 11:16:24

DevelopersIO RSS feed【非公式】 on Nostr: ...

【画像の回転などの変換処理が埋め込みベクトルに与える影響を確認してみた】
こんちには。 データアナリティクス事業本部 機械学習チームの中村(nokomoro3)です。 今回は小ネタですが、画像の反転や位置の違いが埋め込みベクトルにどの程度影響を与えるのか知りたかったので、本記事で試してみたいと思います。 使用する画像 ネコの画像をいらすとやから拝借しました。 こちらに対して、以下のような変換を加えてみます。 サイズ変更 回転 位置替え モノクロ化 そしてネコ以外の画像も比較のため、以下のイヌの画像も使ってみます。 これらの画像データを Titan Multimodal Embeddings で埋め込みベクトルに変換して、コサイン類似度を比較してみようと思います。 埋め込みモデルについて 使用する埋め込みモデルは以下を用います。 Amazon Titan Multimodal Embeddings G1 model - Amazon Bedrock こちらはテキストおよび画像ファイルを入力として扱い、デフォルトで1024次元の埋め込みベクトルを出力します。 今回はPython(Boto3)で埋め込みベクトルに変換します、以下のブログからコードをお借りしました。 [Amazon Bedrock] Amazon Titan Multimodal Embeddings G1モデル を使用して、「きのこの山」と「たけのこの里」の分類モデルを作成してみました | DevelopersIO 埋め込みベクトルを作成する関数は以下となります。 def get_embedding(bedrock, image_path: str, dimensions: int = 1024) -> List[float]: with open(image_path, "rb") as image: body = image.read() response = bedrock.invoke_model( body=json.dumps( { "inputImage": base64.b64encode(body).decode("utf8"), "embeddingConfig": {"outputEmbeddingLength": dimensions}, } ), modelId="amazon.titan-embed-image-v1", accept="application/json", contentType="application/json", ) response_body = json.loads(response.get("body").read()) return response_body.get("embedding") 作成した埋め込みベクトルを使って、コサイン類似度を計算し、画像間の類似性を確認してみたいと思います。 結果 まずは結果からお示しします。類似度が高い順に棒グラフにしてみました。 イヌとネコのコサイン類似度が一つ基準となり 0.710 程度となっています。 ですので今回の実験に限って言いますと、0.710 程の違いがでると違う画像になっているという風に認識しても良さそうです。 それよりも差が出たものとしては、白色ノイズが強めにかかっている場合は 0.677 程度になることもありました。 ネコ自体の数が増えているケースも類似度が 0.836 程度には下がり、 90°などの回転処理もそれに近いくらいの 0.850 までは類似度が下がっているようです。 またモノクロ化は意外と差異がなく 0.879 程度となっています。 この辺りは今後の処理の参考になりそうです。 また変換のカテゴリごとの値は以下の表をご確認ください。(グラフと同様の値ですが、カテゴリ分けしています) 類似度 ファイル名 1.000 ネコ.png 0.710 イヌ.png 0.869 ネコ_背景=緑.png […]
https://dev.classmethod.jp/articles/image-embedding-with-image-edit-2/
Author Public Key
npub16u6jx85wavk5n0kw5r46ma7dunupsp7acmtn3xys7keqvlsfjxpsar5q5c