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

API comunes de modelos guardados para tareas de imágenes

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

Esta página describe cómo los modelos guardados de TF2 para tareas relacionadas con imágenes deben implementar la API de modelo guardado reutilizable . (Esto reemplaza las firmas comunes para imágenes para el formato TF1 Hub ahora obsoleto).

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 que lo use un clasificador de avance simple en el modelo de consumidor. (En términos de las CNN clásicas, este es el valor de cuello de botella después de que la extensión espacial se haya agrupado o aplanado, pero antes de que se realice la clasificación; para eso, consulte la clasificación de imágenes a continuación).

Un modelo guardado reutilizable para la extracción de características de imágenes tiene un método __call__ en el objeto raíz que asigna un lote de imágenes a un lote de vectores de características. Se puede usar así:

obj = hub.load("path/to/model")  # That's tf.saved_model.load() after download.
images = ...  # A batch of images with shape [batch_size, height, width, 3].
features = obj(images)   # A batch with shape [batch_size, num_features].

En Keras, el equivalente es

features = hub.KerasLayer("path/to/model")(images)

La entrada sigue la convención general para la entrada de imágenes . La documentación del modelo especifica el rango permitido para la height y el width de la entrada.

La salida es un tensor único de dtype float32 y shape [batch_size, num_features] . El tamaño del batch_size es el mismo que en la entrada. num_features es una constante específica del módulo independiente del tamaño de entrada.

Detalles de la API

La API Reusable SavedModel también proporciona una lista de obj.variables (p. ej., para la inicialización cuando no se está cargando con entusiasmo).

Un modelo que admite el ajuste fino proporciona una lista de obj.trainable_variables . Puede requerir que pase training=True para ejecutar en modo de entrenamiento (por ejemplo, para abandono). Algunos modelos permiten argumentos opcionales para anular los hiperparámetros (p. ej., tasa de deserción; se describirá en la documentación del modelo). El modelo también puede proporcionar una lista de obj.regularization_losses . Para obtener más información, consulte la API de modelo guardado reutilizable .

En Keras, hub.KerasLayer se ocupa de esto: hub.KerasLayer con trainable=True para habilitar el ajuste fino y (en el caso excepcional de que se apliquen anulaciones de hparam) con arguments=dict(some_hparam=some_value, ...)) .

notas

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

Ejemplos

Los modelos guardados reutilizables para vectores de características de imagen se utilizan en

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 que los consumidores del modelo saquen conclusiones de la clasificación particular aprendida por el módulo del editor. (Para la clasificación de imágenes con un nuevo conjunto de clases, es común reutilizar un modelo de vector de características de imagen con un nuevo clasificador).

Un modelo guardado reutilizable para la clasificación de imágenes tiene un método __call__ en el objeto raíz que asigna un lote de imágenes a un lote de logits. Se puede usar así:

obj = hub.load("path/to/model")  # That's tf.saved_model.load() after download.
images = ...  # A batch of images with shape [batch_size, height, width, 3].
logits = obj(images)   # A batch with shape [batch_size, num_classes].

En Keras, el equivalente es

logits = hub.KerasLayer("path/to/model")(images)

La entrada sigue la convención general para la entrada de imágenes . La documentación del modelo especifica el rango permitido para la height y el width de la entrada.

Los logits de salida son un solo tensor de dtype float32 y shape [batch_size, num_classes] . El tamaño del batch_size es el mismo que en la entrada. num_classes es el número de clases en la clasificación, que es una constante específica del modelo.

El valor logits[i, c] es 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.

Detalles de la API

La API Reusable SavedModel también proporciona una lista de obj.variables (p. ej., para la inicialización cuando no se está cargando con entusiasmo).

Un modelo que admite el ajuste fino proporciona una lista de obj.trainable_variables . Puede requerir que pase training=True para ejecutar en modo de entrenamiento (por ejemplo, para abandono). Algunos modelos permiten argumentos opcionales para anular los hiperparámetros (p. ej., tasa de deserción; se describirá en la documentación del modelo). El modelo también puede proporcionar una lista de obj.regularization_losses . Para obtener más información, consulte la API de modelo guardado reutilizable .

En Keras, hub.KerasLayer se ocupa de esto: hub.KerasLayer con trainable=True para habilitar el ajuste fino y (en el caso excepcional de que se apliquen anulaciones de hparam) con arguments=dict(some_hparam=some_value, ...)) .

Entrada de imagen

Esto es común a todos los tipos de modelos de imagen.

Un modelo 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) .

El modelo acepta cualquier batch_size . La documentación del modelo especifica el rango permitido de height y width . La última dimensión se fija en 3 canales RGB.

Se recomienda que los modelos utilicen el diseño channels_last (o NHWC ) de los tensores en todo momento y deje que el optimizador de gráficos de TensorFlow reescriba channels_first (o NCHW ) si es necesario.