Хорошие результаты CNN на обучении и тестировании, плохие результаты на реальных данных.

Вопрос или проблема

Я пытаюсь создать нейронную сеть для задачи определения возраста. Вот некоторые детали:

  1. Набор данных: я использую набор данных “facial age” с Kaggle и набор данных “UTKFace”, всего около 35 тысяч изображений. Я разделил общий набор данных на обучающий, валидационный и тестовый (70%-15%-15%) и применил увеличение данных к обучающему набору.
  2. Задача: Определение возраста, задача классификации на 8 классов.
  3. Модель: Я применил перенос обучения на ResNet-50, реализация с использованием Keras.

Модель:

enter image description here

Результаты:

enter image description here

enter image description here

На тестовом наборе модель показывает точность в 85.5%, но на изображениях из реального мира (Google изображения или личные фото) модель работает значительно хуже (около 45%). Изображения из реального мира, которые я выбрал, довольно похожи на те, что в наборах данных, невооруженным глазом их невозможно отличить.

В чем проблема? Что я могу сделать, чтобы это исправить?

  1. Как заметил @Erwan, это подозрительно, что валидационная точность значительно выше, чем обучающая. Попробуйте K-складчатую валидацию и посмотрите, проявляется ли это на всех складках; если на всех, значит с вашими данными/кодом что-то серьезно не так.

  2. Проверьте, был ли набор данных перемешан перед делением на обучающий/валидационный/тестовый. Возможно, много “простых” изображений попало в валидационный/тестовый набор.

  3. Изображения из “реального мира” могут иметь некоторые свойства/распределения, которые отличаются от обучающих данных, хотя и не заметны невооруженным глазом. Если у вас есть ресурсы, попробуйте разметить несколько партий изображений из реального мира, добавьте их к обучающему набору и посмотрите, повлияет ли это (снизит ли) точность во время обучения.

P.S.: пожалуйста, не загружайте код в виде изображений.

Ответ или решение

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

Актуальность и особенности проблемы:

Ваши данные и модель (включая использование ResNet-50 через трансферное обучение) показывают, что вы уже применяете передовые методы обучения. Однако разрыв между производительностью модели на тестовом наборе данных и её производительностью на реальных изображениях свидетельствует о наличии скрытых проблем. Эти проблемы могут быть связаны с распределением данных, переобучением или неучтенными различиями в данных.

Возможные причины:

  1. Несоответствие в распределении данных:

    • Данные из реального мира могут иметь отличия в освещении, разрешении, углах обзора или особенностях лиц, которые не покрыты тренировочным набором.
  2. Аномальное поведение при валидации:

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

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

Рекомендации по решению:

  1. Переоценка обучения и валидации:

    • Проведите K-кросс-валидацию, чтобы получить представление о стабильности модели по всем фолдам. Если проблема сохраняется, проверьте на возможные ошибки в данных или коде.
  2. Анализ данных и улучшение аугментации:

    • Проверьте разнообразие в тренировочных данных и придумайте стратегию расширения данных. Попробуйте усилить технику аугментации изображений, добавляя изменения освещения, шума и других параметров, характерных для реальных изображений.
  3. Инкрементальное обучение:

    • Если возможно, вручную разметьте небольшую часть реальных изображений и включите их в тренировочный процесс. Это поможет перенастроить веса модели на работу с реальными данными.
  4. Анализ результатов:

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

Заключение:

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

Оцените материал
Добавить комментарий

Капча загружается...