Transferir aprendizado para modelos de classificação de imagem do TensorFlow no Amazon SageMaker

Amazon Sage Maker oferece um conjunto de algoritmos integrados, modelos pré-treinados e modelos de solução pré-criados para ajudar cientistas de dados e profissionais de machine learning (ML) a começar a treinar e implantar modelos de ML rapidamente. Você pode usar esses algoritmos e modelos para aprendizado supervisionado e não supervisionado. Eles podem processar vários tipos de dados de entrada, incluindo tabular, imagem e texto.

A partir de hoje, o SageMaker fornece um novo algoritmo integrado para classificação de imagens: Classificação de imagem - TensorFlow. É um algoritmo de aprendizado supervisionado que suporta aprendizado de transferência para muitos modelos pré-treinados disponíveis em Hub do TensorFlow. Ele recebe uma imagem como probabilidade de entrada e de saída para cada um dos rótulos de classe. Você pode ajustar esses modelos pré-treinados usando o aprendizado de transferência, mesmo quando um grande número de imagens de treinamento não estiver disponível. Está disponível através do SageMaker algoritmos integrados bem como através do IU JumpStart do SageMaker dentro Estúdio Amazon SageMaker. Para obter mais informações, consulte sua documentação Classificação de imagem - TensorFlow e o caderno de exemplo Introdução ao SageMaker TensorFlow – Classificação de imagens.

A classificação de imagens com o TensorFlow no SageMaker fornece aprendizado de transferência em muitos modelos pré-treinados disponíveis no TensorFlow Hub. De acordo com o número de rótulos de classe nos dados de treinamento, uma camada de classificação é anexada ao modelo pré-treinado do TensorFlow Hub. A camada de classificação consiste em uma camada dropout e uma camada densa, que é uma camada totalmente conectada com regularizador de 2 normas que é inicializada com pesos aleatórios. O treinamento do modelo possui hiperparâmetros para a taxa de dropout da camada dropout e o fator de regularização L2 para a camada densa. Em seguida, toda a rede, incluindo o modelo pré-treinado, ou apenas a camada de classificação superior pode ser ajustada nos novos dados de treinamento. Nesse modo de aprendizado de transferência, você pode obter treinamento mesmo com um conjunto de dados menor.

Como usar o novo algoritmo de classificação de imagens do TensorFlow

Esta seção descreve como usar o algoritmo de classificação de imagem do TensorFlow com o SDK Python do SageMaker. Para obter informações sobre como usá-lo na interface do Studio, consulte SageMaker JumpStart.

O algoritmo suporta o aprendizado de transferência para os modelos pré-treinados listados em Modelos do TensorFlow Hub. Cada modelo é identificado por um único model_id. O código a seguir mostra como ajustar o MobileNet V2 1.00 224 identificado por model_id tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4 em um conjunto de dados de treinamento personalizado. Para cada model_id, para iniciar um trabalho de treinamento do SageMaker por meio do Estimador classe do SageMaker Python SDK, você precisa buscar o URI da imagem do Docker, o URI do script de treinamento e o URI do modelo pré-treinado por meio das funções de utilitário fornecidas no SageMaker. O URI do script de treinamento contém todo o código necessário para processamento de dados, carregamento do modelo pré-treinado, treinamento do modelo e salvamento do modelo treinado para inferência. O URI do modelo pré-treinado contém a definição da arquitetura do modelo pré-treinado e os parâmetros do modelo. Observe que o URI da imagem do Docker e o URI do script de treinamento são os mesmos para todos os modelos de classificação de imagem do TensorFlow. O URI do modelo pré-treinado é específico para o modelo específico. Os tarballs de modelo pré-treinados foram pré-baixados do TensorFlow Hub e salvos com a assinatura de modelo apropriada em Serviço de armazenamento simples da Amazon (Amazon S3), de modo que o trabalho de treinamento seja executado em isolamento de rede. Veja o seguinte código:

from sagemaker import image_uris, model_uris, script_uris
from sagemaker.estimator import Estimator

model_id, model_version = "tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4", "*"
training_instance_type = "ml.p3.2xlarge"

# Retrieve the docker image
train_image_uri = image_uris.retrieve(model_id=model_id,model_version=model_version,image_scope="training",instance_type=training_instance_type,region=None,framework=None)

# Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training")

# Retrieve the pre-trained model tarball for transfer learning
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

