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

С помощью этой модели наша цель состоит в том, чтобы классифицировать болезнь листьев яблони по одной из трех категорий, а именно:
1. Черная гниль яблони
2. Ржавчина кедра яблони
3. Яблоня Парша

У яблоневой парши пятна на листьях круглые, оливково-зеленого цвета и до 0,5 дюйма в поперечнике. Эти пятна бархатистые с бахромчатыми краями. Черная гниль часто распознается по таким симптомам, как пурпурные пятна на верхней поверхности листьев. По мере старения пятна центры высыхают и становятся желто-коричневыми. Кедровая ржавчина – грибковое заболевание. Споры зимуют в виде красновато-коричневого галла на молодых веточках. Иногда на плодах могут появляться оранжевые пятна.

Во-первых, нам нужен набор данных, на котором мы можем обучать и готовить нашу модель. Доступ к набору данных можно получить по следующей ссылке. Теперь, когда у нас есть наш набор данных. Следующее, что нам нужно, — это доступ к платформе, которая позволяет нам обучать нашу модель DNN. Для этого мы можем использовать AITS Cainvas Platform. Это дает нам доступ к высокоэффективным графическим процессорам, и мы можем легко подготовить наши ноутбуки Jupyter.

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

Давайте продолжим отображать некоторые изображения в нашей записной книжке, просто чтобы визуализировать данные, с которыми мы имеем дело. Мы будем отображать 6 изображений из каждого каталога (каждого типа заболевания) в разных ячейках нашего блокнота Jupyter.

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

Это создание выполняется с помощью функции ImageDataGenerator() из библиотеки keras. Эта функция предварительной обработки чрезвычайно полезна при работе с данными изображения. Затем мы загружаем наши данные обучения и проверки через эти генераторы данных изображения и устанавливаем размер входного изображения 64 * 64.

Поскольку у нас нет отдельных каталогов для данных обучения и проверки, мы добавили разделение проверки на 20% в генераторе изображения поезда. Это делается с помощью функции validation_split генератора данных изображения.

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

Теперь, когда у нас есть изображения, которые были предварительно обработаны и готовы к чтению нашей моделью нейронной сети, мы определяем для нее архитектуру. Мы определяем последовательную модель со следующими слоями, имеющими около 235 тысяч обучаемых параметров. Для нашей модели за каждым двумерным сверточным слоем с размером фильтра 2*2 следует двухмерный слой Max Pooling с аналогичным размером фильтра.

Теперь приступим к обучению нашей модели. Вначале мы определили размер пакета 20 для изображений. Мы используем этот параметр для определения шагов в эпоху и шагов проверки.

Обучая 70 эпох (или 70 итераций) и со скоростью обучения 0,001, мы достигаем максимальной точности обучения около 98% и максимальной точности проверки около 97%. Эти значения кажутся очень многообещающими. Далее давайте визуализируем процесс обучения модели, отслеживая значения точности и потерь в зависимости от количества эпох.

Используя функцию model.evaluate(), мы оцениваем точность нашей модели исключительно на проверочных изображениях. Эта метрика подтверждает нашу более раннюю гипотезу и дает точность проверки более 95%.
Наконец, мы будем делать прогнозы на случайном изображении из каталога парши яблок. Когда мы выбираем любое случайное изображение с помощью random.choice() и предсказываем заболевание, мы видим, что наша модель успешно предсказывает правильное заболевание и, таким образом, гарантирует, что наша модель будет успешной.

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

Если вы хотите получить доступ ко всему блокноту, перейдите по этой ссылке.

Желаем удачи в вашей карьере в области машинного обучения.
Ура!

Ссылка на блокнот: Нажмите здесь

Кредиты: Кхарбанда