BEiT (modelo de tamaño base, ajustado en ImageNet-22k)

microsoft
Clasificación de imagen

Modelo BEiT preentrenado de manera auto-supervisada en ImageNet-22k, también conocido como ImageNet-21k (14 millones de imágenes, 21,841 clases) con una resolución de 224x224, y ajustado en el mismo conjunto de datos con una resolución de 224x224. Fue introducido en el artículo BEIT: BERT Pre-Training of Image Transformers por Hangbo Bao, Li Dong y Furu Wei y lanzado por primera vez en este repositorio. El modelo BEiT es un Transformador de Visión (ViT), que es un modelo de codificador de transformadores (similar a BERT). A diferencia del modelo ViT original, BEiT es preentrenado en una gran colección de imágenes de manera auto-supervisada, concretamente en ImageNet-21k, con una resolución de 224x224 píxeles. El objetivo de preentrenamiento del modelo es predecir tokens visuales del codificador VQ-VAE de DALL-E de OpenAI, basado en parches enmascarados. Luego, el modelo se ajustó de manera supervisada en ImageNet (también conocido como ILSVRC2012), un conjunto de datos compuesto por 1 millón de imágenes y 1,000 clases, también con una resolución de 224x224. Las imágenes se presentan al modelo como una secuencia de parches de tamaño fijo (resolución 16x16), que se incrustan linealmente. A diferencia de los modelos ViT originales, los modelos BEiT usan embeddings de posición relativos (similares a T5) en lugar de embeddings de posición absolutos, y clasifican las imágenes mediante la agregación por media de los estados ocultos finales de los parches, en lugar de colocar una capa lineal sobre el estado oculto final del token [CLS]. Mediante el preentrenamiento, el modelo aprende una representación interna de las imágenes que luego se puede utilizar para extraer características útiles para tareas posteriores: si tienes un conjunto de datos de imágenes etiquetadas, por ejemplo, puedes entrenar a un clasificador estándar colocando una capa lineal sobre el codificador preentrenado. Típicamente, se coloca una capa lineal sobre el token [CLS], ya que el último estado oculto de este token se puede ver como una representación de una imagen completa. Alternativamente, uno puede agregar por media los estados ocultos finales de los embeddings de parches, y colocar una capa lineal sobre eso.

Como usar

Aquí se muestra cómo usar este modelo para clasificar una imagen del conjunto de datos COCO 2017 en una de las 1,000 clases de ImageNet:

from transformers import BeitImageProcessor, BeitForImageClassification
from PIL import Image
import requests

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

processor = BeitImageProcessor.from_pretrained('microsoft/beit-base-patch16-224-pt22k-ft22k')
model = BeitForImageClassification.from_pretrained('microsoft/beit-base-patch16-224-pt22k-ft22k')

inputs = processor(images=image, return_tensors="pt")
outputs = model(**inputs)
logits = outputs.logits
# el modelo predice una de las 21,841 clases de ImageNet-22k
predicted_class_idx = logits.argmax(-1).item()
print("Clase predicha:", model.config.id2label[predicted_class_idx])

Funcionalidades

Clasificación de imágenes
Preentrenamiento auto-supervisado en ImageNet-21k
Ajuste supervisado en ImageNet-22k
Usa embeddings de posición relativos
Agregado por media de estados ocultos finales para clasificación

Casos de uso

Clasificación de imágenes en conjuntos de datos a gran escala
Extracción de características de imágenes preentrenadas para tareas posteriores
Uso en aplicaciones de visión por computadora como la identificación de objetos