Skip to content

Koldim2001/Image_captioning

Repository files navigation

Image captioning (Генерация текстового описания изображений)


В данном проекте представлена детальная методология предварительной обработки данных с целью их подготовки перед обучением моделей. Кроме того, реализованы два ведущих архитектурных решения в области image captioning, которые находятся в центре внимания исследовательского сообщества. Помимо этого, мной был создан веб-сервис, обеспечивающий возможность загрузки изображений и генерации двух описаний для каждой из обученных архитектур (модель LSTM + ResNet и модель LSTM + MobileNet + Soft Attention).

Краткая теория:

Архитектура для создания image captioning обычно основывается на сочетании сверточных нейронных сетей (Convolutional Neural Networks, CNN) для обработки изображения и рекуррентных нейронных сетей (Recurrent Neural Networks, RNN) для генерации подписи. То есть данная задача по созданию текстовых описаний является комбинацией сразу двух популярных направлений в Deep Learning (NLP + CV).

Классический подход к image captioning с использованием RNN (например, LSTM - Long Short-Term Memory) имеет некоторые проблемы. Одна из основных проблем - это то, что RNN имеет фиксированную длину контекста и обрабатывает информацию последовательно. Это означает, что RNN видит только небольшой контекст, поэтому при генерации слов часто забывет старые результаты своей генерации. Так же такой подход не позволяет полностью учесть контекст изображения на каждом этапе генерации. В данном случае выделенные фичи изображения с помощью CNN лишь единожды подаются на вход LSTM блока, так что со временем генерация полностью теряет память о исходном изображении и начинает "додумывать самостоятельно".

1st model

Рисунок 1 - Архитектура модели LSTM + ResNet

Для решения этих описанных ранее проблем применяется механизм внимания (attention mechanism). В случае image captioning, механизм внимания позволяет сети "обращаться" к различным частям изображения на каждом шаге генерации текста. Таким образом контекст самого изображения не теряется со временем генерации. А представленный механизм soft attention позволяет сети фокусироваться на разных частях изображения с разной степенью "важности" на каждом шаге генерации, что значительно увеличивает качество финального описания. Так же такие текста по большей части являются полее содержательными, а главное оконченными (В случае первой модели зачастую происходит зацикливание содердания из-за потери контекста).

2nd model

Рисунок 2 - Архитектура модели LSTM + MobileNet + Soft Attention


Структура проекта:

Подробное описание процесса предподготовки изображений и тестовых описаний для обучения сетей, обучение сети с архитектурой LSTM + ResNet34, а так же реализация инференции (inference) данной модели при подаче нового незнакомого изображения представлены в jupiter notebook - image_captioning_no_attention.ipynb

Обучение сети с архитектурой LSTM + MobileNet + Soft Attention, а так же реализация инференции (inference) данной модели при подаче нового незнакомого изображения представлены в jupiter notebook - image_captioning_with_attention.ipynb

Вэб сервис я реализовал с помощью веб-фреймворка Streamlit, предназначенного для простого развертывания моделей. Скрипт для запуска на localhost вэб приложения - web.py

Помимо главных описанных файлов репозитория так же имеются .py файлы, в которых реализованы функции по инференсу моделей и загрузке обученных весов с моего Google Drive. Так же имеется файл с расширением .pkl, в котором сохранен полученный словарь в процессе предобраюотки текстовых описаний (NLP).


Как запускать программу:

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

  1. Склонируйте к себе этот репозиторий
git clone https://github.com/Koldim2001/Image_captioning.git
  1. Перейдите с помощью команды cd в созданную папку Factory_detection
cd Image_captioning
  1. Загрузите все необходимые библиотеки:
pip install -r requirements.txt
  1. Запустите написанный вэб сервис:
streamlit run web.py --server.port 80
  1. Перейдите на данный сайт:

Local URL: http://localhost:80

PS: Для корректной работы streamlit веб-фреймворка может потребоваться наличие python версии не ниже 3.9.12 (то есть новее) .

web web
web web

Рисунок 3 - Примеры работы веб-приложения

About

Генерация описаний к изображениям с помощью различных архитектур нейронных сетей

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published