Классификация изображений с использованием машинного обучения и глубокого обучения

1 Введение

В этом проекте мы представим одну из основных проблем компьютерного зрения - классификацию изображений. Он определяется как задача классификации изображения из фиксированного набора категорий. Многие другие задачи компьютерного зрения, такие как обнаружение и сегментация объектов, можно свести к классификации изображений. В рамках этого проекта мы начнем с изучения нашего набора данных, а затем покажем, как предварительно обработать и подготовить изображения, чтобы они были действительными входными данными для наших алгоритмов обучения. Наконец, мы объясним соответствующие и реализованные методы машинного обучения для классификации изображений , такие как машина опорных векторов (SVM), K-Nearest Neighbor (KNN), многоуровневый персептрон (MLP) и сверточные нейронные сети (CNN).

Полный код этого проекта доступен в виде Блокнота Jupyter на GitHub. Этот проект был курсовой у меня в магистратуре.

2 Знакомство с набором данных

COCO, спонсируемый Microsoft, - это крупномасштабный набор данных для обнаружения, сегментации и создания субтитров. Он содержит изображения, ограничивающие рамки и метки. Существуют две версии 2014 и 2017, в которых используются одни и те же изображения, но разные расщепления для поездов, проверки и тестирования. COCO определяет 91 класс, но в данных используются только 80 классов, а некоторые изображения не имеют аннотаций. Для этого проекта мы выбрали набор данных проверки за 2017 год, который составляет около 5000 изображений.

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

Из-за ограничений вычислений и даже несмотря на то, что мы выбрали наименьший набор из COCO, загрузка всех этих изображений была невозможна. Таким образом, нам пришлось взять половину из них, отдавая приоритет тем, у которых небольшое количество на класс, используя API для получения и загрузки идентификаторов изображений, связанных с каждой категорией. После этого выбираются категории с количеством экземпляров от 150 до 450, в результате получается 30 классов из 80, которые, в свою очередь, будут использоваться для обучения, проверки и тестирования наших моделей.

3 Обзор литературы по подходящим методам машинного обучения

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

1- Вариация точки обзора: ориентация объекта относительно камеры.

2- Изменение масштаба: один и тот же класс может отличаться по размеру.

3- Деформация: природа объекта, при которой он не может быть постоянно твердым.

4- Окклюзия: Иногда может быть видна только небольшая часть объекта.

5- Условия освещения: Резкое влияние освещения на уровне пикселей.

6- Фоновый беспорядок: интересующий объект смешивается с окружающей средой.

7- Внутриклассовая вариация: Широкие типы одного и того же класса.

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

3.1 Алгоритм K-ближайшего соседа (KNN)

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

Преимуществами алгоритма KNN являются его простота и возможность работы с несколькими классами. Тем не менее, основным недостатком алгоритма KNN является использование всех функций одинаково для вычисления подобия. Это может привести к ошибкам классификации, особенно когда существует лишь небольшое подмножество функций, которые полезны для классификации (JINHO KIM, 2012).

3.2 Алгоритм машины опорных векторов (SVM)

SVM - это представление примеров в виде точек в пространстве, отображаемых таким образом, что экземпляры разных классов разделяются разделяющей плоскостью, которая максимизирует расстояние между ними. Основным преимуществом SVM является то, что он может выполнять нелинейную классификацию, используя трюк с ядром. Однако основным недостатком классификации SVM является ограничение скорости и размера как на этапе обучения, так и на этапе тестирования алгоритма (JINHO KIM, 2012).

3.3 Алгоритм ансамблевого обучения

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

3.4 Многослойный персептрон (MLP)

MLP отличается от логистической регрессии тем, что между входным и выходным слоями может быть один или несколько нелинейных слоев, называемых скрытыми слоями. Основным преимуществом MLP является его способность изучать нелинейные модели. Однако есть серьезные недостатки, такие как наличие невыпуклой функции потерь и настройка количества скрытых слоев и нейронов (N. Coskun и T. Yildirim, 2003).

3.5 Сверточные нейронные сети (CNN)

CNN стали основным алгоритмом в компьютерном зрении в последние годы, им удалось достичь сверхчеловеческой производительности в некоторых сложных визуальных задачах с увеличением вычислительной мощности, и одной из наиболее эффективных архитектур, реализованных в этом проекте посредством трансферного обучения, является Xception. (Шолле, 2017).

Он объединяет идеи других известных архитектур CNN, таких как Inception-v4, GoogLeNet и ResNet, но заменяет начальные модули специальным слоем, называемым разделимой по глубине сверткой (К. Лю, Х. Лю, П. К. Чан, Т. Лю и С. Пей, 2018). В то время как стандартные свертки одновременно изучают пространственный и кросс-канальный паттерны, разделяемый слой свертки разделяет изучение функций на два более простых шага, как показано на рисунке ниже. Первый шаг применяет один пространственный фильтр для каждой входной карты признаков, затем второй шаг ищет перекрестные шаблоны.

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

4 Предварительная обработка и подготовка изображений

4.1 Изменение размера изображения

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

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

4.2 Гауссово размытие

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

4.3 Разделение данных:

Разделение данных было выполнено в два этапа. Во-первых, стратифицированное разбиение с перемешиванием для всех функций и меток с процентным соотношением 60 для обучения и 40 для проверки и тестирования. Во-вторых, разделение 40% тем же способом на 20% для проверки и 20% для тестирования, как показано на диаграмме ниже; распределение разбиения данных для выбранных 30 классов.

