> 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/ko/supported-models/clip.md).

# CLIP

우리는 OpenAI의 [CLIP](https://github.com/openai/CLIP) 이미지와 텍스트 임베딩을 생성하고, 둘 사이의 제로샷 유사도 비교를 수행하는 모델을, 우리의 [서버리스 호스티드 API](https://docs.roboflow.com/deployment/roboflow-cloud/serverless-api). 우리는 세 개의 엔드포인트를 제공합니다:

* `/clip/embed_image`, 이미지에 대한 임베딩 벡터를 반환합니다
* `/clip/embed_text`, 문자열 또는 문자열 목록에 대한 임베딩 벡터를 반환합니다
* `/clip/compare`, 주제와 프롬프트 목록 간의 유사도 점수를 반환합니다

임베딩은 분류, 검색, 클러스터링, 시맨틱 검색 같은 작업에 대해 캐시하고 재사용할 수 있습니다. 더 넓은 사용 방법에 대한 자세한 내용은 다음을 참조하세요: [추론 문서](https://docs.roboflow.com/deployment/self-hosted/self-hosted).

## 코드 샘플

아래는 이미지와 텍스트 라벨 목록을 비교하는 코드 예제입니다. 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' \
  --data '{
    "api_key": "'"$ROBOFLOW_API_KEY"'",
    "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

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"],
)

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 is a list of cosine similarity scores, one per prompt
print(result["similarity"])
```

위의 코드는 추론 결과를 터미널에 출력합니다:

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

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

## 추론 속도

다음을 사용해 측정한 지연 시간 [Roboflow Inference](https://docs.roboflow.com/deployment/self-hosted/self-hosted) 1x 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` Serverless Hosted API용입니다.
* `http://localhost:9001` 로컬 [Inference](https://docs.roboflow.com/deployment/self-hosted/self-hosted) 서버.
* 사용자 [전용 배포](https://docs.roboflow.com/deployment/roboflow-cloud/dedicated-deployments) 비공개 엔드포인트용 URL.
  {% endhint %}

## Inference(자가 호스팅)와 함께 사용

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/)
