Введение:

Революция в технологии оптического распознавания символов (OCR) помогла ей стать одной из тех технологий, которые нашли множество применений во всей промышленной сфере. Сегодня OCR доступен для нескольких языков и имеет возможность распознавать символы в режиме реального времени, но есть некоторые языки, для которых эта технология не получила большого развития. Все эти достижения стали возможны благодаря внедрению таких концепций, как искусственный интеллект и глубокое обучение. Глубокие нейронные сети оказались лучшим выбором, когда речь идет о задаче, связанной с распознаванием. Существует множество алгоритмов и моделей, которые можно использовать для этой цели. Этот проект пытается внедрить и оптимизировать модель, основанную на глубоком обучении, которая сможет распознавать символы сценария деванагари в режиме реального времени, анализируя движения рук.

Цель проекта:

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

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

Сведения о наборе данных:

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

Он содержит около 92 000 рукописных изображений символов хинди. Набор данных включает 46 классов символов, включая алфавиты и цифры хинди.
Набор данных разделен на обучающий набор (85%) и тестовый набор (15%). Изображения имеют формат .png и разрешение 32x32.

Для получения подробной информации о наборе данных перейдите по следующей ссылке:
https://www.kaggle.com/datasets/suvooo/hindi-character-recognition

В наборе данных есть две разные категории, и образцы в наборе данных собраны у 40 человек. Собранные данные были представлены в виде отдельных полей и затем были обрезаны для каждой границы символа. Категории набора данных следующие:

  • Числовой: в этой категории набора данных имеется 10 классов от 0 до 9. Для каждой цифры от 0 до 9 в наборе данных имеется 2000 образцов. Классы следующие:

  • Согласные: это самая большая категория в наборе данных рукописных символов деванагари. Есть 36 согласных и, следовательно, 36 классов по 2000 образцов в каждом классе. Различные типы классов согласных показаны в таблице.

Реальные/бизнес-цели и ограничения:

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

Метрика производительности:

В этой задаче мы рассматриваем точность как матрицу производительности.

Распределение классов:

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

Предварительная обработка данных:

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

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

Моделирование:

Здесь мы делаем несколько подходов для решения этих проблем, сначала мы просто создаем модель cnn, модель Lenet, а затем делаем ряд предварительно подготовленных моделей для передачи обучения, таких как VGG-16 с другим типом и моделью Resnet.

1 – Сверточная нейронная сеть (CNN):

Основная цель CNN - извлечь из изображений существенные признаки, которые можно использовать для распознавания данного изображения. Шаги, задействованные в CNN, представляют собой операцию свертки, которая в основном использует ядро ​​​​для извлечения признаков. Объединение (здесь максимальное объединение), которое помогает сохранить основные функции и, наконец, сглаживание, при котором объединенные карты функций, полученные из CNN, преобразуются в вектор, который передается в дальнейшую сеть (здесь полностью связанные слои).

Вот как я реализовал модель CNN.

Краткое описание модели:

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

CONV2D →CONV2D → MAXPOOL →Dropout →Flatten →Dense →Dropout →Dense →SOFTMAX →CLASSIFY

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

Потеря при тестировании:0,11810600012540817

Точность теста:0,9660485982894897.

В простой модели CNN мы получаем лучший результат, как мы видели выше, точность теста 0,96604, поэтому мы сохраняем эту модель с помощью model.save («расположение модели»)

2- Модель Ленет:

Lenet-5 — одна из первых предварительно обученных моделей, предложенных Яном Лекуном и другими в 1998 году в исследовательской статье Градиентное обучение, применяемое к распознаванию документов. Они использовали эту архитектуру для распознавания рукописных и машинопечатных символов.

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

Вот окончательная архитектура модели Ленет-5.

Обзор модели:

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

CONV2D→ MAXPOOL →CONV2D →MAXPOOL→CONV2D→Выровнять →Dense→Dense →SOFTMAX →CLASSIFY

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

Потери при проверке:0,3401

Точность проверки:0,8939

Модель VGG-16:

VGG 16 был предложен Кареном Симоняном и Эндрю Зиссерманом из лаборатории группы визуальной геометрии Оксфордского университета в 2014 году в статье «ОЧЕНЬ ГЛУБОКИЕ СВЕРТОЧНЫЕ СЕТИ ДЛЯ РАСПОЗНАВАНИЯ ИЗОБРАЖЕНИЙ В БОЛЬШОМ МАСШТАБЕ». Эта модель заняла 1-е и 2-е место в вышеуказанных категориях в конкурсе ILSVRC 2014 года.

VGG-16 в основном состоит из трех частей: свертки, объединения и полносвязных слоев.

  • Слой свертки. В этом слое фильтры применяются для извлечения признаков из изображений. Наиболее важными параметрами являются размер ядра и шаг.
  • Слой пула. Его функция заключается в уменьшении пространственного размера, чтобы уменьшить количество параметров и вычислений в сети.
  • Fully Connected — это полностью связанные соединения с предыдущими слоями, как в простой нейронной сети.

На данном рисунке показана архитектура модели:

а)Vgg-модель-1:

1. Use VGG-16 pretrained network without Fully Connected layers and initilize all the weights with Imagenet trained weights. 
2. After VGG-16 network without FC layers, add a new Conv block ( 1 Conv layer and 1 Maxpooling ), 2 FC layers and a output layer to classify 16 classes. You are free to choose any hyperparameters/parameters of conv block, FC layers, output layer. 
3. Final architecture will be INPUT --> VGG-16 without Top layers(FC) --> Conv Layer --> Maxpool Layer --> 2 FC layers --> Output Layer
4. Train only new Conv block, FC layers, output layer. Don't train the VGG-16 network.

фрагмент кода:

Обзор модели:

Результат:

точность проверки: 0,0669

Потеря проверки: 3,6099

b)-Vgg-Model -2:

1. Use VGG-16 pretrained network without Fully Connected layers and initilize all the weights with Imagenet trained weights.
2. After VGG-16 network without FC layers, don't use FC layers, use conv layers only as Fully connected layer. any FC layer can be converted to a CONV layer. This conversion will reduce the No of Trainable parameters in FC layers. For example, an FC layer with K=4096 that is looking at some input volume of size 7×7×512 can be equivalently expressed as a CONV layer with F=7,P=0,S=1,K=4096. In other words, we are setting the filter size to be exactly the size of the input volume, and hence the output will simply be 1×1×4096 since only a single depth column “fits” across the input volume, giving identical result as the initial FC layer. You can refer this link to better understanding of using Conv layer in place of fully connected layers.
3. Final architecture will be VGG-16 without FC layers(without top), 2 Conv layers identical to FC layers, 1 output layer for 16 class classification. INPUT --> VGG-16 without Top layers(FC) --> 2 Conv Layers identical to FC --> Output Layer
3. Train only last 2 Conv layers identical to FC layers, 1 output layer. Don't train the VGG-16 network.

фрагмент кода

Обзор модели:

Результат:

точность проверки: 0,0270

Потеря проверки: 3,8347

c) Vgg-Model-3:

1. Use same network as Model-2 'INPUT --> VGG-16 without Top layers(FC) --> 2 Conv Layers identical to FC --> Output Layer' and train only Last 6 Layers of VGG-16 network, 2 Conv layers identical to FC layers, 1 output layer.

фрагмент кода:

Вывод:

Слой block4_conv3 поддается обучению
Слой block4_pool поддается обучению
Слой block5_conv1 поддается обучению
Слой block5_conv2 поддается обучению
Слой block5_conv3 поддается обучению
Слой block5_pool можно обучать

Обзор модели:

Результат:

точность проверки: 0,7595

Потеря проверки: 0,7884

Модель Resnet:

Как и Inceptionv3, ResNet50 — не первая модель семейства ResNet. Первоначальная модель называлась Residual net или ResNet и стала еще одной вехой в области CV еще в 2015 году.

Основная мотивация этой модели заключалась в том, чтобы избежать плохой точности по мере того, как модель становилась глубже. Кроме того, если вы знакомы с градиентным спуском, вы наверняка сталкивались с проблемой исчезающего градиента — модель ResNet также нацелена на решение этой проблемы. Вот архитектура самого раннего варианта: ResNet34 (ResNet50 также использует аналогичную технику, только с большим количеством слоев).

