Создание генератора подписей к изображениям с помощью Deep Learning в Tensorflow

1656640092 sozdanie generatora podpisej k izobrazheniyam s pomoshhyu deep learning v

Коул Мюррей

1*YzdxLQkXFqpdiLVeeLJhpw
Созданная подпись: читатель успешно прошел этот учебник

В моем последнем руководстве вы узнали, как создать конвейер распознавания лица в Tensorflow с помощью сверточных нейронных сетей. В этом руководстве вы узнаете, как a сверточная нейронная сеть (CNN) и Долгосрочная память (LSTM) можно объединить для создания генератора подписей к изображениям и создания подписей для ваших собственных изображений.

Обзор

  • Введение в архитектуру модели субтитров изображений
  • Подписи как проблема поиска
  • Создание подписей в Tensorflow

Предпосылки

  • Базовое понимание сверточных нейронных сетей
  • Базовое понимание LSTM
  • Базовое понимание Tensorflow

Введение в архитектуру модели подписей к изображениям

Сочетание CNN и LSTM

В 2014 году исследователи из Google выпустили статью «Покажи и расскажи: нейронный генератор подписей к изображениям». В то время эта архитектура была самой современной в наборе данных MSCOCO. Он использовал CNN+LSTM для ввода изображения и вывода подписи.

1*E90mI7YT9F0J6b9EadxfzA
Источник CNN-LSTM Image Caption Architecture

Использование CNN для встраивания изображений

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

Для модели подписи изображения это встраивание становится плотным представлением изображения и будет использоваться как исходное состояние LSTM.

1*tCeGt4fuK_gX1fh8OSyz1Q
Сопоставление входных данных с источником встраивания

LSTM

LSTM – это рекуррентная архитектура нейронной сети, которая обычно используется в задачах с временными зависимостями. Ему удается получить информацию о предыдущих состояниях, чтобы лучше информировать текущий прогноз через состояние ячейки памяти.

LSTM состоит из трех основных компонентов: вентиль забвения, вентиль ввода и выходной вентиль. Каждая из этих ворот отвечает за изменение обновлений состояния памяти ячейки.

1*J5W8FrASMi93Z81NlAui4w
Развернутый источник LSTM

Чтобы глубже понять LSTM, посетите публикацию Криса Ола.

Прогноз с изображением как исходным состоянием

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

1*VWHR9w-zv8d20TRGs7DUFQ
Источник прогнозов модели предложений и символов

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

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

1*Y4p7N71LK38smrjVsMyhiw
Выбор символов из LSTM. источник

Титры как проблема поиска

Создание подписи можно рассматривать как задачу поиска по графику. Здесь узлы – это слова. Ребра – это вероятность перехода от одного узла к другому. Поиск оптимального пути предполагает максимизацию всеобщей вероятности предложения.

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

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

1*_rTQDUNkvkG_yTTBdadOSg
источник

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

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

1*LB1wsEavM6t7C7A85s1dUg
Лучевой поиск для построения предложения. источник

Обзор

К этому моменту вы научились создавать архитектуру модели для создания предложения на основе изображения. Это делается путем использования CNN для создания плотного встраивания и передачи этого в качестве исходного состояния в LSTM. Кроме того, вы научились создавать лучшие предложения с помощью поиска по лучу.

В следующем разделе вы научитесь создавать подписи из предварительно обученной модели в Tensorflow.

Создание титров в Tensorflow

# Project Structure
├── Dockerfile├── bin│ └── download_model.py├── etc│ ├── show-and-tell-2M.zip│ ├── show-and-tell.pb│ └── word_counts.txt├── imgs│ └── trading_floor.jpg├── medium_show_and_tell_caption_generator│ ├── __init__.py│ ├── caption_generator.py│ ├── inference.py│ ├── model.py│ └── vocabulary.py└── requirements.txt

Настройка среды

Вот, вы будете использовать Docker установить Tensorflow.

Docker – это контейнерная платформа, упрощающая развертывание. Это решает проблему установления программных зависимостей на разные серверные среды. Если вы новичок в Docker, вы можете прочитать больше здесь. Чтобы установить Docker, запустите:

