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

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

Бизнес-проблема:

Введение

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

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

Задачи

Распознавание рукописных символов сложнее, чем распознавание печатных форм того же символа по ряду причин, включая следующие:

(1) Рукописные знаки, написанные разными авторами, не только не идентичны, но и меняются в различных аспектах, таких как размер и форма.

(2) Многочисленные различия в стилях написания отдельных символов затрудняют распознавание.

(3) Сходство разных знаков по форме и взаимосвязь соседних знаков усложняют задачу распознавания знаков.

(4) Проблема распознавания символов дополнительно усложняется тем, что некоторые символы перекрываются.

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

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

Приложения:

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

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

Набор данных:

Этот набор данных был получен из репозитория машинного обучения UCI. Он содержит приблизительно 92 000 изображений рукописных символов хинди. Набор данных содержит 46 классов символов, включая алфавиты и цифры хинди.

Набор данных разделен на обучающий набор, включающий 85 % от общего набора данных, и тестовый набор, включающий оставшиеся 15 %. Изображения сохраняются в формате .png, а их размер 32 x 32 пикселя.

Ниже вы найдете несколько примеров изображений из набора данных.

Ниже перечислены по одному персонажу из каждого класса.

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

https://archive.ics.uci.edu/ml/datasets/Devanagari+Handwriting+Character+Dataset

  • Размер данных: 53,4 МБ
  • Файловая структура настроена аналогично тому, как вы можете форматировать документ при работе с изображениями.

Чтобы быть более конкретным:

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

Каталог test со структурой, идентичной структуре каталога train.

Пример файловой структуры

DevanagariHandwrittenCharacterDataset <- top level folder
 └───train <- training images
 │ └───characterModel-2 (SVM)ka
 │ │ │ 1340.png
 │ │ │ 1341.png
 │ │ │ … 
 │ └───characterModel-3 (Random Forest)kha
 │ | │ 2771.png
 │ | │ 2772.png
 │ | │ …
 | └───characterhighest accuracy, f1-score, precision, and recall valuega
 | | 3710.png
 | | 3712.png
 | | …
 | .
 | .
 | .
 │ 
 └───test <- testing images
 │ └───characterModel-2 (SVM)ka
 │ │ │ 1339.png
 │ │ │ 1342.png
 │ │ │ … 
 │ └───characterModel-3 (Random Forest)kha
 │ | │ 2786.png
 │ | │ 2787.png
 │ | │ …
 | └───characterhighest accuracy, f1-score, precision, and recall valuega
 | | 3711.png
 | | 3713.png
 | | …
 | .
 | .
 | .
  • В каталоге поездов есть 46 различных подкаталогов. В каждом подкаталоге есть 1700 изображений для каждого символа.
  • В тестовом каталоге есть 46 различных подкаталогов, и в каждом подкаталоге есть 300 изображений для каждого персонажа.
  • У нас есть 78 200 изображений (1700 × 46), которые можно использовать для обучения модели.
  • У нас есть 13 800 изображений (300 × 46), которые мы можем использовать для тестирования модели.
  • Размер изображения 32 × 32 пикселя.

Функция потерь:

Функция потерь — это метод оценки насколько хорошо ваш алгоритм представляет набор данных». Если ваши прогнозы полностью неточны, функция потерь вернет большее число. Если они приличные, он выведет меньшее число. По мере того, как вы настраиваете свой алгоритм, чтобы попытаться улучшить свою модель, ваша функция потерь будет указывать, добиваетесь ли вы прогресса или нет.

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

Ключевой показатель (KPI) для оптимизации:

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

  • Точность
  • Матрица путаницы
  • Точность,
  • Отзывать
  • и оценка F1

Точность

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

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

Когда данные распределены неравномерно, точность не самая полезная мера.

Матрица путаницы

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

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

Точность

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

Вспомнить

Это доля фактических положительных классов, которые были правильно предсказаны, от общего числа фактических положительных классов. Также называется 'Чувствительность'.

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

Требования:

Требования к оборудованию

  • Компьютерная система
  • 8,16 ГБ оперативной памяти
  • Процессор Intel i3 и выше
  • HDD/SSD с объемом памяти не менее 256 ГБ

