Вопрос или проблема
Мой проект включает классификацию печатных цифровых символов из реальных эссе. Мой набор данных включает 11 классов (‘0′ – ’10’), где метка ’10’ представляет символ “https://datascience.stackexchange.com/”.
Проблема в том, что, хотя мой обучающий набор данных сбалансирован, исходный размер изображений для класса “https://datascience.stackexchange.com/” составляет 28×28, тогда как для других — 224×224. Однако я изменил их размер на 28×28 перед обучением модели CNN.
Вот результаты:
На тестовом наборе данных:
Точность: 85%
Матрица ошибок:
На реальном тестовом наборе данных с 821 изображением:
Точность: 88%
Матрица ошибок:
Как видно из матрицы, имеется значительная ошибка классификации метки ’10’ (символ “https://datascience.stackexchange.com/”) в метки ‘1’ и ‘7’.
Конкретная проблема:
Я попробовал первое решение, предложенное в аналогичной теме, но оно не дало значительного улучшения результатов.
Есть ли у кого-нибудь решения или рекомендации по этой проблеме? Спасибо за ваше внимание. С нетерпением жду ваших ответов.
Недостаток симметрии интересен. Ваша модель путает “/” с “1” и “7”, но никогда “1” или “7” с “/”. На мой взгляд, это говорит о том, что отсутствие “клюва” на верхней части линии, который позволяет отличать “/” от “7”, по какой-то причине не распознается.
Я бы сначала проверил данные и посмотрел на “/”, чтобы убедиться, что они имеют правильно назначенные метки. Если все в порядке, попробуйте настроить архитектуру, чтобы помочь модели заметить отсутствующую часть линии, которая является разницей между “/” и “7”. Я бы попробовал эксперименты с:
- различной активационной функцией
- более глубокой сетью
- некоторыми вариациями в слоях, такими как различия между выводами двух слоев
Ответ или решение
Для решения проблемы вашей модели CNN, которая демонстрирует высокую точность предсказаний в 10 из 11 классов, однако ошибается на 11-м классе, необходимо рассмотреть несколько важнейших аспектов.
Теория
Начнем с теоретического обоснования проблемы. Ваша задача заключается в классификации печатных числовых символов, включая специфический символ "https://datascience.stackexchange.com/", который вы обозначили как класс ’10’. Главная трудность заключается в различной природе изображений: изначальное разрешение данного символа — 28×28 пикселей, в то время как остальные изображения имеют разрешение 224×224 пикселей. В конечной технике вы выравниваете разрешение всех изображений до 28×28 пикселей. Это может привести к потере важной информации, особенно для классов, которые сильно отличаются по визуальному представлению.
Примеры проблем
Давайте разберем примеры, как это может повлиять на качество предсказаний модели. Поскольку символы "/" и "7" часто путаются из-за их визуального сходства на пониженном разрешении, модель может не распознавать детали, которые обычно помогают человеку отличить один символ от другого. Этот факт подтверждается вашим наблюдением, что символ "/" постоянно путается с ‘1’ и ‘7’, но при этом ‘1’ и ‘7’ не путаются с ‘/’. Это может быть следствием потери информации при изменении разрешения и недостатка данных для успешного обучения модели сотрудничающих признаков различия.
Применение
-
Проверка и подготовка данных: Прежде всего, следует убедиться, что все данные правильно маркированы. Проанализируйте прямо сейчас набор данных, чтобы подтвердить, что все изображения с меткой "/" действительно являются этим символом.
-
Изменение архитектуры модели: Возможно, вам стоит попробовать увеличить глубину вашей нейронной сети или настроить разнообразие слоев. Добавление большего числа свёрточных слоев (convolutional layers) может улучшить способность модели к распознаванию мелких деталей в изображениях.
-
Изменение разрешения для обучения: Рассмотрите возможность использования изображений с их исходным разрешением (224×224) для всех классов. Это позволит модели извлекать больше признаков, которые могли быть потеряны при сжатии до 28×28.
-
Аугументация данных: Применение техник аугументации, таких как повороты, масштабирование, изменение яркости, может помочь сети стать более устойчивой к шуму и вариациям в изображениях.
-
Смена функции активации: Экспериментируйте с разными функциями активации. Для примера, попробуйте использовать ReLU, Leaky ReLU, или ELU, чтобы улучшить способность модели к обучению.
-
Применение метрик и подходов валидации: Используйте метрики, такие как f1-score для отдельных классов, для того чтобы получить более полное понимание работы модели на каждом из классов, а не только в терминах общей точности.
-
Использование предобученных моделей: Рассмотрите возможность использования предобученных моделей, таких как VGG, ResNet, или EfficientNet, которые могут успешно работать с изображениями разных размеров и извлекать из них больше характеристик.
Таким образом, главная цель заключается в увеличении способности модели к различению символов на уровне деталей, что поможет понять структуру каждого символа и делать более точные предсказания. Увеличение глубины сети, использование более высокого разрешения и разнообразие данных могут существенно помочь в решении этой задачи. Ваш подход должен быть комплексным и направленным на улучшение всех аспектов модели, от данных до итоговой классификации.