El estado de la Visi贸n por Computadora en Hugging Face 馃

'Estado de Visi贸n por Computadora en Hugging Face 馃'

En Hugging Face, nos enorgullece democratizar el campo de la inteligencia artificial junto con la comunidad. Como parte de esa misi贸n, hemos comenzado a enfocar nuestros esfuerzos en la visi贸n por computadora en el 煤ltimo a帽o. Lo que comenz贸 como un PR para tener Transformadores de Visi贸n (ViT) en 馃 Transformers ahora se ha convertido en algo mucho m谩s grande: 8 tareas principales de visi贸n, m谩s de 3000 modelos y m谩s de 100 conjuntos de datos en el Hugging Face Hub.

Ha ocurrido muchas cosas emocionantes desde que los ViTs se unieron al Hub. En esta publicaci贸n de blog, resumiremos lo que sucedi贸 y lo que est谩 por venir para apoyar el progreso continuo de la Visi贸n por Computadora en el ecosistema 馃.

Aqu铆 tienes una lista de cosas que cubriremos:

  • Tareas y canalizaciones de visi贸n compatibles
  • Entrenamiento de tus propios modelos de visi贸n
  • Integraci贸n con timm
  • Difusores
  • Soporte para bibliotecas de terceros
  • Implementaci贸n
  • 隆y mucho m谩s!

Habilitando la comunidad: Una tarea a la vez 馃憗

El Hugging Face Hub alberga m谩s de 100,000 modelos p煤blicos para diferentes tareas, como predicci贸n de la siguiente palabra, llenado de espacios enmascarados, clasificaci贸n de tokens, clasificaci贸n de secuencias, etc. A partir de hoy, admitimos 8 tareas principales de visi贸n que proporcionan muchos puntos de control de modelos:

  • Clasificaci贸n de im谩genes
  • Segmentaci贸n de im谩genes
  • Detecci贸n de objetos (sin entrenamiento previo)
  • Clasificaci贸n de videos
  • Estimaci贸n de profundidad
  • S铆ntesis de imagen a imagen
  • Generaci贸n de im谩genes incondicional
  • Clasificaci贸n de im谩genes sin entrenamiento previo

Cada una de estas tareas viene con al menos 10 puntos de control de modelos en el Hub para que los explores. Adem谩s, admitimos tareas que se encuentran en la intersecci贸n de la visi贸n y el lenguaje, como:

  • Imagen a texto (subtitulado de im谩genes, OCR)
  • Texto a imagen
  • Respuesta a preguntas de documentos
  • Respuesta a preguntas visuales

Estas tareas implican no solo arquitecturas basadas en Transformadores de vanguardia como ViT, Swin, DETR, sino tambi茅n arquitecturas puramente convolucionales como ConvNeXt, ResNet, RegNet, 隆y m谩s! Arquitecturas como ResNets siguen siendo muy relevantes para una mir铆ada de casos de uso industrial y, por lo tanto, el soporte de estas arquitecturas no Transformadoras en 馃 Transformers.

Tambi茅n es importante tener en cuenta que los modelos en el Hub no solo provienen de la biblioteca Transformers, sino tambi茅n de otras bibliotecas de terceros. Por ejemplo, aunque admitimos tareas como la generaci贸n de im谩genes incondicional en el Hub, a煤n no tenemos modelos que admitan esa tarea en Transformers (como este). Admitir todas las tareas de aprendizaje autom谩tico, ya sean resueltas con Transformers o con una biblioteca de terceros, es parte de nuestra misi贸n de fomentar un ecosistema colaborativo de aprendizaje autom谩tico de c贸digo abierto.

Soporte para canalizaciones

Desarrollamos las canalizaciones para proporcionar a los profesionales las herramientas que necesitan para incorporar f谩cilmente el aprendizaje autom谩tico en su caja de herramientas. Proporcionan una forma sencilla de realizar inferencias en una entrada dada con respecto a una tarea. Tenemos soporte para siete tareas de visi贸n en las canalizaciones. Aqu铆 tienes un ejemplo de c贸mo usar las canalizaciones para la estimaci贸n de profundidad:

from transformers import pipeline

estimador_de_profundidad = pipeline(task="depth-estimation", model="Intel/dpt-large")
resultado = estimador_de_profundidad("http://images.cocodataset.org/val2017/000000039769.jpg")

# Este es un tensor con los valores que representan la profundidad expresada
# en metros para cada p铆xel
resultado["depth"]

