도움말 Kaggle에 TensorFlow과 그레이트 배리어 리프 (Great Barrier Reef)를 보호하기 도전에 참여

TensorFlow Lite Model Maker를 사용한 이미지 분류

TensorFlow.org에서 보기 Google Colab에서 실행 GitHub에서 소스 보기 노트북 다운로드 TF 허브 모델 보기

TensorFlow 라이트 모델 메이커 라이브러리 적응 및 온 - 디바이스 애플리케이션 ML이 모델을 구축 할 때 특정 입력 데이터에 TensorFlow 신경망 모델을 변환하는 과정을 단순화한다.

이 노트북은 모바일 장치에서 꽃을 분류하기 위해 일반적으로 사용되는 이미지 분류 모델의 적용 및 변환을 설명하기 위해 이 Model Maker 라이브러리를 활용하는 종단 간 예제를 보여줍니다.

전제 조건

이 예제를 실행하려면, 우리 GitHub의에서 그 모델 메이커 패키지 등 여러 가지 필요한 패키지를 설치하는 첫번째 필요 REPO를 .

pip install -q tflite-model-maker

필요한 패키지를 가져옵니다.

import os

import numpy as np

import tensorflow as tf
assert tf.__version__.startswith('2')

from tflite_model_maker import model_spec
from tflite_model_maker import image_classifier
from tflite_model_maker.config import ExportFormat
from tflite_model_maker.config import QuantizationConfig
from tflite_model_maker.image_classifier import DataLoader

import matplotlib.pyplot as plt
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/pkg_resources/__init__.py:119: PkgResourcesDeprecationWarning: 0.18ubuntu0.18.04.1 is an invalid version and will not be supported in a future release
  PkgResourcesDeprecationWarning,
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/numba/core/errors.py:168: UserWarning: Insufficiently recent colorama version found. Numba requires colorama >= 0.3.9
  warnings.warn(msg)

간단한 종단 간 예제

데이터 경로 가져오기

이 간단한 종단 간 예제로 재생할 이미지를 가져와 보겠습니다. 수백 장의 이미지는 Model Maker의 좋은 시작이며 더 많은 데이터가 더 나은 정확도를 달성할 수 있습니다.

Downloading data from https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz
228818944/228813984 [==============================] - 1s 0us/step
228827136/228813984 [==============================] - 1s 0us/step

당신은 대체 할 수 image_path 자신의 이미지 폴더와 함께. colab에 데이터를 업로드하는 경우 아래 이미지에서 빨간색 사각형으로 표시된 왼쪽 사이드바에서 업로드 버튼을 찾을 수 있습니다. zip 파일을 업로드하고 압축을 푸십시오. 루트 파일 경로는 현재 경로입니다.

파일 업로드

클라우드에 이미지를 업로드하지 않으려면, 다음과 같은 로컬 라이브러리를 실행하려고 할 수있는 가이드 GitHub에있다.

예제 실행

이 예제는 아래와 같이 전체 프로세스의 한 단계를 나타내는 4줄의 코드로 구성되어 있습니다.

1단계. 온디바이스 ML 앱과 관련된 입력 데이터를 로드합니다. 훈련 데이터와 테스트 데이터로 나눕니다.

data = DataLoader.from_folder(image_path)
train_data, test_data = data.split(0.9)
INFO:tensorflow:Load image with size: 3670, num_label: 5, labels: daisy, dandelion, roses, sunflowers, tulips.

2단계. TensorFlow 모델을 사용자 지정합니다.

model = image_classifier.create(train_data)
INFO:tensorflow:Retraining the models...
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
hub_keras_layer_v1v2 (HubKer (None, 1280)              3413024   
_________________________________________________________________
dropout (Dropout)            (None, 1280)              0         
_________________________________________________________________
dense (Dense)                (None, 5)                 6405      
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________
None
Epoch 1/5
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.
  "The `lr` argument is deprecated, use `learning_rate` instead.")
103/103 [==============================] - 7s 35ms/step - loss: 0.8551 - accuracy: 0.7718
Epoch 2/5
103/103 [==============================] - 4s 35ms/step - loss: 0.6503 - accuracy: 0.8956
Epoch 3/5
103/103 [==============================] - 4s 34ms/step - loss: 0.6157 - accuracy: 0.9196
Epoch 4/5
103/103 [==============================] - 3s 33ms/step - loss: 0.6036 - accuracy: 0.9293
Epoch 5/5
103/103 [==============================] - 4s 34ms/step - loss: 0.5929 - accuracy: 0.9317

