Команда

Проблема + набор данных

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

Наш набор данных, взятый из конкурса Kaggle по классификации болезней листьев маниоки, состоит из более чем 20 000 изображений листьев маниоки, сделанных с помощью относительно недорогих камер. Кроме того, набор данных также обеспечивает сопоставление каждого изображения с заболеванием / состоянием здоровья. Эти сопоставления включают:

  • Бактериальный ожог кассавы (CBB)
  • Болезнь коричневой полосы маниоки (CBSD)
  • Кассава зеленая крапинка (CGM)
  • Мозаичная болезнь маниока (CMD)
  • Здоровый

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

Исследовательский анализ данных (EDA)

Наш EDA был во многом вдохновлен EDA Ярослава Исаенкова для того же набора данных. Учитывая наш источник данных, первая линия действий заключалась в программном сопоставлении меток, содержащихся в файле csv, изображениям в нашем учебном каталоге. Мы сделали это, создав словарь, отображающий целочисленное значение от 0 до 4 на состояние болезни / здоровья. Затем мы добавили карту как новый столбец фрейма данных pandas, который содержал столбцы для image_id, label и имя_ болезни.

Затем мы определили несоответствие между количеством меток в файле CSV и количеством изображений в нашем каталоге, поэтому нам пришлось определить, какие изображения отсутствовали в нашем файле меток, и удалить эти изображения из каталога обучения. Из нашей обучающей выборки было удалено около 50 из 21400 изображений. Чтобы убедиться, что наши этикетки и изображения были правильно сопоставлены, мы напечатали пакет сопоставленных изображений и этикеток, как показано ниже:

Из отображенных изображений мы исследовали распределение типов заболеваний на обучающих изображениях. На рисунке ниже изображено именно это. Интересно, что большинство листьев маниоки в нашем наборе данных имеют болезнь маниоки, если быть точным, 61,5% из них. Остальные метки более / менее равномерно распределены в нашем наборе данных.

Идентификация базовой модели + производительность

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

В интересах оперативной памяти мы применили логистическую регрессию к подмножеству из 2000 изображений и провели разделение обучающих тестов 70/30, так что наш обучающий набор содержал 1400 изображений, а наш проверочный набор - 600. Это соответствует записной книжке Сиддханта Саданги. »Для базового классификатора на Kaggle. Базовая оценка точности составила 0,50. Нам известно, что модель подходит для очень небольшой выборки данных, поэтому нам также интересно, может ли увеличение размера нашей выборки повысить производительность до значения, близкого к 0,61, что составляет долю самого густонаселенного класса.

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

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

Следующие шаги

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

Ссылки + соответствующие ссылки

Документация Kaggle