Вы можете видеть, что после запуска с одним сверточным слоем и максимальным объединением есть 4 похожих слоя с разными размерами фильтров — все они используют операцию свертки 3 * 3. Кроме того, после каждых 2 сверток мы обходим/пропускаем промежуточный слой. Это основная концепция моделей ResNet. Эти пропущенные соединения называются «соединениями ярлыка идентификации» и используют так называемые остаточные блоки:

1. Use Resnet pretrained network without Fully Connected layers and initilize all the weights with None trained weights. 
2. After Resnet network without FC layers, add a new Conv block ( 1 Conv layer and 1 Maxpooling ), 2 FC layers and a output layer to classify 46 classes. You are free to choose any hyperparameters/parameters of conv block, FC layers, output layer. 
3. Final architecture will be INPUT --> Resnet without Top layers(FC) --> Conv Layer --> Maxpool Layer --> 2 FC layers --> Output Layer
4. Train only new Conv block, FC layers, output layer. Don't train the Resnet network.

фрагмент кода:

Результат:

val_loss: 0.8699 - val_accuracy: 0.7387

Эффективная модель:

это от Гугла. В EfficientNet авторы предлагают новый метод масштабирования, называемый составным масштабированием. Суть в следующем: более ранние модели, такие как ResNet, следуют традиционному подходу произвольного масштабирования размеров и добавления все большего количества слоев.

Однако в документе предлагается, что если мы одновременно масштабируем размеры на фиксированную величину и делаем это равномерно, мы достигаем гораздо лучшей производительности. Коэффициенты масштабирования фактически могут определяться пользователем.

Хотя этот метод масштабирования можно использовать для любой модели на основе CNN, авторы начали со своей собственной базовой модели под названием EfficientNetB0:

MBConv означает мобильную перевернутую свертку с узким местом (аналогично MobileNetv2).

1. Use efficientnet pretrained network without Fully Connected layers and initilize all the weights with None trained weights. 
2. After efficientnet network without FC layers, add a new Conv block ( 1 Conv layer and 1 Maxpooling ), 2 FC layers and a output layer to classify 46 classes. You are free to choose any hyperparameters/parameters of conv block, FC layers, output layer. 
3. Final architecture will be INPUT --> efficientnet without Top layers(FC) --> Conv Layer --> Maxpool Layer --> 2 FC layers --> Output Layer
4. Train only new Conv block, FC layers, output layer. Don't train the efficientnet network.

фрагмент кода:

Результат:

val_loss: 3.8292 - val_accuracy: 0.0195

Вывод:

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

Выбор модели:

  • Как мы видели выше в таблице сравнения, мы видели, что модель CNN дает нам лучший результат.
  • Мы видим, что эффективная модель дает худшую производительность.

Будущая работа:

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

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

Видео развертывания и предсказание персонажа:

Я создал веб-приложение, используя Flask API и базовый HTML, CSS и jQuery, и развернул его локально. Вы также можете развернуть его на AWS или любой другой облачной платформе. Это короткое видео моего веб-приложения в действии: -

Ссылка:

Некоторые статьи и справочные блоги и статьи о постановке задачи.

  1. Исследовательская статья: Распознавание символов деванагари в реальном времени на основе глубокого обучения {Aseem Chhabra San Jose State University}
  2. Исследовательская статья: Распознавание рукописных символов хинди из цифрового изображения с использованием нейронной сети глубокого обучения {International Journal of Engineering Research & Technology (IJERT)}
  3. Исследовательская работа: Распознавание рукописных символов хинди с использованием нейронной сети обратного распространения {Гунджан Сингх1, Сушма Лехри2 1Факультет управления и компьютерных приложений} Р.Б.С. Колледж, Агра
  4. Блог: https://iq.opengenus.org/hindi-ocr/
  5. Блог: https://iq.opengenus.org/building-convolution-neural-network-keras-python/
  6. https://github.com/krishnaik06/Малярия-обнаружение

Контакт :

Мой блокнот github ::https://github.com/itzaamer/Hindi-Character-recognition

Профиль LinkedIn ::https://www.linkedin.com/in/mohammad-amer-khan-a69901191/

Спасибо за чтение моего блога !!!

Особая благодарность:

Особая благодарность моей команде Applied Ai (appliedaicourse.com), которая мне очень помогает в решении этих задач.