La interfaz sigue siendo la misma incluso para tareas como la respuesta visual a preguntas:

from transformers import pipeline

or谩culo = pipeline(model="dandelin/vilt-b32-finetuned-vqa")
url_imagen = "https://huggingface.co/datasets/mishig/sample_images/resolve/main/tiger.jpg"

or谩culo(question="驴Qu茅 est谩 haciendo el animal?", image=url_imagen, top_k=1)
# [{'score': 0.778620, 'answer': 'tumbado'}]

Entrenamiento de tus propios modelos

Aunque poder usar un modelo para inferencia listo para usar es una excelente manera de comenzar, el ajuste fino es donde la comunidad obtiene la mayor铆a de los beneficios. Esto es especialmente cierto cuando tus conjuntos de datos son personalizados y no est谩s obteniendo un buen rendimiento de los modelos preentrenados.

Transformers proporciona una API de Entrenador para todo lo relacionado con el entrenamiento. Actualmente, Entrenador admite sin problemas las siguientes tareas: clasificaci贸n de im谩genes, segmentaci贸n de im谩genes, clasificaci贸n de videos, detecci贸n de objetos y estimaci贸n de profundidad. Tambi茅n se admite el ajuste fino de modelos para otras tareas de visi贸n, simplemente no mediante Entrenador.

Mientras el c谩lculo de p茅rdida est茅 incluido en un modelo de Transformers que calcule la p茅rdida para una tarea espec铆fica, deber铆a ser elegible para el ajuste fino para esa tarea. Si encuentras problemas, por favor rep贸rtalos en GitHub.

驴D贸nde encuentro el c贸digo?

  • Documentaci贸n del modelo
  • Notebooks de Hugging Face
  • Scripts de ejemplo de Hugging Face
  • P谩ginas de tareas

Los scripts de ejemplo de Hugging Face incluyen diferentes estrategias de pre-entrenamiento auto-supervisado como MAE, y estrategias de pre-entrenamiento de im谩genes-texto contrastantes como CLIP. Estos scripts son recursos valiosos tanto para la comunidad de investigaci贸n como para los profesionales que deseen ejecutar el pre-entrenamiento desde cero en conjuntos de datos personalizados.

Algunas tareas no est谩n inherentemente dise帽adas para el ajuste fino, sin embargo. Ejemplos incluyen clasificaci贸n de im谩genes sin etiquetas (como CLIP), detecci贸n de objetos sin etiquetas (como OWL-ViT) y segmentaci贸n sin etiquetas (como CLIPSeg). Volveremos a visitar estos modelos en esta publicaci贸n.

Integraciones con conjuntos de datos

Datasets proporciona un acceso f谩cil a miles de conjuntos de datos de diferentes modalidades. Como se mencion贸 anteriormente, el Hub cuenta con m谩s de 100 conjuntos de datos para visi贸n por computadora. Algunos ejemplos que vale la pena mencionar aqu铆 son: ImageNet-1k, Scene Parsing, NYU Depth V2, COYO-700M y LAION-400M. Con estos conjuntos de datos disponibles en el Hub, se pueden cargar f谩cilmente con solo dos l铆neas de c贸digo:

from datasets import load_dataset

dataset = load_dataset("scene_parse_150")

Adem谩s de estos conjuntos de datos, proporcionamos soporte de integraci贸n con bibliotecas de aumento como albumentations y Kornia. La comunidad puede aprovechar la flexibilidad y el rendimiento de Datasets y las potentes transformaciones de aumento proporcionadas por estas bibliotecas. Adem谩s de esto, tambi茅n proporcionamos gu铆as de carga de datos dedicadas para tareas principales de visi贸n: clasificaci贸n de im谩genes, segmentaci贸n de im谩genes, detecci贸n de objetos y estimaci贸n de profundidad.

馃 馃 timm

timm, tambi茅n conocido como pytorch-image-models, es una colecci贸n de modelos de im谩genes PyTorch de 煤ltima generaci贸n, pesos pre-entrenados y scripts de utilidad para entrenamiento, inferencia y validaci贸n.

Tenemos m谩s de 200 modelos de timm en el Hub y hay m谩s en camino. Consulta la documentaci贸n para obtener m谩s informaci贸n sobre esta integraci贸n.

馃Ж Diffusers

Diffusers proporciona modelos de difusi贸n de visi贸n y audio pre-entrenados, y sirve como una caja de herramientas modular para inferencia y entrenamiento. Con esta biblioteca, puedes generar im谩genes plausibles a partir de entradas de lenguaje natural, entre otros casos de uso creativos. Aqu铆 tienes un ejemplo:

