# Uso de OpenCLIP en Hugging Face

[OpenCLIP](https://github.com/mlfoundations/open_clip) es una implementación de código abierto de CLIP de OpenAI.

## Explorando OpenCLIP en el Hub

Puedes encontrar modelos de OpenCLIP filtrando a la izquierda de la [página de modelos](https://huggingface.co/models?library=open_clip&sort=trending).

Los modelos OpenCLIP alojados en el Hub tienen una tarjeta de modelo con información útil sobre los modelos. Gracias a la integración de OpenCLIP con Hugging Face Hub, puedes cargar modelos OpenCLIP con unas pocas líneas de código. También puedes desplegar estos modelos usando [Inference Endpoints](https://huggingface.co/inference-endpoints).

## Instalación

Para comenzar, puedes seguir la [guía de instalación de OpenCLIP](https://github.com/mlfoundations/open_clip#usage). También puedes usar la siguiente instalación de una línea a través de pip:

```
$ pip install open_clip_torch
```

## Uso de modelos existentes

Todos los modelos de OpenCLIP se pueden cargar fácilmente desde el Hub:

```py
import open_clip

model, preprocess = open_clip.create_model_from_pretrained('hf-hub:laion/CLIP-ViT-g-14-laion2B-s12B-b42K')
tokenizer = open_clip.get_tokenizer('hf-hub:laion/CLIP-ViT-g-14-laion2B-s12B-b42K')
```

Una vez cargado, puedes codificar la imagen y el texto para realizar [clasificación de imágenes sin ejemplos](https://huggingface.co/tasks/zero-shot-image-classification):

```py
import torch
from PIL import Image
import requests

url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)
image = preprocess(image).unsqueeze(0)
text = tokenizer(["a diagram", "a dog", "a cat"])

with torch.no_grad(), torch.cuda.amp.autocast():
    image_features = model.encode_image(image)
    text_features = model.encode_text(text)
    image_features /= image_features.norm(dim=-1, keepdim=True)
    text_features /= text_features.norm(dim=-1, keepdim=True)

    text_probs = (100.0 * image_features @ text_features.T).softmax(dim=-1)

print("Label probs:", text_probs) 
```

Devuelve la probabilidad de cada clase posible:

```text
Label probs: tensor([[0.0020, 0.0034, 0.9946]])
```

Si deseas cargar un modelo específico de OpenCLIP, puedes hacer clic en `Use in OpenCLIP` en la tarjeta del modelo y ¡se te proporcionará un fragmento de código funcional!

## Recursos adicionales

* Repositorio de OpenCLIP [repository](https://github.com/mlfoundations/open_clip)
* OpenCLIP [docs](https://github.com/mlfoundations/open_clip/tree/main/docs)
* Modelos de OpenCLIP [en el Hub](https://huggingface.co/models?library=open_clip&sort=trending)

