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

Итак, основная цель здесь - объединить CNN-RNN для создания автоматической модели субтитров к изображениям, которая принимает изображение в качестве входных данных и выводит последовательность текста, описывающего изображение.

Но зачем подписывать изображения?

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

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

Модель субтитров основана на двух основных компонентах: CNN и RNN. Субтитры - это объединение двух, чтобы объединить их самые мощные атрибуты, т.е.

  1. CNN превосходно сохраняют пространственную информацию и изображения, а также
  2. RNN хорошо работают с любыми последовательными данными, такими как создание последовательности слов. Итак, объединив два, вы можете получить модель, которая может находить шаблоны и изображения, а затем использовать эту информацию для создания описания этих изображений.

А как он будет тренироваться?

Ответ - набор данных COCO. COCO обозначает общие объекты и контексты и содержит большое количество разнообразных изображений, каждое из которых имеет набор из пяти связанных подписей.
Допустим, вас просят написать подпись, описывающую это изображение, как бы вы подошли к этому задача?

Исходя из того, как эти объекты размещены на изображении и их отношения друг к другу, можно подумать, что собака смотрит в небо. Он улыбается, чтобы быть счастливым. Кроме того, он снаружи, так что с таким же успехом он мог бы быть в парке. Небо не голубое, поэтому оно может быть закатом или восходом солнца.
Собрав эти визуальные наблюдения, вы можете составить фразу, описывающую изображение как: «Счастливая собака смотрит на небо».

Модель CNN-RNN

Загрузите изображение в CNN. Мы будем использовать предварительно обученную сеть, такую ​​как VGG16 или Resnet.

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

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

Токенизация субтитров

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

Итак, как работает эта токенизация?

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

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

Встроенный слой?

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

Для обработки слов и создания словаря мы будем использовать набор инструментов обработки текста Python: NLTK

Теперь у RNN две обязанности:

  1. Запомните пространственную информацию из входного вектора признаков.
  2. Предскажите следующее слово.

Настройка тренировки

Начните с установки следующих переменных:

Обучите свою модель

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

Загрузка обученных моделей

Вы загрузите обученный кодировщик и декодер. Хотите узнать, как это сделать? Тогда проверьте эту ссылку здесь.

Делайте прогнозы!

get_prediction () можно использовать для перебора изображений в тестовом наборе данных и печати предсказанного заголовка модели.

Вызовите функцию и вот она! Ваш собственный генератор подписей к изображениям.

Хотите полный исходный код этого проекта? См. Здесь: Автоматические подписи к изображениям