طبقه بندی تصویر با 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

بیشتر بدانید

اگر شما می خواهید برای کسب اطلاعات بیشتر و سعی کنید که چگونه به انجام آموزش انتقال با این مدل شما می توانید این آموزش را امتحان کنید: آموزش انتقال تصویر برای طبقه بندی

اگر شما می خواهید برای بررسی در مدل های تصویر بیشتر شما می توانید آنها را بر روی بررسی tfhub.dev