3단계. 모델을 평가합니다.

loss, accuracy = model.evaluate(test_data)
12/12 [==============================] - 2s 40ms/step - loss: 0.6282 - accuracy: 0.9019

4단계. TensorFlow Lite 모델로 내보냅니다.

여기, 우리와 TensorFlow 라이트 모델 내보내기 메타 데이터 모델을 설명하기위한 표준을 제공합니다. 레이블 파일은 메타데이터에 포함됩니다. 기본 훈련 후 양자화 기술은 이미지 분류 작업에 대한 전체 정수 양자화입니다.

업로드 부분과 동일하게 왼쪽 사이드바에서 다운받아 사용하시면 됩니다.

model.export(export_dir='.')
2021-11-02 11:34:05.568024: W tensorflow/python/util/util.cc:348] Sets are not currently considered sequences, but this may change in the future, so consider avoiding using them.
INFO:tensorflow:Assets written to: /tmp/tmpkqikzotp/assets
INFO:tensorflow:Assets written to: /tmp/tmpkqikzotp/assets
2021-11-02 11:34:09.488041: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:351] Ignored output_format.
2021-11-02 11:34:09.488090: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:354] Ignored drop_control_dependency.
fully_quantize: 0, inference_type: 6, input_inference_type: 3, output_inference_type: 3
WARNING:absl:For model inputs containing unsupported operations which cannot be quantized, the `inference_input_type` attribute will default to the original type.
INFO:tensorflow:Label file is inside the TFLite model with metadata.
INFO:tensorflow:Label file is inside the TFLite model with metadata.
INFO:tensorflow:Saving labels in /tmp/tmpoblx4ed5/labels.txt
INFO:tensorflow:Saving labels in /tmp/tmpoblx4ed5/labels.txt
INFO:tensorflow:TensorFlow Lite model exported successfully: ./model.tflite
INFO:tensorflow:TensorFlow Lite model exported successfully: ./model.tflite

다음의 간단한 4 단계 후, 우리는 더에 같이 온 - 디바이스 애플리케이션에서 TensorFlow 라이트 모델 파일을 사용할 수있는 이미지 분류 참조 응용 프로그램.

세부 프로세스

현재 EfficientNet-Lite* 모델, MobileNetV2, ResNet50과 같은 여러 모델을 이미지 분류를 위한 사전 훈련된 모델로 지원합니다. 그러나 몇 줄의 코드로 이 라이브러리에 새로운 사전 훈련된 모델을 추가하는 것은 매우 유연합니다.

다음은 더 자세한 내용을 보여주기 위해 이 종단 간 예제를 단계별로 안내합니다.

1단계: 기기 내 ML 앱과 관련된 입력 데이터 로드

꽃 데이터 세트에는 5개 클래스에 속하는 3670개의 이미지가 포함되어 있습니다. 데이터 세트의 아카이브 버전을 다운로드하고 압축을 풉니다.

데이터 세트의 디렉토리 구조는 다음과 같습니다.

flower_photos
|__ daisy
    |______ 100080576_f52e8ee070_n.jpg
    |______ 14167534527_781ceb1b7a_n.jpg
    |______ ...
|__ dandelion
    |______ 10043234166_e6dd915111_n.jpg
    |______ 1426682852_e62169221f_m.jpg
    |______ ...
|__ roses
    |______ 102501987_3cdb8e5394_n.jpg
    |______ 14982802401_a3dfb22afb.jpg
    |______ ...
|__ sunflowers
    |______ 12471791574_bb1be83df4.jpg
    |______ 15122112402_cafa41934f.jpg
    |______ ...
|__ tulips
    |______ 13976522214_ccec508fe7.jpg
    |______ 14487943607_651e8062a1_m.jpg
    |______ ...
image_path = tf.keras.utils.get_file(
      'flower_photos.tgz',
      'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
      extract=True)
image_path = os.path.join(os.path.dirname(image_path), 'flower_photos')

사용 DataLoader 부하 데이터 클래스입니다.

