Phân loại hình ảnh với TensorFlow Hub

Trong chuyên mục này, bạn sẽ thử nhiều mô hình phân loại hình ảnh từ TensorFlow Hub và quyết định mô hình nào phù hợp nhất cho trường hợp sử dụng của bạn.

Bởi vì TF Hub khuyến khích một ước đầu vào phù hợp cho các mô hình hoạt động trên hình ảnh, thật dễ dàng để thử nghiệm với kiến trúc khác nhau để tìm ra một thích hợp nhất với nhu cầu của bạn.

Xem trên TensorFlow.org Chạy trong Google Colab Xem trên GitHub Tải xuống sổ ghi chép Xem các mẫu 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

Chức năng của người trợ giúp để tải hình ảnh (ẩn)

Chọn một mô hình phân loại hình ảnh. Sau đó, một số biến nội bộ được thiết lập và tệp nhãn được tải xuống và chuẩn bị để sử dụng.

Có một số khác biệt kỹ thuật giữa các mô hình, như kích thước đầu vào khác nhau, kích thước mô hình, độ chính xác và thời gian suy luận. Tại đây bạn có thể thay đổi kiểu máy bạn đang sử dụng cho đến khi bạn tìm thấy kiểu máy phù hợp nhất cho trường hợp sử dụng của mình.

Tay cầm (url) của mô hình được in để thuận tiện cho bạn. Tài liệu khác về mỗi mô hình có sẵn ở đó.

Chọn một mô hình Phân loại Hình ảnh

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

Bạn có thể chọn một trong những hình ảnh dưới đây hoặc sử dụng hình ảnh của riêng bạn. Chỉ cần nhớ rằng kích thước đầu vào cho các mô hình khác nhau và một số trong số chúng sử dụng kích thước đầu vào động (cho phép suy luận về hình ảnh chưa được chia tỷ lệ). Cho rằng, phương pháp load_image sẽ đã rescale hình ảnh sang định dạng mong muốn.

Chọn hình ảnh đầu vào

png

Giờ đây, mô hình đã được chọn, việc tải nó bằng TensorFlow Hub thật đơn giản.

Điều này cũng gọi mô hình với đầu vào ngẫu nhiên là một lần chạy "khởi động". Các cuộc gọi tiếp theo thường nhanh hơn nhiều và bạn có thể so sánh điều này với độ trễ bên dưới.

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

Mọi thứ đã sẵn sàng để suy luận. Tại đây bạn có thể xem 5 kết quả hàng đầu từ mô hình cho hình ảnh đã chọn.

# 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

Tìm hiểu thêm

Nếu bạn muốn tìm hiểu thêm và cố gắng làm thế nào để làm chuyển Learning với các mô hình này bạn có thể thử hướng dẫn này: Chuyển Learning để phân loại hình ảnh

Nếu bạn muốn kiểm tra trên các mô hình hình ảnh nhiều hơn bạn có thể kiểm tra xem chúng ra trên tfhub.dev