Clasificación de imágenes con TensorFlow Hub

En este colab, probará varios modelos de clasificación de imágenes de TensorFlow Hub y decidirá cuál es el mejor para su caso de uso.

Debido TF Hub fomenta una convención de datos consistentes para los modelos que operan en las imágenes, es fácil de experimentar con diferentes arquitecturas para encontrar el que mejor se adapte a sus necesidades.

Ver en TensorFlow.org Ejecutar en Google Colab Ver en GitHub Descargar cuaderno Ver modelos TF Hub
import tensorflow as tf
import tensorflow_hub as hub

import requests
from PIL import Image
from io import BytesIO

import matplotlib.pyplot as plt
import numpy as np

Funciones de ayuda para cargar imágenes (ocultas)

Seleccione un modelo de clasificación de imágenes. Después de eso, se establecen algunas variables internas y el archivo de etiquetas se descarga y se prepara para su uso.

Existen algunas diferencias técnicas entre los modelos, como diferentes tamaños de entrada, tamaño de modelo, precisión y tiempo de inferencia. Aquí puede cambiar el modelo que está utilizando hasta que encuentre el más adecuado para su caso de uso.

El identificador (URL) del modelo está impreso para su conveniencia. Allí encontrará más documentación sobre cada modelo.

Seleccione un modelo de clasificación de imágenes

Selected model: efficientnetv2-s : https://tfhub.dev/google/imagenet/efficientnet_v2_imagenet1k_s/classification/2
Images will be converted to 384x384
Downloading data from https://storage.googleapis.com/download.tensorflow.org/data/ImageNetLabels.txt
16384/10484 [==============================================] - 0s 0us/step
24576/10484 [======================================================================] - 0s 0us/step

Puede seleccionar una de las imágenes a continuación o usar su propia imagen. Solo recuerde que el tamaño de entrada para los modelos varía y algunos de ellos usan un tamaño de entrada dinámico (lo que permite la inferencia en la imagen sin escala). Teniendo en cuenta que, el método load_image ya se reescalar la imagen en el formato esperado.

Seleccionar una imagen de entrada

png

Ahora que se eligió el modelo, cargarlo con TensorFlow Hub es simple.

Esto también llama al modelo con una entrada aleatoria como una ejecución de "calentamiento". Las llamadas posteriores suelen ser mucho más rápidas y puede comparar esto con la latencia a continuación.

classifier = hub.load(model_handle)

input_shape = image.shape
warmup_input = tf.random.uniform(input_shape, 0, 1.0)
%time warmup_logits = classifier(warmup_input).numpy()
CPU times: user 2.88 s, sys: 470 ms, total: 3.35 s
Wall time: 3.41 s

Todo está listo para la inferencia. Aquí puede ver los 5 mejores resultados del modelo para la imagen seleccionada.

# Run model on image
%time probabilities = tf.nn.softmax(classifier(image)).numpy()

top_5 = tf.argsort(probabilities, axis=-1, direction="DESCENDING")[0][:5].numpy()
np_classes = np.array(classes)

# Some models include an additional 'background' class in the predictions, so
# we must account for this when reading the class labels.
includes_background_class = probabilities.shape[1] == 1001

for i, item in enumerate(top_5):
  class_index = item if includes_background_class else item + 1
  line = f'({i+1}) {class_index:4} - {classes[class_index]}: {probabilities[0][top_5][i]}'
  print(line)

show_image(image, '')
CPU times: user 27.4 ms, sys: 9 µs, total: 27.4 ms
Wall time: 25.9 ms
(1)   35 - leatherback turtle: 0.7747752666473389
(2)   34 - loggerhead: 0.10644760727882385
(3)   37 - terrapin: 0.005874828901141882
(4)  148 - grey whale: 0.002594555728137493
(5)   36 - mud turtle: 0.0025599468499422073

png

Aprende más

Si desea obtener más información y tratar de cómo hacer la transferencia del aprendizaje con estos modelos puede probar este tutorial: Aprendizaje de transferencia de Clasificación de la imagen

Si desea comprobar en más modelos de imagen que puede comprobar a cabo en tfhub.dev