Вопрос или проблема
Я работаю над проектом для получения степени бакалавра, используя глубокое обучение. В настоящее время я пытаюсь улучшить модель, модифицируя её. Модель — Double U-Net, а используемый мной набор данных — DRIVE. Он состоит из 20 изображений. Моя проблема в том, что оценка валидации больше не увеличивается. Я думаю, что проблема в переобучении, и также я слышал, что это максимальный потенциал сети, поэтому я должен попробовать другой набор данных или модель. Данные разделены на 80% обучение и 10% валидация. Как я могу улучшить результат?
Что я пробовал:
-Добавил ещё одну сеть U-Net
-Использовал размер фильтров (128, 64, 32, 16)
-Использовал размер фильтров (64, 32, 16, 8)
-Функция потерь BinaryCrossEntropy
-Добавил dropout на выходах энкодеров со значением 0.5
-Добавил симметричное увеличение сверху, слева, справа и снизу для изображений, так что общее количество увеличений составляет 25
Аугментации (вверху слева — оригинальное изображение):
Результаты:
U-Net не переобучается, просто графики обучения не сглажены. Это дрожание на графиках обучения можно устранить, настроив скорость обучения модели.
.
Ответ или решение
Проблема, с которой вы сталкиваетесь в проекте глубокого обучения, заключается в том, что ваши результаты валидации не улучшаются, несмотря на внесенные изменения в модель Double U-Net при использовании датасета DRIVE. Давайте детально рассмотрим, возможна ли проблема переобучения и какие шаги можно предпринять для улучшения результатов.
Теория
Переобучение в контексте глубокого обучения происходит, когда модель слишком хорошо подстраивается под обучающую выборку, теряя способность генерализовать на новые, ранее невиданные данные. Основной признак переобучения — высокая точность на обучении и низкая точность на валидации или тестировании. В вашем случае, стагнация метрик на этапе валидации может намекать на переобучение или на ограниченности текущей архитектуры и настройки модели.
Пример
Сначала оценим, что уже было сделано:
-
Модель: Вы использовали Double U-Net — улучшенную архитектуру для сегментации, которая теоретически должна давать более высокие результаты за счет использования двух сетей U-Net.
-
Параметры сети: Попытка изменения количества фильтров (например, 128, 64, 32, 16 и 64, 32, 16, 8).
-
Аугментации: Использование симметричных аугментаций для увеличения объема данных с 20 изображений до 25. Это незначительное увеличение, учитывая небольшое исходное количество данных.
-
Регуляризация: Добавление dropout со значением 0.5, что, в общем случае, снижает переобучение.
-
Функция потерь: Использование Binary CrossEntropy для задачи бинарной сегментации.
-
Обучение: Разделение данных на 80% тренировки и 10% теста, что указывает на ограниченное количество данных для обучения.
Ваши усилия явно направлены на изменение структуры модели и аугментации данных, что, несомненно, заслуживает одобрения. Однако, проблема остаётся, и стоит рассмотреть дополнительные шаги.
Применение
Советы по улучшению модели и расширению данных:
-
Увеличение датасета: Поиск или создание дополнительных данных для тренировки. 20 изображений для обучения в глубоких моделях зачастую слишком мало для достижения отличных результатов. Попробуйте использовать другие открытые датасеты с аналогичными характеристиками (например, STARE или CHASE_DB1) или сгенерируйте свои собственные данные, если это возможно.
-
Дополнительные аугментации: Помимо симметричных, добавьте ротирование, изменение освещенности, контраста, масштабирование, случайное обрезание и другие техники аугментации. Используйте библиотеки, такие как Albumentations, для расширенных возможностей аугментации.
-
Изменение архитектуры модели: Возможно, Double U-Net излишне сложен для столь малого объёма данных. Попробуйте уменьшить количество уровней или использовать базовый U-Net для сравнения.
-
Тонкая настройка гиперпараметров:
- Регулировка скорости обучения. Как вы верно упомянули, неспокойные графики потерь могут указывать на необходимость изменения learning rate.
- Использование адаптивных методов, таких как Adam или RMSprop.
-
Раннее завершение обучения (Early Stopping): Позволяет остановить обучение при обнаружении переобучения (когда потери на валидации начинают расти).
-
Контроль за переобучением: Внедрение L2 регуляризации, увеличение значения dropout, использование batch normalization.
-
Перепроверка имплементации: Убедитесь, что используемые метрики и потери правильно реализованы и не содержат ошибок.
-
Энсемблирование моделей: Объединение нескольких моделей, обученных с различными гиперпараметрами, для получения более стабильного и надежного прогноза.
-
Переход на другую задачу: Если после всех предложенных шагов улучшение недостижимо, возможно, данные просто недостаточны для данной задачи. В таком случае рассмотрите получение нового набора данных или изучите новую архитектуру моделирования.
Каждый из этих шагов может оказать существенное влияние на результаты вашей модели и исправить потенциальные проблемы с переобучением и недостаточной генерализацией. Ваша настойчивость и желание экспериментировать с различными аспектами моделей и данных уже говорят о правильном походе к научным исследованиям. Удачи в реализации вашего проекта!