Цель

Основная цель этого блога — показать вам, как создать программное обеспечение для классификации изображений для коллекции изображений листьев манго, чтобы предсказать их тип. Это программное обеспечение можно использовать не только для прогнозирования листьев манго, но и для классификации любых наборов данных классификации изображений. Набор данных о болезни листьев манго состоит из 4000 изображений размером 240 x 320 и состоит из 8 классов, из которых 7 являются типами болезней, а именно — антракноз, бактериальный рак, долгоносик, Отмирание, галлица, мучнистая роса, сажистая плесень и другие относится к категории Полезные. Каждый из 8 классов содержит по 500 изображений.

Как уже известно, для классификации изображения нам нужно иметь несколько моделей машинного обучения, и в этом блоге я буду обсуждать несколько моделей машинного обучения, таких как Сверточная нейронная сеть (CNN), K-Nearest Классификатор соседей (KNN), классификатор дерева решений, классификатор случайного леса и машина опорных векторов (SVM).

Вот ссылка для загрузки набора данных с Kaggle — Набор данных о заболеваниях листьев манго

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

Давайте вместе учиться и исследовать… ✨

Введение

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

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

Вкратце, я буду обсуждать следующее:

Сверточные нейронные сети

КНН

Классификатор дерева решений

Случайный лесной классификатор

Машина опорных векторов

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

Сверточная нейронная сеть (CNN/ConvNet) — это алгоритм глубокого обучения, который берет входное изображение, присваивает веса и смещения различным объектам на изображении и отличает его от другого [1]. Он состоит из 3 слоев, таких как слой свертки, слой объединения и полностью связанный слой.

Слой Convolution извлекает особенности изображения. В основном он использует два гиперпараметра ядро и длину шага. Цель слоя свертки — выполнить скалярное произведение между фильтром и перекрывающимися пикселями изображения в каждой позиции и сохранить результат в выходной карте объектов.

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

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

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

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

Классификатор KNN — это контролируемая модель машинного обучения, которая классифицирует класс точек данных на основе его ближайших/ближайших точек данных. Его можно использовать как для задач классификации, так и для задач прогнозирования регрессии [2], но в основном для задач классификации.

Алгоритм KNN дифференцируется на 2 категории обучения [3] ,

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

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

Давайте теперь разберемся с параметрами и работой KNN,

  • При построении классификатора KNN нам нужно выбрать значение k. Для выбора значения k нет особого способа, но для нахождения наилучшего значения k мы должны запустить модель, выполнив гипернастройку с различными значениями k и выбрав k, которое уменьшит наши потери.
  • Для определения класса новых точек данных KNN использует технику голосования [4]. Например, если k=1, контрольной точке будет присвоена метка ближайшей точки в обучающем наборе, а если k=3, будут проверены метки трех ближайших соседей, и метка, получившая максимальное количество голосов, будет присваивается новой точке данных.

Классификатор дерева решений

  • Алгоритм дерева решений — это алгоритм обучения с учителем, который можно использовать для решения задач как классификации, так и регрессии. Он использует древовидную структуру, похожую на блок-схему, чтобы показать прогнозы, полученные в результате серии разделений на основе признаков. Он начинается с корневого узла и заканчивается решением, принятым листьями [5].
  • Каждый листовой узел в представлении дерева соответствует метке класса, а атрибуты/функции показаны на внутренних узлах дерева.
  • В зависимости от ответа Да/Нет на заданный вопрос дерево решений разбивается на поддеревья.

Понимание работы алгоритма дерева решений [5],

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

Классификатор случайного леса

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

В случае регрессии алгоритм случайного леса может обрабатывать набор данных, содержащий непрерывные переменные, а в случае классификации он может обрабатывать категориальные переменные [7].

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

Работа случайного лесного классификатора,

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

Наивный байесовский классификатор

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

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

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

Ура…! 👏 Мы преуспели в понимании принципов работы вышеупомянутых моделей. Теперь давайте углубимся в методы реализации 💻.

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

Во-первых, нам нужно импортировать все необходимые библиотеки

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

Теперь разделите набор данных на обучающие (80%) и проверочные (20%) данные.

Визуализация данных

Создание моделей

Режим 1: базовая модель CNN

Визуализация точности и потерь Model-1

Точность, полученная для обучающих данных, составила 98 %, а для проверочных данных — 90 %.

Модель-2: модель CNN с увеличением количества слоев пула

Схема модели-2 выглядит следующим образом:

Точность, полученная для обучающих данных, составила 98 %, а для проверочных данных — 88 %.

Модель 3: классификатор K-ближайших соседей (KNN)

Точность, полученная для обучающих данных, составила 63 %.

Модель 4: классификатор дерева решений

Полученная точность составила 67%.

Модель-5: наивный байесовский классификатор

Полученная точность составила 57%.

Сравнение точности построенных моделей

Визуализация классификатора изображений болезней листьев манго

Я использовал библиотеку GradioPython для создания и развертывания модели.

Ниже приведены фрагменты изображений классификатора,

Вклад

  1. Построены модели сверточных нейронных сетей путем настройки гиперпараметров, таких как увеличение количества объединяемых пар.
  2. Также внедрил модели ML и провел несколько экспериментов, чтобы найти наилучшие значения.
  3. Я также исследовал классификатор SVM для многоклассовой классификации, чтобы понять принцип его работы, но не реализовал его.
  4. Реализовал интерфейс с помощью gradio, поэтому провел мало исследований, прочитав несколько сообщений в блоге.

Задачи

  1. Первоначально для получения меток код, который я написал, не работал, а затем я решил его, исправив пути.
  2. Понимание моделей машинного обучения и решение о выборе этих моделей сбивали с толку, поскольку изначально производительность классификатора была невысокой.
  3. Используя Gradio, я получил много ошибок json во время работы, и мне пришлось внести небольшое изменение в код прогнозирования, чтобы исправить это.
  4. Переобучение было одной из проблем, которая снижала производительность моделей, и мне пришлось настраивать параметры, чтобы решить эту проблему.

Исходный код



Демо-видео

Ссылки

[1] https://saturncloud.io/blog/a-comprehensive-guide-to-convolutional-neural-networks-the-eli5-way/

[2] https://www.analyticsvidhya.com/blog/2018/03/introduction-k-neighbours-algorithm-clustering/

[3] https://www.javatpoint.com/k-nearest-neighbor-algorithm-for-machine-learning

[4] https://medium.com/analytics-vidhya/k-nearest-neighbours-knn-8f027ae1228f

[5] https://www.analyticsvidhya.com/blog/2021/08/decision-tree-algorithm/

[6] https://blog.paperspace.com/random-forests/

[7] https://medium.com/swlh/random-forest-ac5227dabb08

[8] https://www.analyticsvidhya.com/blog/2021/06/understanding-random-forest/

[9] https://blog.quantinsti.com/support-vector-machines-introduction/

[10] https://www.javatpoint.com/machine-learning-support-vector-machine-algorithm

[11] https://www.analyticsvidhya.com/blog/2021/06/support-vector-machine-better-understanding/

[12] https://www.analyticsvidhya.com/blog/2022/03/building-naive-bayes-classifier-from-scratch-to-perform-sentiment-analysis/

[13] https://gradio.app/controlling-layout/

[14] https://www.section.io/engineering-education/building-an-image-classification-model-with-gradio-and-keras/