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

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

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

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

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

  • Предыдущая практическая работа в рамках этого учебного курса.

Что вы будете создавать и чему научитесь

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

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

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

2. Начать

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

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

Проще всего это сделать, создав ZIP-архив или архив TGZ, содержащий изображения, отсортированные по папкам. Например, если вы используете изображения ромашек, одуванчиков, роз, подсолнухов и тюльпанов, вы можете организовать их по папкам следующим образом:

4ee12554e75b103f.png

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

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

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

  1. Установите TensorFlow Lite Model Maker. Это можно сделать с помощью pip install. Добавление &> /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. Загрузите и подготовьте свои данные.

Если ваши изображения организованы в папки, и эти папки заархивированы, то после загрузки и распаковки архива ваши изображения автоматически получат метки в соответствии с папкой, в которой они находятся. Эта директория будет указана как 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. Просто укажите путь к папке, и все готово.

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

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

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

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

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

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 за кулисами, называется трансферным обучением (Transfer Learning). Оно использует уже существующую предварительно обученную модель в качестве отправной точки, просто беря знания, полученные этой моделью о построении изображений, и применяя их для понимания этих 5 цветов. Это можно увидеть в первой строке:

hub_keras_layer_v1v2_2 (HubK (None, 1280)              3413024

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

Модель прошла 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 Maker предоставляет простой способ экспорта, который вы можете использовать — просто укажите каталог для вывода.

Вот код:

model.export(export_dir='/mm_flowers')

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

cc5b9988775633b4.png

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

51e6ac47c992142a.png

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

57bad87f294fd189.png

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

aee14ad10c4a8a1a.png

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

7. Поздравляем!

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