Вступление

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

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

Как правило, для получения изображений с помощью изображения запроса изображения представлены как векторы признаков. Изображения, векторы признаков которых очень похожи на вектор признаков изображения в запросе, возвращаются как похожие изображения. Для части извлечения признаков некоторое время использовались SIFT, HoG и т. Д. В последнее время для этой цели часто используется извлечение функций на основе глубокого обучения (deep features).

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

Извлечение функций изображения

Для нашей функции распознавания изображений мы построили модель на основе Inception-v3. Это разновидность модели сверточной нейронной сети (CNN), предложенной Google. Мы обучили модель, используя изображения предметов, перечисленных на Mercari, чтобы она могла классифицировать категорию предметов и бренд. В этом эксперименте модель используется для извлечения признаков изображения.

На рисунке 2 показана структура модели Inception-v3. Его характерная структура включает ответвления и присоединения к сети. Каждая часть (от ветви до соединения) называется начальным модулем.

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

(A) После первого начального модуля: вектор размером 35 x 35 x 256 преобразуется в вектор признаков 256D с глобальным средним объединением.

(B) После восьмого начального модуля: размерный вектор 17 x 17 x 768 преобразуется в вектор признаков 768D с глобальным средним объединением.

(C) После последнего начального модуля: размерный вектор 8 x 8 x 2048 преобразуется в вектор признаков 2048D с глобальным средним объединением.

Глобальное среднее объединение просто используется для уменьшения размерности.

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

Набор данных

Мы используем 1 миллион изображений, выбранных случайным образом из изображений предметов Mercari. Три типа функций изображения (слои A, B и C) извлекаются с помощью модели Inception-v3 из всех изображений.

Получение похожих предметов

Мы используем косинусное сходство как меру сходства между вектором признаков изображения в запросе и 1 миллионом векторов признаков изображения. 10 лучших похожих предметов для слоев A, B и C перечислены ниже.

Пример 1

Образец запроса - красный вязаный топ.

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

Пример 2

Образ-запрос - вязаный топ в полоску.

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

Пример 3

Это синий пуховик.

С векторами признаков слоя А, даже если пуховики извлечены, большинство из них не являются пуховиками. Слои B и C правильно соответствуют пуховым жилетам. Однако по результатам слоя C видно, что цветовая чувствительность снижена.

Пример 4

Это вязаная шапка Nike в полоску.

С помощью векторов признаков слоя A извлекается несколько вязанных шапок, но также включаются элементы, которые имеют просто полосатый узор. Непосредственно использовать свойства слоя А кажется сложным. В случае слоев В и С получаются только вязаные шапочки. Интересно, что результат, основанный на слое C, содержит больше продуктов Nike.

Заключение

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

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

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

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

Мы активно нанимаем инженеров по машинному обучению и обработке естественного языка, поэтому, если вы заинтересованы в работе в Mercari, свяжитесь с нами!