13 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Программы распознавания изображений на нейронных сетях. Разработка системы распознавания изображений на основе аппарата искусственных нейронных сетей

Программы распознавания изображений на нейронных сетях. Разработка системы распознавания изображений на основе аппарата искусственных нейронных сетей

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

Краткая история развития нейронных сетей

Стоит отметить, что изначально понятие «нейронная сеть» берет свое начало в работе американских математиков, нейролингвистов и нейропсихологов У. Маккалока и У. Питтса (1943 г.), где авторы впервые упоминают о ней, дают ей определение и производят первую попытку построения модели нейронной сети [1]. Уже в 1949 г. Д. Хебб предлагает первый алгоритм обучения. Далее был ряд исследований в области нейронного обучения, и первые рабочие прототипы появились примерно в 1990–1991 гг. прошлого столетия. Тем не менее вычислительных мощностей оборудования того времени не хватало для достаточно быстрой работы нейронных сетей. К 2010 году мощности GPU видеокарт сильно увеличились и появилось понятие программирования непосредственно на видеокартах, что существенным образом (в 3–4 раза) увеличило производительность компьютеров. В 2012 г. нейросети впервые победили на чемпионате ImageNet, чем и ознаменовалось их дальнейшее бурное развитие [2, 3] и появление термина Deep Learning.

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

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

Следует также отметить, что в течение последнего года на стартапы в области систем распознавания изображений было выделено финансирование более чем за предыдущие 5 лет [4], что говорит о достаточно большой востребованности данного типа разработок на конечном рынке.

Применение нейронных сетей для распознавания изображений

Рассмотрим стандартные задачи, решаемые нейронными сетями в приложении к изображениям [4]:

● распознавание частей объектов (например, лиц, рук, ног и т.д.);

● семантическое определение границ объектов (позволяет оставлять только границы объектов на картинке);

● семантическая сегментация (позволяет разделять изображение на различные отдельные объекты);

● выделение нормалей к поверхности (позволяет преобразовывать двумерные картинки в трехмерные изображения);

● выделение объектов внимания (позволяет определять то, на что обратил бы внимание человек на данном изображении).

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

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

На данном этапе необходимо кратко остановиться на классификации нейронных сетей. На сегодняшний день основных видов три [5]:

● сверточные нейронные сети (CNN);

● рекурентные сети (deep learning);

● обучение с подкреплением.

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

Рис. 1. Нейронная сеть с простейшей топологией

Рис. 2. Нейронная сеть с 4-мя слоями скрытых нейронов

Один из явно существенных минусов данной топологии сети – избыточность. За счет избыточности при подаче данных в виде, например, двухмерной матрицы на вход можно получить одномерный вектор. Так, для изображения рукописной латинской буквы, описанной при помощи матрицы размером 34х34, потребуется 1156 входов. Это говорит о том, что вычислительные мощности, затрачиваемые на реализацию программно-аппаратного решения данного алгоритма окажутся слишком большими.

Проблема была решена американским ученым Яном Ле Куном, который провел анализ работ лауреатов Нобелевской премии в области медицины T. Wtesel и D. Hubel [1, 5, 6]. В рамках исследования, проведенного ими, в качестве объекта исследования выступила зрительная кора головного мозга кошки. Анализ результатов показал, что в коре присутствует ряд простых клеток, а также ряд сложных клеток. Простые клетки реагировали на полученное от зрительных рецепторов изображение прямых линий, а сложные – на поступательное движение в одном направлении. В результате был выработан принцип построения нейронных сетей, называемый сверточным. Идея данного принципа заключалась в том, что для реализации функционирования нейронной сети используется чередование сверточных слоев, которые принято обозначать C – Layers, субдискретизирующих слоев S – Layers и полносвязных слоев F – Layers на выходе из нейронной сети.

Читать еще:  Insert into в sql запросе. Основы T-SQL

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

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

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

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

Рис. 3. Алгоритм генерации карты признаков

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

Реализация обучения нейронной сети

Существующие сети делятся на 3 класса архитектур с точки зрения обучения:

● обучение с учителем (перцептон);

● обучение без учителя (сети адаптивного резонанса);

● смешанное обучение (сети радиально-базисных функций).

Один из наиболее важных критериев оценки работы нейронной сети в случае распознавания изображения – это качество распознавания изображений. Стоит отметить, что для количественной оценки качества распознавания изображения при помощи функционирования нейронной сети чаще всего применяется алгоритм среднеквадратической ошибки [6]:

(1)

В данной зависимости Ep – p-ая ошибка распознавания для пары нейронов,