관해서 from_folder() 에있어서, 상기 폴더에 데이터를로드 할 수있다. 동일한 클래스의 이미지 데이터가 동일한 하위 디렉터리에 있고 하위 폴더 이름이 클래스 이름이라고 가정합니다. 현재 JPEG 인코딩 이미지와 PNG 인코딩 이미지가 지원됩니다.

data = DataLoader.from_folder(image_path)
INFO:tensorflow:Load image with size: 3670, num_label: 5, labels: daisy, dandelion, roses, sunflowers, tulips.
INFO:tensorflow:Load image with size: 3670, num_label: 5, labels: daisy, dandelion, roses, sunflowers, tulips.

훈련 데이터(80%), 검증 데이터(10%, 선택 사항) 및 테스트 데이터(10%)로 분할합니다.

train_data, rest_data = data.split(0.8)
validation_data, test_data = rest_data.split(0.5)

레이블이 있는 25개의 이미지 예를 표시합니다.

plt.figure(figsize=(10,10))
for i, (image, label) in enumerate(data.gen_dataset().unbatch().take(25)):
  plt.subplot(5,5,i+1)
  plt.xticks([])
  plt.yticks([])
  plt.grid(False)
  plt.imshow(image.numpy(), cmap=plt.cm.gray)
  plt.xlabel(data.index_to_label[label.numpy()])
plt.show()

png

2단계: TensorFlow 모델 사용자 지정

로드된 데이터를 기반으로 사용자 지정 이미지 분류기 모델을 만듭니다. 기본 모델은 EfficientNet-Lite0입니다.

model = image_classifier.create(train_data, validation_data=validation_data)
INFO:tensorflow:Retraining the models...
INFO:tensorflow:Retraining the models...
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
hub_keras_layer_v1v2_1 (HubK (None, 1280)              3413024   
_________________________________________________________________
dropout_1 (Dropout)          (None, 1280)              0         
_________________________________________________________________
dense_1 (Dense)              (None, 5)                 6405      
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________
None
Epoch 1/5
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.
  "The `lr` argument is deprecated, use `learning_rate` instead.")
91/91 [==============================] - 6s 54ms/step - loss: 0.8689 - accuracy: 0.7655 - val_loss: 0.6941 - val_accuracy: 0.8835
Epoch 2/5
91/91 [==============================] - 5s 50ms/step - loss: 0.6596 - accuracy: 0.8949 - val_loss: 0.6668 - val_accuracy: 0.8807
Epoch 3/5
91/91 [==============================] - 5s 50ms/step - loss: 0.6188 - accuracy: 0.9159 - val_loss: 0.6537 - val_accuracy: 0.8807
Epoch 4/5
91/91 [==============================] - 5s 52ms/step - loss: 0.6050 - accuracy: 0.9210 - val_loss: 0.6432 - val_accuracy: 0.8892
Epoch 5/5
91/91 [==============================] - 5s 52ms/step - loss: 0.5898 - accuracy: 0.9348 - val_loss: 0.6348 - val_accuracy: 0.8864

자세한 모델 구조를 살펴보십시오.

