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

## 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 is a list of cosine similarity scores, one per prompt
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) 에서 NVIDIA L4 1개, 배치 크기 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) 서버용입니다.
* 귀하의 [전용 배포](https://docs.roboflow.com/deployment/roboflow-cloud/dedicated-deployments) 는 비공개 엔드포인트의 URL입니다.
  {% endhint %}

## 자가 호스팅 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/)
