Skip to content

Методы ML в задачах детектирования и классификации болезней листьев томатов

Notifications You must be signed in to change notification settings

MaximovaIrina/tomato_disease

Repository files navigation

PlantDisease

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

Описание базы данных

В проекте используется Plant Village Dataset, содержащий 6000 отсегментированных изображений больных и здоровых листьев томатов, сбалансированно разбитый на 6 категорий:

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

Характеристики изображений:

  • Разрешение: 256х256
  • Глубина цвета: 8bit
  • Формат хранения: .jpeg
  • Цветовой профиль: RGB

Предобработка данных

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

Фоновые пиксели

2. Фильтрация выборки здоровых изображений. Обнаружено, что выборка здоровых листьев состоит из двух типов изображений – гладкие, равномерно освещенные листья и листья с фактурой и тенью. Для дальнейшего исследования решено оставить те изображения, что ближе к реальности – с фактурой и тенью. Отсеивая все изображения, чьи стандартные отклонения меньше 30, будет обрезано распределение по данному признаку. Чтобы этого не допустить добавлена проверка на однородность: HOM > 0.4. Все пороги отсеивания подобраны из вида распределений соответствующего признака.

Два типа изображений здоровых листьев

Статистика интесивностей пикселей здоровой выборки Распределение оценки однородности изображений для здоровой выборки

Выбор источников признаков

В работе рассатиривает два "источника" признаков:
1. RED канал RGB изображения. Пигмент листьев растений, хлорофилл, сильно поглощает видимый свет (от 0,4 до 0,7 мкм) для использования в фотосинтезе. При заболевании образование хлорофилла в листьях нарушается, что приводит к увеличению отражения данных длин волн. Это выражается более явно в красном канале. Поэтому возникает предположение, что признаков, извлеченных из красного канала изображения, окажется достаточно, чтобы с успехом диагностировать заболевание.

Разложене по каналам

2. NDVI образы изображений. NDVI – нормализованный вегетационный индекс, по которому можно судить о количестве и качестве растительности. NDVI рассчитыается в красном и инфракрасном диапазоне. Поскольку мы работаем с RGB изображениями, то в чистом виде информации об инфракрасном диапазоне нет. Вместо этого мы обладаем информацией о зеленой области спектра (0.5-0.6 мкм). Так как растения отражают зеленый свет сильнее красного предлагается ввести аналог вегетационного индекса на основе зеленого и красного каналов:

Отражение Примеры NDVI_G образов изображений

Извлечение признаков

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

  • STAT. Статистические характеристики интесивности пикселей изображения:

         
         

  • HIST. Бины квантованной гостограммы изображений:

       Гистограммы интенсивностей пикселей для каждой группа болезней

  • GLCM. Текстурные признаки изображений на базе матрицы GLCM:

              
         

    Для вычисления GLCM необходимо задать два параметра: d - расстояние межде пикселями и φ - направление от первого пикселя ко второму. Для выбора оптимальных параметров d и φ, способных наилучшим образом отделять классы, использовалась информация о косинусном расстоянии между средними векторами глобальных текстурных признаков. Чем меньше угол, тем выше сходство. Для каждого класса вычислен средний вектор глобальных текстурных признаков и найдено среднее значение косинуса с векторами остальных классов при заданной паре параметров (d, φ).

    Косинус

    В качестве лучшего расстояния можно выделить d=4. Признаки, рассчитанные при таком значении d, имеют наименьшее косинусное сходство, значит более разнообразно описывают классы. Относительно параметра φ сложно выделить лучшее значение. Поэтому предлагается рассматривать вектора признаков разной длинны:
    • short - GLCM признаки для d={4} усредненное по φ={0, π/4, π/2, 3π/4} (всего 5 признаков)
    • middle - GLCM признаки для d={4}, φ={0, π/4, π/2, 3π/4} (всего 5 * 4 признака)
    • long - GLCM признаки для d={1, 4, 8}, φ={0, π/4, π/2, 3π/4} (всего 5 * 3 * 4 признака)
  • ALL. Полный вектор признаков {STAT,HIST,GLCM}