model.summary()
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
hub_keras_layer_v1v2_1 (HubK (None, 1280)              3413024   
_________________________________________________________________
dropout_1 (Dropout)          (None, 1280)              0         
_________________________________________________________________
dense_1 (Dense)              (None, 5)                 6405      
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________

3단계: 맞춤형 모델 평가

모델의 결과를 평가하고 모델의 손실과 정확도를 얻습니다.

loss, accuracy = model.evaluate(test_data)
12/12 [==============================] - 1s 27ms/step - loss: 0.6324 - accuracy: 0.8965

100개의 테스트 이미지에 예측된 결과를 표시할 수 있습니다. 빨간색으로 예측된 ​​레이블은 잘못된 예측 결과이고 다른 레이블은 정확합니다.

# A helper function that returns 'red'/'black' depending on if its two input
# parameter matches or not.
def get_label_color(val1, val2):
  if val1 == val2:
    return 'black'
  else:
    return 'red'

# Then plot 100 test images and their predicted labels.
# If a prediction result is different from the label provided label in "test"
# dataset, we will highlight it in red color.
plt.figure(figsize=(20, 20))
predicts = model.predict_top_k(test_data)
for i, (image, label) in enumerate(test_data.gen_dataset().unbatch().take(100)):
  ax = plt.subplot(10, 10, i+1)
  plt.xticks([])
  plt.yticks([])
  plt.grid(False)
  plt.imshow(image.numpy(), cmap=plt.cm.gray)

  predict_label = predicts[i][0][0]
  color = get_label_color(predict_label,
                          test_data.index_to_label[label.numpy()])
  ax.xaxis.label.set_color(color)
  plt.xlabel('Predicted: %s' % predict_label)
plt.show()

png

정확성은이 응용 프로그램의 요구 사항을 충족하지 않는 경우, 하나는 참조 할 수 고급 사용법 등, 더 큰 모델로 변경 재 훈련 매개 변수를 조정으로 대안을 탐구

4단계: TensorFlow Lite 모델로 내보내기

와 TensorFlow 라이트 모델 형식으로 훈련 된 모델을 변환 메타 데이터 나중에 온 - 디바이스 ML 응용 프로그램에서 사용할 수 있도록. 레이블 파일과 어휘 파일은 메타데이터에 포함됩니다. 기본 TFLite 파일 이름입니다 model.tflite .

많은 온디바이스 ML 애플리케이션에서 모델 크기는 중요한 요소입니다. 따라서 모델을 더 작게 만들고 잠재적으로 더 빠르게 실행하려면 양자화를 적용하는 것이 좋습니다. 기본 훈련 후 양자화 기술은 이미지 분류 작업에 대한 전체 정수 양자화입니다.

model.export(export_dir='.')
INFO:tensorflow:Assets written to: /tmp/tmp6tt5g8de/assets
INFO:tensorflow:Assets written to: /tmp/tmp6tt5g8de/assets
2021-11-02 11:35:40.254046: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:351] Ignored output_format.
2021-11-02 11:35:40.254099: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:354] Ignored drop_control_dependency.
fully_quantize: 0, inference_type: 6, input_inference_type: 3, output_inference_type: 3
WARNING:absl:For model inputs containing unsupported operations which cannot be quantized, the `inference_input_type` attribute will default to the original type.
INFO:tensorflow:Label file is inside the TFLite model with metadata.
INFO:tensorflow:Label file is inside the TFLite model with metadata.
INFO:tensorflow:Saving labels in /tmp/tmpf601xty1/labels.txt
INFO:tensorflow:Saving labels in /tmp/tmpf601xty1/labels.txt
INFO:tensorflow:TensorFlow Lite model exported successfully: ./model.tflite
INFO:tensorflow:TensorFlow Lite model exported successfully: ./model.tflite

참조 예를 들어, 응용 프로그램 및 영상 분류의 가이드 모바일 애플 리케이션에 TensorFlow 라이트 모델을 통합하는 방법에 대한 자세한 내용을.

이 모델은 안드로이드 또는 사용하여 iOS 앱에 통합 할 수 ImageClassifier의 APITensorFlow 라이트 태스크 라이브러리를 .

허용되는 내보내기 형식은 다음 중 하나 또는 목록일 수 있습니다.

기본적으로 TensorFlow Lite 모델을 메타데이터와 함께 내보냅니다. 다른 파일을 선택적으로 내보낼 수도 있습니다. 예를 들어 다음과 같이 레이블 파일만 내보냅니다.

model.export(export_dir='.', export_format=ExportFormat.LABEL)
INFO:tensorflow:Saving labels in ./labels.txt
INFO:tensorflow:Saving labels in ./labels.txt

또한 함께 tflite 모델 평가할 수 evaluate_tflite 방법을.

model.evaluate_tflite('model.tflite', test_data)
{'accuracy': 0.9019073569482289}

고급 사용법

create 기능이 라이브러리의 중요한 부분이다. 그것은 유사한 pretrained 모델로 전송 학습을 사용 튜토리얼 .

