ОГЛАВЛЕНИЕ:

  1. Бизнес-проблема
  2. М.Л. Постановка задачи.
  3. Обзор набора данных
  4. Существующие подходы к проблеме
  5. Мое улучшение существующего подхода
  6. Показатель производительности
  7. Исследовательский анализ данных
  8. Мой первый подход к проблеме
  9. Предварительная обработка функций
  10. Функциональная инженерия
  11. Моделирование
  12. Резюме моделей
  13. Заключение
  14. Видео, демонстрирующее окончательно развернутую модель:
  15. Будущая работа
  16. Ссылки Linkedin и Github
  17. использованная литература

1. Деловая проблема:

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

2. М.Л. Постановка задачи.

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

3. Обзор набора данных

  • Набор данных Plant Village: я выбрал набор данных Plant Village, чтобы обучить мою base_model и получить веса. Набор данных Plant Village содержит большое количество изображений здоровых и больных листьев различных растений в виде набора данных. Однако этот набор данных является многоуровневым, и я не могу использовать этот набор данных как таковой, потому что основная модель, которую я буду обучать, будет в наборе данных двоичного класса, поэтому я сначала конвертирую ее в набор данных двоичного класса в части предварительной обработки данных.
    Ссылка на набор данных« Plant_Village »

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

4. Существующие подходы к проблеме.

  1. М. Модель Allesandrini et al. 2021 обнаруживает Esac, патогенный микроорганизм, встречающийся в виноградных лозах. Они использовали алгоритмы машинного обучения, такие как K ближайших соседей, Support Vector Machines, а также модели глубокого обучения. Однако они в основном описали модель глубокого обучения, что означает, что это самая эффективная модель из всех моделей, что обычно имеет место при проблемах компьютерного зрения. Их модели глубокого обучения в основном состоят из обнаружения краев с использованием слоев Convolution и Maxpool, за которыми следуют плотные слои. Помимо этого, они также использовали увеличение изображения, такое как масштабирование, оттенок, размытие, горизонтальное и вертикальное масштабирование и т. Д., Так что модель учится на большом количестве изображений, полученных из каждого увеличиваемого изображения.
  2. Bulentsiyah построил модель глубокого обучения для обнаружения болезней растений с помощью Siemese Network. Здесь автор сначала обучил изображения с последовательностью на различных слоях, таких как свертка, максимальное объединение и полностью связанные слои, и получил вектор признаков. Когда вектор признаков всех изображений получен, автор вычисляет расстояние d между парой признаков, чтобы определить, являются ли два изображения одинаковыми или нет.
  3. Saisravamedicherla Обучил модель для многоклассовой классификации различных болезней растений с использованием InceptionV3 для трансферного обучения и использования imagenet в качестве весов. Переносное обучение помогает Автор также использовал ImageDataGenerator для увеличения изображения, чтобы получить большее количество изображений из одного изображения.
  4. Шарада П. и др., 2016 подготовили модель, которая позволяет идентифицировать культуры и болезни. Получив изображение, их модель предсказывает пару растение-заболевание, что означает, что она идентифицирует культуру, к которой принадлежит лист, вместе с заболеванием, которое он имеет, на основе пары культура-заболевание, на которой обучается модель. У них есть обученные модели, использующие как с нуля, так и с использованием трансферного обучения. Они также обучили модели с использованием широкого диапазона соотношений обучения и тестирования.

5. Мое улучшение существующего подхода

Данные, которые я собрал, немногочисленны, всего «2423» точек данных. Обучение на этом наборе данных не позволит моей модели усвоить достаточно знаний и будет плохо работать в реальной жизни. Поэтому, чтобы улучшить обучаемость моей модели, я буду использовать T ransfer Learning.

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

Я буду тренировать base_model на большом количестве наборов данных, чтобы получить веса. После того, как это обобщенное обучение будет выполнено на base_model, загрузите эти веса в мою «main_model» и начните обучение. Этот метод трансферного обучения называется «подход разработки модели», потому что вместо использования существующих моделей, таких как «VGG», «InceptionV3», «Resent5», мы разрабатываем новую модель для получения весов.

