Ссылка на конкурс - https://www.kaggle.com/c/cassava-leaf-disease-classification

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

Постановка задачи

Будучи вторым по величине поставщиком углеводов в Африке, маниока является ключевой культурой для обеспечения продовольственной безопасности, выращиваемой мелкими фермерами, поскольку она может выдерживать суровые условия. По крайней мере, 80% домашних хозяйств в Африке к югу от Сахары выращивают этот крахмалистый корень, но вирусные заболевания являются основными источниками плохих урожаев. С помощью науки о данных можно будет выявить распространенные заболевания, чтобы их можно было лечить. - (Со страницы конкурса Kaggle)

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

Набор данных

  • Всего было предоставлено 21 367 помеченных изображений. Эти изображения были собраны во время опроса в Уганде.
  • Большинство изображений получены от фермеров и аннотированы Национальным научно-исследовательским институтом сельскохозяйственных культур (NaCRRI) в сотрудничестве с лабораторией искусственного интеллекта в Университете Макерере, Кампала.
  • Таким образом, предоставленные данные представляют собой формат изображения, который фермерам необходимо будет диагностировать в реальной жизни.
  • Заболевания и соответствующие им ярлыки классов показаны ниже:
    0: «Бактериальный ожог кассавы (CBB)»,
    1: «Болезнь с коричневой полосой кассавы (CBSD)»,
    2: «Зеленая крапинка кассавы (CGM)»,
    3: «Мозаичная болезнь кассавы (CMD)»,
    4: «Здоровая»
  • Набор данных сильно несбалансирован, метка 3 покрывает 61% изображений. [0: 5,08%, 1: 10,23%, 2: 11,15%, 3: 61,49%, 4: 12,04%]

Мой подход

1. Модели

  • Поскольку у меня была возможность выбрать два моих лучших выступления для конкурса, я решил тренировать две отдельные модели. Один из них - ResNet50_32x4, а другой - EfficientNet-B4. Оба были инициализированы предварительно обученными весами ImageNet.

2. k-кратная перекрестная проверка

  • Поскольку набор для проверки не был доступен, все данные поезда пришлось использовать для создания окончательной модели. Я решил использовать k-кратное увеличение для выбора модели и гиперпараметров, а затем обучить эту модель на полном наборе изображений.
  • Поскольку набор данных несбалансирован и для поддержания одинакового распределения классов по сгибам, я использовал стратифицированный K-сгиб, который гарантирует, что процент выборок для каждого класса сохраняется по сгибам.
  • Я использовал 5-кратную оценку для оценки наиболее эффективной модели, схем увеличения данных и гиперпараметров путем усреднения прогнозов удержания для всех k-кратных оценок.

3. Используемая метрика

  • Хотя конкурс оценивал заявки на основе точности, я использовал оценку F1 во время проверки, поскольку классы несбалансированы, и, следовательно, точность не была бы лучшим вариантом. Но для окончательного выбора модели во время обучения на полном наборе я использовал точность в качестве метрики выбора.

4. Функция потерь

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

5. Улучшение изображения

  • Я начал с основных улучшений изображения, таких как случайное кадрирование с измененным размером, транспонирование изображения, горизонтальный и вертикальный переворачивание, случайный оттенок, насыщенность, значения, яркость и контраст. Тем не менее, модель боролась с классификацией изображений с маркировкой 0,1, 2 и 4 класса.
  • После добавления CoarseDropout, CutOut и CLAHE я получил значительный прирост результатов по всем классам. Тем не менее, модель все еще боролась с классами 0 и 1.
  • Наконец, использование CutMix повысило f1-баллы классов 0 и 1.

6. Обучение

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

7. Увеличение времени тестирования (TTA)

  • Я заметил повышение точности моих публичных оценок после использования увеличения времени тестирования. Я использовал 10 раундов прогнозов для каждого изображения, где каждый раз к нему применялись случайные дополнения, а затем прогнозы усреднялись.
  • Я пропустил CoarseDropout и CutOut для увеличения времени тестирования, поскольку они приносили больше вреда, чем помогали с предсказаниями. Я думал, что CLAHE поможет получить больше очков при использовании вместе с TTA. Но я был неправ, поэтому отказался и от этого в TTA.

8. Ансамбль мягкого голосования

  • Чтобы повысить точность, я использовал ансамбль для мягкого голосования на моей самой производительной модели Resnet50_32x4 и EfficientNet-B4. Я попробовал несколько весов для объединения их прогнозов. Лучший результат, который я получил, - это Resnext50 с весом 0,6 и EfficientNet-B4 с весом 0,4.

Взгляните на другие подходы

  • Я заметил несколько подходов с использованием большего количества моделей в ансамбле в количестве 8 и более, а также использовал данные предыдущих соревнований в качестве дополнения к данному набору данных. Вот одно обсуждение, которое я нашел интересным, в котором использовались оба из них: https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/220682
  • Я видел, как люди комбинируют методы увеличения изображения, такие как Fmix, Mixup и CutMix.
  • Участники используют огромное количество разнообразных моделей и техник.

Вот ссылки на некоторые популярные записные книжки и обсуждения, которые мне понравилось читать:

Вывод

  • Это были мои первые соревнования по kaggle, и я многому на них научился. Было весело и увлекательно читать ядра других участников, обсуждать интересные идеи на доске обсуждений и применять методы, которые я узнал из статей и школы, на реальных задачах.
  • Я запоздала на конкурс, это определенно помешало мне попробовать разные модели и техники аугментации. Я не могу удержать это ни против кого, кроме себя.
  • Одна из вещей, которую я хотел сделать, - это добавить в ансамбль больше моделей.
  • Другой - подбор веса моего ансамбля, который я мог бы выучить, вместо того, чтобы вручную пробовать несколько разных представлений в общедоступной таблице лидеров.
  • Еще я хотел попробовать решить проблему дисбаланса, экспериментируя с потерей фокуса и Remix: rebalanced mixup.

Ссылки на мое ядро

Ниже приведены ссылки на мое ядро. Я использовал отдельные ядра. Один для k-кратного резюме, один для полного обучения, а другой для подачи.

  1. ядро ​​k-fold cv - https://www.kaggle.com/krutpatel2257/cassava-leaf-disease-classification-k-fold
  2. полное ядро ​​поезда - https://www.kaggle.com/krutpatel2257/cassava-leaf-disease-classification
  3. Отправка ансамбля - https://www.kaggle.com/krutpatel2257/cassava-leaf-disease-classification-ensemble-sub