Ajuda a proteger a Grande Barreira de Corais com TensorFlow em Kaggle Junte Desafio

Assinaturas comuns para imagens

Esta página descreve as assinaturas comuns que devem ser implementadas por módulos no formato TF1 Hub para tarefas relacionadas com a imagem. (Para o formato TF2 SavedModel , consulte o análogo API SavedModel .)

Alguns módulos podem ser usados ​​para mais de uma tarefa (por exemplo, módulos de classificação de imagem tendem a fazer alguma extração de recursos no caminho). Portanto, cada módulo fornece (1) assinaturas nomeados para todas as tarefas previstas pelo editor, e (2) uma assinatura padrão output = m(images) por sua principal tarefa designada.

Vetor de recurso de imagem

Resumo de uso

Um vector de função imagem é uma densa tensor 1-D que representa uma imagem completa, tipicamente para a classificação pelo modelo consumidor. (Ao contrário das ativações intermediários de CNNs, ele não oferece um colapso espacial. Ao contrário de classificação de imagens , ele descarta a classificação aprendida pelo modelo de editor).

Um módulo para extração de recursos de imagem possui uma assinatura padrão que mapeia um lote de imagens para um lote de vetores de recursos. Ele pode ser usado da seguinte forma:

  module_spec = hub.load_module_spec("path/to/module")
  height, width = hub.get_expected_image_size(module_spec)
  images = ...  # A batch of images with shape [batch_size, height, width, 3].
  module = hub.Module(module_spec)
  features = module(images)   # A batch with shape [batch_size, num_features].

Ele também define a assinatura nomeada correspondente.

Especificação de assinatura

A assinatura nomeada para extrair vetores de recursos de imagem é invocada como

  outputs = module(dict(images=images), signature="image_feature_vector",
                   as_dict=True)
  features = outputs["default"]

A entrada segue a convenção geral de entrada de imagens .

O dicionário saídas contém um "default" de saída de dtipo float32 e forma [batch_size, num_features] . O batch_size é a mesma que na entrada, mas não conhecido na construção de gráfico. num_features é um conhecido, específico do módulo de constante independente do tamanho da entrada.

Esses vetores de recursos devem ser usados ​​para classificação com um classificador feed-forward simples (como os recursos agrupados da camada convolucional superior em uma CNN típica para classificação de imagens).

A aplicação de dropout aos recursos de saída (ou não) deve ser deixada para o consumidor do módulo. O próprio módulo não deve realizar dropout nas saídas reais (mesmo que use dropout internamente em outros lugares).

O dicionário de saídas pode fornecer outras saídas, por exemplo, as ativações de camadas ocultas dentro do módulo. Suas chaves e valores dependem do módulo. Recomenda-se a chaves dependente da arquitetura de prefixo com um nome de arquitetura (por exemplo, para evitar confundir a camada intermédia "InceptionV3/Mixed_5c" com a camada superior convolucional "InceptionV2/Mixed_5c" ).

Classificação de imagens

Resumo de uso

Classificação de imagens mapeia os pixels de uma imagem a pontuação lineares (logits) para participação nas aulas de uma taxonomia selecionada pelo editor módulo. Isso permite que os consumidores a tirar conclusões a partir da classificação especial aprendeu pelo módulo editor, e não apenas suas características subjacentes (cf. imagem característica Vector ).

Um módulo para extração de recursos de imagem possui uma assinatura padrão que mapeia um lote de imagens para um lote de logits. Pode ser usado da seguinte forma:

  module_spec = hub.load_module_spec("path/to/module")
  height, width = hub.get_expected_image_size(module_spec)
  images = ...  # A batch of images with shape [batch_size, height, width, 3].
  module = hub.Module(module_spec)
  logits = module(images)   # A batch with shape [batch_size, num_classes].

Ele também define a assinatura nomeada correspondente.

Especificação de assinatura

A assinatura nomeada para extrair vetores de características de imagem é invocada como

  outputs = module(dict(images=images), signature="image_classification",
                   as_dict=True)
  logits = outputs["default"]

A entrada segue a convenção geral de entrada de imagens .

O dicionário saídas contém um "default" de saída de dtipo float32 e forma [batch_size, num_classes] . O batch_size é a mesma que na entrada, mas não conhecido na construção de gráfico. num_classes é o número de classes da classificação, que é uma constante conhecida independente do tamanho da entrada.

Avaliando outputs["default"][i, c] produz uma pontuação prevendo a participação de exemplo i na classe com índice de c .

Depende da classificação subjacente se essas pontuações devem ser usadas com softmax (para classes mutuamente exclusivas), sigmóide (para classes ortogonais) ou outra coisa. A documentação do módulo deve descrever isso e se referir a uma definição dos índices de classe.

O dicionário de saídas pode fornecer outras saídas, por exemplo, as ativações de camadas ocultas dentro do módulo. Suas chaves e valores dependem do módulo. Recomenda-se a chaves dependente da arquitetura de prefixo com um nome de arquitetura (por exemplo, para evitar confundir a camada intermédia "InceptionV3/Mixed_5c" com a camada superior convolucional "InceptionV2/Mixed_5c" ).

Entrada de imagem

Isso é comum a todos os tipos de módulos de imagem e assinaturas de imagem.

Uma assinatura que leva um lote de imagens como entrada aceita-los como uma densa 4-D tensor de dtipo float32 e forma [batch_size, height, width, 3] cujos elementos são valores de cor RGB de pixels normalizado para o intervalo [0, 1] . Isto é o que você começa a partir tf.image.decode_*() seguido por tf.image.convert_image_dtype(..., tf.float32) .

Um módulo com exatamente um (ou uma capital) de entrada de imagens usa o nome de "images" para esta entrada.

O módulo aceita qualquer batch_size , e, correspondentemente, define a primeira dimensão da TensorInfo.tensor_shape ao "desconhecido". A última dimensão é fixo para o número 3 dos canais RGB. A height e width dimensões são fixos ao tamanho esperado de imagens de entrada. (Trabalhos futuros podem remover essa restrição para módulos totalmente convolucionais.)

Os consumidores do módulo não devem inspecionar a forma diretamente, mas obter as informações de tamanho chamando hub.get_expected_image_size () no módulo ou nas especificações do módulo e devem redimensionar as imagens de entrada de acordo (normalmente antes / durante o envio em lote).

Para simplificar, módulos TF-Hub usar o channels_last (ou NHWC ) Disposição de tensores, e deixe-o otimizador gráfico de TensorFlow para reescrever a channels_first (ou NCHW ), se necessário. Ele tem feito isso por padrão desde a versão 1.7 do TensorFlow.