Необходимость трансферного обучения:

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

  • Обучение модели (base_model) с помощью набора данных «Посадить деревню» и получение веса модели.
  • Перенести обучение на мои «self_collected_data», обучив модель (main_model) с весами, загруженными из предыдущей модели, то есть base_model. В дополнение к загрузке весов из предыдущей модели я также намерен ускорить обучение модели, поэтому я заморозю все слои, кроме нескольких последних слоев.

6. Показатели эффективности

Я принимаю во внимание показатель производительности: точность. Причина, по которой я выбрал точность в качестве метрики производительности, заключается в том, что у меня есть сбалансированный набор данных self_collected (набор данных Plant_village также будет сбалансирован, когда я возьму образцы данных для обучения). В дополнение к этой точности считается хорошей метрикой производительности, когда стоимость ложноположительных и ложноотрицательных результатов невелика. Ложное предсказание некоторых болезней растений не будет чем-то очень разрушительным.

7. Исследовательский анализ данных

Распределение классов в наборе данных Plant_village:

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

Распределение классов в наборе данных Self_collected:

Набор данных Self_collected почти сбалансирован.

8. Мой первый подход к проблеме.

  1. Я изо всех сил старался нажимать на хорошие фотографии листьев растений, но некоторые изображения слишком большие и содержат много нежелательных элементов, поэтому я предварительно обработаю некоторые изображения, так что нежелательная часть изображения будет обрезана, и мы осталось изображение просто листа.
  2. Хотя я щелкнул много изображений, количество изображений для обучения и тестовых данных может оказаться меньше. Поэтому в этом случае я буду использовать трансферное обучение, чтобы получить более точную модель, которая может определить, является ли растение здоровым или нет. Для трансферного обучения я буду использовать либо сохраненные веса модели, обученной на каком-то другом наборе данных, аналогичном моей проблеме, например, «Набор данных села растений» на kaggle, однако этот набор данных не является проблемой двоичной классификации, поэтому я конвертирую этот набор данных в «здоровый». 'и' нездоровый ', то есть бинарные классы, а затем тренируйтесь, чтобы набрать вес. Или я буду использовать «имагенет» в качестве веса.
  3. В дополнение к этому я также буду делать Image Augmentation для машины, чтобы получить широкий спектр изображений из одного изображения и позволить машине учиться на большем количестве изображений. Для увеличения изображения я буду использовать ImageDataGenerator и использовать различные улучшения, такие как масштабирование, вертикальный поворот, горизонтальный поворот, поворот и т. Д.

9. Предварительная обработка функций:

Набор данных «Plant_village» изначально содержит папки с различными растениями и конкретными заболеваниями, от которых они страдают, и здоровыми растениями. Итак, изначально набор данных «Plant Village» представляет собой многоклассовый набор данных из 15 классов. Поэтому я заменю этот набор данных на набор данных двоичного класса, разделив изображения «здоровых» и «нездоровых» листьев на две отдельные папки.
Сначала давайте разделим папки muslti classe на два списка, а именно «wd» (с болезнью) и wtd (без болезней)

Теперь давайте скопируем все изображения растений, страдающих различными заболеваниями, в папку ‘wd’ т.е. with_disease.

Точно так же мы скопируем все содержимое папки, которая была помечена как работоспособная, в папку «wtd», т.е.

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

10. Разработка функций

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

Теперь давайте проверим, как ImageDataGenerator выводит изображение:

Результат, который мы получаем из приведенного выше кода:

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

11. Моделирование

Для моделирования я опробовал комбинацию различных уровней Convolution2D, Maxpooling, Activations, Batch Normalization, Dropouts и, наконец, модель, которая показала наилучшие результаты, была:

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

12. Краткое описание моделей:

Хотя обе модели не конкурируют друг с другом, «base_model» дополняет «main_model», поскольку main_model тренируется на тех же уровнях, что и base_model, разница в том, что только последние 5 слоев размораживаются в main_model. Тем не менее, давайте посмотрим на производительность двух моделей:

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

13. Заключение

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

14. Видео, демонстрирующее финальную развернутую модель:

15. Будущая работа:

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

16. Ссылки Linkedin и Github

Моя ссылка на этот пример использования на github

Вы можете связаться со мной в Linkedin или написать мне на [email protected]

17. Ссылки