Classification d'images avec TensorFlow Hub

Dans cette collaboration, vous allez essayer plusieurs modèles de classification d'images de TensorFlow Hub et décider lequel convient le mieux à votre cas d'utilisation.

Parce que TF Hub encourage une convention d'entrée cohérente pour les modèles qui fonctionnent sur les images, il est facile d'expérimenter avec différentes architectures pour trouver celui qui correspond le mieux à vos besoins.

Voir sur TensorFlow.org Exécuter dans Google Colab Voir sur GitHub Télécharger le cahier Voir les modèles 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

Fonctions d'assistance pour le chargement de l'image (cachée)

Sélectionnez un modèle de classification d'images. Après cela, certaines variables internes sont définies et le fichier d'étiquettes est téléchargé et préparé pour être utilisé.

Il existe des différences techniques entre les modèles, telles que la taille d'entrée, la taille du modèle, la précision et le temps d'inférence. Ici, vous pouvez modifier le modèle que vous utilisez jusqu'à ce que vous trouviez celui qui convient le mieux à votre cas d'utilisation.

La poignée (url) du modèle est imprimée pour votre commodité. Plus de documentation sur chaque modèle y est disponible.

Sélectionnez un modèle de classification d'images

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

Vous pouvez sélectionner l'une des images ci-dessous ou utiliser votre propre image. N'oubliez pas que la taille d'entrée des modèles varie et que certains d'entre eux utilisent une taille d'entrée dynamique (permettant l'inférence sur l'image non mise à l'échelle). Étant donné que, la méthode load_image sera déjà redimensionnez l'image au format attendu.

Sélectionnez une image d'entrée

png

Maintenant que le modèle a été choisi, le charger avec TensorFlow Hub est simple.

Cela appelle également le modèle avec une entrée aléatoire en tant qu'exécution "d'échauffement". Les appels suivants sont souvent beaucoup plus rapides, et vous pouvez comparer cela avec la latence ci-dessous.

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

Tout est prêt pour l'inférence. Ici, vous pouvez voir les 5 meilleurs résultats du modèle pour l'image sélectionnée.

# 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

Apprendre encore plus

Si vous voulez en savoir plus et essayer comment faire l' apprentissage de transfert avec ces modèles , vous pouvez essayer ce tutoriel: l' apprentissage de transfert pour la classification des images

Si vous voulez vérifier plus de modèles d'image que vous pouvez les consulter sur tfhub.dev