Все признаки извлекались без учета фоновых пикселей

Способы извлечения признаков

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

  • global - признаки, извлеченные неким оператором над всем изображением сразу.
  • local - признаки, извлеченные под маской инструмента размером 17х17 пикселей.
    Алгоритм извлечения локальных призаков:

Локальные признаки здорового листа

Визуализация локальных признаков:

Локальные признаки здорового листа Локальные признаки больного листа

Классификаторы

Сравнивались возможности следующих классификаторов:
1. LDF Линейный дискриминант Фишера
2. DT Дерево решений
3. RF Случайный лес
4. SVM Мультиклассовый метод опорных векторов
5. KNN К-ближайших соседей
6. SLP Одноуровневый персептрон
7. MDT Предложен новый алгоритм My Decision Tree для детекции заболевания, работающий только на основе вида распределения тренировочной выборки. Алгоритм работы MDT:

Алгоритм MDT Пример работы PDT на STAT признаках

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

Подбор гиперпараметров

Оценка параметров моделей проводилась с помощью поиска по сетке с применение kfold валидации (k=5). То есть для каждой конкретной модели брались возможные значения параметров, и в сетке параметров каждая их комбинация тестировалась k-fold валидацией. В конце выбирался набор параметров, давший наилучший результат при валидации. Валидация проводилась на полном векторе глобальных признаков ALL.

Название метода Параметры для scikit-learn Процесс подбора гиперпараметров
LDF -
MDT alpha=2
DT criterion='entropy', max_depth=9
KNN n_neighbors=3, metric='euclidean', weights=’distance’
RF n_estimators=80, criterion='entropy', max_depth=15
SVM C=10, kernel='rbf', gamma='auto'
SLP hidden_layer_sizes=50, activation=Relu,
loss_function=CrossEntropyLoss, optimizer=Adam,
learning_rate=1.e-3, epoch=100, batch_size=100

Результаты детектирования

RED

Детектирование на глобальных RED признаках Детектирование на локальных RED признаках

NDVI

Детектирование на глобальных NDVI признаках Детектирование на локальных NDVI признаках

Результаты классификации

RED

Классификация на глобальных RED признаках Классификация на локальных RED признаках

NDVI

Классификация на глобальных NDVI признаках Классификация на локальных NDVI признаках

Описание модулей

  • Serialize.py содержит скрипт для сериализации ключевой информации об изображениях в json файл, содержащий: полный путь к изображениям и метку класса.
  • Dataset.py содержит операции по доступу к изображениям базы данных.
  • Features.py содержит скрипт для извлечения и сохранения признаков изображений.
  • Crossval.py содержит скрипт для выполнения кросс-валидации и сохранения классификаторов с лучшим набором параметров.
  • Evaluate.py содержит скрипт для тестирования классификаторов.
  • Utils.py включает разные функции используемые в других скриптах
  • Inference.py содержит скрипт для предсказания класса по изображению.
  • Пакет models содержит модули, реализующие следующие классы:
    • features.py – содержит класс Features для извлечения признаков из изображений.
    • slp.py – содержит класс SLP, реализующий модель одноуровневого персептрона.
    • healthyPlant.py – содержит класс HealthyPlant, который реализует сквозной конвейер для классификации болезней растений, от извлечения признаков, до предсказания от классификатора.
    • pdt.py - содержит класс MDT, реализующий модель собственного приоритетного дерева решений

FIX Результаты

Результаты подробно описаны в отчете за 2й семестр. Реалицация в вектке master.
Удаление лишних признаков см в отчете за 3й семестр. Реалицация в вектке pca.

Tools & Docs & Article:

  1. GLCM Texture: A Tutorial
  2. PyTorch
  3. Scikit Learn algorithms
  4. Scikit-image. Greycomatrix
  5. Scikit-image. Greycoprops
  6. Plant Village Dataset
  7. Measuring Vegetation (NDVI & EVI)
  8. PCA in detail
  9. PCA understandingly

FIX Добавить comb + confus mtx ++ PCA + корреляционный анализ

About

Методы ML в задачах детектирования и классификации болезней листьев томатов

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published