create 기능은 다음 단계가 포함되어 있습니다 :

  1. 매개 변수에 따라 데이터를 테스트, 교육, 검증에 데이터를 분할 validation_ratiotest_ratio . 기본 값 validation_ratiotest_ratio 있습니다 0.10.1 .
  2. 다운로드 이미지 특징 벡터 TensorFlow 허브에서 기본 모델로한다. 사전 훈련된 기본 모델은 EfficientNet-Lite0입니다.
  3. 와 드롭 아웃 계층으로 분류 헤드를 추가 dropout_rate 머리 층과 사전 교육을받은 모델 사이. 기본 dropout_rate 기본입니다 dropout_rate 에서 값 make_image_classifier_lib TensorFlow 허브로.
  4. 원시 입력 데이터를 전처리합니다. 현재 각 이미지 픽셀의 값을 모델 입력 크기로 정규화하고 모델 입력 크기로 크기 조정하는 등의 전처리 단계가 있습니다. EfficientNet-Lite0 입력 스케일이 [0, 1] 및 입력 화상 사이즈 [224, 224, 3] .
  5. 분류기 모델에 데이터를 공급합니다. 기본적으로 같은 교육 시대, 배치 크기, 학습 속도, 운동량 등의 훈련 매개 변수의 기본값입니다 make_image_classifier_lib TensorFlow 허브로는. 분류기 헤드만 훈련됩니다.

이 섹션에서는 다른 이미지 분류 모델로의 전환, 훈련 하이퍼파라미터 변경 등을 포함하여 몇 가지 고급 주제를 설명합니다.

TensorFlow Lite 모델에서 훈련 후 양자화 사용자 지정

후 교육 양자화는 또한 CPU 및 하드웨어 가속기 추론 속도를 향상시키는 동시에 모델의 정확성에 약간의 저하, 모델의 크기와 추론 대기 시간을 줄일 수 있습니다 변환 기술이다. 따라서 모델을 최적화하는 데 널리 사용됩니다.

Model Maker 라이브러리는 모델을 내보낼 때 기본 훈련 후 양자화 기술을 적용합니다. 당신이 훈련 후 양자화를 사용자 정의하려면, 모델 메이커 사용하여 여러 훈련 후 양자화 옵션 지원 QuantizationConfig을 뿐만 아니라합니다. float16 양자화를 예로 들어 보겠습니다. 먼저 양자화 구성을 정의합니다.

config = QuantizationConfig.for_float16()

그런 다음 이러한 구성으로 TensorFlow Lite 모델을 내보냅니다.

model.export(export_dir='.', tflite_filename='model_fp16.tflite', quantization_config=config)
INFO:tensorflow:Assets written to: /tmp/tmpa528qeqj/assets
INFO:tensorflow:Assets written to: /tmp/tmpa528qeqj/assets
INFO:tensorflow:Label file is inside the TFLite model with metadata.
2021-11-02 11:43:43.724165: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:351] Ignored output_format.
2021-11-02 11:43:43.724219: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:354] Ignored drop_control_dependency.
INFO:tensorflow:Label file is inside the TFLite model with metadata.
INFO:tensorflow:Saving labels in /tmp/tmpvlx_qa4j/labels.txt
INFO:tensorflow:Saving labels in /tmp/tmpvlx_qa4j/labels.txt
INFO:tensorflow:TensorFlow Lite model exported successfully: ./model_fp16.tflite
INFO:tensorflow:TensorFlow Lite model exported successfully: ./model_fp16.tflite

Colab에서는라는 이름의 모델을 다운로드 할 수 있습니다 model_fp16.tflite 위에서 언급 한 업로드 부분 같은 왼쪽 사이드 바에서을.

모델 변경

이 라이브러리에서 지원하는 모델로 변경하십시오.

이 라이브러리는 현재 EfficientNet-Lite 모델, MobileNetV2, ResNet50을 지원합니다. EfficientNet-Lite는 에지 장치에 대한 국가의 예술 정확성과 적절한을 얻을 수있는 영상 분류 모델의 가족입니다. 기본 모델은 EfficientNet-Lite0입니다.

우리는 매개 변수로 설정하여 MobileNetV2에 모델을 전환 할 수 model_spec 에서 MobileNetV2의 모델 규격을 create 방법.

model = image_classifier.create(train_data, model_spec=model_spec.get('mobilenet_v2'), validation_data=validation_data)
INFO:tensorflow:Retraining the models...
INFO:tensorflow:Retraining the models...
Model: "sequential_2"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
hub_keras_layer_v1v2_2 (HubK (None, 1280)              2257984   
_________________________________________________________________
dropout_2 (Dropout)          (None, 1280)              0         
_________________________________________________________________
dense_2 (Dense)              (None, 5)                 6405      
=================================================================
Total params: 2,264,389
Trainable params: 6,405
Non-trainable params: 2,257,984
_________________________________________________________________
None
Epoch 1/5
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/keras/optimizer_v2/optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.
  "The `lr` argument is deprecated, use `learning_rate` instead.")
