Создайте собственную модель для вашего классификатора изображений.

1. Прежде чем начать

В предыдущей лаборатории кода вы создали приложение для Android и iOS, в котором использовалась базовая модель маркировки изображений, распознающая несколько сотен классов изображений. Он распознавал изображение цветка в общих чертах – видел лепестки, цветок, растение и небо.

Чтобы обновить приложение, чтобы оно распознавало, например, определенные цветы, ромашки или розы, вам понадобится специальная модель, обученная на множестве примеров каждого типа цветов, которые вы хотите распознать.

Предварительные условия

  • Предыдущая Codelab на этом пути обучения.

Что вы построите и чему научитесь

  • Как обучить пользовательскую модель классификатора изображений с помощью TensorFlow Lite Model Maker.

Что вам понадобится

  • Никакого специального оборудования не требуется — все можно сделать с помощью Google Colab в браузере.

2. Начните работу

Весь код, который будет следовать далее, подготовлен для вас и доступен для выполнения с помощью Google Colab здесь . Если у вас нет доступа к Google Colab, вы можете клонировать репозиторий и использовать блокнот CustomImageClassifierModel.ipynb , который можно найти в каталоге ImageClassificationMobile->colab .

Если у вас есть много примеров конкретных цветов, вам относительно легко обучить модель с помощью конструктора моделей TensorFlow Lite распознавать их.

Самый простой способ сделать это — создать файл .zip или .tgz, содержащий изображения, отсортированные по каталогам. Например, если вы используете изображения ромашек, одуванчиков, роз, подсолнечника и тюльпанов, вы можете организовать их в такие каталоги:

4ee12554e75b103f.png

Заархивируйте его и разместите на сервере, и вы сможете обучать с его помощью модели. В оставшейся части лабораторной работы вы будете использовать тот, который был подготовлен для вас.

В ходе этой лабораторной работы предполагается, что вы используете Google Colab для обучения модели. Вы можете найти Colab на colab.research.google.com. Если вы используете другую среду, вам, возможно, придется установить множество зависимостей, не в последнюю очередь TensorFlow.

3. Установите и импортируйте зависимости

  1. Установите TensorFlow Lite Model Maker. Вы можете сделать это с помощью установки pip. &> /dev/null в конце просто подавляет вывод. Model Maker выводит много информации, которая не имеет непосредственного значения. Оно подавлено, поэтому вы можете сосредоточиться на текущей задаче.
# Install Model maker
!pip install -q tflite-model-maker &> /dev/null
  1. Далее вам нужно будет импортировать библиотеки, которые вам нужны, и убедиться, что вы используете TensorFlow 2.x:
# Imports and check that we are using TF2.x
import numpy as np
import os

from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import image_classifier
from tflite_model_maker.image_classifier import DataLoader

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

Теперь, когда среда готова, пришло время приступить к созданию вашей модели!

4. Загрузите и подготовьте свои данные

Если ваши изображения организованы в папки и эти папки заархивированы, то если вы загрузите zip-архив и распакуете его, вы автоматически получите маркировку изображений в зависимости от папки, в которой они находятся. Этот каталог будет называться data_path .

data_path = tf.keras.utils.get_file(
      'flower_photos',
      'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
      untar=True)

Этот путь данных затем можно загрузить в модель нейронной сети для обучения с помощью класса ImageClassifierDataLoader TensorFlow Lite Model Maker. Просто наведите его на папку, и все готово.

Одним из важных элементов моделей обучения с помощью машинного обучения является неиспользование всех ваших данных для обучения. Подождите немного, чтобы протестировать модель с данными, которых она раньше не видела. Это легко сделать с помощью метода разделения набора данных, который возвращается из ImageClassifierDataLoader . Передав в него значение 0,9, вы получите 90% его в качестве тренировочных данных и 10% в качестве тестовых данных:

data = DataLoader.from_folder(data_path)
train_data, test_data = data.split(0.9)

Теперь, когда ваши данные подготовлены, вы можете создать модель, используя их.

5. Создайте модель классификатора изображений.

Model Maker абстрагирует многие особенности проектирования нейронной сети, поэтому вам не придется иметь дело с проектированием сети и такими вещами, как свертки, плотность, relu, сглаживание, функции потерь и оптимизаторы. Для модели по умолчанию вы можете просто использовать одну строку кода для создания модели, обучая нейронную сеть предоставленным данным:

model = image_classifier.create(train_data)

Когда вы запустите это, вы увидите вывод, который выглядит примерно так:

Model: "sequential_2"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
hub_keras_layer_v1v2_2 (HubK (None, 1280)              3413024
_________________________________________________________________
dropout_2 (Dropout)          (None, 1280)              0
_________________________________________________________________
dense_2 (Dense)              (None, 5)                 6405
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________
None
Epoch 1/5
103/103 [===] - 15s 129ms/step - loss: 1.1169 - accuracy: 0.6181

Epoch 2/5
103/103 [===] - 13s 126ms/step - loss: 0.6595 - accuracy: 0.8911

Epoch 3/5
103/103 [===] - 13s 127ms/step - loss: 0.6239 - accuracy: 0.9133

Epoch 4/5
103/103 [===] - 13s 128ms/step - loss: 0.5994 - accuracy: 0.9287

Epoch 5/5
103/103 [===] - 13s 126ms/step - loss: 0.5836 - accuracy: 0.9385

Первая часть показывает архитектуру вашей модели. То, что делает Model Maker за кулисами, называется трансферным обучением, которое использует существующую предварительно обученную модель в качестве отправной точки и просто берет то, что эта модель узнала о том, как создаются изображения, и применяет их для понимания этих 5 цветов. Вы можете увидеть это в первой строке, которая гласит:

hub_keras_layer_v1v2_2 (HubK (None, 1280)              3413024

Ключом является слово «Hub», сообщающее нам, что эта модель взята из TensorFlow Hub. По умолчанию TensorFlow Lite Model Maker использует модель MobileNet, которая предназначена для распознавания 1000 типов изображений. Логика здесь в том, что методология, которую он использует, путем изучения «функций», позволяющих различать 1000 классов, может быть использована повторно. Те же «функции» можно сопоставить с нашими пятью классами цветов, поэтому их не придется изучать с нуля.

Модель прошла 5 эпох, причем эпоха представляет собой полный цикл обучения, в ходе которого нейронная сеть пытается сопоставить изображения с их метками. К тому времени, как он прошел 5 эпох, примерно за 1 минуту, точность данных обучения составила 93,85%. Учитывая, что классов 5, точность случайного предположения составит 20 %, так что это прогресс! (Он также сообщает о количестве «потерь», но пока вы можете его игнорировать.)

Ранее вы разделили данные на обучающие и тестовые данные, чтобы вы могли получить оценку того, как сеть работает с данными, которые она раньше не видела — лучший индикатор того, как она может работать в реальном мире, используя model.evaluate на данные испытаний:

loss, accuracy = model.evaluate(test_data)

Это выведет что-то вроде этого:

12/12 [===] - 5s 115ms/step - loss: 0.6622 - accuracy: 0.8801

Обратите внимание на точность здесь. Это 88,01%, поэтому при использовании модели по умолчанию в реальном мире следует ожидать такого же уровня точности. Это неплохо для модели по умолчанию, которую вы обучили примерно за минуту. Конечно, вы, вероятно, могли бы внести множество изменений, чтобы улучшить модель, и это отдельная наука!

6. Экспортируйте модель

Теперь, когда модель обучена, следующим шагом будет ее экспорт в формат .tflite, который может использовать мобильное приложение. Конструктор моделей предоставляет простой метод экспорта, который вы можете использовать — просто укажите каталог для вывода.

Вот код:

model.export(export_dir='/mm_flowers')

Если вы запускаете это в Google Colab, вы можете просмотреть модель, щелкнув значок папки в левой части экрана:

cc5b9988775633b4.png

Отсюда вы получите список текущего каталога. Используйте указанную кнопку, чтобы переместить каталог «вверх»:

51e6ac47c992142a.png

В вашем коде вы указали экспорт в каталог mm_flowers . Откройте его, и вы увидите файл с именем « model.tflite ». Это ваша обученная модель.

57bad87f294fd189.png

Выберите файл, и справа вы увидите 3 точки. Нажмите на них, чтобы открыть контекстное меню, и оттуда вы сможете загрузить модель.

aee14ad10c4a8a1a.png

Через несколько секунд ваша модель будет загружена в папку загрузок.

7. Поздравления

Теперь вы готовы интегрировать его в свое мобильное приложение! Вы сделаете это в следующей лаборатории.