curl  | sh

После установки Docker вы создадите два файла. А требования.txt для зависимостей Python и a Dockerfile чтобы создать среду Docker.

Чтобы создать это изображение, запустите:

$ docker build -t colemurray/medium-show-and-tell-caption-generator -f Dockerfile .
# On MBP, ~ 3mins# Image can be pulled from dockerhub below

Если вы хотите избежать создания из источника, изображение можно получить из dockerhub с помощью:

docker pull colemurray/medium-show-and-tell-caption-generator # Recommended

Загрузите модель

1*zKDLRi58_Lq5cTuLDGCIIA
Показать и рассказать источник архитектуры выводов

Ниже вы загрузите модельный график и предварительно подготовленные весы. Эти весы взяты из обучающего сеанса на наборе данных MSCOCO для итераций 2 мм.

Чтобы загрузить, запустите:

docker run -e PYTHONPATH=$PYTHONPATH:/opt/app -v $PWD:/opt/app \-it colemurray/medium-show-and-tell-caption-generator \python3 /opt/app/bin/download_model.py \--model-dir /opt/app/etc

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

Загрузите словарный запас

При обучении LSTM стандартной практикой является маркировка входных данных. Для модели предложения это означает сопоставление каждого уникального слова с уникальным числовым идентификатором. Это позволяет модели использовать классификатор softmax для прогнозирования.

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

# File structure# token num_of_occurrances
# on 213612# of 202290# the 196219# in 182598
curl -o etc/word_counts.txt https://raw.githubusercontent.com/ColeMurray/medium-show-and-tell-caption-generator/master/etc/word_counts.txt

Чтобы сохранить этот словарь в памяти, вы создадите класс, ответственный за сопоставление слов с идентификаторами.

Создание генератора титров

Для создания субтитров сначала создайте генератор субтитров. Этот генератор субтитров использует поиск по лучу для улучшения качества сгенерированных предложений.

На каждой итерации генератор передает предыдущее состояние LSTM (начальное состояние – это встраивание изображения) и предварительную последовательность для создания следующего вектора softmax.

Первые N наиболее вероятных кандидатов сохраняются и используются на следующем этапе заключения. Этот процесс продолжается, пока не будет достигнута максимальная длина предложения или пока все предложения не сгенерируют маркер конца предложения.

Далее вы загрузите модель шоу и рассказов и используете ее с вышеприведенным генератором заголовков для создания предложений-возможностей. Эти предложения будут опубликованы вместе с их логарифмической вероятностью.

Результаты

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

docker run -v $PWD:/opt/app \-e PYTHONPATH=$PYTHONPATH:/opt/app \-it colemurray/medium-show-and-tell-caption-generator  \python3 /opt/app/medium_show_and_tell_caption_generator/inference.py \--model_path /opt/app/etc/show-and-tell.pb \--input_files /opt/app/imgs/trading_floor.jpg \--vocab_file /opt/app/etc/word_counts.txt

Вы должны увидеть результат:

Captions for image trading_floor.jpg: 0) a group of people sitting at tables in a room . (p=0.000306) 1) a group of people sitting around a table with laptops . (p=0.000140) 2) a group of people sitting at a table with laptops . (p=0.000069)
1*JVTNDR601aHk7NCRILdHTQ
Созданная подпись: группа людей сидит за столом с ноутбуками

Вывод

В этом руководстве вы узнали:

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

Полный код здесь.

Следующие шаги:

Призыв к действию:

Если вам понравился этот учебник, следуйте и рекомендуйте!

Хотите узнать больше о Deep Learning / Machine Learning? Просмотрите другие мои учебники:

— Создание конвейера распознавания лица с глубоким обучением в Tensorflow

— Глубокое обучение CNN в Tensorflow с графическим процессором

— Глубокое обучение с Keras на Google Compute Engine

— Системы рекомендаций по Apache Spark на Google Compute Engine

Другие места, где вы можете найти меня:

— Twitter:

Добавить комментарий

Ваш адрес email не будет опубликован.