Pull to refresh

Эксперимент в распознавании рукописных текстов на кириллице. Часть 2

АлгоритмыОбработка изображенийМашинное обучение

Всем привет! В этой части хочу рассказать как мы использовали модель NomeroffNet предназначенного для распознавания автомобильных номеров, распознать рукописные записи. В предедущей статье я поделился опытом в использовании моделей SimpleHTR и LineHTR для распознавания рукописных текстов.

Распознавание рукописного текста (англ. Handwritten Text Recognition, HTR) - это автоматический способ расшифровки записей с помощью компьютера. Оцифрованный текст рукописных записей позволило бы автоматизировать бизнес процессы множества компаний, упростив работу человека. В данной статье рассматривается модель распознавания рукописного текста на кириллице на основе искусственной нейронной сети. Архитектура данной нейронной сети состоит из слоев сверточной нейронной сети (англ. Convolutional neural network, CNN) и рекуррентной нейронной сети (англ. Recurrent neural network, RNN), а также имеет алгоритм декодирования на основе коннекционной временной классификации (англ. Connectionist Temporal Classification, CTC), который приводит текст к окончательному варианту. Данная модель была обучена на собранном нами датасете рукописных текстов и дала результат 80% точности.

В данной статье мы рассматриваем модель распознавания рукописного текста, основанная на современной высокоуровневой архитектуре нейронных сетей. Обобщенная архитектура модели распознавания текста проиллюстрирована на рисунке 1.

Рисунок 1- Обобщенная архитектура модели распознавания текста
Рисунок 1- Обобщенная архитектура модели распознавания текста

В начале подается изображение с текстом на сверточный слой нейронной сети (CNN) для извлечения особенностей изображения. Следующим шагом является применение к результатам свертки рекуррентной нейронной сети с архитектурой Долгая краткосрочная память (англ. Long short-term memory; LSTM) с последующим применением специального алгоритма декодирования. Этот алгоритм декодирования берет выходные данные LSTM и производит окончательную маркировку (Рисунок 2). В результате получается строка из символов - одна наиболее вероятная буква на каждом временном шаге. Затем все последовательные повторяющиеся символы объединяются в один символ. На примере слова “apple” (Рисунок 2) две буквы «е» объединены в один. Специальный пробел позволяет разделить символы, которые повторяются в оригинальной маркировке. В алфавите также содержится пустой символ, чтобы научить нейронную сеть предсказывать пустой символ между такими символами. Затем все пустые символы удаляются и получается окончательный вариант слова.

Рисунок 2- Принцип работы алгоритма декодирования
Рисунок 2- Принцип работы алгоритма декодирования

В нашей работе мы использовали модель распознавания текста, реализованную в проекте Nomeroff Net для распознавания номеров автомобилей. Для нашей цели мы убрали из модели распознавания номеров лишние модули (препроцессинг, детекция номера, аффинное преобразование) и оставили лишь модель распознавания текста.

В данной реализации используется немного сложная архитектура нейронной сети (Рисунок 3), чем то, что мы рассматривали в начале, но основные принципы все те же. В начале подается изображение с текстом на сверточные слои нейронной сети для извлечения особенностей изображения. Изображение проходит через два слоя свертки с объединением (C, P - Convolution + Pooling). Результат свертки преобразуется в другую форму и размер (Reshape), затем подается в полносвязную нейронную сеть (FC - Fully Connected). Следующим шагом является применение рекуррентной нейронной сети с архитектурой Управляемых рекуррентных блоков (англ. Gated Recurrent Units, GRU). Данные проходят через два слоя GRU и производится поэлементное сложение (Element-wise addition). Результаты сложения снова проходят через два слоя GRU, но здесь уже к выходным результатам применяется операция склеивания (конкатенация, англ. concatenation). Объединенные данные вывода рекуррентных слоев подаются к полносвязному слою (FC) с последующей функцией активации softmax, которая возвращает наиболее вероятные символы. В конце к полученному набору символов применяется специальный алгоритм декодирования CTC и он выдает окончательный результат распознавания.

Рисунок 3 - Архитектура нейронной сети для распознавания рукописного текста
Рисунок 3 - Архитектура нейронной сети для распознавания рукописного текста

Задача машинного обучения с учителем требует входных размеченных данных, на которых можно было бы обучить модель. Для обучения данной модели был собран набор данных с рукописным текстом на кириллице. Набор данных содержит 18 563 изображения с аннотациями, состоящие из 43 классов (названия стран и городов). Для сбора данных были специально подготовлены формы на бумаге формата А4 с пустыми ячейками для заполнения, и розданы среди студентов для охвата большого диапазона почерков для каждого класса.

На собранном датасете мы обучили вышеупомянутую модель распознавания текста. Данная модель имеет 4 863 469 тренировочных параметров нейронной сети. Обучение нейронной сети проходило 3 эпохи на 11 197 изображениях для обучения, 3 637 для валидации и 3 729 для теста. На рисунке 4 приведены некоторые примеры из набора данных для теста с результатами их распознавания.

Рисунок 4 –Результаты распознавания текста
Рисунок 4 –Результаты распознавания текста

На данный момент обученная модель дает 80% точности. Есть еще нерешенные задачи над которыми мы сейчас работаем: увеличение объема датасета, препроцессинг изображений, подбор гиперпараметров нейронной сети, применение словаря. От объема и вариации почерков очень сильно зависит качество обучения, поэтому на данный момент наша работа акцентирована на увеличение количество изображений с рукописным текстом. Обученную модель распознавания рукописного текста можно будет применять для различных задач, связанных с компьютерным зрением и обработкой текста.

Tags:htrcnnrnnlstmctc
Hubs: Алгоритмы Обработка изображений Машинное обучение
Total votes 6: ↑6 and ↓0 +6
Views1.4K

Popular right now

Машинное обучение
June 4, 202142,000 ₽Нетология
Комплексное обучение PHP
June 14, 202120,000 ₽Loftschool
Алгоритмы для разработчиков
May 24, 202145,000 ₽Яндекс.Практикум
Основы вёрстки сайтов
May 24, 202120,000 ₽Loftschool
SEO-специалист
May 24, 202158,435 ₽Нетология