Classificazione delle immagini con TensorFlow Hub

In questa collaborazione, proverai più modelli di classificazione delle immagini da TensorFlow Hub e deciderai quale è il migliore per il tuo caso d'uso.

Perché TF Hub favorisce una convenzione di ingresso costante per i modelli che operano sulle immagini, è facile sperimentare con differenti architetture per trovare quello che meglio si adatta alle tue esigenze.

Visualizza su TensorFlow.org Esegui in Google Colab Visualizza su GitHub Scarica taccuino Vedi i modelli di mozzo TF
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

Funzioni di supporto per il caricamento dell'immagine (nascosto)

Seleziona un modello di classificazione delle immagini. Successivamente, vengono impostate alcune variabili interne e il file delle etichette viene scaricato e preparato per l'uso.

Esistono alcune differenze tecniche tra i modelli, come le diverse dimensioni di input, le dimensioni del modello, l'accuratezza e il tempo di inferenza. Qui puoi cambiare il modello che stai utilizzando fino a trovare quello più adatto al tuo caso d'uso.

La maniglia (url) del modello è stampata per comodità. Lì è disponibile più documentazione su ciascun modello.

Seleziona un modello di classificazione delle immagini

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

Puoi selezionare una delle immagini sottostanti o utilizzare la tua immagine. Ricorda solo che le dimensioni di input per i modelli variano e alcuni di essi utilizzano una dimensione di input dinamica (abilitando l'inferenza sull'immagine non ridimensionata). Dato che, il metodo load_image sarà già ridimensionare l'immagine al formato previsto.

Seleziona un'immagine in ingresso

png

Ora che il modello è stato scelto, caricarlo con TensorFlow Hub è semplice.

Questo chiama anche il modello con un input casuale come esecuzione di "riscaldamento". Le chiamate successive sono spesso molto più veloci e puoi confrontarle con la latenza di seguito.

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

Tutto è pronto per l'inferenza. Qui puoi vedere i primi 5 risultati del modello per l'immagine selezionata.

# 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

Per saperne di più

Se volete saperne di più e cercare come fare l'apprendimento di trasferimento con questi modelli si può provare questo tutorial: apprendimento di trasferimento per la classificazione Immagine

Se si desidera controllare su più modelli di immagini si possono verificare sul tfhub.dev