from diffusers import DiffusionPipeline

generator = DiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4")
generator.to("cuda")

image = generator("Una imagen de una ardilla en estilo Picasso").images[0]

Este tipo de tecnolog铆a puede potenciar una nueva generaci贸n de aplicaciones creativas y tambi茅n ayudar a artistas provenientes de diferentes 谩mbitos. Para obtener m谩s informaci贸n sobre Diffusers y los diferentes casos de uso, consulta la documentaci贸n oficial.

La literatura sobre modelos basados en difusi贸n est谩 desarroll谩ndose a un ritmo r谩pido, por eso nos asociamos con Jonathan Whitaker para desarrollar un curso al respecto. El curso es gratuito y puedes consultarlo aqu铆.

Soporte para bibliotecas de terceros

Central en el ecosistema de Hugging Face est谩 el Hub de Hugging Face, que permite a las personas colaborar de manera efectiva en Aprendizaje Autom谩tico. Como se mencion贸 anteriormente, no solo ofrecemos soporte para modelos de 馃 Transformers en el Hub, sino tambi茅n para modelos de otras bibliotecas de terceros. Con este fin, proporcionamos varias utilidades para que puedas integrar tu propia biblioteca con el Hub. Una de las principales ventajas de hacer esto es que se vuelve muy f谩cil compartir artefactos (como modelos y conjuntos de datos) con la comunidad, lo que facilita que tus usuarios prueben tus modelos.

Cuando tienes tus modelos alojados en el Hub, tambi茅n puedes agregar widgets de inferencia personalizados para ellos. Los widgets de inferencia permiten a los usuarios ver r谩pidamente los modelos. Esto ayuda a mejorar la participaci贸n de los usuarios.

Espacios para demostraciones de visi贸n por computadora

Con Spaces, uno puede demostrar f谩cilmente sus modelos de Aprendizaje Autom谩tico. Spaces admite integraciones directas con Gradio, Streamlit y Docker, lo que permite a los profesionales tener una gran cantidad de flexibilidad al mostrar sus modelos. Puedes incorporar tu propio marco de Aprendizaje Autom谩tico para construir una demostraci贸n con Spaces.

La biblioteca Gradio proporciona varios componentes para construir aplicaciones de Visi贸n por Computadora en Espacios como Video, Galer铆a y Modelo3D. La comunidad ha estado trabajando arduamente en la construcci贸n de algunas aplicaciones asombrosas de Visi贸n por Computadora que son impulsadas por Espacios:

  • Generar vol煤menes 3D a partir de un mapa de profundidad predicho de una imagen de entrada
  • Segmentaci贸n sem谩ntica de vocabulario abierto
  • Narrar videos generando subt铆tulos
  • Clasificar videos de YouTube
  • Clasificaci贸n de video sin etiquetas
  • Preguntas y respuestas visuales
  • Usar clasificaci贸n de im谩genes sin etiquetas para encontrar los mejores subt铆tulos para una imagen y generar im谩genes similares

馃 AutoTrain

AutoTrain proporciona una soluci贸n “sin c贸digo” para entrenar modelos de aprendizaje autom谩tico de vanguardia para tareas como clasificaci贸n de texto, resumen de texto, reconocimiento de entidades nombradas y m谩s. Para Visi贸n por Computadora, actualmente admitimos clasificaci贸n de im谩genes, pero se puede esperar una mayor cobertura de tareas.

AutoTrain tambi茅n permite la evaluaci贸n autom谩tica del modelo. Esta aplicaci贸n le permite evaluar modelos de 馃 Transformers en una amplia variedad de conjuntos de datos en el Hub. Los resultados de su evaluaci贸n se mostrar谩n en las tablas de clasificaci贸n p煤blicas. Puede consultar esta publicaci贸n de blog para obtener m谩s detalles.

La filosof铆a t茅cnica

En esta secci贸n, quer铆amos compartir nuestra filosof铆a detr谩s de agregar soporte para Visi贸n por Computadora en 馃 Transformers para que la comunidad est茅 al tanto de las elecciones de dise帽o espec铆ficas de esta 谩rea.

