Presentamos KerasHub: la tienda de modelos preentrenados

OCT 22, 2024
Divyashree Sreepathihalli Software Engineer
Luciano Martins Developer Advocate Google AI

El mundo del aprendizaje profundo está evolucionando con rapidez, y los modelos preentrenados son cada vez más importantes para realizar una amplia variedad de tareas. Keras, conocida por su API fácil de usar y su enfoque en la accesibilidad, siempre estuvo al frente de este movimiento ofreciendo bibliotecas especializadas, como KerasNLP para modelos basados en texto y KerasCV para modelos de visión artificial.

Sin embargo, a medida que los modelos desdibujan cada vez más las diferencias entre modalidades (piensa en los potentes LLM de chat con entrada de imágenes o las tareas de visión que aprovechan los codificadores de texto), mantener estos dominios separados es menos práctico. La división entre PLN y CV puede dificultar el desarrollo y la implementación de modelos verdaderamente multimodales, lo que lleva a esfuerzos redundantes y una experiencia de usuario fragmentada.

keras-team/keras-hub, a unified, comprehensive library for pretrained models

Para resolver este problema, nos complace anunciar una importante evolución en el ecosistema de Keras: KerasHub, una biblioteca unificada y completa para modelos preentrenados, que agiliza el acceso a arquitecturas de PLN y CV de vanguardia. KerasHub es un repositorio central donde puedes explorar y utilizar sin problemas modelos de vanguardia como BERT para el análisis de texto junto con EfficientNet para la clasificación de imágenes, todo dentro de un marco de Keras consistente y familiar.


Una experiencia unificada para desarrolladores

Esta unificación no solo simplifica el descubrimiento y el uso de modelos, sino que también fomenta un ecosistema más cohesivo. Con KerasHub, puedes aprovechar funciones avanzadas, como la publicación y el intercambio de modelos simplificados, el ajuste de LoRA para una adaptación eficiente de recursos, la cuantificación para un rendimiento optimizado y una sólida capacitación de múltiples hosts para abordar conjuntos de datos a gran escala, todo aplicable en diversas modalidades. Esto marca un paso significativo hacia la democratización del acceso a potentes herramientas de IA y la aceleración del desarrollo de aplicaciones multimodales innovadoras.


Cinco pasos con KerasHub

Para empezar, instala KerasHub en tu sistema. A partir de ahí, puedes explorar la extensa colección de modelos ya disponibles y diferentes implementaciones de arquitecturas populares. Luego, podrás cargar e incorporar fácilmente estos modelos preentrenados en tus propios proyectos y ajustarlos para un rendimiento óptimo en función de tus requisitos específicos.


Cómo instalar KerasHub

Para instalar la versión más reciente de KerasHub con Keras 3, ejecuta lo siguiente:

$ pip install --upgrade keras-hub

A continuación, podrás empezar a explorar los modelos disponibles. El entorno de configuración estándar para comenzar a trabajar con Keras 3 no cambia con KerasHub:

import os
 
# Define el backend de Keras 3 que quieres usar - "jax", "tensorflow" o "torch"
os.environ["KERAS_BACKEND"] = "jax"
 
# Importa los módulos de Keras 3 y KerasHub
import keras
import keras_hub

Cómo usar modelos de visión artificial y lenguaje natural con KerasHub

Ahora ya puedes comenzar a usar KerasHub para acceder a los modelos disponibles en el ecosistema de Keras 3 y utilizarlos. Estos son algunos ejemplos:


Gemma

Gemma es una colección de modelos abiertos de vanguardia, pero accesibles, desarrollados por Google. Como aprovechan la misma investigación y tecnología que usan los modelos Gemini, los modelos base de Gemma se destacan en diversas tareas de generación de texto. Algunos ejemplos son responder preguntas, resumir información y hacer razonamientos lógicos. Además, se pueden personalizar para satisfacer necesidades específicas.

En este ejemplo, usarás Keras y KerasHub para cargar e iniciar la generación de contenidos usando parámetros Gemma2-2B. Para obtener más información sobre las variantes de Gemma, consulta la tarjeta de modelo de Gemma 2 en Kaggle.

# Carga el parámetro 2-2B de los modelos de Kaggle 
gemma_lm = keras_hub.models.GemmaCausalLM.from_preset("gemma_2b_en")
 
# Comienza a generar contenidos con Gemma 2-2B
gemma_lm.generate("Keras is a", max_length=32)

PaliGemma

PaliGemma es un modelo abierto y compacto que comprende tanto imágenes como texto. Como obtiene inspiración de PaLI-3 y está construido con componentes de código abierto, como el modelo de visión SigLIP y el modelo de lenguaje Gemma, PaliGemma puede brindar respuestas detalladas y relevantes para lograr una mejor comprensión del contenido visual, lo que posibilita funciones como la generación de subtítulos para imágenes y videos cortos, la identificación de objetos e incluso la lectura de texto dentro de imágenes.

import os
 
# Define el backend de Keras 3 que quieras usar - "jax", "tensorflow" o "torch"
os.environ["KERAS_BACKEND"] = "jax"
 
# Importa los módulos de Keras 3 y KerasHub
import keras
import keras_hub
from keras.utils import get_file, load_img, img_to_array
 
 
# Importa PaliGemma 3B con ajuste de imágenes de 224x224
pali_gemma_lm = keras_hub.models.PaliGemmaCausalLM.from_preset(
    "pali_gemma_3b_mix_224"
)
 
# Descarga una imagen de prueba y prepárala para su uso con KerasHub
url = 'https://storage.googleapis.com/keras-cv/models/paligemma/cow_beach_1.png'
img_path = get_file(origin=url)
img = img_to_array(load_img(image_path))
 