91/91 [==============================] - 8s 53ms/step - loss: 0.9163 - accuracy: 0.7634 - val_loss: 0.7789 - val_accuracy: 0.8267
Epoch 2/5
91/91 [==============================] - 4s 50ms/step - loss: 0.6836 - accuracy: 0.8822 - val_loss: 0.7223 - val_accuracy: 0.8551
Epoch 3/5
91/91 [==============================] - 4s 50ms/step - loss: 0.6506 - accuracy: 0.9045 - val_loss: 0.7086 - val_accuracy: 0.8580
Epoch 4/5
91/91 [==============================] - 5s 50ms/step - loss: 0.6218 - accuracy: 0.9227 - val_loss: 0.7049 - val_accuracy: 0.8636
Epoch 5/5
91/91 [==============================] - 5s 52ms/step - loss: 0.6092 - accuracy: 0.9279 - val_loss: 0.7181 - val_accuracy: 0.8580

새로 재교육된 MobileNetV2 모델을 평가하여 테스트 데이터의 정확성과 손실을 확인합니다.

loss, accuracy = model.evaluate(test_data)
12/12 [==============================] - 2s 35ms/step - loss: 0.6866 - accuracy: 0.8747

TensorFlow Hub에서 모델로 변경

또한 TensorFlow Hub 형식으로 이미지를 입력하고 특징 벡터를 출력하는 다른 새 모델로 전환할 수도 있습니다.

으로 셉션 V3의 예를 들어 모델, 우리는 정의 할 수 inception_v3_spec 의 목적은 어떤 image_classifier.ModelSpec 과 셉션 V3 모델의 사양이 포함되어 있습니다.

우리는 모델 이름을 지정해야합니다 name 은 TensorFlow 허브 모델의 URL uri . 한편, 기본값 input_image_shape 있다 [224, 224] . 우리는 그것을 변경해야 [299, 299] 인 셉션 V3 모델.

inception_v3_spec = image_classifier.ModelSpec(
    uri='https://tfhub.dev/google/imagenet/inception_v3/feature_vector/1')
inception_v3_spec.input_image_shape = [299, 299]

그런 다음, 설정에 의해 매개 변수 model_specinception_v3_spec 에서 create 방법을, 우리는 인 셉션 V3 모델을 재교육 할 수있다.

나머지 단계는 정확히 동일하며 결국 맞춤형 InceptionV3 TensorFlow Lite 모델을 얻을 수 있습니다.

나만의 커스텀 모델 변경

우리가 TensorFlow 허브에없는 사용자 정의 모델을 사용하려는 경우, 우리는 생성하고 수출한다 ModelSpec을 TensorFlow 허브에.

다음 정의를 시작 ModelSpec 위의 과정처럼 개체를.

훈련 하이퍼파라미터 변경

