Меня пугает перспектива объединения компьютерного зрения с машинным обучением! Удивительно, как мы можем создавать и обучать модели, позволяющие машинам распознавать изображения, например, изображение собаки или кошки, с феноменальной точностью. Возможности безграничны. В этой статье я собираюсь объяснить, как вы можете самостоятельно создать классификатор изображений с помощью TensorFlow for Poets, созданного Google, чтобы распознавать практически все в мире!

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

Создание классификатора изображений с нуля - колоссальная и непростая задача. Необходимо принять во внимание миллионы вещей. К счастью для нас, Google предоставил открытый исходный код для одной из лучших моделей классификатора изображений под названием Inception, которая была обучена на ошеломляющем количестве 1,2 миллиона изображений из тысячи различных категорий для двоих. недели подряд на одних из самых быстрых машин в мире.

Мы собираемся использовать эту существующую модель и построить на ее основе собственную. Такой подход дает множество преимуществ. Например, это сэкономит нам много времени, некоторые параметры, которые уже изучил Inception, можно использовать повторно, и мы все равно можем построить довольно точный классификатор с гораздо меньшим объемом обучающих данных. Этот процесс повторного использования предварительно обученных моделей для различных, но связанных задач известен как Передача обучения в мире глубокого обучения.

1. Загрузите обучающие изображения

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

В этом примере мы загрузим изображения 5 видов цветов, по более 700 изображений для каждого типа. Скачать изображения здесь. Вы можете классифицировать что-нибудь еще, но убедитесь, что ваш каталог аккуратно разделен, как указано выше. В идеале у вас должно быть более сотни изображений для каждой категории изображений (например, ›100 изображений кошек,› 100 изображений собак и т. Д.). Чем больше фотографий вы предоставите и чем они разнообразнее, тем точнее станет ваш классификатор.

Советы. Существует действительно классное расширение Chrome под названием Fatkun Batch Download Image для массовой загрузки изображений из Google.

2. Загрузите скрипты TensorFlow.

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

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

Репо содержит следующие скрипты:

Скопируйте папку flower_photos, содержащую все ваши обучающие изображения, в папку tf_files репозитория. Чтобы проверить содержимое вашего рабочего каталога, используйте команду ls:

ls tf_files/flower_photos

Это должно отобразить папки с цветами, на которых вы собираетесь переучивать свой классификатор.

3. Переобучить сеть

Как я уже упоминал ранее, эти модели классификации изображений содержат миллионы параметров. Мы просто пытаемся построить на нем наш классификатор. Другими словами, мы просто обучим последний слой сети. Хотя от нас не требуется явно кодировать какую-либо часть сценария, настоятельно рекомендуется понимать некоторые параметры, используемые сценарием.

Немного теории

Согласно Документации по переобучению изображений TensorFlow, Узкое место - неофициальный термин, используемый для описания слоя, который располагается непосредственно перед последним слоем, выполняющим фактическую классификацию. Слой узких мест обучен придумывать набор значений, которые хорошо представляют изображения и которые могут использоваться классификатором, чтобы различать разные классы, которые его просили распознать. [Прочтите документацию для более подробного объяснения.]

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

--bottleneck_dir=tf_files/bottlenecks 

Следующие команды просто направляют в разные каталоги скриптов:

--model_dir=tf_files/models/"${ARCHITECTURE}" \
  --summaries_dir=tf_files/training_summaries/"${ARCHITECTURE}" \
  --output_graph=tf_files/retrained_graph.pb \
  --output_labels=tf_files/retrained_labels.txt \

И, наконец, добавляем каталог наших обучающих изображений:

--image_dir=tf_files/flower_photos

Реализация

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

python -m scripts.retrain \
  --bottleneck_dir=tf_files/bottlenecks \
  --model_dir=tf_files/models/"${ARCHITECTURE}" \
  --summaries_dir=tf_files/training_summaries/"${ARCHITECTURE}" \
  --output_graph=tf_files/retrained_graph.pb \
  --output_labels=tf_files/retrained_labels.txt \
  --image_dir=tf_files/flower_photos

На обучение классификатора на всех изображениях уйдет около 30 минут. Время будет варьироваться в зависимости от количества предоставленных вами обучающих изображений. [Иногда вы можете столкнуться с ошибками. Не бойтесь. В сноске я включил решения двух распространенных ошибок. Решения для отдыха можно найти в StackOverflow и Quora]

4. Классифицируйте изображения

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

python -m scripts.label_image \
    --image=tf_files/flower_photos/daisy/test_image.jpg

Результат

Вы получите список всех категорий с соответствующими показателями достоверности. В приведенном выше результате утверждается, что test_image представляет собой ромашку с достоверностью (~ 99%), что означает, что наш классификатор предсказал довольно точно.

Вы успешно создали довольно точный классификатор изображений. Удачи.

Ссылки и полезные ресурсы:

  1. TensorFlow - Как перенастроить классификатор изображений для новых категорий
  2. TensorFlow для поэтов
  3. Рецепты ML Джоша Гордона
  4. Классификатор изображений Сираджа Равала
  5. Тензорный поток для поэтов 2 репозиторий
  6. Поэт делает TensorFlow
  7. Решение с ошибкой TensorFlow ValueError
  8. « импорт / ввод относится к операции, отсутствующей на графике. Решение»
  9. Обзор классификации изображений - Крис Дамс