Родриго Неварес Эскобар, Хесус Абрахам Вильяльба Миранда и Луис Гектор Агилар

Введение.

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

Определение как входных, так и выходных данных имеет важное значение для анализа машинного обучения, в конкретном случае классификации изображений ни одна задача классификатора не является одинаковой. Большая часть наших выходных данных будет определяться нашими входными данными, поэтому важность наших данных становится очевидной. Мы могли бы сказать, что нам нужно конкретное решение нашей проблемы классификации, но объем, в котором выполняется заданное решение, может зависеть от того, как поступают наши изображения. Некогда надежный пул изображений для обучения наших алгоритмов может стать недостаточным, когда раньше очищены и проанализированы экспертом. Итак, можно задать вопрос: «Какую модель я могу использовать для обучения, когда я ограничен своими входными данными?»

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

Ненейронный подход: линейная классификация с SVM.

Выбор модели: SVM

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

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

Гиперплан

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

Маржа

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

Векторы поддержки

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

В SVM наша главная цель — выбрать гиперплоскость с максимально возможным запасом между опорными векторами в заданном наборе данных.

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

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

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

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

Почему SVM?

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

Пример использования SVM.

Вот некоторые из ключевых параметров SVM:

  • Гамма: определяет, насколько влияние отдельных обучающих примеров достигает значений, приводящих к искаженным результатам.
  • C: Контролирует стоимость просчетов
  • Маленький C: делает стоимость неправильной классификации НИЗКОЙ
  • Большой C: делает стоимость неправильной классификации ВЫСОКОЙ
  • Ядро: алгоритмы SVM используют набор математических функций, которые определены как ядро.

Основная задача классификации изображений состоит в том, чтобы прочитать входное изображение, компьютер же видит изображение совсем по-другому. Компьютер видит изображение как массив пикселей, если размер изображения 200 х 200, размер массива будет 200 х 200 х 3, где первые 200 — ширина, вторые 200 — высота, а следующие 3 значения канала RGB. Значения в массиве будут находиться в диапазоне от 0 до 255, что описывает интенсивность пикселя в каждой точке.

Перекрестная проверка поиска по сетке

Нам нужна библиотека GridSearchDV, которая входит в состав пакета model_selection sklearn. Это помогает перебирать предопределенные гиперпараметры и подгонять вашу оценку (модель) к тренировочному набору. Итак, в конце концов, вы можете выбрать лучшие параметры из перечисленных гиперпараметров.

Процесс

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

Для создания такой модели необходимо пройти следующие этапы:

  1. Ввод данных: например, 2 разных категории изображений (кошка и собака)
  2. Построение модели: Объявление модели.
  3. Обучение модели: данные делятся на две категории: данные обучения и данные тестирования. Данные обучения используются для обучения модели, тогда как данные тестирования используются для проверки обученной модели.
  4. Тестирование модели: модель тестируется с использованием данных тестирования.
  5. Оценка модели: созданную модель можно использовать для оценки новых данных.

Сохраните главное: PCA

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

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

Нейрональный подход: CNN и трансферное обучение в Керасе.

Выбор модели: глубокое обучение и сверточные нейронные сети.

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

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

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

Keras позволяет создавать модели двумя разными способами; используя либо функциональный API, либо последовательный API. Keras — это оболочка для серверной библиотеки, поэтому необходимо предоставить серверную часть, такую ​​как TensorFlow, Theano, CNTK и т. д.

Почему CNN?

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

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

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

Максимальное использование наших изображений.

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

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

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

Выводы

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

Рекомендации

Банерджи, П. (2020). Учебное пособие по классификатору SVM. Каггль. Получено из: Учебное пособие по классификатору SVM | Kaggle

Прамодита, Р. (2021, 12 апреля) Сжатие изображений с использованием анализа главных компонентов (PCA) на пути к науке о данных. Получено из: Сжатие изображений с использованием анализа главных компонентов (PCA) | Рукшан Прамодита | На пути к науке о данных

Scikit-Learn. (2022) 1.4. Машины опорных векторов — документация scikit-learn 1.1.0. Получено из: 1.4. Машины опорных векторов — документация scikit-learn 1.1.0

Шанмух В. (3 марта 2021 г.) Классификация изображений с использованием машины опорных векторов машинного обучения (SVM). Аналитика Видья. Получено из: «Классификация изображений с использованием машины опорных векторов машинного обучения (SVM) | Веги Шанмукх | Аналитика Видья | Середина"

Эстебан, М. (nd) Введение в глубокое обучение с Keras. Датакемп. Получено из: Введение в глубокое обучение с помощью Keras — DataCamp Learn