Требования к программному обеспечению

  • VS Code или любой другой редактор кода
  • Питон 3
  • Библиотеки Python, такие как NumPy, Pandas, Matplotlib и т. д.
  • Anacoda Navigator, блокнот Jupyter
  • стримлит
  • Scikit-learn, тензорный поток
  • Клиентская ОС может быть как Windows, так и Linux.
  • Веб-браузер

Получить данные подмножества:

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

При этом мы рискуем столкнуться с несколькими проблемами, одна из которых — наличие избыточного объема данных, требующих обработки. Если объем имеющихся у нас данных превышает объем доступной памяти (ОЗУ), мы можем столкнуться с некоторыми проблемами при попытке завершить проект.

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

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

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

Итак, набор данных, который у нас есть, содержит 92 000 изображений, из которых 78 200 — для обучения модели (1700×46), а 13 800 — для тестирования модели (300×46). Основываясь на информации, представленной в предыдущем разделе (3. Набор данных), мы знаем, что существует 46 различных классов (персонажей) и что на этапе обучения для каждого класса имеется 1700 изображений. Что мы сделаем, так это возьмем 10% изображений из каждого класса, что составляет всего 170 изображений, чтобы создать наш более управляемый набор данных для обучения.

Для проверки модели мы будем использовать все изображения, всего 13 800 изображений; в каждом классе по 300 изображений.

Код, который описывает, как мы создали это подмножество данных, приведен ниже.

Ссылка на данные 10 %

  • Ссылка на G-Drive:


  • Ссылка на гитхаб:

https://github.com/Suraj124/Hindi-Character-Recognition/blob/main/Dataset/DevanagariHandwritingCharacterDataset99.55%percent_train_100_percent_test.zi

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

Классические модели машинного обучения:

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

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

Вы найдете эту функцию ниже

Если мы посмотрим на обучающие изображения в DataFrame, они будут выглядеть так:

Настройка гиперпараметров:

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

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

Ниже приведены некоторые примеры гиперпараметров для моделей:

  • Штраф, который применяется в классификаторе логистической регрессии, часто известный как регуляризация L1 или L2.
  • Поддержка векторных машин C и гиперпараметр сигма.
  • «k» в k-ближайших соседей.
  • Скорость обучения для обучения нейронной сети.

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

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

  • Scikit-learn
  • Оптуна
  • Гиперопт.
  • Ray-Tune
  • Байесовская оптимизация

Здесь мы будем использовать Optuna для настройки гиперпараметров.

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

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

  • Нетерпеливые динамические поисковые пространства
  • Эффективные алгоритмы выборки и обрезки
  • Простая интеграция
  • Хорошие визуализации
  • Распределенная оптимизация

Разделение данных:

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

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

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

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

Масштабирование функций:

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

Наиболее распространенными методами масштабирования функций являются нормализация и стандартизация.

Нормализация используется, когда мы хотим убедиться, что наши значения находятся между [0, 1] или [-1, 1]. Стандартизация изменяет данные так, что среднее значение равно 0, а стандартное отклонение равно 1.

Зачем нам необходимо масштабирование?

Алгоритм машинного обучения видит только число, и если есть существенная разница в диапазоне, например, несколько в тысячах и несколько в десятках, он сделает фундаментальное предположение, что большие числа в диапазоне имеют какое-то преимущество. Следовательно, эти более значимые числа начинают играть более важную роль при обучении модели.

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

Нормализация данных:

Стандартизация данных:

Прогнозное моделирование:

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

  • K-ближайшие соседи
  • Классификатор опорных векторов
  • Случайный лес
  • XGBoost

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

K-ближайшие соседи

Алгоритм k-ближайших соседей (KNN) — это метод категоризации точек данных в соответствии с вероятностью того, что данная точка данных будет принадлежать к той же группе, что и точки данных, расположенные в непосредственной близости от этой точки данных.

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

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

KNN используется с Optuna для определения оптимальных гиперпараметров:

Мы достигли точности 79 %, используя KNN с настройкой гиперпараметров, а для остальных трех показателей мы достигли примерно такого же уровня производительности.

Классификатор опорных векторов (SVC)

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

Целью метода опорных векторов (SVM) является создание наилучшей линии или границы решения, которая может разделить n-мерное пространство на классы. Это позволит нам удобно размещать любые новые точки данных в соответствующей категории в будущем. Эта оптимальная граница принятия решений называется гиперплоскостью.

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

