Объедините извлечение признаков, меру сходства и график ближайших соседей

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

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

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

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

Чтобы подойти к каждой из подзадач, в этой статье мы будем использовать следующие методы:

  1. Гистограмма ориентированного градиента (HOG) для извлечения признаков
  2. Расстояние Вассерштейна для измерения сходства между гистограммами
  3. Граф K-ближайших соседей (K-NNG) для сортировки изображений по сходству

Гистограмма ориентированного градиента (HOG)

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

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

Чтобы извлечь функцию HOG из изображения, мы можем использовать функцию hog() из библиотеки Scikit-image. Вот наглядный пример градиентов, выделенных на черно-белом изображении:

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

Расстояние Вассерштейн

Метрика Вассерштейна, также известная как расстояние землеройной машины, представляет собой метрику расстояния между двумя распределениями вероятностей. Он основан на идее измерения объема «работы», необходимой для преобразования одного дистрибутива в другой.

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

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

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

K-граф ближайших соседей (K-NNG)

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

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

Чтобы обнаружить глобальную структуру данных, мы можем использовать многообразное обучение, такое как t-распределенное стохастическое встраивание соседей (t-SNE), чтобы уменьшить размерность дескриптора HOG только до двух измерений.

При таком макете мы получаем граф, разделяющий узлы, как на следующем рисунке.

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

Заключение

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

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

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

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

Хотите узнать больше о работе и проектах Энтони? Следите за ним в Medium, LinkedIn и Twitter.

Нужен технический писатель? Отправьте запрос на https://amigocci.io.