# Crea la instrucción con la pregunta sobre la imagen
prompt = 'answer where is the cow standing?'
 
# Genera los contenidos con PaliGemma
output = pali_gemma_lm.generate(
    inputs={
        "images": img,
        "prompts": prompt,
    }
)

Para obtener más detalles sobre los modelos preentrenados disponibles en Keras 3, consulta la lista de modelos en Keras en Kaggle.


Stable Diffusion 3 de stability.ai

También tienes a disposición modelos de visión artificial. Por ejemplo, puedes usar Stable Diffusion 3 de stability.ai con KerasHub:

from PIL import Image
from keras.utils import array_to_img
from keras_hub.models import StableDiffusion3TextToImage
 
text_to_image = StableDiffusion3TextToImage.from_preset(
    "stable_diffusion_3_medium",
    height=1024,
    width=1024,
    dtype="float16",
)
 
# Genera imágenes con SD3
image = text_to_image.generate(
    "photograph of an astronaut riding a horse, detailed, 8k",
)
 
# Muestra la imagen generada
img = array_to_img(image)
img

Para obtener más detalles sobre los modelos de visión artificial preentrenados disponibles en Keras 3, consulta la lista de modelos en Keras.


¿Qué cambia para los desarrolladores de KerasNLP?

La transición de KerasNLP a KerasHub es un proceso directo. Solo requiere actualizar la instrucción de importación de keras_nlp a keras_hub.

Ejemplo: Anteriormente, si importabas keras_nlp para usar un modelo BERT como el siguiente

import keras_nlp
 
# Carga un modelo de BERT 
classifier = keras_nlp.models.BertClassifier.from_preset(
    "bert_base_en_uncased", 
    num_classes=2,
)

Ajusta la importación y ya podrás usar KerasHub:

import keras_hub
 
# Carga un modelo de BERT 
classifier = keras_hub.models.BertClassifier.from_preset(
    "bert_base_en_uncased", 
    num_classes=2,
)

¿Qué cambia para los desarrolladores de KerasCV?

Si usas KerasCV actualmente, actualizar a KerasHub te brindará estos beneficios:

  • Carga de modelos simplificada: KerasHub ofrece una API consistente para cargar modelos, que puede simplificar tu código si estás trabajando tanto con KerasCV como con KerasNLP.

  • Flexibilidad de marco de trabajo: Si te interesa explorar diferentes marcos de trabajo, como JAX o PyTorch, KerasHub te permite usarlos fácilmente con los modelos KerasCV y KerasNLP.

  • Repositorio centralizado: Encontrar y acceder a los modelos es más fácil con el repositorio de modelos unificado de KerasHub, ya que allí se agregarán nuevas arquitecturas en el futuro.


¿Cómo adapto mi código a KerasHub?

Modelos

Actualmente, se están portando los modelos de KerasCV a KerasHub. Si bien la mayoría ya están disponibles, algunos todavía están en progreso. Ten en cuenta que el modelo de Centerpillar no se transferirá. Deberías poder usar cualquier modelo de visión en KerasHub con lo siguiente:

import keras_hub
 
# Carga un modelo usando ajustes predeterminados
Model = keras_hub.models.<model_name>.from_preset('preset_name`)
 
# o carga un modelo personalizado especificando el backbone y el preprocessor
Model = keras_hub.models.<model_name>(backbone=backbone, preprocessor=preprocessor)

KerasHub presenta nuevas e interesantes funciones para los desarrolladores de KerasCV, lo que ofrece una mayor flexibilidad y capacidades ampliadas. Incluye lo siguiente:


Preprocesamiento integrado

Cada modelo está acompañado de un preprocesador personalizado que aborda las tareas rutinarias, como el cambio de tamaño o de escala, y mucho más, lo que optimiza el flujo de trabajo.

Antes de esto, el preprocesamiento de entrada se realiza manualmente antes de proporcionar las entradas al modelo.

# Preprocesa entradas de ejemplo
def preprocess_inputs(image, label):
    # Cambia el tamaño o haz más preprocesamiento en las entradas
    return preprocessed_inputs
backbone = keras_cv.models.ResNet50V2Backbone.from_preset(
    "resnet50_v2_imagenet",
)
model = keras_cv.models.ImageClassifier(
    backbone=backbone,
    num_classes=4,
)
output = model(preprocessed_input)

Actualmente, el preprocesamiento de los modelos de tareas está integrado dentro de los preajustes establecidos. Las entradas se someten a preprocesamiento, donde las imágenes de muestra se someten a cambios de tamaño y escala dentro del preprocesador. Este es un componente intrínseco del modelo de tareas. No obstante, está la opción de utilizar uno personalizado.

classifier = keras_hub.models.ImageClassifier.from_preset('resnet_18_imagenet')
classifier.predict(inputs)

Funciones de pérdida

Al igual que las capas de aumento, las funciones de pérdida de KerasCV ahora están disponibles en Keras a través de keras.losses.<loss_function>. Por ejemplo, si actualmente usas la función FocalLoss:

import keras
import keras_cv
 
keras_cv.losses.FocalLoss(
    alpha=0.25, gamma=2, from_logits=False, label_smoothing=0, **kwargs
)

Solo debes ajustar tu código de definición de función de pérdida para usar keras.losses en lugar de keras_cv.losses:

import keras
 
keras.losses.FocalLoss(
    alpha=0.25, gamma=2, from_logits=False, label_smoothing=0, **kwargs
)

Comienza a usar KerasHub

Descubre el mundo de KerasHub hoy mismo:


Únete a la comunidad de Keras y aprovecha los modelos de aprendizaje profundo unificados, accesibles y eficientes. El futuro de la IA es multimodal, y KerasHub es tu forma de acceder a él.