Классификация изображений с помощью TensorFlow Hub

В этой колабе вы попробуете несколько моделей классификации изображений из TensorFlow Hub и решите, какая из них лучше всего подходит для вашего варианта использования.

Поскольку TF концентратор поощряет последовательный ввод конвенции для моделей, работающих на изображениях, легко экспериментировать с различными архитектурами , чтобы найти тот , который наилучшим образом соответствует вашим потребностям.

Посмотреть на TensorFlow.org Запускаем в Google Colab Посмотреть на GitHub Скачать блокнот Посмотреть модели 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

Вспомогательные функции для загрузки изображения (скрыто)

Выберите модель классификации изображений. После этого устанавливаются некоторые внутренние переменные, и файл меток загружается и готовится к использованию.

Между моделями есть некоторые технические различия, например разный размер входных данных, размер модели, точность и время вывода. Здесь вы можете изменить используемую модель, пока не найдете наиболее подходящую для вашего варианта использования.

Ручка (URL) модели напечатана для вашего удобства. Дополнительная документация по каждой модели доступна там.

Выберите модель классификации изображений

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

Вы можете выбрать одно из изображений ниже или использовать собственное изображение. Просто помните, что размер ввода для моделей различается, и некоторые из них используют динамический размер ввода (что позволяет делать вывод на немасштабированном изображении). Учитывая , что метод load_image уже масштабировать изображение к ожидаемому формату.

Выберите входное изображение

png

Теперь, когда модель выбрана, загрузить ее с помощью TensorFlow Hub очень просто.

Это также вызывает модель со случайным вводом как «прогрев». Последующие вызовы часто выполняются намного быстрее, и вы можете сравнить это с задержкой ниже.

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

Все готово для вывода. Здесь вы можете увидеть 5 лучших результатов модели для выбранного изображения.

# 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

Выучить больше

Если вы хотите узнать больше и попробовать , как сделать Transfer Learning с этими моделями вы можете попробовать этот учебник: Transfer Learning для классификации изображений

Если вы хотите , чтобы проверить больше моделей изображений вы можете проверить их на tfhub.dev