SVC используется с Optuna для определения оптимальных гиперпараметров:

Используя SVC с настройкой гиперпараметров, мы можем достичь точности 86 %, а для остальных трех показателей мы достигаем почти такого же уровня производительности.

Случайный лес

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

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

RandomForest применяется в сочетании с Optuna для получения идеальных гиперпараметров.

Мы можем получить точность 81%, используя RandomForest с настройкой гиперпараметров, а для остальных трех показателей мы также достигаем примерно такого же уровня производительности.

XGBoost

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

XGBoost — это расширение деревьев решений с градиентным усилением (GBM), метода, разработанного специально для повышения скорости и производительности.

Для поиска оптимальных значений гиперпараметров реализован XGBoost в сочетании с Optuna.

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

Выбор двух самых выдающихся моделей:

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

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

Как видно из представленной выше информации, Model-2 (SVM) и Model-3 (Random Forest) являются лучшими моделями с точки зрения наличия highest accuracy, f1-score, precision, and recall value.

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

Классификатор опорных векторов (SVC)

Используя SVC с полным набором данных, мы смогли достичь точности 96%, что является очень достойным показателем точности.

Случайный лес

Мы смогли достичь 92% точности при использовании RandomForest для всего набора данных, что является вполне приемлемым уровнем точности.

Таким образом, в заключение, с помощью классического алгоритма машинного обучения мы смогли получить точность 96%; алгоритм, который позволил нам добиться такой точности, — Support Vector Classifier.

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

Модели глубокого обучения:

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

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

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

В глубоком обучении используется несколько видов нейронных сетей; однако сверточные нейронные сети (CNN) являются предпочтительной сетевой архитектурой, когда речь идет об идентификации и распознавании объектов. Из-за этого они являются отличными кандидатами для задач компьютерного зрения (CV) и приложений, в которых распознавание объектов является важным компонентом, таких как беспилотные автомобили и распознавание лиц.

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

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

  • Ленет
  • LeNet + пакетная нормализация + отсев
  • ВГГ
  • VGG + пакетная нормализация + отсев
  • Реснет
  • Отключение ResNet + BatchNormalization
  • Трансферное обучение: VGG16
  • Трансферное обучение: ResNet

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

Полная ссылка на набор данных:



Ссылка на GitHub для набора данных:

https://github.com/Suraj124/Hindi-Character-Recognition/blob/main/Dataset/DevanagariHandwritingCharacterDataset.zip

Весь набор данных, состоящий из 98 200 изображений; 78 200 из этих изображений относятся к категории обучения, а 13 800 из этих изображений относятся к категории тестирования.

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

Чтобы выполнить это разделение данных на наборы для обучения и проверки, я создал функцию, которая представлена ​​здесь.

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

· Кэширование

· Предварительная загрузка

  • Кэширование:

Преобразование tf.data.Dataset.cache может кэшировать набор данных либо в памяти, либо в локальном хранилище. Это предотвратит выполнение некоторых операций (таких как открытие файлов и чтение данных) в течение каждой эпохи.

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

Нам нужен ЦП для подготовки следующего пакета данных, в то время как GPU занят прямым/обратным распространением в текущем пакете. Как самый дорогой компонент, нам нужно следить за тем, чтобы GPU всегда работал на пике мощности на протяжении всего процесса обучения. Мы называем это явление перекрытием потребителя/производителя, когда GPU выступает в роли потребителя, а CPU — в качестве производителя.

Вы можете сделать это с помощью tf.data, выполнив прямой вызов метода набора данных. prefetch(1) выполняется на самом последнем этапе конвейера (после пакетной обработки). Это всегда будет гарантировать, что один пакет данных был предварительно загружен и что всегда есть один, готовый к использованию.

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

Обратные вызовы:

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

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

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

Как использовать обратные вызовы?

1. Для начала определим обратные вызовы.

2. Передайте обратные вызовы при вызове model.fit()

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

TensorBoard: это мой любимый обратный вызов tensorflow на сегодняшний день. Этот обратный вызов записывает журнал для TensorBoard, удивительного инструмента визуализации, предоставляемого TensorFlow.

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