Aunque Transformers comenz贸 con NLP, hoy admitimos m煤ltiples modalidades, por ejemplo, visi贸n, audio, lenguaje de visi贸n y aprendizaje por refuerzo. Para todas estas modalidades, todos los modelos correspondientes de Transformers disfrutan de algunos beneficios comunes:

  • Descarga f谩cil del modelo con una sola l铆nea de c贸digo con from_pretrained()
  • Subida f谩cil del modelo con push_to_hub()
  • Soporte para cargar puntos de control grandes con t茅cnicas eficientes de fragmentaci贸n de puntos de control
  • Soporte de optimizaci贸n (con herramientas como Optimum)
  • Inicializaci贸n a partir de configuraciones de modelos
  • Soporte tanto para PyTorch como para TensorFlow (no exhaustivo)
  • y muchos m谩s

A diferencia de los tokenizadores, tenemos preprocesadores (como este) que se encargan de preparar los datos para los modelos de visi贸n. Hemos trabajado arduamente para asegurar que la experiencia del usuario al usar un modelo de visi贸n siga siendo f谩cil y similar:

from transformers import ViTImageProcessor, ViTForImageClassification
import torch
from datasets import load_dataset

dataset = load_dataset("huggingface/cats-image")
image = dataset["test"]["image"][0]

image_processor聽 = ViTImageProcessor.from_pretrained("google/vit-base-patch16-224")
model = ViTForImageClassification.from_pretrained("google/vit-base-patch16-224")
inputs = image_processor(image, return_tensors="pt")

with torch.no_grad():
    logits = model(**inputs).logits

# model predicts one of the 1000 ImageNet classes
predicted_label = logits.argmax(-1).item()
print(model.config.id2label[predicted_label])
# Gato egipcio

Incluso para una tarea dif铆cil como la detecci贸n de objetos, la experiencia del usuario no cambia mucho:

from transformers import AutoImageProcessor, AutoModelForObjectDetection
from PIL import Image
import requests

url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)

image_processor = AutoImageProcessor.from_pretrained("microsoft/conditional-detr-resnet-50")
model = AutoModelForObjectDetection.from_pretrained("microsoft/conditional-detr-resnet-50")
inputs = image_processor(images=image, return_tensors="pt")

outputs = model(**inputs)

# convert outputs (bounding boxes and class logits) to COCO API
target_sizes = torch.tensor([image.size[::-1]])
results = image_processor.post_process_object_detection(
    outputs, threshold=0.5, target_sizes=target_sizes
)[0]

for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
    box = [round(i, 2) for i in box.tolist()]
    print(
        f"Se detect贸 {model.config.id2label[label.item()]} con una confianza "
        f"{round(score.item(), 3)} en la ubicaci贸n {box}"
    )

Lleva a:

Se detect贸 control remoto con una confianza de 0.833 en la ubicaci贸n [38.31, 72.1, 177.63, 118.45]
Se detect贸 gato con una confianza de 0.831 en la ubicaci贸n [9.2, 51.38, 321.13, 469.0]
Se detect贸 gato con una confianza de 0.804 en la ubicaci贸n [340.3, 16.85, 642.93, 370.95]
Se detect贸 control remoto con una confianza de 0.683 en la ubicaci贸n [334.48, 73.49, 366.37, 190.01]
Se detect贸 sof谩 con una confianza de 0.535 en la ubicaci贸n [0.52, 1.19, 640.35, 475.1]

Modelos de cero disparo para visi贸n

Ha habido un aumento de modelos que reformulan tareas centrales de visi贸n, como la segmentaci贸n y la detecci贸n, de maneras interesantes e introducen a煤n m谩s flexibilidad. Soportamos algunos de estos modelos de Transformers:

  • CLIP que permite la clasificaci贸n de im谩genes sin entrenamiento con frases gu铆a. Dada una imagen, debes guiar al modelo CLIP con una consulta en lenguaje natural como “una imagen de {}”. La esperanza es obtener la etiqueta de clase como respuesta.
  • OWL-ViT que permite la detecci贸n de objetos condicionada por el lenguaje sin entrenamiento y la detecci贸n de objetos de una sola muestra condicionada por im谩genes. 隆Esto significa que puedes detectar objetos en una imagen incluso si el modelo subyacente no aprendi贸 a detectarlos durante el entrenamiento! Puedes consultar este cuaderno para obtener m谩s informaci贸n.
  • CLIPSeg que soporta la segmentaci贸n de im谩genes condicionada por el lenguaje sin entrenamiento y la segmentaci贸n de im谩genes de una sola muestra condicionada por im谩genes. 隆Esto significa que puedes segmentar objetos en una imagen incluso si el modelo subyacente no aprendi贸 a segmentarlos durante el entrenamiento! Puedes consultar esta publicaci贸n en el blog que ilustra esta idea. GroupViT tambi茅n soporta la tarea de segmentaci贸n de cero disparo.
  • X-CLIP que muestra la generalizaci贸n de cero disparo a videos. Precisamente, soporta la clasificaci贸n de video de cero disparo. Consulta este cuaderno para obtener m谩s detalles.