Dp – ожидаемый выходной результат нейронной сети (обычно сеть должна стремиться к распознаванию на 100 %, но этого на практике пока не происходит), а конструкция O(Ip,W)2 – квадрат выхода сети, который зависит от p-ого входа и набора коэффициентов веса W. В данную конструкцию входят и ядра свертки, и весовые коэффициенты всех слоев. Просчет ошибки заключается в вычислении среднего арифметического значения для всех пар нейронов.

В результате анализа была выведена закономерность, что номинальное значение веса, когда значение ошибки будет минимальным, можно рассчитать исходя из зависимости (2):

(2)

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

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

Стоит также отметить, что обучение сети производится на специально подготовленных базах изображений, классифицированных на большое количество классов, и занимает достаточно большое время.
На сегодняшний день крупнейшей базой является ImageNet (www.image_net.org) [6]. Она имеет бесплатный доступ для академических учреждений.

Заключение

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

Подводя итог можно резюмировать следующее:

● нейронные сети могут находить применение, как в вопросе распознавания изображений, так и текстов;

● данная теория дает возможность говорить о создании нового перспективного класса моделей, а именно моделей на основе интеллектуального моделирования;

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

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

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

● с отсутствием достаточного количества баз данных эталонных изображений;

● отсутствие достаточного количества свободных экспертов для первоначального обучения системы;

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

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

Читать еще:  Как называется подставка для телефона чтобы снимать. Держи меня крепко: обзор автомобильных креплений для смартфона

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

Нейронные сети: распознавание образов и изображений c помощью ИИ

Распознавание образов нейронными сетями

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

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

Применение нейронной сети в распознавании изображений

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

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

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

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

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

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

В какой-то момент увеличение числа слоёв приводит к просто запоминанию выборки, а не обучению. Далее – за счёт хитрых архитектур.

Как нейросеть решает задачи по распознаванию образов

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

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

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

В целом создание нейронной сети для распознавания изображений включает в себя:

Распознавание образов мобильным роботом.

Задача распознавания образов

Алгоритмы распознавания образов

Практическая часть распознавания образов


Далее будет описан каждый квадратик этого плана подробно:

Получение изображения с камеры в ОС Windows

Бинаризация

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

Сегментация

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

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

В моей задаче с камеры поступает пускай и черно-белая, но вполне реальная картинка с 8битной палитрой (цвет задается от 0 до 255), однако для простоты в своем алгоритме я сразуже бинаризирую ее.
Итак, некоторые пояснения.
Как уже было сказано, большинство камер, граберов и прочих устройств в ОС Windows кодирует цвета пикселев в 24битовом формате. Поскольку я работаю в основном с ЧБ камерами, то у них содержимое всех трех 8 битов RGB одинаковое. Мы имеем некоторое изображение, каждый цветов которого изменяется от 0 до 255.
На стадии бинаризации мы должны преобразовать объект изображения в бинарную матрицу данных.
Итак, с этого момента для ускорения процесса начинается работа уже не с объектом картинки, а с бинарной матрицей, образы в которой выглядят примерно так:

Читать еще:  Остаток минут 0 без границ. «Ноль без границ» от оператора МТС

00000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000
00000000000001110000111000000000000000000000000000000
00000000000011100001110000000000000011100000000000000
00000000000111000111000000000000000111100000000000000
00000000001110001110000000000000001111100000000000000
00000000011110111000000000000000011001100000000000000
00000000111111100000000000000000110001100000000000000
00000001110011000000000000000000000001100000000000000
00000011100111000000000000000000000001100000000000000
00000111000110000000000000000000000001100000000000000
00001110001110000000000000000000000001100000000000000
00011100001111100000000000000000000001100000000000000
00000000000000000000000000000000000001100000000000000
00000000000000000000000000000000000001100000000000000
00000000000000000000000000000000000001100000000000000
00000000000000000000000000000000000111110000000000000
00000000000000000000000000000000000111110000000000000
00000000000000000000000000000000000000000000000000000

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

