Klasifikasi Gambar dengan TensorFlow Hub

Dalam colab ini, Anda akan mencoba beberapa model klasifikasi gambar dari TensorFlow Hub dan memutuskan mana yang terbaik untuk kasus penggunaan Anda.

Karena TF Hub mendorong konvensi masukan yang konsisten untuk model yang beroperasi pada gambar, mudah untuk bereksperimen dengan arsitektur yang berbeda untuk menemukan satu yang paling sesuai dengan kebutuhan Anda.

Lihat di TensorFlow.org Jalankan di Google Colab Lihat di GitHub Unduh buku catatan Lihat model 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

Fungsi pembantu untuk memuat gambar (tersembunyi)

Pilih Model Klasifikasi Gambar. Setelah itu, beberapa variabel internal ditetapkan dan file label diunduh dan disiapkan untuk digunakan.

Ada beberapa perbedaan teknis antara model, seperti ukuran input yang berbeda, ukuran model, akurasi, dan waktu inferensi. Di sini Anda dapat mengubah model yang Anda gunakan sampai Anda menemukan yang paling cocok untuk kasus penggunaan Anda.

Pegangan (url) model dicetak untuk kenyamanan Anda. Dokumentasi lebih lanjut tentang setiap model tersedia di sana.

Pilih model Klasifikasi Gambar

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

Anda dapat memilih salah satu gambar di bawah ini, atau menggunakan gambar Anda sendiri. Ingatlah bahwa ukuran input untuk model bervariasi dan beberapa di antaranya menggunakan ukuran input dinamis (mengaktifkan inferensi pada gambar yang tidak diskalakan). Mengingat bahwa, metode load_image sudah akan rescale gambar ke format yang diharapkan.

Pilih Gambar Masukan

png

Sekarang setelah model dipilih, memuatnya dengan TensorFlow Hub menjadi mudah.

Ini juga menyebut model dengan input acak sebagai lari "pemanasan". Panggilan berikutnya seringkali jauh lebih cepat, dan Anda dapat membandingkannya dengan latensi di bawah ini.

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

Semuanya siap untuk inferensi. Di sini Anda dapat melihat 5 hasil teratas dari model untuk gambar yang dipilih.

# 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

Belajarlah lagi

Jika Anda ingin mempelajari lebih lanjut dan mencoba bagaimana melakukan Belajar transfer dengan model ini Anda dapat mencoba tutorial ini: Belajar transfer untuk klasifikasi Gambar

Jika Anda ingin memeriksa pada model gambar yang lebih Anda dapat memeriksa mereka di tfhub.dev