Распознавание капчи с использованием CNN не дает ожидаемых результатов
Я пытался разработать программу распознавания капчи с использованием TensorFlow на Python.
Когда я начал, я проверил некоторые статьи в Интернете и обнаружил, что изображение Captcha сегментировано на отдельные цифры, и эти отдельные цифры распознаются. Но я хотел попробовать другой подход. Я хотел узнать капчу без сегментации.
Рекомендации:
Автоматическое распознавание номерных знаков - я использовал этот пост в качестве ссылки.
Код для ANPR - это код из вышеупомянутого сообщения в блоге.
Мое решение:
Генерация данных:
Я создал около 60000 160 * 60 изображений RGB. Все капчи были 6-й длины. Я использовал 25000 изображений в качестве обучающих данных и 9000 изображений в качестве тестовых данных и не использовал остальные изображения.
Пример данных:
Архитектура нейронной сети:
160 * 60 * 3 ------ (5 * 5 Conv) ---> 160 * 60 * 24 ------ (2 * 2 MaxPool) ---> 80 * 30 * 24 --- - (5 * 5 Conv) ----> 80 * 30 * 36 ---- (4 * 2 MaxPool) ----> 20 * 15 * 36 ---- (Полностью подключен)--->(4096*1) -----(полностью подключен)--->(216*1)
Некоторые другие свойства Сети:
1) мини-размер партии: 100
2) Оптимизатор: Адам Оптимизатор
3) Эпох: 60
4) Длина капчи: 6
6) Используемые символы: [A-Z0-9]
Проблемы, с которыми сталкиваются:
1) Когда у меня был еще один слой свертки, моя сеть начала выводить то же значение. Я пробовал нормализацию, но без изменений. Поэтому я удалил слой и изменил окончательный слой Maxpool с (2*2) на (4*2). Я запустил программу на 30 эпох
2) Теперь, когда я запускаю программу для 60 эпох с вышеупомянутой архитектурой, я получаю около 50% точности в моем тренировочном наборе после 50 или 55 эпох, но я получаю 0-5% точности в своем тестовом наборе.
Чего мне не хватает в этой сети? Это неправильные данные? Мой подход правильный? Почему я не получаю хорошие результаты?