4.4 Нормализация данных

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

4.5 Анализ главных компонентов (PCA)

Преобразование PCA, используемое с целью уменьшения размерности, чтобы ускорить обучение без потери неважной информации, учитывая сохранение 99% отклонений. Мы даже заметили повышение производительности при использовании непреобразованных данных. Рисунок ниже для зебры показывает, что восстановленное изображение после обратного PCA не сильно изменилось по сравнению с соответствующим исходным, в то время как количество функций уменьшилось с 30000 до всего 1048.

4.6 Дополнение данных

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

5 Моделирование

Были реализованы шесть алгоритмов обучения со следующими примечаниями:

· Google colab с использованием графического процессора.

· Проверка и тестирование действительного набора и тестового набора соответственно.

· Поскольку данные не сильно искажены, балансировка веса классов не поможет.

5.1 Классификатор стохастического градиентного спуска (SGD)

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

5.2 Классификатор опорных векторов (SVM)

Классификатор SVM, используемый с гауссовым ядром и гаммой, установленной на авто для переобучения. Хотя для обучения требуется время, этот трюк с ядром демонстрирует нелинейность.

Классификатор ближайших соседей 5,3 тыс. (KNN)

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

5.4 Классификатор голосования

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

5.5 Классификатор многослойных персептронов (MLP)

Произвольный поиск количества скрытых слоев и нейронов с 5-кратной перекрестной проверкой. Архитектура с наилучшей точностью - это входной слой с количеством функций 1048, который представляет собой выход PCA + 3 скрытых слоя на каждые 3000 нейронов с функцией активации relu + 30 единиц на выходе с активацией softmax. Рассмотрение использования набора проверки для ранней остановки во время тренировки, что является способом предотвращения переобучения. Добавление дополнительных данных и настройка могут улучшить производительность, но не намного.

5.6 Передача обучения с использованием Xception Classifier

Модель состоит из повторно используемых слоев с их настроенными весами, которые являются первыми слоями и добавленными слоями, средним объединением для уменьшения размерности и выходным слоем с 30 единицами, количеством наших классов.

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

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

6 Производительность

6.1 Сравнение оценок точности

На приведенной ниже диаграмме сравнивается производительность нашей лучшей модели с другими базовыми методами на наборах для проверки и тестирования. Xception с отрывом превосходит другие классификаторы. Нелинейные классификаторы, такие как SVM с гауссовым ядром, Voting и MLP, показывают лучшую производительность, чем линейные и KNN. Точность на тестовом наборе немного лучше, чем на проверочном наборе для SVM, Voting и MLP, в то время как точность на проверочном наборе также немного лучше для остальных классификаторов.

6.2 Сравнение временной сложности

Графический процессор Colab использовался только MLP и Xception через TensorFlow TF. Однако Xception продемонстрировал лучшее использование из-за предварительной выборки набора данных TF. Не только другие методы используют ЦП, Scikit Learn SVM также не поддерживает использование всех процессоров. Фактически, обучение классификатора SVM с гауссовым ядром происходит медленно по сравнению с SGD, KNN. Кроме того, обучение MLP и Xception без GPU происходит очень медленно.

7 Заключение

У нас было представление о наборе данных COCO и их аннотациях, которые можно использовать не только для классификации изображений, но и для других приложений компьютерного зрения. Мы показали, с какими проблемами приходится сталкиваться компьютеру при выполнении такой задачи, как классификация изображений, и как предварительная обработка изображений помогает получить более качественные изображения для обучения. Способность PCA уменьшать размеры в значительной степени способствовала ускорению обучения. Увеличение данных вполне помогло восполнить недостаток изображений для обучения. Хотя методы машинного обучения, такие как SVM, не дали нам хорошей производительности по сравнению с алгоритмом глубокого обучения, таким как Xception, он был конкурентом MLP в том смысле, что позволил нам сначала рассмотреть базовые методы машинного обучения, прежде чем переходить к этим дорогостоящим в вычислительном отношении глубоким методам обучения. изучение архитектур.

8 источников

[1] http://cocodataset.org/#home

[2] https://www.immersivelimit.com/tutorials/create-coco-annotations-from-

[3] https://cs231n.github.io/classification/

[4] http://www.wseas.us/e-library/conferences/2012/CambridgeUSA/MATHCC/MATHCC-18.pdf, JINHO KIM, 2012.

[5] Н. Коскун и Т. Йилдирим, «Влияние обучающих алгоритмов в сети MLP на классификацию изображений», Труды Международной совместной конференции по нейронным сетям, 2003 г., Портленд, штат Орегон, 2003 г., стр. 1223–1226 т. .2.

[6] К. Лю, Х. Лю, П. К. Чан, Т. Лю и С. Пей, «Оценка возраста с помощью объединения глубинно разделенных сверточных нейронных сетей», Международный семинар IEEE 2018 по криминалистике и безопасности информации (WIFS). , Гонконг, Гонконг, 2018 г., стр. 1–8.

[7] https://arxiv.org/pdf/1610.02357.pdf, Шолле, 2017 г.

[8] https://en.wikipedia.org/wiki/Image_scaling/Bilinear_and_bicubic_algorithms

[9] https://en.wikipedia.org/wiki/Gaussian_blur