Apresentamos o KerasHub: sua central para modelos pré-treinados

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

O mundo do aprendizado profundo está evoluindo rapidamente, e os modelos pré-treinados tornam-se cada vez mais cruciais para uma ampla gama de tarefas. O Keras, conhecido pela API fácil de usar e pelo foco na acessibilidade, sempre esteve na vanguarda desse movimento, com bibliotecas especializadas como o KerasNLP para modelos baseados em texto e o KerasCV para modelos de visão computacional.

No entanto, à medida que os modelos reduzem cada vez mais a distância entre as modalidades (considere os LLMs de chat avançados, com entradas de imagem ou tarefas de visão que utilizam codificadores de texto), manter esses domínios separados torna-se menos prático. A divisão entre PLN e CV pode dificultar o desenvolvimento e a implantação de modelos verdadeiramente multimodais, levando à redundância de esforços e à fragmentação da experiência do usuário.

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

Para lidar com isso, temos o prazer de anunciar uma grande evolução no ecossistema do Keras: o KerasHub, uma biblioteca unificada e abrangente para modelos pré-treinados que simplifica o acesso a arquiteturas de PLN e CV de ponta. O KerasHub é um repositório central no qual você pode explorar e utilizar facilmente modelos de última geração, como o BERT para análise de texto, juntamente com o EfficientNet para classificação de imagens, dentro de um único framework consistente e familiar do Keras.


Uma experiência unificada para os desenvolvedores

Essa unificação não só simplifica a descoberta e o uso de modelos, como também promove um ecossistema mais coeso. Com o KerasHub, você pode utilizar recursos avançados, como publicação e compartilhamento fáceis de modelos, ajuste de LoRA para a adaptação eficiente de recursos, quantização para desempenho otimizado e treinamento multi-host robusto para lidar com conjuntos de dados em larga escala, todos aplicáveis em diversas modalidades. Isso marca um passo significativo para a democratização do acesso a ferramentas avançadas de IA e a aceleração do desenvolvimento de aplicativos multimodais inovadores.


Primeiros passos com o KerasHub

Vamos começar instalando o KerasHub no sistema. A partir daí, você poderá explorar a extensa coleção de modelos prontamente disponíveis e diferentes implementações de arquiteturas populares. Assim, você poderá carregar e incorporar facilmente esses modelos pré-treinados em seus próprios projetos e ajustá-los para um desempenho ideal de acordo com seus requisitos específicos.


Instalação do KerasHub

Para instalar a versão mais recente do KerasHub com o Keras 3, basta executar:

$ pip install --upgrade keras-hub

Agora, você pode começar a explorar os modelos disponíveis. A configuração padrão do ambiente para começar a trabalhar com o Keras 3 não muda em nada para começar a usar o KerasHub:

import os
 
# Define the Keras 3 backend you want to use - "jax", "tensorflow" or "torch"
os.environ["KERAS_BACKEND"] = "jax"
 
# Import Keras 3 and KerasHub modules
import keras
import keras_hub

Uso de visão computacional e modelos de linguagem natural com o KerasHub

Agora, você pode começar a trabalhar com o KerasHub para acessar e usar os modelos disponíveis no ecossistema Keras 3. Veja alguns exemplos abaixo:


Gemma

O Gemma é uma coleção de modelos abertos de ponta, porém acessíveis, desenvolvidos pelo Google. Com base na mesma pesquisa e tecnologia que estão por trás dos modelos Gemini, os modelos de base do Gemma se destacam em várias tarefas de geração de texto. Isso inclui respostas a perguntas, resumo de informações e raciocínio lógico. Além disso, eles podem ser personalizados para atender a necessidades específicas.

Neste exemplo, usamos o Keras e o KerasHub para carregar e começar a gerar conteúdo usando os parâmetros do Gemma2 2B. Para obter mais detalhes sobre as variantes do Gemma, confira o card de modelo do Gemma no Kaggle.

# Load Gemma 2 2B preset from Kaggle models 
gemma_lm = keras_hub.models.GemmaCausalLM.from_preset("gemma_2b_en")
 
# Start generating contents with Gemma 2 2B
gemma_lm.generate("Keras is a", max_length=32)

PaliGemma

O PaliGemma é um modelo aberto compacto que compreende imagens e texto. Inspirado no PaLI-3 e criado com base em componentes de código aberto, como o modelo de visão SigLIP e o modelo de linguagem Gemma, o PaliGemma é capaz de fornecer respostas detalhadas e perspicazes para perguntas sobre imagens. Isso permite uma compreensão mais profunda do conteúdo visual, habilitando recursos como geração de legendas para imagens e vídeos curtos, identificação de objetos e até mesmo leitura de textos dentro de imagens.

import os
 
# Define the Keras 3 backend you want to use - "jax", "tensorflow" or "torch"
os.environ["KERAS_BACKEND"] = "jax"
 
