Простое в использовании приложение для Android для создания описательных тегов изображений, созданных с помощью PyTorch, Kotlin и SQLite

Определение и резюме проекта

Большие данные и новые технологии оказывают глубокое влияние на нашу повседневную жизнь, и это трудно не заметить. В частности, объем визуальной информации, такой как фотографии и изображения в социальных сетях, за последние годы вырос в геометрической прогрессии, что послужило стимулом для разработки программного обеспечения, которое может эффективно обрабатывать коллекции изображений большого объема. Маркировка изображений известна как одна из распространенных проблем компьютерного зрения, подразумевающая процесс создания текстовых тегов на основе визуального содержания изображений. Таким образом, возможность автоматически извлекать соответствующие текстовые метки изображений позволяет автоматизировать маркировку изображений (например, онлайн-каталоги), организовывать крупномасштабный контент изображений (например, менеджеры фотографий) и использовать существующие приложения для поиска и обмена изображениями (например, системы рекомендаций).

Для решения этих проблем было разработано приложение для Android - ImageTagger - автоматически генерирующее соответствующие текстовые описания изображений. Для этого была применена комбинация методов глубокого обучения и классического машинного обучения. Извлечение признаков было реализовано с использованием предварительно обученной сверточной нейронной сети (CNN), а соответствующие теги были определены с использованием непараметрического гауссовского наивного байесовского классификатора. В данном случае набор данных классификации изображений общего назначения Tiny ImageNet использовался для создания встраиваемых изображений с помощью MobileNet V2, а производительность последнего была оценена с использованием метрики точности, которая широко используется для решения задач классификации на несколько классов. Достоинство такого подхода в том, что нет необходимости в настройке гиперпараметров, так как у выбранного классификатора его нет.

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

Методология

Использование компьютерного зрения для встраиваемого поколения

Здесь было применено сочетание глубокого обучения и классических методов машинного обучения. Общий анализ можно разделить на два этапа, а именно: выделение признаков и классификацию. Часть извлечения признаков была реализована с использованием глубокой сверточной нейронной сети (CNN), а присваиваемые метки были рассчитаны с использованием непараметрической гауссовской наивной байесовской модели. На рисунке 1 представлены конвейеры обработки изображений и компьютерного зрения, необходимые для выполнения байесовского вывода на основе ранее невидимых данных. Сначала изображение проходит через CNN, который производит соответствующее вложение изображения x. Затем статистические данные по классам (среднее μ и стандартное отклонение σ) вычисляются и сохраняются в базе данных.

Полученные результаты

Изучение концепций по тысячам изображений

Для создания встраиваемых изображений использовался набор данных классификации изображений общего назначения Tiny ImageNet. Набор данных - это уменьшенная версия полной ImageNet, содержащая более 100 тысяч изображений, равномерно распределенных по 200 классам, принадлежащим к различным категориям, таким как животные, устройства, одежда и другие. Таким образом, использование данных Tiny ImageNet позволило модели CNN изучать представления и описания изображений из различных областей знаний.

Для целей проекта использовалась предварительно обученная модель CNN набора данных ImageNet. Чтобы унифицировать представление изображений - формы и цветовые распределения, - входные изображения были масштабированы и обрезаны по центру до размера 256 x 256 пикселей, а также стандартизированы с использованием полной статистики ImageNet для каждого канала. Вышеупомянутая процедура проводится как для обучения, так и для этапа оценки.

На рисунке 2 показано низкоразмерное представление вложений изображений, принадлежащих десяти случайно выбранным классам Tiny ImageNet и сгенерированных с использованием модели MobileNet V2. Качественный анализ ясно показывает, что семантически похожие объекты также находятся близко в пространстве встраивания, в результате чего связанные изображения (например, связанные с едой) разбросаны вместе на поверхности проекции (например, эспрессо, мороженое и пицца находятся в нижнем левом углу экрана). фигура).

Создание соответствующих тегов для входного изображения

Затем на основе предварительно вычисленной статистики, извлеченной из встраивания изображений, вероятности классов вычисляются с использованием гауссовского наивного байесовского классификатора (уравнение 1), и последний фильтруется, сохраняя только самые большие и суммируемые до общей вероятности не менее 0.9. Если пользователь изменил какой-либо из назначенных тегов, выполняется корректировка после вывода. В этом случае база данных приложения, содержащая статистику по классам, обновляется с использованием онлайн-алгоритма Велфорда (уравнения 2, 3) с моментом импульса α = 0,1.

