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
2022-12-14 20:14:47.956855: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory
2022-12-14 20:14:47.956957: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory
2022-12-14 20:14:47.956966: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.

Helper functions for loading image (hidden)

이미지 분류 모델을 선택합니다. 그러면 일부 내부 변수가 설정되고 레이블 파일이 다운로드되어 사용할 준비가 됩니다.

다른 입력 크기, 모델 크기, 정확도 및 추론 시간과 같이 모델 간에는 몇 가지 기술적인 차이가 있습니다. 여기에서 사용 사례에 가장 적합한 모델을 찾을 때까지 사용 중인 모델을 변경할 수 있습니다.

사용자의 편의를 위해 모델의 핸들(url)이 인쇄되어 있습니다. 여기에서 각 모델에 대한 추가 문서를 사용할 수 있습니다.

참고: 이 모든 모델은 ImageNet 데이터세트에서 훈련되었습니다.

Select an Image Classification model

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
10484/10484 [==============================] - 0s 0us/step

아래 이미지 중 하나를 선택하거나 가지고 있는 이미지를 사용할 수 있습니다. 모델의 입력 크기는 다양하며 일부 모델은 동적 입력 크기를 사용(축소되지 않은 이미지에 대한 추론 가능)한다는 점을 기억하십시오. 이를 감안할 때 load_image 메서드는 이미 이미지의 크기를 예상 형식에 맞게 다시 조정합니다.

Select an Input 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.3 s, sys: 471 ms, total: 2.77 s
Wall time: 2.81 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 18.9 ms, sys: 1.97 ms, total: 20.9 ms
Wall time: 19.7 ms
(1)   35 - leatherback turtle: 0.7747842669487
(2)   34 - loggerhead: 0.10644073039293289
(3)   37 - terrapin: 0.005874690134078264
(4)  148 - grey whale: 0.0025945326779037714
(5)   36 - mud turtle: 0.002559840213507414

png

자세히 알아보기

더 자세히 알아보고 이러한 모델로 전이 학습을 수행하는 방법을 시도하려면 이미지 분류를 위한 전이 학습 튜토리얼을 시도해 보십시오.

더 많은 이미지 모델을 확인하려면 tfhub.dev에서 확인할 수 있습니다.