Рекомендации на основе сходства изображений, как показано выше, - это то, на что мы будем смотреть, учитывая базовое изображение, рекомендуют визуально похожие изображения. Рекомендации на основе изображений очень удобны во многих сценариях, особенно в тех случаях, когда задействованы визуальные вкусы пользователя - одежда, украшения, аксессуары и т. Д. Мы будем использовать набор данных DeepFashion, который содержит 289 222 изображения одежды. по 42 категориям. Давайте быстро взглянем на наш набор инструментов для этого проекта.

FastAi - оболочка над PyTorch, которая делает задачи глубокого обучения удивительно простыми и включает в себя все лучшие практики.

PyTorch, библиотека глубокого обучения от Facebook, мы будем использовать некоторые функции PyTorch в нашем проекте.

Раздражающий примерная реализация ближайшего соседа с открытым исходным кодом от Spotify для эффективного индексирования и поиска векторов признаков.

Код этого проекта можно найти в этой записной книжке jupyter.

Вложения или векторы признаков

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

Для изображения вложения можно получить из сверточных нейронных сетей (CNN). CNN может понимать / изучать информацию, содержащуюся в изображении, на разных уровнях детализации на каждом из его слоев. Начальные сверточные слои понимают низкоуровневую форму, такую ​​как углы, края и т. Д., А конечные слои понимают сложные структуры изображения, лица, здания и т. Д. В зависимости от задачи. Конечные слои CNN обычно представляют собой полностью связанные линейные слои. Вывод этих полностью связанных слоев используется в качестве встраиваемых изображений.

Точная настройка предварительно обученной модели Resnet152 с помощью FastAI

Модель CNN, которую мы используем, представляет собой предварительно обученный Resnet152, обученный на наборе данных Imagenet для классификации изображений. Хотя эту модель можно использовать напрямую для получения вложений, точная настройка модели для набора данных Deep Fashion с помощью FastAi поможет модели лучше понять нюансы нашего набора данных. Этот процесс называется Передача обучения.

При обучении модели в задаче прогнозирования категорий DeepFashion она достигает точности первой тройки 88,4% и точности первой пятерки 93,98%, что лучше, чем результаты тестов. опубликовано в white paper DeepFashion [1].

Векторы признаков извлекаются из этой точно настроенной модели.

Извлечение векторов признаков из модели с помощью хуков PyTorch

В архитектуре resnet152 мы используем выходные данные второго последнего полностью подключенного слоя в качестве встраивания, они являются векторами размерности (512, 1).
Чтобы получить выходные данные промежуточного слоя из модели в PyTorch , мы используем функцию под названием Hook. Крючки могут быть добавлены для извлечения промежуточных значений модели из прямого или обратного прохода.

Наилучший способ использования хуков PyTorch может быть адаптирован из самого кода библиотеки FastAi.

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

Рекомендовать похожие изображения с помощью векторов признаков

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

Этот подход не масштабируется, каждый запрос имеет сложность O (N) и занимает приблизительное время 10 секунд для 249 222 изображений. Чтобы уменьшить эту сложность до сублинейного времени, мы будем использовать алгоритмы приблизительного ближайшего соседа. Алгоритмы приблизительного ближайшего соседа можно рассматривать как компромисс между точностью и производительностью. Сравнительный анализ различных алгоритмов ИНС доступен в сообщении в блоге Эрика Бернхардссона, автора Annoy.

Использование Annoy для получения похожих изображений

Досадно (A pприблизительное ближайшее N восьмое или O h Y eah) - это реализация ИНС на основе двоичного дерева. Лучшее объяснение его работы можно найти в этой статье Эрика.

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

Теперь попробуем запросить индекс Annoy.

Приблизительное время запроса с использованием Annoy сократилось до 2 мс, что на несколько порядков меньше, чем при наивном подходе.

Рекомендации по похожим изображениям

Вот еще несколько рекомендаций, полученных при запросе индекса Annoy.

Ресурсы

[1] З. Лю, П. Ло, С. Цю, X. Ван и X. Тан. Deepfashion: обеспечение надежного распознавания и поиска одежды с помощью богатых аннотаций. В CVPR, 2016.

Досадное объяснение - Ближайшие соседи и векторные модели - часть 2 - алгоритмы и структуры данных

Тест алгоритмов ИНС

Надеюсь, вы нашли этот пост информативным, оставьте свои комментарии и мысли ниже. 😊