output_bucket = sess.default_bucket()
output_prefix = "jumpstart-example-ic-training"
s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"

Com esses artefatos de treinamento específicos do modelo, você pode construir um objeto do Estimador classe:

# Create SageMaker Estimator instance
tf_ic_estimator = Estimator(
    role=aws_role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,
)

Em seguida, para transferir aprendizado em seu conjunto de dados personalizado, talvez seja necessário alterar os valores padrão dos hiperparâmetros de treinamento, listados em Hiperparâmetros. Você pode buscar um dicionário Python desses hiperparâmetros com seus valores padrão chamando hyperparameters.retrieve_default, atualize-os conforme necessário e, em seguida, passe-os para a classe Estimator. Observe que os valores padrão de alguns dos hiperparâmetros são diferentes para modelos diferentes. Para modelos grandes, o tamanho do lote padrão é menor e o train_only_top_layer hiperparâmetro é definido como True. O hiperparâmetro Train_only_top_layer define quais parâmetros do modelo mudam durante o processo de ajuste fino. Se train_only_top_layer is True, os parâmetros das camadas de classificação mudam e o restante dos parâmetros permanece constante durante o processo de ajuste fino. Por outro lado, se train_only_top_layer is False, todos os parâmetros do modelo são ajustados. Veja o seguinte código:

from sagemaker import hyperparameters
# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version)

# [Optional] Override default hyperparameters with custom values
hyperparameters["epochs"] = "5"

O código a seguir fornece um conjunto de dados de treinamento padrão hospedado em buckets do S3. Nós fornecemos o tf_flowers conjunto de dados como um conjunto de dados padrão para ajustar os modelos. O conjunto de dados compreende imagens de cinco tipos de flores. O conjunto de dados foi baixado de TensorFlow sob a Licença Apache 2.0.

# Sample training data is available in this bucket
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/tf_flowers/"

training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"

Por fim, para iniciar o trabalho de treinamento do SageMaker para ajustar o modelo, chame .fit no objeto da classe Estimator, ao passar a localização S3 do conjunto de dados de treinamento:

# Launch a SageMaker Training job by passing s3 path of the training data
tf_ic_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Para obter mais informações sobre como usar o novo algoritmo de classificação de imagem SageMaker TensorFlow para transferir aprendizado em um conjunto de dados personalizado, implante o modelo ajustado, execute a inferência no modelo implantado e implante o modelo pré-treinado como está, sem primeiro ajuste fino em um conjunto de dados personalizado, consulte o exemplo de notebook a seguir: Introdução ao SageMaker TensorFlow – Classificação de imagens.

Interface de entrada/saída para o algoritmo de classificação de imagem TensorFlow

Você pode ajustar cada um dos modelos pré-treinados listados em Modelos do TensorFlow Hub a qualquer conjunto de dados que inclua imagens pertencentes a qualquer número de classes. O objetivo é minimizar o erro de previsão nos dados de entrada. O modelo retornado pelo ajuste fino pode ser implantado posteriormente para inferência. A seguir estão as instruções sobre como os dados de treinamento devem ser formatados para entrada no modelo:

  • Entrada – Um diretório com tantos subdiretórios quanto o número de classes. Cada subdiretório deve ter imagens pertencentes a essa classe em formato .jpg, .jpeg ou .png.
  • saída – Um modelo ajustado que pode ser implantado para inferência ou pode ser treinado usando treinamento incremental. Uma assinatura de pré-processamento e pós-processamento é adicionada ao modelo ajustado para que ele receba uma imagem .jpg bruta como entrada e retorne as probabilidades de classe. Um arquivo de mapeamento de índices de classe para rótulos de classe é salvo junto com os modelos.

O diretório de entrada deve se parecer com o exemplo a seguir se os dados de treinamento contiverem imagens de duas classes: roses e dandelion. O caminho do S3 deve se parecer com s3://bucket_name/input_directory/. Observe o rastro / É necessário. Os nomes das pastas e roses, dandelion, e os nomes de arquivo .jpg podem ser qualquer coisa. O arquivo de mapeamento de rótulo que é salvo junto com o modelo treinado no bucket do S3 mapeia os nomes de pasta rosas e dente-de-leão para os índices na lista de probabilidades de classe que o modelo gera. O mapeamento segue a ordem alfabética dos nomes das pastas. No exemplo a seguir, o índice 0 na lista de saída do modelo corresponde a dandelion, e o índice 1 corresponde a roses.

