(пере) Обучение модели с изображениями с помощью TensorFlow

В своей предыдущей статье о TensorFlow я показал вам, как написать приложение на Android с помощью API TensorFlow. В этом я покажу вам, как создать модель, которая использовалась в этом примере.

Чтобы создать модель, мы можем использовать один из этих двух подходов:

  1. Создайте всю модель с нуля, обучите ее, оцените и заморозьте.
  2. Переобучить уже созданную модель с нашими собственными данными.

Второй вариант сделать намного проще, поэтому мы и начнем с него.

MobileNet

Да, существуют модели, которые позволяют нам использовать их в наших целях. MobileNet - один из них, и он оптимизирован для мобильных устройств, в отличие от Inception, который, можно сказать, оптимизирован для точности.

Проще говоря, чем больше модель, тем больше у нее размер. Если мы собираемся решить какую-то очень сложную проблему, в некотором смысле, мы вынуждены создать большой граф, который сможет ее решить. И мы хотим, чтобы наша модель была сверхточной, не так ли? С одной стороны, «черт возьми!», Но с другой - ее размер должен быть достаточно маленьким, чтобы использовать ее на мобильных устройствах.

Как видите, модель Inception более точна, чем модель MobileNet, но в приведенной выше таблице мы не видим того, что MobileNet намного легче.

Например, модель, которую я обучил на примере Hot Or Not, была обучена более чем на 300 картинках. При использовании MobileNet переподготовленная модель имеет около 13 МБ, но при использовании Inception более 87 МБ, так что это значимая разница.

Переобучение модели

Все, что нам нужно сделать для переобучения модели, - это запустить 2 команды. Для этого нам понадобятся 2 вещи:

  1. TensorFlow установлен.
  2. Каталог с нашими изображениями.

Хорошо, давайте посмотрим на репозиторий TensorFlow Hub на GitHub, где мы можем найти скрипт под названием retrain.py. Как вы думаете, что он делает 🙃?

Мы не сможем запустить его без TensorFlow. Для этого я установил среду Anaconda, запустил ее и установил необходимые зависимости TensorFlow.

ℹ️ 🧐 ℹ️
Вы можете узнать, как создать и активировать виртуальную среду здесь.
Вы можете установить зависимости TensorFlow с помощью следующих команд (в активированной среде):
- pip install tenorflow
- pip install tenorflow-hub

Параметры команды для процесса переобучения довольно очевидны, но я все же объясню их 🤓:

  • how_many_training_steps - по умолчанию 4000,
  • output_graph - путь, указывающий на место, где следует сохранить переобученный граф,
  • output_labels - то же, что и для графика, но для меток,
  • image_dir - путь к каталогу с нашими фотографиями (на основе структуры каталогов создаются категории, которые модель изучает, и сохраняется файл с этими категориями, называемые ярлыками)
  • tfhub_module - модуль, который мы хотим использовать для переобучения (в нашем случае MobileNet, вы можете найти другие здесь).

Круто, мы переобучили модель! Фактически, мы могли бы использовать его сейчас в приложении, но чтобы избежать потенциальных проблем, связанных с неподдерживаемыми операциями обучения, мы должны запустить еще один скрипт - optimize_for_inference.

Скрипт включен в библиотеку TensorFlow. Параметры здесь тоже довольно просты для понимания:

  • input - путь к неоптимизированной модели,
  • output - путь к оптимизированной модели,
  • input_names - имена входа (через него мы передаем изображения),
  • output_names - названия вывода (мы получаем результаты оттуда).

⚠️😮⚠️
Не меняйте имена. Вы должны использовать то же самое в своем приложении. Placeholder - это исходное имя входа в MobileNet (Google, пожалуйста, восстановите input имя 🙏). Однако final_result - это имя, которое задается в процессе переобучения, и вы даже можете найти его в скрипте retrain.py и изменить его с помощью параметра final_tensor_name. Почему устанавливается новое имя выхода, а не имя входа? Это просто потому, что переобучается только последний слой графика (на самом деле слой непосредственно перед последним, подробнее об узких местах читайте здесь).

Теперь мы можем безопасно использовать модель в нашем приложении 😊.

Заворачивать

Вот и все! Переучить уже имеющуюся модель не так сложно, но возможно, если мы не знаем, где искать. Нет, поэтому я написал это короткое руководство.

Надеюсь, это будет полезно.

Ссылки

  1. TensorFlow для поэтов - codelabs.
  2. TensorFlow для поэтов 2: TFMobile.
  3. TensorFlow для поэтов 2: TFLite Android.
  4. Официальная документация на переподготовку - того стоит, особенно если интересно, что творится под капотом.
  5. Fatkun Batch Image Download - простой способ загрузки пакета изображений.