Создание системы глубокого поиска изображений с помощью Keras

глубокое обучение

мотивация

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

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

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

набор данных:

Мне не удалось найти достаточно большой набор данных для ранжирования результатов поиска, но я смог получить этот: http://jmcauley.ucsd.edu/data/amazon/, который связывает изображения товаров электронной коммерции с их названиями и описаниями. . Мы будем использовать эти метаданные в качестве источника контроля для изучения значимых совместных представлений текста и изображения. Чтобы управлять затратами на вычисления и хранение, эти эксперименты были ограничены предметами моды (одеждой, обувью и украшениями) и 500 000 изображений.

Постановка задачи:

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

Модель:

Модель имеет 3 входа: изображения (т. е. привязки), подписи к изображениям и описания (т. е. положительные примеры), а третий ввод — это случайно выбранный текст (т. е. отрицательные примеры).

Затем определите две подмодели:

  • Кодировщик изображений: предварительно обученный Resnet50 ImageNet + GlobalMaxpooling2D
  • Кодировщик текста: GRU+GlobalMaxpooling1D

Подмодель изображения генерирует якоряE_aПри встраивании текстовая подмодель выводит положительное название и описание.E_pВстраивание и отрицательный текстE_nвложение.

Затем мы тренируемся, оптимизируя следующую функцию потерь:

L = max( d(Ea, Ep)-d(Ea, En)+alpha, 0)

где d — евклидово расстояние, а альфа — гиперпараметр, который в данном эксперименте равен 0,4.

По сути, эта потеря позволяет сделать d(E_a, E_p) становится меньше, так что d(E_a, E_n) становится больше, так что вложение каждого изображения близко к его описанию и отличается от случайного текста.

Визуализируйте результат:

Как только мы изучим модель встраивания изображения и модель встраивания текста, мы можем спроецировать их в 2D-пространство с помощью tsne (https://scikit-learn.org/stable/modules/generated/sklearn.manifold.TSNE.html). добиться визуализации. Тестовые изображения и соответствующие им текстовые описания соединены зеленой линией.

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

Текстовый поиск изображения:

Здесь мы используем несколько примеров текстовых запросов для поиска наилучшего совпадения в наборе из 70 000 изображений. Мы вычисляем встраивание текста для запроса, а затем вычисляем встраивание для каждого изображения в коллекции. В итоге мы выбираем 9 лучших изображений, наиболее близких к запросу в области встраивания.

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

Поиск изображения:

Здесь мы будем использовать изображение в качестве запроса, а затем искать наиболее похожий пример в базе данных из 70 000 изображений. Порядок определяется евклидовым расстоянием каждой пары изображений в пространстве вложения.

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

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

использованная литература:

  • Large Scale Online Learning of Image Similarity Through Ranking
  • Ups and downs: Modeling the visual evolution of fashion trends with one-class collaborative filtering
  • https://github.com/KinWaiCheuk/Triplet-net-keras/blob/master/Triplet%20NN%20Test%20on%20MNIST.ipynb

код: воспроизвести результат => https://github.com/CVxTz/imagesearchСводная станция блога о технологиях искусственного интеллекта Engine Panchuang: http://docs.panchuang.net/PyTorch, официальная китайская учебная станция: http://pytorch.panchuang.net/OpenCV, официальный китайский документ: http://woshicver.com/