Автоматические подписи к изображениям - это процесс, с помощью которого мы обучаем модель глубокого обучения автоматическому назначению метаданных в виде подписей или ключевых слов к цифровому изображению. Подписи к изображениям имеют различные приложения, такие как аннотирование изображений, понимание типа контента в социальных сетях и, в частности, сочетание НЛП, чтобы помочь слепым людям понять свое окружение и окружающую среду.
Таблица содержания
- Введение в cAInvas
- Источник данных
- Визуализация данных
- Извлечение функций и предварительная обработка данных
- Модельное обучение
- Введение в DeepC
- Компиляция с DeepC
Введение в cAInvas
CAInvas - интегрированная платформа разработки для создания интеллектуальных периферийных устройств. Мы не только можем обучить нашу модель глубокого обучения с помощью Tensorflow, Keras или Pytorch, мы также можем скомпилировать нашу модель с его пограничным компилятором под названием DeepC для развертывания нашей рабочей модели на периферийных устройствах для производства. Модель Auto Image Captioning также разработана на cAInvas, и все зависимости, которые вам понадобятся для этого проекта, также предустановлены.
cAInvas также предлагает различные другие записные книжки для глубокого обучения в своей галерее, которые можно использовать для справки или для получения информации о глубоком обучении. Он также имеет поддержку графического процессора, что делает его лучшим в своем роде.
Источник данных
Данные были взяты из kaggle, который содержит изображения вместе с подписью, которая в основном представляет собой подпись в одну строку, определяющую изображение. Мы определим путь к набору данных, выполнив команды:
Визуализация данных
Для визуализации данных воспользуемся модулем Image библиотеки PIL. На этом этапе мы построим изображение и напечатаем заголовок, чтобы увидеть, совпадают ли подписи с изображением, а также получить интуитивное представление о том, с какими данными мы имеем дело. Вот изображение с подписью.
Для подписей мы предварительно обработаем текстовые данные, например, мы создадим словарь для подписей с именем файла изображения в качестве ключа для подписи. Затем мы удалим те подписи, которые не соответствуют ни одному имени файла изображения. Затем мы добавим ключевое слово в начале и в конце каждой подписи. Вот пример подписи:
"1000268201_693b08cb0e" : startseq child in pink dress is climbing up set of stairs in an entry way endseq
Извлечение функций и предварительная обработка данных
Следующим шагом в конвейере является извлечение функций из изображения, которые мы передадим в нашу модель с автоматическими субтитрами. Мы не будем передавать массив numpy изображения, мы воспользуемся ResNet 50 для извлечения функций из изображений, а затем передадим его в нашу модель субтитров. Затем мы будем токенизировать наши подписи и заполнить текст подписи, и как только это будет сделано, мы создадим набор поездов и набор тестов.
Модельное обучение
После создания набора данных следующий шаг - передать наши обучающие данные в нашу модель глубокого обучения, чтобы научиться подписывать изображения. Сначала мы передадим извлеченные функции изображений в модель изображения, а затем передадим их в языковую модель. Последняя использованная архитектура модели:
Model: "functional_7" __________________________________________________________________________________________________ Layer (type) Output Shape Param # Connected to ================================================================================================== embedding_input (InputLayer) [(None, 30)] 0 __________________________________________________________________________________________________ dense_input (InputLayer) [(None, 2048)] 0 __________________________________________________________________________________________________ embedding (Embedding) (None, 30, 128) 574336 embedding_input[0][0] __________________________________________________________________________________________________ dense (Dense) (None, 128) 262272 dense_input[0][0] __________________________________________________________________________________________________ lstm (LSTM) (None, 30, 256) 394240 embedding[0][0] __________________________________________________________________________________________________ dropout (Dropout) (None, 128) 0 dense[0][0] __________________________________________________________________________________________________ dropout_1 (Dropout) (None, 30, 256) 0 lstm[0][0] __________________________________________________________________________________________________ repeat_vector (RepeatVector) (None, 30, 128) 0 dropout[0][0] __________________________________________________________________________________________________ time_distributed (TimeDistribut (None, 30, 128) 32896 dropout_1[0][0] __________________________________________________________________________________________________ concatenate_3 (Concatenate) (None, 30, 256) 0 repeat_vector[0][0] time_distributed[0][0] __________________________________________________________________________________________________ lstm_7 (LSTM) (None, 30, 128) 197120 concatenate_3[0][0] __________________________________________________________________________________________________ lstm_8 (LSTM) (None, 512) 1312768 lstm_7[0][0] __________________________________________________________________________________________________ dense_5 (Dense) (None, 4487) 2301831 lstm_8[0][0] __________________________________________________________________________________________________ activation_3 (Activation) (None, 4487) 0 dense_5[0][0] ================================================================================================== Total params: 5,075,463 Trainable params: 5,075,463 Non-trainable params: 0 ____________________________________________________________________
Используемая функция потерь - это «категориальная кроссентропия», а оптимизатор - «Адам». Для обучения модели мы использовали Keras API с тензорным потоком на бэкэнде. Вот обучающий график для модели:
Введение в DeepC
Компилятор DeepC и структура логического вывода предназначены для включения и выполнения нейронных сетей с глубоким обучением путем сосредоточения внимания на функциях устройств малого форм-фактора, таких как микроконтроллеры, eFPGA, процессоры и другие встроенные устройства, такие как raspberry-pi, odroid, arduino, SparkFun Edge, risc -V, мобильные телефоны, ноутбуки x86 и arm, среди прочего.
DeepC также предлагает заранее подготовленный компилятор, создающий оптимизированный исполняемый файл на основе цепочки инструментов компилятора LLVM, специализированной для глубоких нейронных сетей с ONNX в качестве интерфейса.
Компиляция с DeepC
После обучения модель была сохранена в формате H5 с помощью Keras, поскольку она легко сохраняет веса и конфигурацию модели в одном файле.
После сохранения файла в формате H5 мы можем легко скомпилировать нашу модель с помощью компилятора DeepC, который входит в состав платформы cAInvas, так что он преобразует нашу сохраненную модель в формат, который можно легко развернуть на границе. устройств, и все это очень просто сделать с помощью простой команды.
Вот и все, наша модель автоматических подписей к изображениям обучена и готова к развертыванию.
Ссылка на блокнот cAInvas: https://cainvas.ai-tech.systems/use-cases/auto-image-captioning-app/
Кредит: Ашиш Арья