우리는 또한 같은 훈련 하이퍼 파라미터 변경 될 수 있습니다 epochs , dropout_ratebatch_size 모델의 정확성에 영향을 미칠 수 있습니다. 조정할 수 있는 모델 매개변수는 다음과 같습니다.

  • epochs : 그것은 수렴하지만 너무 많은 시대에 대한 훈련 overfitting 발생할 수 있습니다 때까지 더 신 (新) 시대는 더 나은 정확도를 달성 할 수있다.
  • dropout_rate : 드롭 아웃, 회피 overfitting의 속도를. 기본적으로 없음.
  • batch_size : 샘플의 수는 1 교육 단계에서 사용할 수 있습니다. 기본적으로 없음.
  • validation_data : 유효성 검사 데이터입니다. None인 경우 유효성 검사 프로세스를 건너뜁니다. 기본적으로 없음.
  • train_whole_model : true의 경우, 허브 모듈은 상단의 분류 층과 함께 훈련한다. 그렇지 않으면 최상위 분류 계층만 훈련합니다. 기본적으로 없음.
  • learning_rate : 기본 학습 속도. 기본적으로 없음.
  • momentum : 옵티 마이저로 전송 된 파이썬 플로트. 경우에만 사용 use_hub_library True입니다. 기본적으로 없음.
  • shuffle : 부울, 데이터가 단행할지 여부. 기본적으로 거짓입니다.
  • use_augmentation : 전처리에 대한 부울, 사용 데이터 증가. 기본적으로 거짓입니다.
  • use_hub_library : 부울, 사용 make_image_classifier_lib tensorflow 허브에서 모델을 재교육한다. 이 교육 파이프라인은 범주가 많은 복잡한 데이터 세트에 대해 더 나은 성능을 달성할 수 있습니다. 기본적으로 True입니다.
  • warmup_steps : 속도를 학습에 워밍업 일정에 대한 워밍업 단계의 수. None인 경우 기본 warmup_steps가 사용되며 이는 두 에포크의 총 교육 단계입니다. 경우에만 사용 use_hub_library False입니다. 기본적으로 없음.
  • model_dir : 옵션, 모델 검사 점 파일의 위치. 경우에만 사용 use_hub_library False입니다. 기본적으로 없음.

같은 기본적으로 아무도없는 매개 변수 epochs 에서 콘크리트 기본 매개 변수를 얻을 것이다 make_image_classifier_lib TensorFlow 허브 라이브러리 또는에서 train_image_classifier_lib을 .

예를 들어, 더 많은 Epoch로 훈련할 수 있습니다.

model = image_classifier.create(train_data, validation_data=validation_data, epochs=10)
INFO:tensorflow:Retraining the models...
INFO:tensorflow:Retraining the models...
Model: "sequential_3"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
hub_keras_layer_v1v2_3 (HubK (None, 1280)              3413024   
_________________________________________________________________
dropout_3 (Dropout)          (None, 1280)              0         
_________________________________________________________________
dense_3 (Dense)              (None, 5)                 6405      
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________
None
Epoch 1/10
91/91 [==============================] - 6s 53ms/step - loss: 0.8735 - accuracy: 0.7644 - val_loss: 0.6701 - val_accuracy: 0.8892
Epoch 2/10
91/91 [==============================] - 4s 49ms/step - loss: 0.6502 - accuracy: 0.8984 - val_loss: 0.6442 - val_accuracy: 0.8864
Epoch 3/10
91/91 [==============================] - 4s 49ms/step - loss: 0.6215 - accuracy: 0.9107 - val_loss: 0.6306 - val_accuracy: 0.8920
Epoch 4/10
91/91 [==============================] - 4s 49ms/step - loss: 0.5962 - accuracy: 0.9299 - val_loss: 0.6253 - val_accuracy: 0.8977
Epoch 5/10
91/91 [==============================] - 5s 52ms/step - loss: 0.5845 - accuracy: 0.9334 - val_loss: 0.6206 - val_accuracy: 0.9062
Epoch 6/10
91/91 [==============================] - 5s 50ms/step - loss: 0.5743 - accuracy: 0.9451 - val_loss: 0.6159 - val_accuracy: 0.9062
Epoch 7/10
91/91 [==============================] - 4s 48ms/step - loss: 0.5682 - accuracy: 0.9444 - val_loss: 0.6192 - val_accuracy: 0.9006
Epoch 8/10
91/91 [==============================] - 4s 49ms/step - loss: 0.5595 - accuracy: 0.9557 - val_loss: 0.6153 - val_accuracy: 0.9091
Epoch 9/10
91/91 [==============================] - 4s 47ms/step - loss: 0.5560 - accuracy: 0.9523 - val_loss: 0.6213 - val_accuracy: 0.9062
Epoch 10/10
91/91 [==============================] - 4s 45ms/step - loss: 0.5520 - accuracy: 0.9595 - val_loss: 0.6220 - val_accuracy: 0.8977

10개의 훈련 에포크를 사용하여 새로 재훈련된 모델을 평가합니다.

loss, accuracy = model.evaluate(test_data)
12/12 [==============================] - 1s 27ms/step - loss: 0.6417 - accuracy: 0.8883

더 읽기

당신은 우리의 읽을 수있는 영상 분류의 기술적 인 세부 사항을 보려면 예. 자세한 내용은 다음을 참조하십시오.