# Import Keras 3 and KerasHub modules
import keras
import keras_hub
from keras.utils import get_file, load_img, img_to_array
 
 
# Import PaliGemma 3B fine tuned with 224x224 images
pali_gemma_lm = keras_hub.models.PaliGemmaCausalLM.from_preset(
    "pali_gemma_3b_mix_224"
)
 
# Download a test image and prepare it for usage with 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))
 
# Create the prompt with the question about the image
prompt = 'answer where is the cow standing?'
 
# Generate the contents with PaliGemma
output = pali_gemma_lm.generate(
    inputs={
        "images": img,
        "prompts": prompt,
    }
)

Para obter mais detalhes sobre os modelos pré-treinados disponíveis no Keras 3, confira a lista de modelos no Keras no Kaggle.


Stability.ai Stable Diffusion 3

Você também tem os modelos de visão computacional disponíveis para uso. Por exemplo: você pode usar o stability.ai Stable Diffusion 3 com o 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",
)
 
# Generate images with SD3
image = text_to_image.generate(
    "photograph of an astronaut riding a horse, detailed, 8k",
)
 
# Display the generated image
img = array_to_img(image)
img

Para obter mais detalhes sobre os modelos de visão computacional pré-treinados disponíveis no Keras 3, confira a lista de modelos no Keras.


O que muda para os desenvolvedores do KerasNLP?

A transição do KerasNLP para o KerasHub é um processo simples, que requer apenas a atualização das instruções de importação de keras_nlp para keras_hub.

Por exemplo, anteriormente, você importava o keras_nlp para usar um modelo BERT como mostrado abaixo:

import keras_nlp
 
# Load a BERT model 
classifier = keras_nlp.models.BertClassifier.from_preset(
    "bert_base_en_uncased", 
    num_classes=2,
)

Basta ajustar a importação para começar a usar o KerasHub:

import keras_hub
 
# Load a BERT model 
classifier = keras_hub.models.BertClassifier.from_preset(
    "bert_base_en_uncased", 
    num_classes=2,
)

O que muda para os desenvolvedores do KerasCV?

A atualização para o KerasHub oferece os seguintes benefícios para os usuários do KerasCV:

  • Carregamento simplificado de modelos: o KerasHub oferece uma API consistente para o carregamento de modelos, o que pode simplificar o código se você estiver trabalhando com o KerasCV e o KerasNLP.

  • Flexibilidade de framework: se você tiver interesse em explorar frameworks diferentes, como JAX ou PyTorch, o KerasHub facilita o uso de modelos KerasCV e KerasNLP com eles.

  • Repositório centralizado: localizar e acessar modelos ficou mais fácil com o repositório unificado de modelos do KerasHub, no qual novas arquiteturas serão adicionadas no futuro.


Como adaptar meu código ao KerasHub?

Modelos

No momento, os modelos KerasCV estão sendo portados para o KerasHub. Embora a maioria deles já esteja disponível, alguns ainda estão em andamento. Observe que o modelo Centerpillar não será portado. Você deverá poder usar qualquer modelo de visão no KerasHub com:

import keras_hub
 
# Load a model using preset
Model = keras_hub.models.<model_name>.from_preset('preset_name`)
 
# or load a custom model by specifying the backbone and preprocessor
Model = keras_hub.models.<model_name>(backbone=backbone, preprocessor=preprocessor)

O KerasHub introduz novos recursos interessantes para os desenvolvedores do KerasCV, oferecendo mais flexibilidade e recursos expandidos. Isso inclui:


Pré-processamento integrado

Cada modelo é acompanhado por um pré-processador personalizado que lida com tarefas de rotina, incluindo redimensionamento, reescalonamento e muito mais, o que otimiza os fluxos de trabalho.

Antes disso, o pré-processamento de entradas era realizado manualmente, antes do fornecimento das entradas ao modelo.

# Preprocess inputs for example
def preprocess_inputs(image, label):
    # Resize rescale or do more preprocessing on inputs
    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)

Atualmente, o pré-processamento dos modelos de tarefas está integrado dentro das predefinições estabelecidas. As entradas passam pelo pré-processamento, no qual as amostras de imagens são redimensionadas e reescalonadas dentro do pré-processador. O pré-processador é um componente intrínseco do modelo de tarefa, mas há a opção de utilizar um pré-processador personalizado.

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

Funções loss

Semelhante às camadas de aumento, as funções loss anteriormente presentes no KerasCV agora estão disponíveis no Keras via keras.losses.<loss_function>. Por exemplo, se você estiver usando a função FocalLoss:

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

Basta ajustar o código de definição da função loss para usar keras.losses em vez de keras_cv.losses:

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

Primeiros passos com o KerasHub

Descubra o mundo do KerasHub hoje mesmo:


Participe da comunidade do Keras e desbloqueie o poder dos modelos de aprendizado profundo unificados, acessíveis e eficientes. O futuro da IA é multimodal, e o KerasHub é a sua porta de entrada para ele!