BEiT (modelo de tamaño base, ajustado en ImageNet-22k)
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