การจัดประเภทรูปภาพด้วย TensorFlow Hub

ใน colab นี้ คุณจะลองใช้โมเดลการจัดหมวดหมู่รูปภาพหลายแบบจาก TensorFlow Hub และตัดสินใจว่าอันไหนดีที่สุดสำหรับกรณีการใช้งานของคุณ

เพราะ TF Hub กระตุ้นให้เกิด การประชุมการป้อนข้อมูลที่สอดคล้องกัน สำหรับรูปแบบที่ทำงานในภาพมันเป็นเรื่องง่ายที่จะทดสอบด้วยสถาปัตยกรรมที่แตกต่างกันที่จะหาคนที่เหมาะกับความต้องการของคุณ

ดูบน 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 แล้วจะ 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