Ранняя остановка. Для тех, кто занимается машинным обучением, переобучение — это кошмар. Раннее прекращение процедуры — это одна из стратегий, которую вы можете использовать, чтобы избежать переобучения. Метод EarlyStopping содержит различные метрики/аргументы, которые можно настроить, чтобы настроить время завершения процесса обучения.

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

Модели глубокого обучения:

Давайте рассмотрим различные модели глубокого обучения одну за другой.

Модель: 1 → Ленет

Архитектура LeNet-5 CNN состоит из семи уровней. Три сверточных слоя, два слоя субдискретизации и два полносвязных слоя составляют композицию слоя.

Используя LeNet, мы можем получить точность 97,8%.

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

Давайте посмотрим на график потерь и точности для LeNet.

Давайте также посмотрим на f1-счета всех различных классов для LeNet.

Модель: 2 → LeNet + BatchNormalization + Dropout

Пакетная нормализация:

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

Преимущества пакетной нормализации:

1. После нормализации значения попадают в узкий диапазон. Поэтому значения теперь скромные и равномерные (имеют одинаковый диапазон). Это ускоряет обучение (или конвергенцию) нейронных сетей.

2. Уменьшить проблему исчезающих градиентов

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

Исключение:

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

Значение вероятности, которое мы выбираем для использования при выполнении регуляризации отсева, будет определять количество узлов, которые необходимо исключить из сети. Например, если мы присвоим каждому узлу в слое значение вероятности 0,4, то существует 40%-ная вероятность того, что каждый узел будет удален в процессе обучения на каждой итерации процесса.

Как регуляризация отсева предотвращает переобучение нейронной сети?

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

При использовании LeNet, BatchNormalization и Dropout мы получаем точность 98,3%.

Давайте посмотрим на график потерь и точности для LeNet.

Модель: 3 →VGG

Архитектура VGG служит важным источником вдохновения для Model 3.

Мы можем получить точность 98,7%, используя VGGподобную архитектуру.

Давайте посмотрим на график потерь и точности для VGG.

Модель: 4 → VGG + BatchNormalization + Dropout

Мы достигаем точности 99.28% с моделью 4, что несколько выше, чем то, что мы получаем с режимом13. , то есть 98.75%.

Давайте посмотрим на график потерь и точности.

Модель: 5 → Реснет

Мы можем получить точность 99.28% с моделью 5, что почти так же, как мы смогли достичь с моделью 4 (VGG+BatchNormalization+Dropout).

Давайте посмотрим на график потерь и точности.

Модель: 6 → Отключение ResNet + BatchNormalization

Модель-6 достигает точности 99.55%, что является самой высокой точностью, которую мы получили с любой из других моделей, которые мы разработали, это превосходная модель.

Давайте посмотрим на график потерь и точности.

Модель: 7

Мы достигли точности 99.07% с помощью модели 7.

Давайте посмотрим на график потерь и точности.

Модель: 8

С помощью модели 8 мы смогли добиться точности 98.95%, что неплохо.

Давайте посмотрим на график потерь и точности.

Модель: 9 → Трансферное обучение: VGG16

Модель 9 имеет точность 93.16%, что ниже, чем у любой предыдущей модели, которую мы создали.

Казалось бы, трансферное обучение не было плодотворным.

Давайте посмотрим на график для потерь и точности

Модель: 10 →Перенос обучения — ResNet, часть 1

В этом ResNet Transfer Learning можно обучать только последние 20 слоев.

81.79% точность для этой модели самая низкая из всех моделей, которые мы получаем

Модель: 11 →Перенос обучения — ResNet, часть 2

В этом ResNet Transfer Learning все уровни можно передавать.

Модель 11 обеспечивает нам точность 82.10%, что является небольшим шагом вперед по сравнению с точностью модели 10.

Давайте посмотрим на график для потерь и точности

Выберите лучшую эффективную модель:

Три самые эффективные модели, как видно из предыдущего кадра данных, выглядят следующим образом:

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

Для развертывания будет использоваться модель 6-ResNet с пакетной нормализацией и отсевом. Эта модель имеет точность обучения 99,95, точность проверки 99,40 и точность тестирования 99,55.

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

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

Развертывание модели:

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

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

Создание приложений:

