סיווג תמונות עם רכזת TensorFlow

בקולאב זה, תנסה דגמי סיווג תמונות מרובים מ- TensorFlow Hub ותחליט איזה מהם מתאים ביותר למקרה השימוש שלך.

בגלל TF Hub מעודדת האמנה קלט עקבית עבור מודלים שפועלים על התמונות, זה קל להתנסות עם ארכיטקטורות שונות כדי למצוא את זו שמתאימה ביותר לצרכים שלך.

הצג באתר TensorFlow.org הפעל בגוגל קולאב הצג ב-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

פונקציות עוזר לטעינת תמונה (נסתרת)

בחר מודל סיווג תמונה. לאחר מכן, נקבעים כמה משתנים פנימיים וקובץ התוויות מוריד ומוכן לשימוש.

ישנם כמה הבדלים טכניים בין הדגמים, כמו גודל קלט שונה, גודל דגם, דיוק וזמן מסקנות. כאן תוכל לשנות את הדגם שבו אתה משתמש עד שתמצא את הדגם המתאים ביותר למקרה השימוש שלך.

הידית (כתובת האתר) של הדגם מודפסת לנוחיותך. תיעוד נוסף על כל דגם זמין שם.

בחר מודל סיווג תמונה

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 כבר יהיה rescale את התמונה לפורמט צפוי.

בחר תמונת קלט

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