> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/models/ja/supported-models/clip.md).

# CLIP

OpenAIの [CLIP](https://github.com/openai/CLIP) 画像とテキストの埋め込みを生成し、それらのゼロショット類似度比較を行うためのモデルを、当社の [Serverless Cloud API](https://docs.roboflow.com/deployment/roboflow-cloud/serverless-api)。3つのエンドポイントを公開しています:

* `/clip/embed_image`、画像の埋め込みベクトルを返します
* `/clip/embed_text`、文字列または文字列のリストの埋め込みベクトルを返します
* `/clip/compare`、対象とプロンプトのリストの間の類似度スコアを返します

埋め込みはキャッシュして、分類、検索、クラスタリング、セマンティック検索などのタスクに再利用できます。より広い使用方法の詳細については、 [推論ドキュメント](https://docs.roboflow.com/deployment/self-hosted/self-hosted).

## CLIP API

以下は、画像をテキストラベルの一覧と比較するコードサンプルです。HTTPエンドポイントを直接呼び出すには `curl`、または次を使用します: [`inference-sdk`](https://docs.roboflow.com/reference/inference/inference-sdk) ラッパーを使用します。

{% tabs %}
{% tab title="HTTP（curl）" icon="webhook" %}
{% stepper %}
{% step %}

### APIキーを取得する

Roboflow アカウントを作成し、 [Roboflow API 設定ページ](https://app.roboflow.com/settings/api) でキーを見つけ、シェルで利用できるようにします。

```bash
export ROBOFLOW_API_KEY="your-key-here"
```

{% endstep %}

{% step %}

### モデルを実行する

次を呼び出します `/clip/compare` エンドポイントを `curl`:

```bash
curl --location 'https://serverless.roboflow.com/clip/compare' \\
  --header 'Content-Type: application/json' \\
  --header "Authorization: Bearer $ROBOFLOW_API_KEY" \\
  --data '{
    "subject": {"type": "url", "value": "https://media.roboflow.com/notebooks/examples/dog.jpeg"},
    "subject_type": "image",
    "prompt": ["a photo of a dog", "a photo of a cat", "a photo of a car"],
    "prompt_type": "text"
  }'
```

{% endstep %}
{% endstepper %}
{% endtab %}

{% tab title="SDK（Python）" icon="python" %}
{% stepper %}
{% step %}

### APIキーを取得する

Roboflow アカウントを作成し、 [Roboflow API 設定ページ](https://app.roboflow.com/settings/api) でキーを見つけ、シェルで利用できるようにします。

```bash
export ROBOFLOW_API_KEY="your-key-here"
```

{% endstep %}

{% step %}

### 依存関係をインストールする

このパッケージは次のモデルを呼び出します:

```bash
pip install -U inference-sdk supervision
```

{% endstep %}

{% step %}

### モデルを実行する

比較を実行する（画像は [こちら](https://media.roboflow.com/notebooks/examples/dog.jpeg)):

```python
import os
import supervision as sv
from inference_sdk import InferenceHTTPClient, InferenceConfiguration

image = sv.load_image_from_url("https://media.roboflow.com/notebooks/examples/dog.jpeg")

client = InferenceHTTPClient(
    api_url="https://serverless.roboflow.com",
    api_key=os.environ["ROBOFLOW_API_KEY"],
).configure(InferenceConfiguration(api_key_transport="header"))

result = client.clip_compare(
    subject=image,
    prompt=[
        "a photo of a dog",
        "a photo of a cat",
        "a photo of a car",
    ],
    subject_type="image",
    prompt_type="text",
)

# similarity は、プロンプトごとに1つずつのコサイン類似度スコアのリストです
print(result["similarity"])
```

上記のコードは、推論結果をターミナルに出力します:

```
[0.2726989686489105, 0.19865083694458008, 0.20997387170791626]
```

{% endstep %}
{% endstepper %}
{% endtab %}
{% endtabs %}

## CLIPの推論速度

次で測定したレイテンシー [Roboflow Inference](https://docs.roboflow.com/deployment/self-hosted/self-hosted) 1台のNVIDIA L4、バッチサイズ1、ウォームアップ後の平均で測定。

<table data-search="false"><thead><tr><th>モデル</th><th>レイテンシー（ms）</th></tr></thead><tbody><tr><td><code>clip</code></td><td>3.9</td></tr></tbody></table>

以下で測定: `embed_image` 上の `ViT-B-16` チェックポイント（画像埋め込みのみ）。

{% hint style="info" %}
設定する `api_url` をデプロイ先に合わせます:

* `https://serverless.roboflow.com` サーバーレスクラウドAPI用。
* `http://localhost:9001` ローカルの [Inference](https://docs.roboflow.com/deployment/self-hosted/self-hosted) サーバー用。
* あなたの [Dedicated Deployment](https://docs.roboflow.com/deployment/roboflow-cloud/dedicated-deployments) プライベートエンドポイント用のURL。
  {% endhint %}

## self-hosted InferenceでCLIPを実行する

CLIPは、以下を使えば自前のハードウェア上だけでも完全に実行できます: [`inference`](https://docs.roboflow.com/deployment/self-hosted/self-hosted) Pythonパッケージです。重みをプロセス内で読み込むことで、呼び出しごとのネットワーク往復を回避でき、検索、クラスタリング、データセットのクレンジングのために大量の画像セットを埋め込む場合に重要です。

{% stepper %}
{% step %}

### パッケージをインストールする

```bash
pip install "inference[clip]"
```

{% endstep %}

{% step %}

### ローカルで埋め込みと比較を行う

この `Clip` クラスは `embed_image`, `embed_text`、 `compare`。このサンプルでは、画像とプロンプトを埋め込み、そのコサイン類似度をスコアリングします:

```python
from inference.models import Clip
from inference.core.utils.postprocess import cosine_similarity

clip = Clip(model_id="clip/ViT-B-16")

image_embedding = clip.embed_image("https://media.roboflow.com/inference/people-walking.jpg")
text_embedding = clip.embed_text("a crowd of people walking")

print(cosine_similarity(image_embedding[0], text_embedding[0]))
```

結果は0から1の間です。数値が高いほど、画像とテキストの類似度が高くなります。
{% endstep %}
{% endstepper %}

### 利用可能なチェックポイント

`model_id` CLIPのバックボーンを選択します:

`clip/RN50`, `clip/RN101`, `clip/RN50x4`, `clip/RN50x16`, `clip/RN50x64`, `clip/ViT-B-32`, `clip/ViT-B-16`, `clip/ViT-L-14`, `clip/ViT-L-14-336px`.

SDKのメソッド `clip_compare`, `get_clip_image_embeddings`、 `get_clip_text_embeddings` 引数を受け取ります `clip_version` サーバーを呼び出す際に同じチェックポイントを選択するための引数です。

## 参考資料

* [CLIPとは？](https://blog.roboflow.com/openai-clip/)
* [CLIPとFaissで画像検索エンジンを構築する](https://blog.roboflow.com/clip-image-search-faiss/)
* [CLIPで動画を分析・分類する](https://blog.roboflow.com/how-to-analyze-and-classify-video-with-clip/)
