Path: blob/master/site/pt-br/hub/common_saved_model_apis/images.md
25118 views
APIs de SavedModel comuns para tarefas com imagens
Esta página descreve como os SavedModels do TF2 para tarefas relacionadas a imagens implementam a API Reusable SavedModel (isso substitui as Assinaturas comuns para imagens do formato TF1 Hub descontinuado).
Vetor de características de imagens
Resumo do uso
Um vetor de características de imagens é um tensor unidimensional denso que representa uma imagem inteira, geralmente para uso por um classificador simples de alimentação para frente no modelo de consumidor (em CNNs clássicas, esse é o valor de gargalo após a extensão especial ter sido agrupada ou nivelada, mas antes de a classificação ser feita. Confira classificação de imagens abaixo).
Um SavedModel reutilizável para extração de características de imagens tem um método __call__
no objeto raiz que mapeia um lote de imagens para um lote de vetores de características. Esse método pode ser usado da seguinte forma:
No Keras, o equivalente é:
A entrada segue a convenção geral para entrada de imagens. A documentação do modelo especifica o intervalo admissível de height
(altura) e width
(largura) da entrada.
A saída é um único tensor com dtype float32
e formato [batch_size, num_features]
(tamanho do lote, número de características). batch_size
é o mesmo que na entrada. num_features
é uma constante específica ao módulo independente do tamanho da entrada.
Detalhes da API
A API Reusable SavedModel também fornece uma lista de obj.variables
(por exemplo, para inicialização quando não estiver fazendo o carregamento adiantado – eager).
Um modelo com suporte a ajustes finos fornece uma lista de obj.trainable_variables
(variáveis treináveis). Ele pode exigir que você passe training=True
para executar no modo de treinamento (por exemplo, dropout). Alguns modelos permitem argumentos opcionais para sobrescrever hiperparâmetros (por exemplo, taxa de dropout; isso é descrito na documentação do modelo). O modelo também pode fornecer uma lista de obj.regularization_losses
(perdas de regularização). Confira mais detalhes na API Reusable SavedModel.
No Keras, isso é feito por hub.KerasLayer
: inicialize com trainable=True
para permitir os ajustes finos e (no caso raro de sobrescrita de hparam) com arguments=dict(some_hparam=some_value, ...))
.
Observações
Aplicar dropout às características de saída (ou não) deve ser deixado a cargo do consumidor do modelo. O SavedModel em si não deve fazer dropout nas saídas (mesmo se usar dropout internamente em outros lugares).
Exemplos
SavedModels reutilizáveis para vetores de características de imagens são usados em:
tutorial do Colab Retreinando um classificador de imagens.
Classificação de imagens
Resumo do uso
A classificação de imagens mapeia os pixels de uma imagem para pontuações lineares (logits) a fim de fazer associação nas classes de uma taxonomia selecionada pelo publicador do modelo. Dessa forma, os consumidores do modelo podem tirar conclusões a partir da classificação específica aprendida pelo módulo do publicador (para classificação de imagens com um novo conjunto de classes, é comum reutilizar um modelo de vetor de classificação de imagens com um novo classificador em seu lugar).
Um SavedModel reutilizável para classificação de imagens tem um método __call__
no objeto raiz que mapeia um lote de imagens para um lote de logits. Esse método pode ser usado da seguinte forma:
No Keras, o equivalente é:
A entrada segue a convenção geral para entrada de imagens. A documentação do modelo especifica o intervalo admissível de height
(altura) e width
(largura) da entrada.
A saída logits
é um único tensor com dtype float32
e formato [batch_size, num_classes]
(tamanho do lote, número de classes). batch_size
é o mesmo que na entrada. num_classes
é o número de classes na classificação, que é uma constante específica ao modelo.
O valor logits[i, c]
é uma pontuação prevendo a associação do exemplo i
na classe com índice c
.
O fato de essas pontuações deverem ser usadas com softmax (para classes mutuamente excludentes), sigmoide (para classes ortogonais) ou alguma outra coisa depende da classificação subjacente. A documentação do módulo deve descrever isso e incluir uma definição dos índices da classe.
Detalhes da API
A API Reusable SavedModel também fornece uma lista de obj.variables
(por exemplo, para inicialização quando não estiver fazendo o carregamento adiantado – eager).
Um modelo com suporte a ajustes finos fornece uma lista de obj.trainable_variables
(variáveis treináveis). Ela pode exigir que você passe training=True
para executar no modo de treinamento (por exemplo, dropout). Alguns modelos permitem argumentos opcionais para sobrescrever hiperparâmetros (por exemplo, taxa de dropout, isso é descrito na documentação do modelo). O modelo também pode fornecer uma lista de obj.regularization_losses
(perdas de regularização). Confira mais detalhes na API Reusable SavedModel.
No Keras, isso é feito por hub.KerasLayer
: inicialize com trainable=True
para permitir os ajustes finos e (no caso raro de sobrescrita de hparam) com arguments=dict(some_hparam=some_value, ...))
.
Imagem como entrada
É comum a todos os tipos de modelos de imagem.
Um modelo que receba um lote de imagens como entrada as recebe como um tensor denso de 4 dimensões com dtype float32
e formato [batch_size, height, width, 3]
(tamanho do lote, altura, largura, 3), cujos elementos são valores de cor em RGB dos pixels normalizados para o intervalo [0, 1]. Isso é o que você obtém com tf.image.decode_*()
seguido por tf.image.convert_image_dtype(..., tf.float32)
.
O modelo aceita qualquer batch_size
. A documentação do modelo especifica o intervalo admissível de height
e width
. A última dimensão é fixa: 3 canais RGB.
É recomendável que os modelos usem o layout de Tensores channels_last
(ou NHWC
) em todo o código e deixem o otimizador de grafo do TensorFLow reescrever para channels_first
(ou NCHW
), se necessário.