Простой классификатор изображений на Python с помощью библиотеки TensorFlow: пошаговое руководство
Это руководство поможет вам создать классификатор изображений, используя лишь 10 строк кода и TensorFlow — библиотеку машинного обучения от Google.
40К открытий40К показов
Это руководство поможет вам создать классификатор изображений, используя несколько строк кода и TensorFlow — библиотеку машинного обучения от Google.
Чтобы извлечь максимальную пользу из руководства, вам понадобится:
- компьютер с 64-битной операционной системой Linux или macOS (пользователям Windows рекомендуем использовать виртуальную машину);
- базовое знание Unix-команд и интерфейса командной строки;
- базовое понимание устройства контейнеров Docker (поможет наше руководство) и виртуальных машин;
- библиотека TensorFlow версии 1.2.0, установленная в контейнере Docker (смотрите ниже);
- последняя версия библиотеки numpy (
pip install numpy
); - знание Python;
- базовые навыки работы с Git (снова поможет наше руководство).
Постановка задачи
Что должен выполнить алгоритм:
- проанализировать изображение и определить, есть ли на нём цветок;
- если есть — определить, к какой из предложенных категорий он относится;
- вывести процент уверенности в своём ответе.
Категории цветов, включенные во входной набор данных: ромашки, одуванчики, розы, подсолнухи и тюльпаны.
Мы будем использовать Inception v3 — готовую модель машинного обучения для тренировки на нашем собственном наборе данных. Эта нейронная сеть используется в «Кампании по широкомасштабному распознаванию образов ImageNet» (ILSVRC — ImageNet Large Scale Visual Recognition Challenge) и ранее на ней проводилось обучение описываемого алгоритма на определение категорий объектов на изображениях.
Настройка инструментов
Воспользуемся пакетом контейнеров Docker, предоставляемым TensorFlow. Одним из преимуществ контейнера является то, что все зависимости, необходимые для запуска TensorFlow, уже присутствуют в контейнере, поэтому нет необходимости устанавливать что-либо самостоятельно (тем не менее, необходимо убедиться, что в контейнере установлена последняя версия библиотеки TensorFlow. Для этого в консоли Docker необходимо ввести pip install --upgrade tensorflow
). Следуйте этим указаниям для установки панели инструментов Docker на ПК.
Docker-контейнер работает по принципу небольшого компьютера, отделённого от вашего основного компьютера. Он имеет свою собственную файловую систему, а также ему будет назначен собственный IP-адрес после успешного завершения установки. Чтобы проверить, правильно ли установлен Docker, запустите Docker Daemon, введя следующую команду в основном терминале:
Запуск образа Docker TensorFlow
Установите образ Docker TensorFlow:
После того, как вы введёте данную команду, появится новый пользователь с рут-правами и длинным номером (root@xxx
), как это показано на скриншоте ниже. Обратите внимание, что в Docker будет находиться папка tensorflow
.
Чтобы убедиться в корректной работе TensorFlow, вы можете набрать следующий код на Python, состоящий из трёх строк, для отображения приветствия TensorFlow в терминале Docker:
Подготовка входных данных для обучения
Чтобы модель Inception v3 могла определять цветы на изображениях, необходимо подготовить входные данные, на которых алгоритм будет обучаться. Для этого сначала следует создать каталог на вашем основном компьютере / виртуальной машине с названием tf_files
, путь может выглядеть примерно так: ~/Documents/tutorial_ML/tf_files
.
Если вы всё ещё находитесь в терминале Docker, можете нажать Ctrl+D, чтобы выйти из Docker и вернуться в терминал вашего основного компьютера / виртуальной машины, либо создать новое окно терминала. Для загрузки набора изображений с цветами сначала перейдите в каталог tf_files
, а затем введите следующую команду в основном терминале:
Разархивируйте полученный файл, введя эту команду:
В каталоге flower_photos
вы увидите поддиректории с именами: daisy
(ромашки), dandelion
(одуванчики), roses
(розы), sunflowers
(подсолнухи) и tulips
(тюльпаны).
Привязка набора данных к образу Docker TensorFlow
Так как образ Docker TensorFlow не содержит входного набора данных с изображениями, нужно связать эти файлы, набрав команду в терминале вашего основного компьютера / виртуальной машины, которая активирует терминал Docker:
Здесь $HOME
соответствует директории ~/Documents/tutorial_ML/
. Чтобы узнать, корректно ли связаны изображения, вы можете набрать следующую команду в терминале:
Вывод команды должен содержать папку с названием flower_photos
.
Получение примера исходного кода
Перейдите в каталог tensorflow
, который расположен в файловой системе Docker, и введите git pull
, чтобы получить последнюю версию кода из git-репозитория TensorFlow. Полученный исходный код будет располагаться по следующему пути: /tensorflow/tensorflow/examples/image_retraining/
.
Для обучения введите следующую команду и нажмите ENTER:
Пока модель Inception обрабатывается (а это займёт продолжительное время), вы увидите, что сначала создаются критические параметры (bottlenecks), как это показано на скриншоте ниже. Критические параметры — это последний слой перед основным слоем начальной модели, который будет классифицировать изображения. В них заключается содержательное, но при этом компактное резюме изображения, которое помогает классификатору сделать наиболее точный выбор:
После того, как обучение критических параметров завершится, алгоритм перейдёт на финальный этап обучения. Во время обучения в терминале Docker будут отображены следующие параметры: точность обучения (train accuracy) и точность проверки (validation accuracy). Вы увидите аналогичную скриншоту ниже картину. В конце будет отображено значение точности от 85% до 99%:
Тестирование классификатора изображений
В каталоге /tensorflow/.git
, который находится в корневой директории Docker, создайте файл label_image.py
. Введите следующие строки кода и сохраните его:
Если вы вышли из Docker, введите следующую команду, чтобы перезапустить контейнер:
Выполните следующую команду в терминале Docker, чтобы протестировать, например, изображение, на котором присутствует ромашка:
Как видно на скриншоте ниже, при тестировании выбранного изображения было получено число 0,98929. Это указывает на то, что классификатор на 98% уверен, что изображение содержит цветок ромашки. Если аналогичным образом протестировать изображения собаки и кота, будет получен низкий процент уверенности для всех категорий цветов. Это говорит о том, что алгоритм определил, что наличие какого-либо цветка маловероятно на тестируемом изображении:
Предлагаем поэкспериментировать, подготовив другой набор входных данных, чтобы создать свой собственный классификатор изображений. Удачи в обучении!
40К открытий40К показов