Вступление

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

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

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

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

Когда начать

Нашей первой попыткой автоматизировать извлечение цвета было создание полноценной нейронной сети. Хотя он был успешным с одноцветными предметами одежды, мы быстро обнаружили, что многоцветные изделия приводят к неоднозначным результатам. Улучшение нейронной сети означало бы пойти по кроличьей норе и создать новый обучающий набор данных для улучшения результатов. Легко месяцев работы!

Вместо этого мы решили выбрать то, что изначально выглядело менее привлекательной стратегией, но основывалось на различных этапах получения желаемой цветовой классификации: нас не интересует все изображение, только передний план и пиксели, которые составить основной объект (1). Нас не интересует полный список цветов изображения, а только широкий диапазон палитр (2). И нам нужно было название для каждой из этих широких секций RGB (3).

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

Отклонение фона: вырезать

Изначально мы начали работать с более легкими методами: порог, оцу, градиенты. А поскольку мы довольно ботаники, когда дело доходит до глубокого обучения, мы также попробовали mask rcnn. Некоторые из методов не работали, когда не выполнялись некоторые условия, связанные с отношением между фоном и передним планом, в то время как другие, такие как маска rcnn, работали слишком медленно. Мы закончили работу с методом, основанным на разрезании графа: захват-разрез.

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

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

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

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

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

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

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

Кластеризация

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

Мы выбрали k-means - один из самых популярных и эффективных алгоритмов кластеризации. Для k-средних кластер характеризуется центром, который является средним арифметическим всех точек кластера. Каждая точка в кластере находится ближе к своему центру, чем к центрам других кластеров. K-means требует понятия расстояния между точками данных, для этого мы использовали евклидово расстояние между RGB.

Основное ограничение кластеризации k-средних состоит в том, что она обеспечивает фиксированное количество кластеров. Существует несколько методов определения идеального количества кластеров в данных, но ни один из них не может в конечном итоге гарантировать, что количество кластеров будет соответствовать количеству различных цветов в изображении.

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

Чтобы выполнить эту последнюю обработку, нам нужно было знать, как анализировать информацию RGB. Подробнее об этом в следующем разделе…

Цветовое обозначение

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

Наш план состоял в том, чтобы создать список предварительно классифицированных RGB и найти самый близкий цвет для рассматриваемого RGB.

Нашим первым подходом было использование евклидова расстояния. Вскоре мы обнаружили, что у нас шаткие основания: цветовое пространство RGB не отражает то, как мы, люди, воспринимаем цвет, поскольку оно не является перцептивно однородным. Изменение значения цвета на такую ​​же величину не обязательно означает изменение такой же величины визуального восприятия (рис. 1).

Нам нужен был способ идентифицировать похожие цвета, и для этого было важно иметь перцептивно однородное цветовое пространство. В этом цветовом пространстве равные шаги в дельте между RGB должны восприниматься как равные шаги в цветовой карте. Мы выбрали цветовое пространство CIELAB (CIE2000). Цветовое пространство CIELAB обеспечивает математическую интерпретацию видимого спектра, сильно коррелирующего с зрительной системой человека, и пересмотренную версию евклидова расстояния: Delta E (рисунок 2).

Наличие надежного метода количественного сравнения цветов обеспечивает основу для наименования цвета значения RGB. Наша стратегия состоит в том, чтобы преобразовать RGB в значения LAB и применить Delta E к предварительно классифицированному списку цветов, ближайший из которых приводит к желаемой цветовой метке.

Тот же самый CIELAB Delta E может быть применен на предыдущем шаге для удаления лишних данных кластеризации, поскольку он также включает в себя сравнение значений RGB и количественную оценку разницы для удаления кластеров, которые приведут к одинаковому или очень похожему воспринимаемому цвету.

Результаты

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

Заключение

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

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