Просто о распознавании образов

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

Что такое распознавание образов?

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

Популярным примеров распознавания образов является распознавание символов на изображении(OCR). Компьютер может распознавать символы на изображении, чтобы представить их в виде текстового файла. Использую такую технологию можно распознавать автомобильные номерные знаки(https://intbusoft.com/ianpr/) или номера на железнодорожных вагонах(https://intbusoft.com/ianrcr/).

Как это работает?

Как же компьютер учится отличать одни изображение от другого? Модель для распознавания изображения во много похожа на другие модели в машинном обучении. В статье будет рассматриваться модель из 4 шагов.

 

Шаг 1: извлечение признаков

pixels

Рисунок 1

Признаками являются какие-то особенности или характеристики изображения, которые получаются из пикселей. Пиксели - это то из чего и состоит любое изображение(Рисунок 1). Каждый пиксель представляет собой число или набор чисел диапазон которых зависит от глубины(разрядности) цвета. Глубина цвета характеризует количество цветов, которые могут быть использованы в данном изображении. Разрядность 8-бит в черно-белом изображении говорит о том, что пиксель может принимать значения от 0 до 255. Цветные изображения чаще всего 24-битные или более. Цветное изображение в цветовой модели RGB означает, что цвет пикселя - это комбинация красного, зеленого и синего. Диапазон каждого из цветов от 0 до 255. В этом случае каждый пиксель содержит три значения RGB(244, 53, 12). Изображения 640х480(ширина х высота) содержит количество пикселей равное произведению ширины на высоту = 307 200.

 

Шаг 2: подготовка меток изображения для обучения модели

метки

Рисунок 2

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

 

Шаг 3: обучение модели классификации изображений

train

Рисунок 3

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

 

Шаг 4: Определение к какому классу относится изображение

predict

Рисунок 4

После обучения модели её можно использовать для распознавания новых изображений. На Рисунке 4 видно, что новое изображение распознано и классифицировано, как изображение уточки. Новое изображение так же разбирается на признаки, которые передаются на вход сети.

Сверточные нейронные сети – алгоритм распознавания образов

Именно сверточные нейронные сети(СNN) наиболее актуальные на данный момент для решения задач классификации изображений, детектирования объектов и распознавания образов.

 

 

Простое объяснение работы сверточных нейронных сетей

рис5

Рисунок 5 – Типы слоев сверточной нейронной сети

Разберемся с работой CNN на примере изображений из базы рукописных цифр MNIST. MNIST содержит черно-белые изображения для чисел от 0 до 9. Использованы черно-белые изображения потому что в таком случае каждый пиксель содержит только одной значение, вместо трёх, если бы изображения были цветными. Слои CNN отличаются от типичных нейронных сетей. Всего есть 4 типа слоёв: сверточный, активации, субдискретизации и полносвязный. Разберемся, что же делает каждый из них.

Сверточный слой

свертка1

Рисунок 6

Задача сверточного слоя выделить признаки из входного изображения. В нашем случае будем получать признаки путем рассмотрения на входном изображении блоков размерностью 2х2(Рисунок 6). Каждый признак будет характеризовать некоторую графическую особенность. Рассмотрим для примера три признака разделив их по цветам.

 

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

свертка2

Рисунок 7

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

Слой активации

В качестве функции активации используется линейный выпрямитель (ReLU). Данный слой такой же как и в типичных нейронных сетях, он исправляет любое отрицательное значение на ноль, чтобы гарантировать корректные вычисления.

 

Слой субдискретизации

субдискретизация

Рисунок 8

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

 

Полносвязный слой

full

Рисунок 9

Теперь из полученных изображений выстраиваем список значений. Каждый узел в списке прогнозирует вероятность конечного значения. В нашем случае «6» получает наибольший балл по всем узлам списка. В итоге CNN распознало исходное изображение как «6».

Чем CNN отличается от обычной нейронной сети?

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