Classificação de imagens com TensorFlow Hub

Neste colab, você experimentará vários modelos de classificação de imagem do TensorFlow Hub e decidirá qual é o melhor para seu caso de uso.

Porque TF Hub incentiva uma convenção entrada consistente para modelos que operam em imagens, é fácil de experimentar com diferentes arquiteturas para encontrar aquele que melhor se adapta às suas necessidades.

Ver no TensorFlow.org Executar no Google Colab Ver no GitHub Baixar caderno Veja os 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

Funções auxiliares para carregar imagem (oculto)

Selecione um modelo de classificação de imagem. Depois disso, algumas variáveis ​​internas são definidas e o arquivo de rótulos é baixado e preparado para uso.

Existem algumas diferenças técnicas entre os modelos, como diferentes tamanhos de entrada, tamanho do modelo, precisão e tempo de inferência. Aqui você pode alterar o modelo que está usando até encontrar o mais adequado para o seu caso de uso.

A alça (url) do modelo é impressa para sua conveniência. Mais documentação sobre cada modelo está disponível aqui.

Selecione um modelo de classificação de imagem

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

Você pode selecionar uma das imagens abaixo ou usar sua própria imagem. Apenas lembre-se de que o tamanho de entrada para os modelos varia e alguns deles usam um tamanho de entrada dinâmico (permitindo inferência na imagem fora de escala). Dado que, o método load_image já irá redimensionar a imagem para o formato esperado.

Selecione uma imagem de entrada

png

Agora que o modelo foi escolhido, carregá-lo com o TensorFlow Hub é simples.

Isso também chama o modelo com uma entrada aleatória como uma execução de "aquecimento". As chamadas subsequentes costumam ser muito mais rápidas e você pode comparar isso com a latência abaixo.

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

Tudo está pronto para inferência. Aqui você pode ver os 5 principais resultados do modelo para a imagem selecionada.

# 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

Saber mais

Se você quer aprender mais e tentar como fazer transferência de aprendizagem com esses modelos você pode tentar este tutorial: Aprendizagem Transferência para a classificação Imagem

Se você quiser verificar em mais modelos de imagem que você pode vê-los em tfhub.dev