input_directory
    |--roses
        |--abc.jpg
        |--def.jpg
    |--dandelion
        |--ghi.jpg
        |--jkl.jpg

Inferência com o algoritmo de classificação de imagens do TensorFlow

Os modelos gerados podem ser hospedados para inferência e suporte a formatos de imagem .jpg, .jpeg e .png codificados como o application/x-image tipo de conteúdo. A imagem de entrada é redimensionada automaticamente. A saída contém os valores de probabilidade, os rótulos de classe para todas as classes e o rótulo previsto correspondente ao índice de classe com a probabilidade mais alta, codificado no formato JSON. O modelo de classificação de imagem do TensorFlow processa uma única imagem por solicitação e gera apenas uma linha no JSON. Veja a seguir um exemplo de resposta em JSON:

accept: application/json;verbose

 {"probabilities": [prob_0, prob_1, prob_2, ...],
  "labels":        [label_0, label_1, label_2, ...],
  "predicted_label": predicted_label}

If accept está definido para application/json, então o modelo produz apenas probabilidades. Para obter mais detalhes sobre treinamento e inferência, consulte o notebook de exemplo Introdução ao SageMaker TensorFlow – Classificação de imagens.

Use os algoritmos integrados do SageMaker por meio da interface do JumpStart

Você também pode usar a classificação de imagem do SageMaker TensorFlow e qualquer um dos outros algoritmos integrados com apenas alguns cliques por meio da interface do JumpStart. JumpStart é um recurso do SageMaker que permite treinar e implantar algoritmos integrados e modelos pré-treinados de várias estruturas de ML e hubs de modelos por meio de uma interface gráfica. Ele também permite que você implante soluções de ML completas que unem modelos de ML e vários outros serviços da AWS para resolver um caso de uso direcionado. Verificação de saída Execute a classificação de texto com o Amazon SageMaker JumpStart usando os modelos TensorFlow Hub e Hugging Face para descobrir como usar o JumpStart para treinar um algoritmo ou modelo pré-treinado em apenas alguns cliques.

Conclusão

Neste post, anunciamos o lançamento do algoritmo integrado de classificação de imagens SageMaker TensorFlow. Fornecemos um código de exemplo sobre como fazer o aprendizado de transferência em um conjunto de dados personalizado usando um modelo pré-treinado do TensorFlow Hub usando esse algoritmo. Para mais informações, confira documentação e os votos de caderno de exemplo.


Sobre os autores

Transfira o aprendizado para modelos de classificação de imagens do TensorFlow no Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Dr. é um Cientista Aplicado Sênior com Algoritmos integrados do Amazon SageMaker e ajuda a desenvolver algoritmos de aprendizado de máquina. Ele obteve seu PhD da Universidade de Illinois Urbana-Champaign. Ele é um pesquisador ativo em aprendizado de máquina e inferência estatística e publicou muitos artigos nas conferências NeurIPS, ICML, ICLR, JMLR, ACL e EMNLP.

Transfira o aprendizado para modelos de classificação de imagens do TensorFlow no Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Vivek Madan é um Cientista Aplicado com o Equipe do Amazon SageMaker JumpStart. Ele obteve seu doutorado na Universidade de Illinois Urbana-Champaign e foi pesquisador de pós-doutorado na Georgia Tech. Ele é um pesquisador ativo em aprendizado de máquina e design de algoritmos e publicou artigos em conferências EMNLP, ICLR, COLT, FOCS e SODA.

Transfira o aprendizado para modelos de classificação de imagens do TensorFlow no Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.João moura é arquiteto de soluções especialista em IA/ML na Amazon Web Services. Ele se concentra principalmente em casos de uso de PNL e em ajudar os clientes a otimizar o treinamento e a implantação de modelos de aprendizado profundo. Ele também é um defensor ativo de soluções de ML de baixo código e hardware especializado em ML.

Transfira o aprendizado para modelos de classificação de imagens do TensorFlow no Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Raju Penmatcha é arquiteto de soluções especialista sênior em AI / ML na AWS. Ele trabalha com clientes educacionais, governamentais e sem fins lucrativos em projetos relacionados ao aprendizado de máquina e inteligência artificial, ajudando-os a criar soluções usando a AWS. Quando não está ajudando os clientes, ele gosta de viajar para novos lugares.

Carimbo de hora:

Mais de Aprendizado de máquina da AWS