Мониторинг инвазивных видов с помощью машинного обучения

Недавно Kaggle представил конкурс, в рамках которого Kagglers должны разработать алгоритмы для более точного определения того, содержат ли изображения лесов и листвы инвазивную гортензию или нет. Короче говоря, мы можем посмотреть на изображение и определить, есть ли на нем инвазивная гортензия (класс = 0) или нет (класс = 1). Это говорит нам о том, что это проблема классификации, и поскольку наш ввод - изображение, это будет проблема компьютерного зрения.

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

Исследование изображений

У нас есть набор данных, и первое, что мы хотели бы сделать, это посмотреть, как выглядят наши изображения. Зачем смотреть на изображения? Потому что это поможет нам определить особенности, размеры различных изображений в наборе данных, узнать, есть ли блики на изображениях и какие шаги необходимо предпринять для предварительной обработки.

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

Из вышеизложенного мы заключаем следующее:

  1. Наш набор данных небольшой и несбалансированный (3: 2) (набор данных называется несбалансированным, если классы, представленные в наборе данных, не имеют одинакового количества выборок).
  2. Наши изображения прямоугольные; поэтому нам может потребоваться создавать изображения в квадратном формате, если мы решим использовать сверточную нейронную сеть (мы планируем использовать CNN).
  3. Изображения имеют небольшой размер, поэтому будет сложно определить особенности.
  4. Некоторые изображения в наборе данных имеют меньшую контрастность.

Предварительная обработка набора данных

Контрастное растяжение

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

Увеличение данных

У нас меньше нет. образцов для обучения нашей модели, и из-за отсутствия обучающих данных наша модель может не обеспечивать хорошее прогнозирование для тестового набора. Чтобы решить эту проблему, мы будем использовать Data Augmentation, что в основном означает создание искусственных данных из существующего набора обучающих данных. Одним из популярных методов увеличения данных является преобразование (оно включает в себя смещение, масштабирование, вращение, переворачивание и т. Д.). Мы собираемся применить Vertical Flip, чтобы сгенерировать больше выборок из обучающего набора, что поможет в усилении модели.

Обивка

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

Изменить размер

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

Генерация модели

Мы используем сверточную нейронную сеть из 11 слоев с ReLU функция активации.

Мне нравится, как здесь объясняется CNN.
Вы можете найти статью о AlexNet здесь.

Результат

Мы сгенерировали модель, которая обеспечивает точность 95% на тестовом наборе данных.
Найдите репозиторий кода на Github.

Ссылки

Для набора данных перейдите в Kaggle Competition.

Написано в сотрудничестве с Джеруббалом Джоном Люком и Кунал Саркар.