Эта статья поможет вам создать архитектуру нейронной сети для автоматического создания подписей из изображений.
Итак, основная цель здесь - объединить CNN-RNN для создания автоматической модели субтитров к изображениям, которая принимает изображение в качестве входных данных и выводит последовательность текста, описывающего изображение.
Но зачем подписывать изображения?
Это связано с тем, что подписи к изображениям используются во множестве приложений. Например:
- Его можно использовать для описания изображений слепым или слабовидящим людям, которые полагаются на звуки и тексты для описания сцены.
- В веб-разработке рекомендуется предоставлять описание для любого изображения, которое появляется на странице, чтобы изображение можно было прочитать или услышать, а не просто увидеть. Это делает веб-контент доступным.
- Его можно использовать для описания видео в реальном времени.
Модель субтитров основана на двух основных компонентах: CNN и RNN. Субтитры - это объединение двух, чтобы объединить их самые мощные атрибуты, т.е.
- CNN превосходно сохраняют пространственную информацию и изображения, а также
- RNN хорошо работают с любыми последовательными данными, такими как создание последовательности слов. Итак, объединив два, вы можете получить модель, которая может находить шаблоны и изображения, а затем использовать эту информацию для создания описания этих изображений.
А как он будет тренироваться?
Ответ - набор данных COCO. COCO обозначает общие объекты и контексты и содержит большое количество разнообразных изображений, каждое из которых имеет набор из пяти связанных подписей.
Допустим, вас просят написать подпись, описывающую это изображение, как бы вы подошли к этому задача?
Исходя из того, как эти объекты размещены на изображении и их отношения друг к другу, можно подумать, что собака смотрит в небо. Он улыбается, чтобы быть счастливым. Кроме того, он снаружи, так что с таким же успехом он мог бы быть в парке. Небо не голубое, поэтому оно может быть закатом или восходом солнца.
Собрав эти визуальные наблюдения, вы можете составить фразу, описывающую изображение как: «Счастливая собака смотрит на небо».
Модель CNN-RNN
Загрузите изображение в CNN. Мы будем использовать предварительно обученную сеть, такую как VGG16 или Resnet.
Поскольку нам нужен набор функций, представляющих пространственный контент изображения, мы собираемся удалить последний полностью связанный слой, который классифицирует изображение и рассмотрим более ранний слой, который обрабатывает пространственную информацию в изображение.
Итак, теперь CNN действует как средство извлечения признаков, которое сжимает информацию из исходного изображения в меньшее представление. Поскольку он кодирует содержимое изображения в меньший вектор признаков, этот CNN часто называют кодировщиком.
Когда мы обрабатываем этот вектор признаков и используем его в качестве начальных входных данных для следующей RNN, тогда он будет называться декодером, потому что RNN будет декодировать вектор признаков процесса и превращать его в естественный язык.
Токенизация субтитров
Компонент RNN сети субтитров обучается по субтитрам в наборе данных COCO. Мы стремимся научить RNN предсказывать следующее слово предложения на основе предыдущих слов. Для этого мы преобразуем подписанные, связанные с изображением, в список токенизированных слов. Эта токенизация превращает любые строки в список целых чисел.
Итак, как работает эта токенизация?
Сначала мы перебираем все обучающие заголовки и создаем словарь, который сопоставляет все уникальные слова с числовым индексом. Итак, каждое слово, с которым мы сталкиваемся, будет иметь соответствующее целочисленное значение, которое мы можем найти в этом словаре. Слова в этих словарях упоминаются как наш словарь.
Этот список токенов (в заголовке) затем превращается в список целых чисел, взятых из нашего словаря, который сопоставляет каждое отдельное слово в словаре с целочисленным значением.
Встроенный слой?
Он преобразует каждое слово в подписи в вектор желаемой согласованной формы. После этого шага встраивания мы, наконец, готовы обучить RNN, которая может предсказывать наиболее вероятное следующее слово в предложении.
Для обработки слов и создания словаря мы будем использовать набор инструментов обработки текста Python: NLTK
Теперь у RNN две обязанности:
- Запомните пространственную информацию из входного вектора признаков.
- Предскажите следующее слово.
Настройка тренировки
Начните с установки следующих переменных:
Обучите свою модель
Чтобы выяснить, насколько хорошо работает ваша модель, вы можете посмотреть, как потери и затруднения при обучении развиваются во время обучения.
Однако это не скажет вам, переоснащается ли ваша модель обучающим данным, и, к сожалению, переобучение - это проблема, которая часто встречается при обучении моделей субтитров к изображениям.
Загрузка обученных моделей
Вы загрузите обученный кодировщик и декодер. Хотите узнать, как это сделать? Тогда проверьте эту ссылку здесь.
Делайте прогнозы!
get_prediction () можно использовать для перебора изображений в тестовом наборе данных и печати предсказанного заголовка модели.
Вызовите функцию и вот она! Ваш собственный генератор подписей к изображениям.
Хотите полный исходный код этого проекта? См. Здесь: Автоматические подписи к изображениям