La comunidad puede esperar ver m谩s modelos de cero disparo para visi贸n por parte de 馃Transformers en los pr贸ximos d铆as.

Despliegue

Como dice nuestro CTO Julien – “los verdaderos artistas env铆an” 馃殌

Soportamos el despliegue de estos modelos de visi贸n a trav茅s de 馃Inference Endpoints. Inference Endpoints se integra directamente con modelos compatibles relacionados con la clasificaci贸n de im谩genes, la detecci贸n de objetos y la segmentaci贸n de im谩genes. Para otras tareas, puedes usar los controladores personalizados. Dado que tambi茅n proporcionamos muchos modelos de visi贸n en TensorFlow de 馃Transformers para su despliegue, recomendamos usar los controladores personalizados o seguir estos recursos:

  • Despliegue de modelos de visi贸n de TensorFlow en Hugging Face con TF Serving
  • Despliegue de 馃 ViT en Kubernetes con TF Serving
  • Despliegue de 馃 ViT en Vertex AI
  • Despliegue de ViT con TFX y Vertex AI

Conclusi贸n

En esta publicaci贸n, te ofrecimos una descripci贸n de las cosas que actualmente son soportadas por el ecosistema de Hugging Face para potenciar la pr贸xima generaci贸n de aplicaciones de visi贸n por computadora. Esperamos que disfrutes utilizando estas ofertas para construir de manera confiable y responsable.

Aunque queda mucho por hacer. Aqu铆 hay algunas cosas que puedes esperar ver:

  • Soporte directo de videos de 馃Datasets
  • Soporte de tareas m谩s relevantes para la industria, como la similitud de im谩genes
  • Interoperabilidad de los conjuntos de datos de im谩genes con TensorFlow
  • Un curso sobre Visi贸n por Computadora de la comunidad de 馃

Como siempre, 隆apreciamos tus parches, PRs, puntos de control de modelos, conjuntos de datos y otras contribuciones! 馃

Agradecimientos: Gracias a Omar Sanseviero, Nate Raw, Niels Rogge, Alara Dirik, Amy Roberts, Maria Khalusova y Lysandre Debut por sus revisiones rigurosas y oportunas del borrador del blog. Gracias a Chunte Lee por crear la miniatura del blog.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Aprendizaje Autom谩tico

Ajusta de forma interactiva Falcon-40B y otros LLMs en los cuadernos de Amazon SageMaker Studio utilizando QLoRA.

Ajustar modelos de lenguaje grandes (LLMs) permite adaptar modelos fundamentales de c贸digo abierto para lograr un mej...

Inteligencia Artificial

Revolucionando la tecnolog铆a port谩til el algoritmo de frecuencia card铆aca ultrarr谩pido de Edge Impulse y la ampliaci贸n de la suite de atenci贸n m茅dica

El aprendizaje autom谩tico se utiliza en casi todos los aspectos de nuestra vida y en diversos campos. Es una tecnolog...

Inteligencia Artificial

Segmentaci贸n de Im谩genes Una Gu铆a Detallada

La segmentaci贸n de im谩genes se refiere a la capacidad de las computadoras (o m谩s precisamente, los modelos almacenado...

Inteligencia Artificial

驴C贸mo deber铆amos ver los datos cl铆nicos sesgados en el aprendizaje autom谩tico m茅dico? Un llamado a una perspectiva arqueol贸gica

Investigadores del MIT, la Universidad Johns Hopkins y el Instituto Alan Turing argumentan que lidiar con datos m茅dic...

Inteligencia Artificial

Las Pruebas Asistidas por Computadora Abordan el Flujo de Fluidos

Los investigadores utilizan computadoras para demostrar que las ecuaciones pueden explotar.

Inteligencia Artificial

驴Se entienden Do Flamingo y DALL-E? Explorando la simbiosis entre los modelos de generaci贸n de subt铆tulos de im谩genes y s铆ntesis de texto a imagen

La investigaci贸n multimodal que mejora la comprensi贸n de la computadora de texto e im谩genes ha avanzado mucho recient...