Итак некоторые коментрарии по правилам: L и M это метки, которые после прохождения алгоритма по массиву(кстати однократного) должны быть присовоены ВСЕМ пикселям объекта (элементам матрицы, которые до сегментации были единичными).
Далее если уже меченные объекты сливаются, то должно происходить и слияние меток.
На бумажке это все выглядит довольно просто, но если подумать то становится ясно, что для коректной работы алгоритма требуется переназначать метки во ВСЕЙ МАТРИЦЕ изображения каждый раз, когда выполняется последнее правило. Как я уже говорил ранее, одна из задач алгоритма это постараться уложиться в реально время, посему проходить по массиву элементов 640х480 каждый раз, когда хочется переназначить метку – это непозволительная роскошь.
Первое что приходит, на ум, чтобы рацианализировать эту часть алгоритма, это завести отдельно массив меток, в котором надо прописывать какая метка на какую ссылается, и все операции при проходе по матрице изображения проводить только с массивом ссылок меток. При этом в конце прохода должен иметься массив меток, ссылающихся друг на друга, и только несколько меток должны быть уникальнымии – которые собственно и образую объекты. Что бы получить уникальные объекты, которые уже можно направить в модуль распознавания нужно всего лишь нормализовать этот массив ссылок и переназначить все элементы матрицы на уникальные метки исходя из данных нормализованного массива ссылок.
На практике такой подход оказался нерабочим: на сложных объектах (что-нить типа горизонтальной плоской змейки) происходило разделение цельного объекта на части, причем в процессе переприсвоения меток терялась связь между частями объекта.
Более правильным, и не сложным решением явилось рекурентное нахождения уникальных родителей каждой метки, и далее всю работу по переприсвоению производить уже с ними, таким образом связь в объекте не может быть потеряна, потому что рекурсия дает возможность выхватывать самые длинные отростки объекта.
Термин отростки явно не будет понятен читателю, который знакомится с материалом первый раз, посему поясняю: на картинке выше (там где буква К и 1ка) стенки у 1ки иделально ровные, на практике же, разрешение 640х480 у камеры, направленной на пол, дает довольно приличную детализацию, которая может выхватывать реальные или кажущуюеся камере “заусенцы” или помехи на ровных местах образа (пускай даже распечатанного на принтере). Врезультате алгоритм работает не с идеальными картинками, а довольно сложными, но это происходит только на стадии сегментации, затем эти лишние детали на больших объектах уйдут, как будет понятно позже.
Итак после выполнения алгоритма сегментации, исходная бинарная матрица элементов должна выглядеть примерно так:

00000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000
00000000000002220000222000000000000000000000000000000
00000000000022200002220000000000000055500000000000000
00000000000222000222000000000000000555500000000000000
00000000002220002220000000000000005555500000000000000
00000000022220222000000000000000055005500000000000000
00000000222222200000000000000000550005500000000000000
00000002220022000000000000000000000005500000000000000
00000022200222000000000000000000000005500000000000000
00000222000220000000000000000000000005500000000000000
00002220002220000000000000000000000005500000000000000
00022200002222200000000000000000000005500000000000000
00000000000000000000000000000000000005500000000000000
00000000000000000000000000000000000005500000000000000
00000000000000000000000000000000000005500000000000000
00000000000000000000000000000000000555550000000000000
00000000000000000000000000000000000555550000000000000
00000000000000000000000000000000000000000000000000000

На картинке выше я специально присвоил “1” метку с номером 5, в реальности элементы которые видит камера довольно сложны, и не идеальны, поэтому при проходе только лишь по началу первого элемента могут быть задействованы несколько номеров меток, таким образом первое число, которое будет образвывать уникальный (в будущем ) объект типа “1” может быть не 3, не 4 , и даже не в первом десятке – у меня это число 5.
Так же на этом этапе даю возможность ознакомится с выходом программы, в реальных увловиях эксплуатации. Здесь можно посмотреть пример как будет происходить сегментация распечатанных на бумаге букв “П” и “И” подсунутых под камеру. Ниже выведен массив меток, про который уже шел разговор. В распечатке массива третий столбик это площадь кусков-сегментов. Ее довольно просто собрать на этом этапе работы программы, затем данные о площади можно использовать в простейшем фильтре, и не пускать мелкий мусор в модуль распознавания.
Пример этот – это реальный выход программы в текстовый фаил, поскольку некоторые метки при проведении сегментации стали двузначными, то картинка немного поползла, что затрудняет ее восприятие, однако при некоторой фантазии и желании можно понять что происходит.

Выхватывание образа, вычисление некоторых инвариантных чисел

При вычислении ряда морфометрических признаков используются понятия механики твердого тела. В частности, это относится к длинам осей инерции объекта. Направления в теле, совпадающие с полуосями эллипсоида инерции, называют главными осями инерции. Для нахождения главных осей инерции, лежащих в плоскости объекта, в функции imfeature используются следующие соотношения [1, 2, 3].

Пусть N – количество пикселей, относящихся к объекту. Все множество пикселей р(х, у), относящихся к объекту, обозначим Q. Тогда координаты центра масс объекта вычисляются как

,

Вычислим несколько вспомогательных величин:

;

;

.

Тогда длины максимальной и минимальной осей инерции вычисляются как:

;

.

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

Эксцентриситет определяется с помощью соотношения

голоса
Рейтинг статьи
Ссылка на основную публикацию
Статьи c упоминанием слов: