CLIP
CLIPは、画像とテキストの埋め込み(embeddings)を生成できる機械学習モデルです。これらの埋め込みは、ゼロショット分類、セマンティック画像検索など多くのユースケースで使用できます。Roboflow Inference Server上でCLIPを利用するためのルートは3つあります:
embed_image: 画像の埋め込みを計算するために使用されます
embed_text: テキストの埋め込みを計算するために使用されます
compare: テキストと画像の埋め込みを計算して比較するために使用されます
画像の埋め込み
画像を埋め込むことは、その画像の情報をより扱いやすいサイズに圧縮するようなものです。画像を埋め込むとき、数万ピクセルで構成される画像を入力として受け取り、それを埋め込みと呼ばれる数百個の数値に整形します。これらの埋め込みは人間の目にとって特に意味を持つわけではありませんが、他の埋め込みと比較すると非常に有用です。
CLIPとRoboflow Inference Serverを使って画像埋め込みを生成するには:
#リクエストペイロードを定義
infer_clip_payload = {
#画像はURLまたはbase64エンコードされた文字列として提供できます
"image": {
# "type" は "base64" にすることもできます
"type": "url",
# "value" は画像データのbase64エンコード文字列にすることもできます
"value": "https://images.freeimages.com/images/large-previews/36c/raccoons-in-the-wild-4-1624830.jpg",
},
}
# 推論サーバーのURLを定義 (localhost:9001, infer.roboflow.com など)
base_url = "https://infer.roboflow.com"
# Roboflow API Keyを定義
api_key = <YOUR API KEY HERE>
res = requests.post(
f"{base_url}/clip/embed_image?api_key={api_key}",
json=infer_clip_payload,
)
embeddings = res.json()['embeddings']
print(embeddings)[[-0.4853120744228363, ... ]]複数の画像を1つのリクエストで埋め込むことができます:
#リクエストペイロードを定義
infer_clip_payload = {
#画像はURLまたはbase64エンコードされた文字列として提供できます
"image": [
{
"type": "url",
"value": "https://images.freeimages.com/images/large-previews/36c/raccoons-in-the-wild-4-1624830.jpg",
},
{
"type": "url",
"value": "https://images.freeimages.com/images/large-previews/36c/raccoons-in-the-wild-4-1624830.jpg",
}
],
}
res = requests.post(
f"{base_url}/clip/embed_image?api_key={api_key}",
json=infer_clip_payload,
)テキストの埋め込み
CLIPは画像と同様にテキストの埋め込みを生成できます。
#リクエストペイロードを定義
infer_clip_payload = {
"text": "the quick brown fox jumped over the lazy dog",
}
res = requests.post(
f"{base_url}/clip/embed_text?api_key={api_key}",
json=infer_clip_payload,
)
embeddings = res.json()['embeddings']
print(embeddings)[[0.56842650744228363, ... ]]複数のテキストブロックを1つのリクエストにバッチ処理することができます:
#リクエストペイロードを定義
infer_clip_payload = {
"text": [
"the quick brown fox jumped over the lazy dog",
"how vexingly quick daft zebras jump"
]
}
res = requests.post(
f"{base_url}/clip/embed_text?api_key={api_key}",
json=infer_clip_payload,
)比較
CLIPの真の価値は埋め込みを比較することで実現されます。比較はコサイン類似度を用いて計算される、2つの埋め込み間の数学的距離です。この距離は類似度スコアと考えることができます。2つの埋め込みのコサイン類似度が1に近いほど、それらは類似しています。
compareを実行する際には、プロンプトと1つまたは複数のサブジェクトを定義します。テキストや画像の任意の組み合わせを比較できるため、プロンプトのタイプとサブジェクトのタイプも定義する必要があります。
#リクエストペイロードを定義
infer_clip_payload = {
"prompt": {
"type": "url",
"value": "https://images.freeimages.com/images/large-previews/36c/raccoons-in-the-wild-4-1624830.jpg",
},
"prompt_type": "image",
"subject": "A very cute raccoon",
"subject_type": "text",
}
res = requests.post(
f"{base_url}/clip/compare?api_key={api_key}",
json=infer_clip_payload,
)
similarity = res.json()['similarity']
print(similarity)[0.30969720949239016]複数のプロンプト(1つのリクエストで最大8つ)をリストとして渡すことができます:
infer_clip_payload = {
"subject": {
"type": "url",
"value": "https://i.imgur.com/Q6lDy8B.jpg",
},
"subject_type": "image",
"prompt": [
"A very cute raccoon",
"A large dog",
"A black cate",
],
"prompt_type": "text",
}[0.80559720949239016, 0.20329720949239016, 0.505559720949239016]Last updated
Was this helpful?