Используйте сверточную рекуррентную нейронную сеть для распознавания рукописного текстового изображения без предварительной сегментации на слова или символы. Используйте функцию потери CTC для обучения.

Что здесь описано:

  • Распознавание рукописного текста в автономном режиме
  • Изучите подробную архитектуру системы распознавания рукописного ввода.
  • Как использовать технику Data Augmentation для повышения точности и возможности работы в режиме реального времени.

Почему именно глубокое обучение?

Машинному обучению требуется раннее извлечение функций как функций и проведенная классификация. Но глубокое обучение действует как «черный ящик», который самостоятельно извлекает и классифицирует функции.

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

Но глубокое обучение извлекает функции и выполняет классификацию самостоятельно. Пример этого изображения для сверточных нейронных сетей, где каждый уровень CNN принимает эту функцию, и, наконец, полностью подключенный уровень выполняет классификацию

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

Эта статья предназначена для создания собственной системы распознавания рукописного текста с помощью TensorFlow. Он охватывает подробное интуитивное представление об архитектуре и о том, как я достигаю решения и повышаю точность. В конце я предоставлю ссылку на репозиторий Github, где предоставляется предварительно обученная модель. Обратите внимание, что вы можете создать систему распознавания рукописного текста на любом языке, архитектура которого останется прежней. В конце концов, вы можете создать систему распознавания рукописного текста на своем родном языке, предоставив ей набор данных. Давайте начнем!

Базовое представление о том, как это работает.

  • Сначала используйте сверточную рекуррентную нейронную сеть, чтобы извлечь важные функции из рукописного текста строки изображения.
  • Выходные данные перед уровнем CNN FC (512x100) передаются в BLSTM, который предназначен для операций зависимости от последовательности и операций временной последовательности. Вывод BLSTM имеет размер 100x80, т. Е. 100 временных шагов и 80 символов, включая пробел.
  • Затем CTC LOSS Alex Graves используется для обучения RNN, что устраняет проблему выравнивания в рукописном тексте, поскольку рукописный текст имеет разное выравнивание для каждого автора. Мы просто предоставили им то, что написано на изображении (текст наземной истины) и вывод BLSTM, затем он вычисляет потери просто как log("gtText"); стремитесь минимизировать отрицательный путь максимального правдоподобия.
  • Затем CTC находит возможные пути по заданным меткам. Убыток для пары (X, Y) равен:

  • Наконец, CTC Decode используется для декодирования вывода во время прогнозирования.

Детальная архитектура

Всего есть 3 шага:

  1. Извлечение многомасштабных функций → 7 уровней сверточной нейронной сети
  2. Маркировка последовательности (BLSTM-CTC) → Рекуррентная нейронная сеть (2 уровня LSTM) с CTC
  3. Транскрипция → Декодирование вывода RNN (декодирование CTC)

Теперь надеюсь, что вы поняли основную интуицию о том, как это работает. Давайте посмотрим на код и методы повышения точности.

Код

Как повысить точность?

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

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

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

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

Каждое увеличение в выходном изображении показано ниже:

Добавлен случайный шум

Случайное растяжение

Размытие изображения

Полный код для дополнения рукописных строк набора данных IAM приведен ниже:

Получить код и данные

  1. Реализация найдена в Распознавание рукописного текста с глубоким обучением.
  2. Рукописный ввод в реальном времени и сохранение в формате набора данных IAM. Найдено по адресу: https://www.kaggle.com/sushant097/english-handwritten-line-dataset

Выход

Вывод прогноза на тестовом наборе данных IAM

Вывод прогнозов на реальном рукописном изображении

Дальнейшее улучшение

  • Для распознавания текста всего абзаца можно добавить сегментацию строк. Для сегментации строк вы можете использовать алгоритм планирования пути A * или модель CNN для разделения абзацев на строки.
  • Улучшенная предварительная обработка изображений, например: уменьшение фонового шума для более точной обработки изображений в реальном времени.
  • Лучший подход к декодированию для повышения точности. Некоторые из декодеров CTC можно найти здесь.
  • А как насчет локализации рукописного текста на странице и ее сквозного распознавания. (Концепция локализации объекта для локализации рукописного текста и сегментации)

Заключение

Мы обсудили, как CRNN (CNN + LSTM) может распознавать текст на изображениях с его подробной архитектурой. Архитектура состоит из 7 слоев CNN и 2 LSTM и выводит матрицу вероятностей символов. Эта матрица используется для расчета и декодирования потерь CTC. Мы также обсудили, как методы увеличения данных могут повысить точность и создать систему распознавания рукописного ввода в реальном времени с подробным кодом. Наконец, было дано дальнейшее улучшение этой системы.

использованная литература

[1] А. Ханнун, Последовательное моделирование с помощью СТС (2017),

[2] Т. Блюш, Дж. Лорадур и Р. Мессина Просмотр и чтение: сквозное распознавание рукописных абзацев с вниманием MDLSTM (2016)

[3] Б. Ши, Х. Бай и К. Яо Сквозная обучаемая нейронная сеть для распознавания последовательности на основе изображений и ее применение для распознавания текста сцены (2015)

[4] Х. Шайдл Создайте систему распознавания рукописных текстов с помощью Tensorflow (2018)