Оценка модели и обоснование

В качестве возможной магистрали для этапа извлечения функций рассматривались четыре сетевых архитектуры: ResNet-18, DenseNet-121, MobileNet V2, ShuffleNet V2. Чтобы выбрать наиболее подходящую модель CNN для создания встраиваемых изображений, производительность модели была оценена (рис. 3) на наборе данных Tiny ImageNet с использованием метрики точность, которая обеспечивает соотношение правильных прогнозов к общему количеству прогнозов. получено с использованием модели. Поскольку авторы набора данных предоставляют официальное разделение данных для обучения и проверки, не было необходимости использовать подход перекрестной проверки. В результате для дальнейшего анализа был выбран MobileNet V2, так как эта архитектура демонстрирует лучшую производительность.

Размер модели служит косвенной мерой ее вычислительной сложности, поэтому предпочтительны простые в вычислении нейронные архитектуры, поскольку модель должна быть развернута на мобильных устройствах. Чтобы получить доступ к размеру моделей, количество обучаемых параметров было рассчитано, как показано на рисунке 4. Результаты показывают, что архитектура ShuffleNet-18 имеет наименьший размер модели, за ней следуют MobileNet V2, ShuffleNet V2 и ResNet-18.

Наконец, архитектура модели MobileNet V2 была выбрана на основе сочетания ее точности и размера, поскольку она обеспечивает наивысшую производительность при меньшем количестве обучаемых параметров.

Уточнение - ускорение сети с помощью квантования

Поскольку глубокие нейронные сети довольно затратны с точки зрения вычислений, скорость вывода обычно становится узким местом, особенно на мобильных устройствах. Чтобы решить эту проблему и увеличить пропускную способность модели, в MobileNet V2 была применена модель квантования. Подход относится к снижению вычислительной сложности за счет использования арифметики низкой точности, выполняющей вычисления на основе чисел с плавающей запятой половинной точности (float16) или целых чисел (int8). числа. Такая оптимизация позволила существенно сократить время, необходимое для выполнения этапа извлечения признаков (с 212,0 +/- 12,6 мс до 50,1 +/- 9,1 мс на Nokia 7.1) за счет незначительного снижения точности проверки (с 56,09% до 55,67%).

Проектирование архитектуры мобильного приложения

После разработки компонентов компьютерного зрения был разработан и реализован пользовательский интерфейс ImageTagger (рисунок 5), как показано ниже. Слева находится обзор начального процесса выбора изображения, в результате которого выбранное изображение передается в личную коллекцию изображений. Пользователь может загрузить существующее на устройство изображение или сделать фото. Справа блок-схема описывает получение изображений из коллекции изображений и их отображение пользователю. Последний может выбрать один из них, чтобы получить автоматическое описание и выполнить редактирование присвоенных меток.

Живая демонстрация ImageTagger

Вот как выглядит финальное приложение для Android (рис.6):

Выводы и дальнейшая работа

Здесь приложение ImageTagger для Android было разработано для автоматической генерации соответствующих текстовых аннотаций пользовательских изображений. Дальнейшее повышение точности может быть достигнуто за счет тонкой настройки CNN на цели (например, MS COCO) или обучения ее на более крупном наборе данных (например, YFCC100M). Кроме того, скорость модели может быть увеличена за счет использования современных устройств, поддерживающих логический вывод на основе графического процессора.

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

Установка ImageTagger на ваше устройство

Чтобы запустить ImageTagger на мобильном устройстве, следуйте контрольному списку и убедитесь, что вы предприняли все шаги для его успешной установки:

  1. Загрузите ImageTagger с GitHub на свое устройство Android.
  2. Откройте приложение на своем Android-устройстве.
  3. Наслаждайтесь автоматической пометкой изображений

Примечание. Предполагается, что мобильное устройство будет работать под управлением Android 8.1 и выше; установка APK из неизвестных источников должна быть разрешена.

Обеспокоены конфиденциальностью и безопасностью? С подозрением относитесь к установке приложений из неизвестных источников? Просто клонируйте репозиторий проекта и создайте ImageTagger самостоятельно, используя Android Studio 4.1 или новее.