Asista al Simposio Mujeres en ML el 7 de diciembre Regístrese ahora

Firmas comunes para imágenes

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Esta página describe las firmas comunes que deben implementar los módulos en el formato TF1 Hub para tareas relacionadas con imágenes. (Para el formato de modelo guardado de TF2 , consulte la API de modelo guardado análoga).

Algunos módulos se pueden usar para más de una tarea (p. ej., los módulos de clasificación de imágenes tienden a realizar alguna extracción de características en el camino). Por lo tanto, cada módulo proporciona (1) firmas con nombre para todas las tareas previstas por el editor y (2) una output = m(images) para su tarea principal designada.

Vector de características de imagen

Resumen de uso

Un vector de características de imagen es un tensor 1-D denso que representa una imagen completa, generalmente para la clasificación por parte del modelo de consumidor. (A diferencia de las activaciones intermedias de las CNN, no ofrece un desglose espacial. A diferencia de la clasificación de imágenes , descarta la clasificación aprendida por el modelo del editor).

Un módulo para la extracción de características de imágenes tiene una firma predeterminada que asigna un lote de imágenes a un lote de vectores de características. Se puede usar así:

  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].

También define la firma nombrada correspondiente.

Especificación de firma

La firma con nombre para extraer vectores de características de imagen se invoca como

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

La entrada sigue la convención general para la entrada de imágenes .

El diccionario de salidas contiene una salida "default" de dtype float32 y shape [batch_size, num_features] . El tamaño del batch_size es el mismo que en la entrada, pero no se conoce en el momento de la construcción del gráfico. num_features es una constante conocida específica del módulo independiente del tamaño de entrada.

Estos vectores de características están destinados a ser utilizables para la clasificación con un clasificador de avance simple (como las características agrupadas de la capa convolucional superior en una CNN típica para la clasificación de imágenes).

La aplicación de abandono a las funciones de salida (o no) debe dejarse en manos del consumidor del módulo. El módulo en sí no debería realizar abandonos en las salidas reales (incluso si usa abandonos internamente en otros lugares).

El diccionario de salidas puede proporcionar más salidas, por ejemplo, las activaciones de capas ocultas dentro del módulo. Sus claves y valores dependen del módulo. Se recomienda prefijar las claves dependientes de la arquitectura con un nombre de arquitectura (p. ej., para evitar confundir la capa intermedia "InceptionV3/Mixed_5c" con la capa convolucional superior "InceptionV2/Mixed_5c" ).

Clasificación de imágenes

Resumen de uso

La clasificación de imágenes asigna los píxeles de una imagen a puntuaciones lineales (logits) para pertenecer a las clases de una taxonomía seleccionada por el editor del módulo . Esto permite a los consumidores sacar conclusiones de la clasificación particular aprendida por el módulo del editor, y no solo de sus características subyacentes (cf. Image Feature Vector ).

Un módulo para la extracción de características de imágenes tiene una firma predeterminada que asigna un lote de imágenes a un lote de logits. Se puede usar así:

  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].

También define la firma nombrada correspondiente.

Especificación de firma

La firma con nombre para extraer vectores de características de imagen se invoca como

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

La entrada sigue la convención general para la entrada de imágenes .

El diccionario de salidas contiene una salida "default" de dtype float32 y shape [batch_size, num_classes] . El tamaño del batch_size es el mismo que en la entrada, pero no se conoce en el momento de la construcción del gráfico. num_classes es el número de clases en la clasificación, que es una constante conocida independiente del tamaño de entrada.

La evaluación de las outputs["default"][i, c] genera una puntuación que predice la pertenencia del ejemplo i a la clase con índice c .

Depende de la clasificación subyacente si estos puntajes están destinados a usarse con softmax (para clases mutuamente excluyentes), sigmoid (para clases ortogonales) o algo más. La documentación del módulo debe describir esto y hacer referencia a una definición de los índices de clase.

El diccionario de salidas puede proporcionar más salidas, por ejemplo, las activaciones de capas ocultas dentro del módulo. Sus claves y valores dependen del módulo. Se recomienda prefijar las claves dependientes de la arquitectura con un nombre de arquitectura (p. ej., para evitar confundir la capa intermedia "InceptionV3/Mixed_5c" con la capa convolucional superior "InceptionV2/Mixed_5c" ).

Entrada de imagen

Esto es común a todos los tipos de módulos de imagen y firmas de imagen.

Una firma que toma un lote de imágenes como entrada las acepta como un tensor 4-D denso de dtype float32 y forma [batch_size, height, width, 3] cuyos elementos son valores de color RGB de píxeles normalizados al rango [0, 1] . Esto es lo que obtienes de tf.image.decode_*() seguido de tf.image.convert_image_dtype(..., tf.float32) .

Un módulo con exactamente una (o una principal) entrada de imágenes usa el nombre "images" para esta entrada.

El módulo acepta cualquier tamaño de batch_size y, en consecuencia, establece la primera dimensión de TensorInfo.tensor_shape en "desconocido". La última dimensión se fija en el número 3 de canales RGB. Las dimensiones de height y width se fijan al tamaño esperado de las imágenes de entrada. (El trabajo futuro puede eliminar esa restricción para módulos totalmente convolucionales).

Los consumidores del módulo no deben inspeccionar la forma directamente, sino obtener la información de tamaño llamando a hub.get_expected_image_size() en el módulo o la especificación del módulo, y se espera que cambien el tamaño de las imágenes de entrada en consecuencia (normalmente antes o durante el procesamiento por lotes).

Para simplificar, los módulos TF-Hub usan el diseño de los tensores channels_last (o NHWC ) y dejan que el optimizador de gráficos de TensorFlow reescriba channels_first (o NCHW ) si es necesario. Lo ha estado haciendo de forma predeterminada desde la versión 1.7 de TensorFlow.