ОГЛАВЛЕНИЕ 2
ВВЕДЕНИЕ 3
ГЛАВА 1. ИСПОЛЬЗУЕМЫЕ ИНСТРУМЕНТЫ 5
ГЛАВА 2. РАЗРАБОТКА ПРОГРАММЫ 6
2.1 Бинаризация изображения. 6
2.2 Сегментация изображения 7
2.3 Создание архитектуры нейронной сети 9
2.4 Обучение методом обратного распространения ошибки 12
2.5 Распознавание каждого сегмента 13
2.6 Формирование результата 14
2.7 Варианты дальнейшего развития. 15
ЗАКЛЮЧЕНИЕ 17
ИСПОЛЬЗУЕМАЯ ЛИТЕРАТУРА 18
ИСХОДНЫЙ КОД 19
handleimage.py 19
net.py
В современном мире информационные технологии помогают нам по всех областях жизнедеятельности. В частности, можно выделить один огромный раздел - цифровая обработка изображений. В связи с широким применением эта область распадается на огромный спектр задач: обработка снимков со спутника, выделение различных характеристик, классификация изображений, обработка изображений в медицине, машинное зрение, идентификация личности.
Одна из таких задач - распознавание текста с изображения. Разработано несколько программ, способных с высокой точностью распознать напечатанный текст, наиболее известные из них - это ABBYY FineReader, OmniPage, Readiris. Но одно дело - текст, напечатанный на принтере, а другое - рукописные символы. Обычный алгоритм уже не подходит, так как в написанном тексте появляется несколько факторов - подчерк, чернила, сила нажатия на бумагу.
Больших успехов в распознавании рукописных символов добились нейронные сети. Отдельного внимания заслуживает сверточная нейронная сеть, предложенная Яном Лекуном. Предложенная им архитектура сети на текущий момент является лидером классификации изображений.
Еще на третьем курсе я сделал простую однослойную нейронную сеть для распознавания рукописных цифр. Но простая архитектура и маленькая обучающая выборка дала не самые лучшие результаты - сеть распознавала только около половины символов.
Цель моего диплома - это распознавание математических выражений с фотографии. Для выполнения этого задания необходимо выполнить следующий ряд подзадач:
1. Первично обработать входящее изображение.
2. Сегментировать изображение на отдельные символы.
3. Обучить нейронную сеть на распознавание символов, знаков +, - и т.д.
4. Распознать каждый сегмент и сформировать выходную строку.
Каждая подзадача имеет несколько способов реализации. Необходимо проанализировать качество выполнения каждого этапа в зависимости от способа реализации, потому что низкое качество работы одного этапа скажется на результате всей программы.
Актуальность этой работы вытекает из актуальности применения искусственных нейронных сетей в повседневной жизни. Сверточные нейронные сети учат ставить диагнозы по фотографии, распознавать знаки, сегментировать фотографии по классам. Если смотреть на цель моей работы глобально, то ее можно перефразировать как «Изучить возможности сверточных нейронных сетей на примере распознавания математических выражений».
После завершения проделанной работы было получены следующие результаты:
• Изучены методы сегментации изображения и реализован самый оптимальный, на мой взгляд.
• Освоен python модуль для работы с изображениями.
• Изучены новые способы применения нейронных сетей в повседневной жизни
• Исследованы преимущества и недостатки разных типов искусственных нейронных сетей.
• Реализована и обучена сверточная нейронная сеть.
Завершив все вышеописанные этапы, мы получили работоспособную систему, способную выделять отдельные части на фотографии, распознавать каждую часть и собирать всю информацию в единое целое. Результаты тестирования оказались чуть ниже, чем ожидалось - в среднем система неверно распознает 1 символ из 10.
В целях увеличения процента правильных ответов возможно добавить несколько улучшений - увеличить размер обучающей выборки путем искусственной деформации существующих изображений или доработать алгоритм обучения в пользу подробной корректировке весов.
Разработанный программный модуль показал отличные результаты в распознавании изображений. Возможности дальнейшей реализации позволяют сделать по-настоящему уникальный продукт.
1. Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-Based Learning Applied to Document Recognition, Proceedings of the IEEE. // Proc. IEEE 1998.
2. Солдатова О.П., Гаршин А.А. Применение сверточной нейронной сети для распознавания рукописных цифр. // Компьютерная оптика, том 34, №2 2010.
3. Кирюшина А.Е., Распознавание математических символов с использованием сверточной нейронной сети. И Переславль-Залесский,
2013.
4. Друки А.А. Применение сверточных нейронных сетей для выделения и распознавания автомобильных номерных знаков на изображениях со сложным фоном.
5. Болотова Ю.А. Спицын В.Г. Рудометкина М.Н. Распознавание автомобильных номеров на основе метода связных компонент и иерархической временной сети // Журнал “Компьютерная оптика”, Выпуск № 2 / том 39/2015
6. Применение нейросетей в распознавании изображений. Электронный ресурс: geektimes.ru/post/74326
7. Deconvolutional Neural Network. Электронный ресурс: habrahabr.ru/company/nordavind/blog/253859
8. Convolutional neural network. Электронный ресурс: en.wikipedia.org/wiki/Convolutional neural network