Члены команды: Ахмет Тарик КАЯ, Айча Мерич ЧЕЛИК, Каан МЕРСИН

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

  1. Использование набора данных

_.txt: текстовый файл с описанием содержимого каждого изображения (с описанием объектов и частей). Эта информация является избыточной для других файлов. Каждая строка в текстовом файле содержит: столбец 1 = номер экземпляра, столбец 2 = уровень детали (0 для объектов), столбец 3 = закрыто (1 для истинных), столбец 4 = имя класса (проанализировано с помощью wordnet), столбец 5 = исходный необработанное имя (может предоставить более подробную категоризацию), столбец 6 = список атрибутов, разделенных запятыми.

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

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

  • спальня - ›1389 изображений (я)
  • ванная комната - ›671 изображение
  • кухня - ›652 изображений
  • гостиная - ›697 изображений
  • столовая - ›412 рис.

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

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

После создания фрейма данных мы начали создавать разные классификаторы и сравнивать их характеристики.

Мы использовали метод train_test_split sklearn для создания наших атрибутов и целей обучения и тестирования. Мы разделяем набор данных с соотношением поездов и тестов 8: 2.

Первый подход: классификатор kNN

Мы использовали модель Sklearn KNeighborsClassifier.

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

Результаты были очень мотивирующими, хотя это не самый подходящий подход для решения нашей проблемы. Минимальная точность тестового набора данных составила 85% по разным параметрам.

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

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

  • Первым учитываемым параметром был параметр «вес».

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

Результаты показаны ниже:

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

  • Второй настраиваемый параметр - «алгоритм».

Параметр алгоритма - необязательный параметр. Модель по умолчанию определяет наиболее подходящий вариант для данного набора данных.

У нас было три варианта:
-‘ball_tree ’использует BallTree
-‘kd_tree’ использует KDTree
-‘brute ’использует поиск методом грубой силы.

Результаты показаны ниже:

Как видно из таблицы, модель выбирает «kd_tree» как наиболее подходящий алгоритм (значения в столбцах «auto» и «kd_tree» равны). Поэтому мы решили использовать «kd_tree» при настройке других параметров.

  • Третий параметр, который мы учли, - это размер листа.

leaf_size: int, необязательно (по умолчанию = 30)
Размер листа передается в BallTree или KDTree. Это может повлиять на скорость построения и запроса, а также на объем памяти, необходимый для хранения дерева. Оптимальное значение зависит от характера проблемы.

Изменение размера листа не сильно повлияло на точность теста, как показано ниже:

Итак, оставим это значение по умолчанию.

  • Последним параметром, который мы настраивали, было расстояние.

метрика: строка или вызываемая, по умолчанию «minkowski»
метрика расстояния, используемая для дерева. По умолчанию используется метрика Минковского, а при p = 2 она эквивалентна стандартной евклидовой метрике. См. Документацию класса DistanceMetric для получения списка доступных метрик.

Существует три различных варианта расстояния, формулы которых приведены ниже:
-'minkowski '- ›sum (| x - y | ^ p) ^ (1 / p)
-'manhattan' -› sum ( | x - y |)
-'евклидово '- ›sqrt (sum ((x - y) ²))

Результаты показаны ниже:

Как видно из этой таблицы, выбор «манхэттена» в качестве параметра расстояния значительно повысил точность тестирования. Так что это стало нашим окончательным выбором.

В результате мы получили максимальную точность теста% 92,67 с настроенными нами параметрами и 7 ближайшими соседями.

Матрица неточностей тестового набора данных показана ниже:

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

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

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

299 → Количество общих объектов между гостиной и спальней
284 → Количество общих объектов между гостиной и столовой
499 → Количество объектов в гостиной
498 → Количество объектов в спальне
374 → Кол-во объектов столовой

Второй подход: наивный байесовский

В качестве нашей второй модели мы обучили наивную байесовскую модель.

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

Мы ожидали гораздо большего от этой модели, и результаты нас не разочаровали. Минимальная точность тестового набора данных составила% 96,6 по различным параметрам.

Настраивать было не так много параметров. Результат показан ниже:

Мы работали над параметрами alpha и fit_prior. Как видно из таблицы, параметр fit_prior не меняет результат. Но сглаживание Лапласа увеличивает точность нашего теста, как мы и ожидали.

alpha: float, необязательный (по умолчанию = 1.0)
Параметр аддитивного (Лапласа / Лидстоуна) сглаживания (0 - без сглаживания).

fit_prior: логическое, необязательное (по умолчанию = True)
Узнавать ли априорные вероятности класса или нет. Если false, будет использоваться униформа приора.

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

Матрица неточностей тестового набора данных показана ниже:

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

Причина та же, что мы обсуждали в части kNN нашего блога.

Заключение

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

Спасибо, что следите за нашим проектом.

Следите за обновлениями!

Ссылки

  1. Https://en.wikipedia.org/wiki/Naive_Bayes_classifier
  2. Https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm
  3. Https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.MultinomialNB.html#sklearn.naive_bayes.MultinomialNB
  4. Http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html
  5. Http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.DistanceMetric.html
  6. Http://groups.csail.mit.edu/vision/datasets/ADE20K/