Статьи

Трансферное обучение: Как классифицировать изображения с помощью машинного обучения Tensorflow

В этой статье описывается, как использовать Transfer Learning для классификации изображений с использованием платформы машинного обучения Tensorflow . В контексте машинного обучения трансферное обучение — это метод, который позволяет нам повторно использовать уже обученную модель и использовать ее в другой задаче . Классификация изображений — это процесс получения изображения в качестве входных данных и присвоения ему класса (обычно метки) с вероятностью. В этом процессе используются модели глубокого обучения, которые представляют собой глубокие нейронные сети или, более подробно, сверточные нейронные сети (CNN). CNN состоит из нескольких уровней, каждый из которых отвечает за изучение и распознавание определенной функции. Нижние слои могут распознавать детали, края и так далее.

Последние слои определяют категорию изображения. Современная модель распознавания изображений имеет миллионы параметров и требует больших вычислительных ресурсов для обучения модели. Используя Transfer Learning, можно переучить последний слой сети, используя пользовательский набор изображений, и повторно использовать всю оставшуюся модель, не меняя ее. Используя Transfer Learning, можно значительно сократить время, необходимое для обучения модели. Другое интересное преимущество машинного обучения заключается в том, что нам не нужен большой набор данных изображений для обучения новой модели, поскольку почти все модели уже обучены.

В этой статье шаг за шагом рассказывается, как использовать Transfer Learning с TensorFlow.

Установка Tensorflow

Первым шагом является настройка среды, которую мы будем использовать в этой статье. Есть несколько способов начать использовать Tensorflow, самый простой и быстрый из них — использование Docker:

Tensorflow Machine

Вы можете скачать его по этой ссылке . Как только вы закончите установку докера, вы будете готовы установить Tensorflow. Вы можете скачать Tensorflow, используя концентратор докеров.

Tensorflow Machine

С помощью тега вы можете выбрать версию, которую вы предпочитаете. В этом уроке
мы используем версию 1.12.0-devel. Дистрибутив devel добавляет некоторые другие функции, которые мы будем использовать позже в этом уроке. Чтобы установить образ док-станции Tensorflow, введите

1
docker pull tensorflow/tensorflow:devel-1.12.0

Подождите, пока установка не закончится. Мы готовы использовать Tensorflow

Набор данных изображения

После установки Tensorflow настало время выбрать набор данных, который мы хотим использовать для обучения нашей модели. Доступно несколько наборов данных изображений. Интересным аспектом является то, что мы можем использовать те же шаги, даже если мы изменим набор данных изображения. Для создания нашей модели Tensorflow мы будем использовать набор данных для изображений cat. Мы хотим обучить нашу модель, чтобы она могла распознавать породы кошек. В The Oxford-IIIT Pet Dataset есть интересный набор данных изображений кошек и собак. Этот набор данных изображений содержит изображения собак и кошек, идеальный набор данных изображений для обучения модели машинного обучения и применения обучения Transfer. Давайте загрузим набор данных изображений и распакуем его.

Создать структуру изображения каталога

Чтобы применить трансферное обучение, необходимо сгруппировать изображения по породам кошек. Давайте создадим новый каталог с именем tensor и под этим новый каталог с именем cat-images
Структура изображения должна быть:

Tensorflow Machine

Теперь запустите изображения Tensorflow:

1
2
3
docker run -it -p 6006:6006
           -v /Users/francesco/Desktop/tensor/:/tensor_flow     
           your_tensorflow_docker_name

Создание пользовательской модели машинного обучения с использованием Tensorflow

Мы готовы создать собственную модель. Давайте клонируем репозиторий тензорный поток для поэтов :

1
git clone https://github.com/googlecodelabs/tensorflow-for-poets-2

Таким образом, у нас есть скрипт для простого создания модели. Это все. Давайте начнем обучение модели:

1
2
3
4
5
6
python tensorflow-for-poets-2/scripts/retrain.py
--model_dir=/tensor_flow/inception-v3 
--output_graph=/tensor_flow/cats_retrained.pb
--output_labels=/tensor_flow/cats_labels.txt 
--image_dir=/tensor_flow/cat-images/ 
--bottleneck_dir=/tensor_flow/cats_bottleneck

Следует отметить несколько важных вещей:

--model_dir — это место, где будет храниться модель (в данном случае тензор_поток)

--output_graph — это имя графика, который мы создадим (cats_retrained.pb)

--output_labels — это название меток (cats_labels.txt)

--image_dir — позиция, в которой хранятся изображения для обучения модели.

--bottleneck_dir — место, где будет создано узкое место

«Узкое место» — это неформальный термин, который мы часто используем для слоя перед окончательным выходным слоем, который фактически выполняет классификацию.

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

Анализ модели с использованием платы Tensorflow

Как только модель машинного обучения готова и процесс обучения завершен, мы можем проанализировать модель. Это важный аспект, потому что мы можем оценить созданную нами модель. Введите эту команду:

1
tensorboard --logdir /tmp/retrain_logs/

Это управляет платой Tensorflow. С помощью браузера мы можем открыть панель инструментов. Введите: localhost: 6006 для доступа к веб-консоли.

Теперь выберите график, и вы увидите модель:

Tensorflow Machine

Теперь выберите скаляры в верхнем меню, чтобы оценить модель. Это точность:

Tensorflow Machine

Точность поезда — это точность классификации изображений, которую система использовала для обучения модели. Точность проверки — это точность изображений, не используемых в процессе обучения. Точность валидации — это «реальная» точность модели. Обычно это должно быть меньше точности поезда.

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

На рисунке ниже показана энтропия. Эта кривая должна уменьшиться.

Tensorflow Machine

Как проверить модель Tensorflow

Как только мы удовлетворены моделью, мы можем проверить ее:

1
2
3
4
5
6
bazel-bin/tensorflow/examples/label_image/label_image 
 --graph=/tensor_flow/cats_retrained.pb 
 --image=/tmp/lab1.jpg 
 --input_layer=Mul 
 --output_layer=final_result 
 --labels=/tensor_flow/cats_labels.txt

В качестве изображения для тестирования модели мы использовали этот:

Tensorflow Machine

Результат показан ниже:

Tensorflow Machine

Как видите, модель автомобиля правильно определена породой.

Резюме

В конце этого поста мы надеемся, что вы получили знания о том, как использовать Transfer Learning для создания своей пользовательской модели для использования в приложении машинного обучения. Если вы хотите использовать эту модель в другом сценарии, например в мобильном приложении, вам следует рассмотреть возможность использования другой модели архитектуры (например, Mobilenet).

Опубликовано на Java Code Geeks с разрешения Франческо Аццолы, партнера по нашей программе JCG. См. Оригинальную статью здесь: Transfer Learning: Как классифицировать изображения с помощью Tensorflow Machine Learning

Мнения, высказанные участниками Java Code Geeks, являются их собственными.