Ссылка на конкурс - 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.
- Участники используют огромное количество разнообразных моделей и техник.
Вот ссылки на некоторые популярные записные книжки и обсуждения, которые мне понравилось читать:
- 2-е место - Краткое изложение подхода - https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/220898 [Удивительно, но в этой заявке нет ничего особенного]
- 375-е место в частной LB (278-е место в публичной) - https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/220879
- Рядовой 7-й | Общедоступное 71-е решение - https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/220735
- Решение за 8 место - https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/220994
- Решение за 10-е место (23-е публичное) - https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/220788
Вывод
- Это были мои первые соревнования по kaggle, и я многому на них научился. Было весело и увлекательно читать ядра других участников, обсуждать интересные идеи на доске обсуждений и применять методы, которые я узнал из статей и школы, на реальных задачах.
- Я запоздала на конкурс, это определенно помешало мне попробовать разные модели и техники аугментации. Я не могу удержать это ни против кого, кроме себя.
- Одна из вещей, которую я хотел сделать, - это добавить в ансамбль больше моделей.
- Другой - подбор веса моего ансамбля, который я мог бы выучить, вместо того, чтобы вручную пробовать несколько разных представлений в общедоступной таблице лидеров.
- Еще я хотел попробовать решить проблему дисбаланса, экспериментируя с потерей фокуса и Remix: rebalanced mixup.
Ссылки на мое ядро
Ниже приведены ссылки на мое ядро. Я использовал отдельные ядра. Один для k-кратного резюме, один для полного обучения, а другой для подачи.
- ядро k-fold cv - https://www.kaggle.com/krutpatel2257/cassava-leaf-disease-classification-k-fold
- полное ядро поезда - https://www.kaggle.com/krutpatel2257/cassava-leaf-disease-classification
- Отправка ансамбля - https://www.kaggle.com/krutpatel2257/cassava-leaf-disease-classification-ensemble-sub