El modelo resmlp_big_24_224.fb_in1k representa una arquitectura de clasificación de imágenes basada en ResMLP, destacando por sus 129.1 millones de parámetros. Diseñado específicamente para tareas de reconocimiento de imágenes eficientes, este modelo fue entrenado en el conjunto de datos ImageNet-1k. Su fortaleza radica en una estructura de red completamente conectada (MLP) que, combinada con técnicas innovadoras, logra un rendimiento superior en clasificación manteniendo una eficiencia computacional notable.
Principios Técnicos Clave: Un Diseño de Red Completamente Conectada que Supera a las CNNs
La Revolución de la Arquitectura ResMLP
ResMLP (Residual Multi-Layer Perceptron) se aparta del paradigma tradicional de las Redes Neuronales Convolucionales (CNNs), que se basan fundamentalmente en operaciones de convolución. En su lugar, ResMLP emplea capas completamente conectadas para construir redes neuronales profundas. La innovación central reside en la sinergia entre la codificación de la posición espacial y las conexiones residuales:
- Las imágenes de entrada, típicamente de 224x224 píxeles, se aplanan en una secuencia. Se utilizan incrustaciones posicionales para preservar la información espacial dentro de esta secuencia.
- Las capas de Perceptrón Multicapa (MLP) procesan la dimensión de los canales, liberándose de las limitaciones de localidad inherentes a las operaciones de convolución.
- La incorporación de conexiones residuales ayuda a mitigar los desafíos de entrenamiento en redes profundas, permitiendo una formación estable de la red de 24 capas.
Configuración Eficiente con 129 Millones de Parámetros
El archivo de configuración del modelo, config.json, revela las características de la distribución de sus parámetros:
- Una dimensión de características de 768 se elige como un equilibrio entre la capacidad de representación y el costo computacional.
- La dimensión de entrada se fija en 3x224x224 píxeles, adaptándose a las imágenes estándar de ImageNet.
- Se utiliza la agrupación promedio (average pooling) como estrategia de agrupación global para mejorar la eficiencia en la agregación de características.
- Los parámetros de normalización (media: [0.485, 0.456, 0.406], desviación estándar: [0.229, 0.224, 0.225]) aseguran una distribución estable de los datos de entrada.
Rendimiento: Optimización de la Eficiencia Detrás de 100.2 GMACs
Métricas de Rendimiento Clave
Según los datos de referencia proporcionados en README.md:
- Complejidad Computacional: 100.2 GMACs (Giga Multiply-Accumulate Operations por segundo).
- Escala de Activación: 87.3 millones, lo que reduce el consumo de memoria.
- Precisión en ImageNet-1k: Aunque no se indica explícitamente, modelos de la misma serie han reportado rendimientos ceracnos al estado del arte en publicaciones científicas.
Estrategias de Entrenamiento con Alta Eficiencia de Datos
Las optimizaciones clave presentadas en el artículo de ResMLP (https://arxiv.org/abs/2105.03404) incluyen:
- Transferencia de conocimiento desde CNNs pre-entrenadas utilizando destilación de conocimiento.
- Entrenamiento con precisión mixta para reducir los requisitos de recursos computacionales.
- Mejora de la capacidad de generalización mediente la incorporación de suavizado de etiquetas (label smoothing).
Inicio Rápido: Clasificación de Imágenes en 3 Pasos
Preparación del Entorno
Asegúrate de tener las dependencias necesarias instaladas:
git clone https://ai.gitcode.com/hf_mirrors/timm/resmlp_big_24_224.fb_in1k
pip install timm torch pillow
Ejemplo de Código para Clasificación de Imágenes
A continuación, se muestra cómo realizar inferencia para clasificación:
from urllib.request import urlopen
from PIL import Image
import timm
import torch
# Cargar la imagen de ejemplo
img_url = 'https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/beignets-task-guide.png'
img = Image.open(urlopen(img_url))
# Cargar el modelo pre-entrenado
# 'resmlp_big_24_224.fb_in1k' es el nombre del modelo en la librería timm
model = timm.create_model('resmlp_big_24_224.fb_in1k', pretrained=True)
model.eval() # Poner el modelo en modo de evaluación
# Obtener la configuración de datos específica del modelo
data_config = timm.data.resolve_model_data_config(model)
# Crear la transformación de datos según la configuración
# is_training=False indica que se usará para inferencia
transforms = timm.data.create_transform(**data_config, is_training=False)
# Preparar la imagen para el modelo
# Añadir una dimensión de batch (unsqueeze(0))
input_tensor = transforms(img).unsqueeze(0)
# Realizar la predicción
with torch.no_grad(): # Desactivar cálculo de gradientes para inferencia
output = model(input_tensor)
# Obtener las 5 probabilidades y clases principales
# Softmax para obtener probabilidades, multiplicar por 100 para porcentaje
probabilities = torch.softmax(output, dim=1) * 100
top5_probabilities, top5_class_indices = torch.topk(probabilities, k=5)
print("Top 5 Probabilidades:", top5_probabilities)
print("Top 5 Índices de Clase:", top5_class_indices)
Aplicación para Extracción de Características
Eliminando la capa de clasificación final, el modelo puede servir como un extracter de características genérico:
# Cargar el modelo sin la cabeza de clasificación (num_classes=0)
model_feature_extractor = timm.create_model('resmlp_big_24_224.fb_in1k', pretrained=True, num_classes=0)
model_feature_extractor.eval()
# Extraer características de la imagen
with torch.no_grad():
features = model_feature_extractor(input_tensor)
# La salida 'features' contendrá los vectores de características
# El tamaño de la salida será (batch_size, feature_dimension), ej: (1, 768)
print("Forma de las características extraídas:", features.shape)
Comparativa de Modelos: ResMLP vs. Arquitecturas CNN Tradicionales
Diferencias Arquitectónicas
| Característica | ResMLP | CNN Tradicional |
|---|---|---|
| Operación Principal | Capas Completamente Conectadas | Capas Convolucionales |
| Procesamiento de Información Espacial | Incrustaciones Posicionales | Campo Receptivo Local |
| Eficiencia de Parámetros | Alta (129M logran un rendimiento fuerte) | Moderada (generalmente requiere más parámetros) |
| Computación Paralela | Superior | General |
Escenarios de Aplicación
- Uso recomendado: Clasificación de imágenes, extracción de características, aprendizaje por transferencia.
- Áreas de ventaja: Entornos con cantidades limitadas de datos, gracias a sus características de entrenamiento eficientes.
- Consideraciones: Requiere una dimensión de entrada fija (224x224 píxeles).
Referencias y Agradecimientos
El trabajo se basa en la siguiente publicación:
@article{touvron2021resmlp,
title={ResMLP: Feedforward networks for image classification with data-efficient training},
author={Hugo Touvron and Piotr Bojanowski and Mathilde Caron and Matthieu Cord and Alaaeldin El-Nouby and Edouard Grave and Gautier Izacard and Armand Joulin and Gabriel Synnaeve and Jakob Verbeek and Herv'e J'egou},
journal={arXiv preprint arXiv:2105.03404},
year={2021},
}
La implementación de este modelo se realiza utilizando la biblioteca PyTorch Image Models (timm). Para obtener detalles técnicos adicionales, se recomienda consultar la documentación oficial de timm. Comprender la filosofía de diseño de ResMLP ofrece una perspectiva valiosa sobre la evolución de las redes neuronales, transitando de las convoluciones a las arquitecturas completamente conectadas, y proporciona enfoques novedosos para el desarrollo de sistemas de reconocimiento de imágenes eficientes.