На этом этапе было создано веб-приложение с использованием Streamlit. Он предоставляет клиенту возможность загрузить входное изображение.

Я собираюсь сделать приложение Streamlit в качестве компонента клиентского интерфейса. Платформа Python с открытым исходным кодом под названием Streamlit используется для создания веб-приложений для машинного обучения и обработки данных. С помощью Streamlit вы можете писать код в приложении так же, как в Python. Скрипт будет сохранен в формате .py.

С помощью следующей команды мы можем запустить наше веб-приложение в локальном режиме с потоком.

Мы разрабатываем веб-приложение под названием «Распознавание символов хинди» с меню Главная, Прогноз, Получить тестовые изображения и кодом, которые приведены ниже.

Домашняя страница:

Страница прогнозов:

Получить страницу с тестовыми изображениями:

Кодовая страница

Развертывание моделей машинного обучения с помощью Streamlit Cloud:

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

Вы можете свободно делиться своим веб-приложением Streamlit через Интернет с помощью функции Streamlit Share. Благодаря Streamlit Cloud ваши приложения можно развернуть одним щелчком мыши.

  1. Загрузите свое приложение на GitHub:

Код приложения и зависимости должны быть на GitHub, прежде чем вы попытаетесь развернуть его, поскольку Streamlit Cloud запускает приложения непосредственно из вашего репозитория. Добавьте в свой проект файл требований к зависимостям Python.

2. Для развертывания выполните следующие действия:

2.1) Перейдите на https://share.streamlit.io/

2.2) Войдите с помощью GitHub.

2.3) В правом верхнем углу рабочей области выберите «Новое приложение».

2.4) После нажатия кнопки «Создать» вы будете перенаправлены на страницу «Развернуть приложение». Введите свой репозиторий, ветку и местоположение файла, затем нажмите «Развернуть».

2.5) Сейчас ваше приложение развертывается, и вы можете дождаться его запуска.

2.6) После развертывания вы увидите URL-адрес, и это URL-адрес вашего приложения.

https://suraj124-hindi-character-recognition-app-r1dhcr.streamlitapp.com/

Когда вы нажмете на ссылку выше, вы попадете в мой проект Распознавание символов хинди.

Ссылка:

· [1]. М. Ядав и Р. Кумар Пурвар, Синтетические данные для распознавания символов хинди, Yadav Purwar Int. Дж. Эмерг. Technol., том. 11, нет. 2, стр. 793–796, 2020 г., по состоянию на 14 июня 2022 г. [Онлайн]. Доступно: www.researchtrend.net

· [2]. М. З. Алом, П. Сидике, М. Хасан, Т. М. Таха и В. К. Асари, «Распознавание рукописных символов бангла с использованием современных глубоких сверточных нейронных сетей», Comput. Интел. Neurosci., том. 2018, 2018, doi: 10.1155/2018/6747098.

· [3] Распознавание рукописных символов в автономном режиме с использованием функций, извлеченных из метода бинаризации. https://cyberleninka.org/article/n/1213064/viewer (по состоянию на 22 июня 2022 г.).

· [4]. BMJ, СРАВНЕНИЕ КЛАССИФИКАТОРОВ ГУДЖАРАТСКОГО ЦИФРОВОГО РАСПОЗНАВАНИЯ, том. 3, нет. 3, стр. 160–163, 2011 г., по состоянию на 22 июня 2022 г. [Онлайн]. Доступно: https://www.bioinfo.in/contents.php?id=31

  • Понимание различных функций потерь для нейронных сетей | Шива Верма | Среда — https://shiva-verma.medium.com/understanding-other-loss-functions-for-neural-networks-dd1ed0274718
  • Классификация рукописного числа деванагари — Анализ инструмента распознавания образов с использованием нейронной сети и CNN — Дуддела Саи Прашант, Р. Васант Кумар Мехта и др.

Блоги: -

Ссылка на GitHub:- https://github.com/Suraj124/Hindi-Character-Recognition

Ссылка на проект:- https://suraj124-hindi-character-recognition-app-r1dhcr.streamlitapp.com/

Спасибо, что нашли время, чтобы прочитать мой блог ❤

Выражаем особую благодарность команде Applied Roots (appliedaicourse.com) за помощь в решении этих тематических исследований.