CLIP

CLIP es un modelo de doble torre que puntúa una imagen frente a prompts de texto en lugar de un conjunto fijo de etiquetas. LibreYOLO lo soporta para clasificación zero-shot y embeddings de imagen y texto, sin ningún paso de entrenamiento.

Tareas
classify, embed
Tamaños
Instalación
pip install libreyolo
Nivel de compatibilidad
Nivel hermano, desde v. Una superficie de producto independiente con su propia factoría y su propio contrato.
Proyecto original
CLIP / OpenCLIP de OpenAI; LAION / ML Foundations, MIT. Artículo, fuente
Licencias
Código MIT, pesos MIT. Uso comercial

Instalación

CLIP necesita su propio extra, que instala los paquetes que usa su tokenizador BPE incluido para reproducir exactamente los mismos ids de token.

bash
pip install "libreyolo[clip]"

Predicción

Los pesos se descargan de Hugging Face en el primer uso y quedan cacheados localmente.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreCLIPb32-cls.pt")model.set_classes(["a forklift", "an empty aisle", "a spill"])result = model(SAMPLE_IMAGE, save=True) print(model.names[result.probs.top1], float(result.probs.top1conf))
CLI
# Sin una llamada a set_classes(), predict desde la CLI usa los 1.000# nombres de clase de ImageNet que el modelo carga por defecto.libreyolo predict model=LibreCLIPb32-cls.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Embeddings de imagen y texto
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreCLIPb32-cls.pt", task="embed")image_embed = model(SAMPLE_IMAGE).embeddings.datatext_embed = model.embed_text("a photo of a forklift") # Ambos están normalizados con L2, así que un simple producto escalar es la similitud coseno.similarity = (image_embed @ text_embed.T).item()

set_classes() es la primitiva que convierte esto en un clasificador de vocabulario abierto: inserta cada etiqueta en todas las plantillas de prompt, codifica y promedia los resultados, y cachea la matriz [K, D] resultante como cabeza del clasificador, de modo que no se recalcula en cada imagen. Vuelve a llamarla para cambiar las clases en cualquier momento. Si no la llamas, LibreCLIP se carga con los 1.000 nombres de clase de ImageNet-1k ya asignados.

Con task="embed", la predicción devuelve un vector de imagen normalizado con L2 por cada entrada en lugar de probabilidades de clase, y embed_text() devuelve filas de texto normalizadas en el mismo espacio vectorial, así que un simple producto escalar entre ambos es la similitud coseno. iou no tiene efecto en ninguna de las dos tareas; no hay paso de NMS. Consulta predicción para fuentes, streaming y manejo de resultados.

Validación

val() lee los nombres de las carpetas de clase del split train/ de un ImageFolder, llama a set_classes() con ellos y después mide la precisión zero-shot top-1 y top-5. La precisión depende de cómo se lean los nombres de clase como prompts, no de ninguna actualización de pesos, ya que no hay nada que entrenar. La validación solo cubre task="classify"; task="embed" no tiene validador de dataset.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreCLIPb32-cls.pt") # data es una raíz ImageFolder con un split train/; sus nombres de# carpeta se convierten en los prompts de clase zero-shot de esta ejecución.metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])
CLI
libreyolo val model=LibreCLIPb32-cls.pt data=imagenette160

Exportación

TareaONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
classifyclassify to ONNX: compatibleclassify to TorchScript: compatibleclassify to ExecuTorch: compatibleclassify to TensorRT: compatibleclassify to OpenVINO: compatibleclassify to Paddle: no compatibleclassify to MNN: no compatibleclassify to RKNN: no compatibleclassify to ncnn: no compatibleclassify to TFLite: no compatibleclassify to CoreML: no compatibleclassify to Core AI: compatible
embedembed to ONNX: compatibleembed to TorchScript: compatibleembed to ExecuTorch: compatibleembed to TensorRT: compatibleembed to OpenVINO: compatibleembed to Paddle: no compatibleembed to MNN: no compatibleembed to RKNN: no compatibleembed to ncnn: no compatibleembed to TFLite: no compatibleembed to CoreML: no compatibleembed to Core AI: no compatible

La exportación fija el estado actual del modelo en un grafo estático. Para task="classify", las últimas etiquetas que asignó set_classes() y la resolución en el momento de exportar quedan fijadas en una capa lineal final, de modo que el grafo ONNX o TensorRT exportado es un clasificador de imágenes [B, K] corriente, sin torre de texto y sin tokenizador; vuelve a exportar después de cambiar las clases o el tamaño. La exportación con task="embed" traza solo la torre de imagen. Ambas necesitan el opset 14 de ONNX o superior, que el exportador establece por defecto.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreCLIPb32-cls.pt")model.set_classes(["a forklift", "an empty aisle", "a spill"])model.export(format="onnx") # Las etiquetas actuales de set_classes() y la resolución de entrada# quedan fijadas en el grafo. Vuelve a exportar si cambias cualquiera.
CLI
# Aquí no hay llamada a set_classes(), así que esto fija las 1.000# clases de ImageNet por defecto con las que se carga el modelo.libreyolo export model=LibreCLIPb32-cls.pt format=onnx
Exportación de embeddings
from libreyolo import LibreYOLO # task="embed" traza solo la torre de imagen; no hacen falta clases.model = LibreYOLO("LibreCLIPb32-cls.pt", task="embed")model.export(format="onnx")

Checkpoints

Todos los archivos de pesos publicados de esta familia. Ambos están convertidos a partir de los checkpoints de OpenCLIP entrenados con LAION-2B (ViT-B-32 y ViT-B-16), no de ningún entrenamiento con COCO.

ArchivoEntrada (px)Licencia de los pesos
classify
LibreCLIPb32-cls.ptmit
LibreCLIPb16-cls.ptmit

Todos los archivos anteriores existen hoy en la organización de LibreYOLO y se descargan la primera vez que se usan.

Los datos de entrenamiento de LAION-2B tienen un historial documentado de contenido CSAM (Stanford Internet Observatory, diciembre de 2023). Desde entonces LAION ha publicado Re-LAION, una reedición limpia; si vuelves a alojar estos pesos por tu cuenta, prefiere los checkpoints derivados de Re-LAION cuando estén disponibles.

Licencia

Comprueba la licencia en el repositorio de Hugging Face de los pesos concretos que descargues. Cada checkpoint de la organización de LibreYOLO incluye una, y no siempre es la misma en toda una familia. Ese repositorio es la fuente autorizada; el resumen siguiente describe qué se aplicaba cuando se verificó esta página por última vez.

Esta es una descripción de las licencias implicadas, no asesoramiento legal. Si la respuesta es importante a nivel comercial, lee las licencias y busca tu propio asesoramiento.

Trabajo original
CLIP / OpenCLIP, OpenAI; LAION / ML Foundations
Licencia del proyecto original
MIT
Fuente del proyecto original
github.com/mlfoundations/open_clip
Código de LibreYOLO
MIT
Pesos
MIT, republicados en huggingface.co/LibreYOLO
Interpretación
MIT is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep the license text and copyright notice with any copy you redistribute, and it places no obligation on your own application code. LibreCLIP's tokenizer is vendored from the OpenAI CLIP / OpenCLIP byte-pair-encoding tokenizer (also MIT); its image and text towers are a clean-room re-implementation of the standard CLIP architecture, built without open_clip as a runtime dependency. The shipped checkpoints (b32, b16) are converted from OpenCLIP's LAION-2B-trained weights, which OpenCLIP publishes as MIT-redistributable. Training is not offered for this family: LibreCLIP is zero-shot, and set_classes() replaces the fine-tuning step a trained classifier would otherwise need.

Cita

@software{ilharco_gabriel_2021_5143773,
  author       = {Ilharco, Gabriel and
                  Wortsman, Mitchell and
                  Wightman, Ross and
                  Gordon, Cade and
                  Carlini, Nicholas and
                  Taori, Rohan and
                  Dave, Achal and
                  Shankar, Vaishaal and
                  Namkoong, Hongseok and
                  Miller, John and
                  Hajishirzi, Hannaneh and
                  Farhadi, Ali and
                  Schmidt, Ludwig},
  title        = {OpenCLIP},
  month        = jul,
  year         = 2021,
  note         = {If you use this software, please cite it as below.},
  publisher    = {Zenodo},
  version      = {0.1},
  doi          = {10.5281/zenodo.5143773},
  url          = {https://doi.org/10.5281/zenodo.5143773}
}

Copiado del bloque de cita de los autores en github.com/mlfoundations/open_clip#citing.

Verificado con LibreYOLO v1.5.0. Las tablas de compatibilidad, los checkpoints y las cifras de rendimiento de esta página se generan a partir de la biblioteca publicada y los pesos publicados; no se escriben a mano.