Программа распознавания лиц для идентификации личности на основе алгоритмов машинного обучения
Изучение современных алгоритмов обнаружения и распознавания лиц на изображении для разработки приложения микро-сервиса для распознавания личности на основе фотографии лица с использованием алгоритмов машинного обучения. Описание процесса разработки.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 04.12.2019 |
Размер файла | 1,6 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
ПРАВИТЕЛЬСТВО РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ
«ВЫСШАЯ ШКОЛА ЭКОНОМИКИ»
Факультет компьютерных наук
Департамент программной инженерии
Выпускная квалификационная работа
на тему «Программа распознавания лиц для идентификации личности на основе алгоритмов машинного обучения»
по направлению подготовки 09.03.04 «Программная инженерия»
Научный руководитель
Профессор департамента программной
инженерии факультета компьютерных наук
Доктор технических наук
Александров Д.В.
Москва 2019
Аннотация
изображение лицо обнаружение алгоритм
В современное время многие компании организуют автоматические системы контроля прохода во внутренние помещения для защиты от посторонних людей. Самым распространенным решением в такой задаче является ввод пропусков в виде пластиковых карточек, которые требуется прикладывать к считывателям, чтобы пройти турникеты. Другим способом организации автоматической системы контроля пропуска является создание системы распознавания личности на основе биометрических данных. Сегодня уже хорошо изучена задача детекции объектов, в частности лиц, а развитие технологий позволяет без использования огромных кластеров обучать точные модели распознаванию лиц, проводя расчеты на GPU.
Целью данной работы является изучение современных алгоритмов обнаружения и распознавания лиц на изображении для разработки приложения микро-сервиса для распознавания личности на основе фотографии лица с использованием алгоритмов машинного обучения.
Приложение реализовано на языке Kotlin 1.3 и использует библиотеку OpenCV как бэкенд для выполнения вычислений в нейронной сети. Обучение нейронной сети написано на Python 3.7 с использованием библиотеки PyTorch 1.0 для ускоренного обучения нейронных сетей на GPU.
Данная работа содержит 35 страниц, 3 главы, рисунков, 3 таблицы, 5 формул и 19 источников.
Ключевые слова: распознавание по лицу, машинное обучение, глубокое обучение, нейронные сети, сиамские сети, детекция лиц.
Abstract
In modern times, many companies use automatic systems for control access to internal premises to protect against unauthorized people. The most common solution in this task is to enter pass-cards that need to be attached to the readers in order to pass the turnstiles. Another way to organize an automatic pass control system is to create a personal identification system based on biometric data analysis. Today, the task of detecting objects, in particular faces, is already well studied, and the development of technologies allows us to train accurate models for solving face recognition task using GPU calculations instead of necessary using huge clusters.
The purpose of this work is to study modern algorithms for detecting and recognizing faces in an image in order to develop a micro-service application for recognizing personality based on a face photo using machine learning algorithms.
The application is implemented in the Kotlin 1.3 language and uses the OpenCV library as the backend for performing calculations in the neural network. Code for neural network training is written in Python 3.7 using the PyTorch 1.0 library for accelerating learning of neural networks on the GPU.
This work contains 35 pages, 3 chapters, 10 figures, 3 tables, 5 formulas and 19 sources.
Keywords: face recognition, machine learning, deep learning, neural networks, Siamese networks, face detection.
Cодержание
Аннотация
Abstract
Определение, обозначения и сокращения
Введение
Глава 1. Обзор источников и существующих решений
Глава 2. Архитектура и основные технологии разрабатываемого приложения
Глава 3. Разработка приложения
Заключение
Список используемых источников
Определение, обозначения и сокращения
False Accepted Rate (FAR) - вид ошибки, когда алгоритм принимает два разных объекта за один и тот же;
False Rejected Rate (FRR) - вид ошибки, когда алгоритм принимает объекты одного класса за объекты разных классов;
Нейронная сеть - вид модели машинного обучения, в основу которой легла идея эмуляции деятельности мозга при обработке и анализе информации;
F1 оценка - оценка качества модели;
Батч - подмножество датасета, как правило, с фиксированным количеством экземпляров для обучения;
Learning Rate - размер коэффициент при обучении определяющий размер «шага» при понижении функции ошибки методом градиентного спуска;
SGD - алгоритм градиентного спуска, используемый при обучении нейронных сетей, проводящий измерение ошибки на подмножестве из обучающего датасета;
RMSprop - алгоритм градиентного спуска, используемый при обучении нейронных сетей, улучшающий обучение путем использования среднего квадрата градиента функции ошибки для уменьшения значения функции ошибки;
Adam - улучшенный RMSprop алгоритм, позволяющий с первых итераций обучения быстро накапливать показатели среднего квадрата градиента функции ошибки;
Тензор - в данной работе мы понимаем под этим трехмерный массив чисел, примером которого может служить трехканальное изображение;
Каналы тензора - одно из измерений тензора, соответствующее третьей размерности трехканального изображений;
Свертка (convolution, conv) - операция, принимающая на вход последовательность чисел, которая возвращает одно число;
Ядро свертки - набор множителей, применяемых к части тензора, которая в данный момент сворачивается, путем умножения элементов этой части тензора на элементы ядра и дальнейшего подсчета суммы результатов умножений;
Страйд - шаг перемещения ядра свертки по тензору;
Depthwise (Dwise) convolution (внутриканальная свертка) - вид свертки тензора, при которой ядро свертки применяется только к определенному каналу тензора;
BatchNormalization (BN) - обучаемый слой нейронной сети, нормализующий значения тензора;
ReLU - функция, принимающая значение 0, если входной параметр меньше или равен 0, или значение самого параметра в остальных случаях;
ReLU6 - функция, принимающая значение 0, если входной параметр меньше или равен 0, значение 6, когда параметр больше или равен 6, или значение самого параметра в остальных случаях;
Convkxk- свертка с ядром kхk, где k -целое число;
FC - полносвязный слой сети;
CPU - центральный процессор;
GPU - графический процессор.
Введение
Обычной практикой стало введение автоматизированной системы для контрольно-пропускных пунктов. Начиная институтами и заканчивая бизнес-центрами человеку, желающими пройти внутрь, придется доказать системе, что он имеет на это право. Это обеспечивает безопасность, поскольку посторонние не смогут попасть внутрь, а также исключает человеческий фактор.
Самым распространённым способом организации автоматизированной системы для контроля пропуска является введение карточек для каждого сотрудника. Данный вид систем имеет свои минусы и плюсы. Для создания такой системы не нужно проектировать сложных алгоритмов. Однако, карточка может быть потеряна или украдена, тогда другой человек может получить доступ. Поэтому эта система также не избавляет от необходимости дополнительного контроля в виде охраны.
В начале столетия были разработаны первые системы идентификации человека на основе изображения лица. Первые системы включали в себе обнаружение лица на фотографии и последующий анализ с помощью алгоритмов машинного обучения. Уже тогда алгоритмы для обнаружения лиц были достаточно точными, однако алгоритмы анализа самого изображения были не настолько надежными, чтобы отвечать требованиям безопасности.
Сейчас многие компании пытаются внедрить системы распознавания на основе идентификации по лицу. Для разработки подобной системы требуется больше ресурсов, однако она является более удобной. Сотрудник не требуется носит с собой специальные пропуски, поэтому они не могут быть утеряны.
Целью работы является разработка веб-сервиса, который будет предоставлять функции для обнаружения (детекции) лица на изображении, анализа изображения лица, сравнение и поиск похожих лиц в базе данных сотрудников.
Для реализации поставленной цели необходимо решить следующие задачи:
Провести анализ готовых решений;
Разработать функциональные требования к программе;
Изучить способы обнаружения лиц;
Изучить способы анализа сходства лиц с помощью алгоритмов машинного обучения;
Выбрать основные библиотеки для разработки веб-сервиса;
Выбрать основные библиотеки для обучения моделей;
Разработать веб-сервис для идентификации по лицу;
Протестировать готовое приложение
Разработать техническую документацию.
В данной работе представлено три главы: в первой приведен обзор подходов и решений, а также описание основных особенностей этих решений, во второй - описание технологий и инструментов, используемых в данной работе, в третьей описаны особенности реализации приложения.
Глава 1. Обзор источников и существующих решений
Данная глава содержит обзор существующих подходов и открытых решений, использующие алгоритмы машинного обучения для идентификации личности по изображению лица.
Подходы к обнаружению лица на изображении
Проблема детекции объектов на изображении в наше время является хорошо изученной. В большинстве современных решений используются обученные нейронные сети с архитектурой “You Look Only Once” (YOLO) [1], Fast-RCNN и Faster-RCNN [2], которые показывают действительно хорошие результаты. Однако эти сети обычно используют для детекции объектов сразу нескольких классов. Более простыми и эффективными решениями для обнаружения только лиц являются: нейронная сеть MTCNN [3], алгоритмы, основанные на преобразованиях Хаара для детекции лиц [4] и алгоритм анализа гистограммы направленных градиентов [5].
Multi-task Cascaded Convolutional Network (MTCNN)
В 2016 году была опубликована статья, которая представила наиболее часто используемую архитектуру нейронной сети для детекции лиц [3]. Ее точность для детекции лиц на данный момент считается эталонной.
MTCNN состоит из нескольких подсетей. На первом шаге алгоритма Proposal Net определяет зоны на фотографии, потенциально содержащие изображение лица. На второй стадии Refine Net проверяет выделенные зоны, чтобы отвергнуть большинство кандидатов, ошибочно выявленных на предыдущем шаге. На последней стадии применяется нейронная сеть, которая детектирует ключевые точки лица (глаза, уголки губ и кончик носа).
Как уже было упомянуто, данный алгоритм является крайне точным и очень часто используется для обнаружения лиц. Однако в процессе его работы требуется проводить множество вычислений, поскольку применяется несколько нейронных сетей. Для подсчетов на CPU алгоритм может быть неудобным из-за большого количества вычислений.
Примитивы Хаара
Впервые данный алгоритм был предложен в 2001 году Полом Виолой и Майклом Джонсоном для детекции объектов на изображении. Для его создания были применены подходы машинного обучения. Алгоритм тренируется на двух типах изображений: на изображениях с объектов и без него. После обучения на большом количестве изображений результаты сохраняются в виде преобразований Хаара. Эти преобразования часто представляют в виде свёрточных ядер, поскольку для извлечения признаков объекта, который мы пытаемся обнаружить, требуется проводить свертки с данными ядрами. Каждое ядро разделяется обычно на две области (черную и белую), внутри которых подсчитывается суммы пикселей. Далее эти суммы сравниваются для каждого ядра.
Самое сложное и то, для чего используется машинное обучения в данном подходе, -- это нахождения порога для разности сумм секторов ядра, когда мы будем считать, что мы обнаружили некоторую свойственную нашему объекту черту на изображении.
Таким образом этот подход можно свести к нахождению связок более светлых и более темных зон на изображении, которые бы являлись ключевыми чертами объекта. Для человеческого лица самыми заметными являются обычно темные брови, потемнения по краям носа и его светлый кончик. Список можно продолжать довольно долго.
Для быстрого подсчета суммы внутри ядра и его секторов обычно используют приведение к интегральной форме изображения. Для этого значения пикселей пересчитываются таким образом, что каждый пиксель равен сумме всех пикселей, попавших в угловой минор матрицы изображения. В такой форме вычисление суммы любого сектора на изображении происходит за O(1).
Этот метод до сих пор считается очень точным и достаточно эффективным, поскольку использует широко известные методы для работы с картинками, такие как свертка изображения. По этой причине он реализован во многих фреймворках, работающих над анализом изображений.
Гистограмма направленных градиентов
Прошлый алгоритм использует анализ последовательностей затемненных и осветленных областей. Алгоритм, основанный на использовании гистограммы направленных градиентов, работает схожим принципом.
На первом шаге рассчитываются градиенты интенсивности по всему изображению, а затем составляется гистограмма с областей изображения. Полученная гистограмма может быть напрямую использована как вектор признаков для анализа. Типичным примером является применение метода опорных векторов для классификации гистограмм, полученных от изображений с объектами (лицами) и без.
Этот алгоритм для обучения классификатора также требует большого количества изображений для обучения, чтобы получить приемлемую точность. Он считается более точным, чем применение детектора, основанного на использовании примитивов Хаара, однако все равно уступает анализу изображений с помощью сверточных нейронных сетей.
Подходы для анализа сходства лиц и других объектов с помощью алгоритмов машинного обучения
Сиамские нейронные сети
Современным трендом для анализа изображений является использование сверточных нейронных сетей. Данный вид моделей является попыткой создания умного алгоритма, который бы мог работать подобно человеческому мозгу. Более того, сверточные нейронные сети частично учитывают некоторые особенности зрения и анализа картинки настоящим мозгом. С развитием технологий для распределенных расчётов на GPU и появлением идей InceptionNet [] и ResNet [7] стало возможным обучение глубоких моделей нейронных сетей для достижения впечатляющей точности для различных задач по анализу изображений.
Первые попытки использования нейронных сетей для идентификации людей по лицу были предприняты довольно давно [8]. Тогда была предложена идея Сиамских нейронных сетей, которые предоставляли бы полностью одинаковое отображение изображений в векторы или точки в пространстве, которые можно было бы сравнить между собой. Притом создаваемое сетью отображение должно обладать следующим условием: расстояние между результатами отображения должно быть тем меньше, чем более схожими мы считаем объекты для нашей задачи. Верно должно быть и обратно: если мы считаем, что объекты не похожи, результаты их отображения должны быть далеко в итоговом пространстве.
Таким образом мы получаем модель способную измерить сходство объектов, преобразовывая их в точки в пространстве, где расстояние является показателем сходства и различия.
Функции ошибок
Первая функция ошибок для обучения сиамских нейронных сетей (Contrastive loss) решала задачу напрямую. Она считала расстояние для схожих объектов и пыталась уменьшить это расстояние. Однако контрастирующая функция ошибки не позволяло обучить модели так, чтобы сети могли показывать сильные способности к обобщению к тем лицам, с которыми не встречалась бы модель во время обучения [9].
В июне 2015 года компанией Google была представлена новая функция ошибки (Triplet loss) [10], которая позволила обучить сеть до рекордных показателей. На датасете Labelled Face in the Wild (LFW) была достигнута точность в 99.63%. Однако для достижения таких результатов потребовалось несколько месяцев непрерывного обучения сети на огромном кластере. Она работает по принципу группировки различных классов в пространстве. Более подробно, всегда выбирается тройка образцов, среди которых есть положительная пара одного класса объектов и отрицательная. Ошибка считается как разность расстояний между положительной и отрицательной парой. Проблема Triplet loss заключается в том, что модель достаточно быстро выучивает самые заметные черты различия и сходства между объектами, однако дальнейшее обучение проходит крайне бедно. Многие тройки отображений начинают приносить нулевую ошибку. По этой причине были разработаны два основных подходы для минимизации затрат по постоянные расчеты для тех троек, которые не принесут новой информации. Оба подхода стараются выбирать те тройки для обучения, которые имеют наибольшую ошибку и отличаются лишь тем, в какой момент выбираются тройки. В одном случае тройки выбираются на основе результатов модели в состоянии последней эпохи, в другом - на основе модели в состоянии последней итерации обучения для новой группы троек.
В 2017 году в совместной статье сотрудников Amazon и научных сотрудников университета Техаса в Остине [9] был произведен анализ предыдущих функций ошибки, а также предложены улучшения для них и новая функция потерь для обучения (Margin loss). Она сильно похожа на контрастирующую функцию потерь, однако также предлагает находить во время обучения пороги близости кластеров для разных объектов. Однако, для задачи идентификации по лицу Margin loss почти не применяется.
Архитектуры нейронных сетей
В этом разделе мы рассмотрим те архитектурные решения нейронных сетей последних лет, которые мы используем для обучения. Стоит отметить, что поскольку мы предполагаем, что все расчеты мы планируем проводить на CPU без использования GPU для ускорения вычислений для нейронной сети, потому что для создания серверов с GPU требуются гораздо более значительные затраты. Мы же хотим, чтобы наш сервис был достаточно легок для установки и использования. Поэтому большинство архитектурных решений, которые мы рассмотрим используют идею уменьшения количества вычислительных операций без значительного падения точности.
Одной из первых архитектур нейронных сетей, ставящей для себя задачу уменьшения количества операций с сохранением точности модели, была SqueezeNet [11]. Данная архитектура основана на трех главных идеях:
Применение свертки 3х3 только на тензоры с маленьким количеством каналов
Уменьшение количества каналов с помощью свертки с ядром 1х1 перед свертками с большими ядрами
Применение страйдов больших 1 на последних слоях сети
Эти три правила помогают создать сеть, которая будет уметь меньше параметров внутри, а значит, потребует меньше вычислительных операций. Эксперименты авторов архитектуры показывают, что точность уменьшается крайне незначительно, в то время как скорость можно увеличить очень весомо.
Другое архитектурное решение, уменьшающее количество весов и ускоряющее работу сети представлено компанией Google [12], получило название MobileNet. Главный принцип этой сети -- это разделение свертки тензора на между- и внутриканальную. Таким образом существенно уменьшается количество весов, требуемое сетью для обработки изображения. Особенностью этого решения является то, что его удобно встроить в любую сеть просто поменяв свертки на композицию между- и внутриканальной сверток.
Последним интересным архитектурным решением последнего времени стоит отметить Shake-ShakeNet [13]. Данная сеть сконцентрирована не на уменьшении количества весов и ускорении выполнения преобразований сети, а на регуляризации при обучении. Одной из многих проблем обучения нейронных сетей является переобучение. Оно остается проблемой и до сих пор, поскольку многие сети действительно легко переобучаются даже с использованием классических методов противодействия этому (уменьшение квадратов весов и использование Dropout). Shake-ShakeNet включает в свою архитектуру крайне мощный механизм регуляризации, который позволили этой сети добиться лучших на сегодняшний день результатов по классификации на датасете CIFAR-100.
Обзор существующих решений
Все существующие и открытые на сегодняшний день решения не являются прямыми аналогами нашей программы. Однако мы можем выделить главным конкурентом open-source проект OpenFace. Данный проект также предоставляет функциональность для детекции лица на изображении и дальнейшего анализа после преобразования с помощью специальной обученной нейронной сети. На сайте проекта представлена полная информация о текущей точности на датасете LFW (92.92% точности), а также документация по использованию. Для коммерческих решений использованные архитектуры нейронных сетей, а также их точность обычно являются закрытой информацией и не оглашается из-за коммерческой тайны.
Глава 2. Архитектура и основные технологии разрабатываемого приложения
В этой главе описана архитектура разрабатываемого приложения, а также основные используемые технологии и алгоритмы.
Архитектура разрабатываемого приложения
Приложение принимает в запросе ссылку или путь до изображения, после чего читает его и начинает обработку. В зависимости от вида запроса приложение либо обрабатывается системой обнаружения лиц, либо напрямую отправляется в систему распознавания. Краткая схема представлена ниже (рис. 1).
Рисунок 1. Схема работы системы.
Система обнаружения улучшает качество изображения с помощью алгоритмов предобработки и находит лица на изображении, выбирает ближайшее к камере по размеру найденного окружающего прямоугольника и вырезает изображение лица. В случае, когда лицо не было обнаружено на изображении, требуется отправить ответ о том, что лицо не было найдено.
Изображение подготовляется для обработки системой распознавания с помощью интерполяции фотографии до необходимых размеров и поканальной нормализации. Это необходимо для улучшения точности работы алгоритма распознавания. Алгоритм распознавания состоит из обрабатывающей модели и определителя схожих изображений лиц из базы данных. Определение схожести происходит по уже преобразованным модель изображения в вектора. Как итог работы выдается ответ, где представлен топ-5 схожих фотографий и степень их схожести, оценённая системой распознавания, если лицо было обнаружено на входном изображении.
Предобработка изображений
В работе с реальными изображениями частой проблемой является интенсивное освещение какой-то части лица. В результате из-за этого системам детекции становится сложно обнаружить лица. Модели, используемые для распознавания, могут уделять излишнее внимание освещению, считая лица разных людей похожими из-за пятен сильной засветки на лице. Мы обратили на это внимание и применили предобработку изображений.
Для этого были использован алгоритм адаптивной эквализации гистограммы для повышения контрастности, а точнее его разновидность Contrast Limited Adaptive Histogram Equalization (CLAHE) [14]. Это классический и давно разработанный алгоритм, реализованный во многих библиотеках, поэтому за подробностями мы предлагаем обратиться к источнику.
Поиск лиц на изображении
Были отобраны два алгоритма детекции лиц, которые будут сравнены в этой работе, а именно: алгоритм, основанный на примитивах Хаара, и алгоритм анализа гистограммы направленных градиентов. Мы сравним время работы алгоритмов и их точность, чтобы выбрать тот, который войдет в финальное решение. Также, мы не стали рассматривать применение MTCNN, поскольку данный способ требует использования трех нейронных сетей, что требует большого количества вычислений, когда показывает небольшое увеличение точности в сравнении с двумя алгоритмами, предложенными ранее.
Примитивы Хаара
Данный метод, как уже было упомянуто выше, использует преобразования, схожие с вейвлетами Хаара. Черно-белое изображение переводится в интегральную форму, при которой каждый пиксель имеет значение равное сумме пикселей от левого верхнего угла до текущего. Это позволяет за константное время проверять соответствие некоторого участка изображения паттерну, высчитывая суммы в этих участках за два сложения и два вычитания (1) (рис. 2).
Рисунок 2. Нахождение суммы внутри ABCD.
, (1)
где - сумма пикселей от левого угла изображения до , - сумма пикселей от левого угла изображения до , - сумма пикселей от левого угла изображения до , - сумма пикселей от левого угла изображения до. Затем сумма тестируется на соответствие обученным паттернам. Обычно такие тесты предполагают сравнение более темной зоны объекты с рядом стоящей более светлой. Для лиц самыми приметными такими паттернами мы можем выделить сами. Это обычно темные брови, потемнения рядом с носом, потемнее над глазами в противоположность более светлого кончика носа и светлым глазам соответственно. Пример визуализации паттернов вы можете видеть на (рис. 3).
Рисунок 3. Пример паттернов в алгоритме обнаружения объектов с помощью примитивов Хаара.
Обычно для детекции объектов этим методом требуется обучение фильтров, которые обнаруживают характерные черты объекта, однако на сегодняшний день в открытом доступе можно найти параметры уже обученной модели.
Гистограмма направленных градиентов
Алгоритм детекции лиц, анализирующий гистограммы направленных градиентов считается более точным в сравнении с предыдущим. Название говорит, что в самом начале алгоритма требуется посчитать гистограмму направленных градиентов. Для каждого пикселя черно-белого изображения выполняется операция нахождения нормированного на магнитуду градиента. Затем для полученной матрицы производится операция подобная свертки. Внутри окна, движущегося по матрице, составляется гистограмма углов градиентов. Иногда окно на самом деле состоит из нескольких окон, расположенных рядом, для которых строятся свои гистограммы, которые требуется соединить перед следующим шагом. Затем эта гистограмма в виде вектора классифицируется специально обученной моделью. Это модель может быть абсолютно любой, типичным примером является использование метода опорных векторов.
Ниже (рис. 4) вы можете видеть пример работы алгоритма детекции объектов. В некоторой области высчитываются градиенты интенсивности. Затем гистограммы градиентов из разных областей предполагаемого объекта (на рисунке это детекция глаза) соединяются в одну гистограмму для анализа. В этом конкретном примере область глаза разделяется на 4 зоны, в каждой из которых выделяют 9 основных направлений градиентов. Большая точность вплоть до градуса для этого алгоритма обычно не применяется. Далее гистограммы соединяются в одну, и мы получаем вектор, который можно анализировать.
Рисунок 4. Пример подсчета гистограммы направленных градиентов в некоторой части изображения.
Алгоритм распознавания
Сегодня все больше используются нейронные сети для анализа изображений. Поэтому для распознавания мы будем использовать их, а не более стандартные и простые методы машинного обучения, поскольку они значительно проигрывают нейронным сетям при решении этой задачи. За основу алгоритма мы возьмем идею Сиамских нейронных сетей. Для этого требуется обучить нейронную сеть таким образом, чтобы она преобразовывала изображения в векторы так, чтобы схожие объекты были близко, а непохожие были далеко друг от друга.
Таким образом алгоритм будет состоять из нейронной сети, преобразовывающей изображения лиц в векторы и алгоритма для сравнения расстояния между вектором входного изображения и векторами изображений в базе данных.
Для возможности оценки схожести преобразованных изображений в некоторой нормированной шкале требуется ввести ограничения на пространство векторов. Для этого существует два достаточно простых и очевидных способа.
Первым способом является нормировка векторов для получения точек на поверхности гиперсферы. Таким образом мерой схожести можно выбрать косинусное сходство, которое легко можно вывести через формулу скалярного произведения векторов. Тогда при косинусе угла между векторами равному 1, мы можем говорить, что изображения максимально похожи. Если косинус между векторами равен -1, тогда это максимально разные объекты на изображении. Однако этот способ требует изменения функции ошибок при обучении модели, поскольку далекие по расстоянию векторы в пространстве могут иметь малый угол между собой.
Другим способом является применение отображения из пространства ограниченное подпространство. Таким отображением, например, может быть функция сигмоиды (2). Сигмоида -- это гладкая возрастающая функция, принимающая значения в интервале от 0 до 1. После этого отображения максимальное расстояние между векторами в пространстве размерности будет равно .
. (2)
Эти два подхода позволяют эффективно нормировать меру схожести для дальнейшего интерпретирования результатов.
Архитектуры нейронных сетей
Изначально мы попытались применить стандартные архитектуры нейронных сетей, а именно ResNet. Однако был сделан вывод, что стандартные сети требуют проведения большого количества операций и большой глубины архитектуры для достижения высокой точности.
Поэтому одним из главных параметров при выборе архитектур сетей для создания данного приложения было решено выбрать скорость исполнения, поскольку мы предполагаем использование расчетов на CPU при непосредственной работе системы, и качество результатов обучения. В данной работе будет протестировано несколько нейронных сетей и выбрана та, которая будет показывать наилучшие результаты при одинаковом количестве производимых вычислений.
SqueezeNet
Как уже было упомянуто данная архитектура призвана значительно сократить количество вычислений в сети без значительных потерь в точности. Отличительной особенность данной архитектуры является применение сверток с ядром 1х1 для уменьшения каналов тензора перед свертками с ядром 3х3 или больше, а также использование пулингов и сверток со страйдом больше 1 ближе к последним слоям сети, чтобы избежать потери информации и снижения точности. Для этих целей авторами статьи был разработан специальный строительный блок сети (FireBlock), из которого должна строиться оригинальная сеть (рис. 5).
Рисунок 5. Fire block [11].
FireBlock можно разделить на две стадии: «squeeze» и «expand». «Squeeze» использует свертки 1х1 для уменьшения количества каналов перед «expand» стадией. Тем самым весов для свертки выходного после «squeeze» тензора понадобится меньше. Далее тензор обрабатывается двумя разными свертками с ядром 1х1 и 3х3 на стадии «expand». Затем результаты конкатенируются по каналам, восстанавливая их количество.
Данная архитектура показывает значительное уменьшение весов и ускорение в работе без серьезных потерь в точности в экспериментах по классификации. Эффективность данной сети является одной из причин для использования в данной работе.
MobileNetV2
Еще одним эффективным и все чаще используемым решением для создания сетей с небольшим количеством весов является использование архитектур основанных на блоке сверток архитектуры MobileNetV2. Эта сеть является развитием идеи уменьшения весов, предложенной еще в архитектуре MobileNetV1. В первой версии предлагалось разделять слой свертки на две части: междуканальную (pointwise conv1x1) и внутриканальную свертки (depthwise) (рис. 6). При этом междуканальная свертка имела размеры ядра , где - количество входных каналов тензора, - количество выходных каналов. Внутриканальная свертка применялась индивидуально для каждого канала и имела размеры ядра . Для оценки того, насколько это дает выигрыш посмотрим на количество весов:
, (3)
, (4)
, (5)
где - количество входных каналов тензора, - количество выходных каналов. В (3) и (4) приведены количество весов в ядре обычной свертки и сумма весов в ядрах междуканальной и внутри канальной свертки соответственно. В (5) мы видим, что если число входных каналов больше одного, то обычная свертка требует больше весов, а значит больше вычислительных операций. Применение этого подхода позволяет использовать в 8-9 раз меньше весов.
Рисунок 6. Сравнение обычной свертки тензора и сверток MobileNetV1 [12]. Слева обычная свертка. Справа свертка разделенная на внутриканальную с ядром 3х3 и междуканальную с ядром 1х1.
MobileNetV2 продолжает развивать данную концепцию. Путем экспериментов компания Google обнаружила, что, немного изменив подход MobileNetV1, можно не просто уменьшить количество весов без весомых потерь в точности, но даже повысить точность. MobileNetV2 предлагает новый блок для конструирования сети (рис. 7), использующий идеи разделения свертки на между- и внутриканальную. Новый блок, названный авторами статьи «бутылочным горлышком» (Bottleneck), на самом деле представлен двумя видами блоков, различающимися присутствием остаточного обходного пути, предложенного еще в ResNet архитектуре, в блоке со страйдом 1. Ранее многие использовали остаточный путь даже в блоках со страйдом большим чем 1, применяя на нем свертку с ядром 1х1, чтобы изменить размеры тензора в соответствии с основной веткой. Однако, авторы MobileNetV2 провели ряд экспериментов, которые показали, что это лишь ухудшает качество обучения. Подобные эксперименты впервые были приведены еще создателями SqueezeNet архитектуры, их результаты также приведены в их статье.
Рисунок 7. Строительный блок сети MobileNetV2 (Bottleneck) [12].
Мы можем видеть, что теперь вместо использования одной свертки с ядром 1х1 нам предлагается использовать две: перед внутриканальной сверткой 3х3 и после нее. Более того, первая свертка 1х1 должна увеличивать количество каналов, а последняя - уменьшать. Причиной тому является следующая теория, доказанная экспериментально в статье: первая свертка увеличивает количество каналов, позволяя внутриканальной свертке 3х3 показывать большее богатство преобразований в работе с данными, после чего последняя свертка 1х1 убирает результаты работы предыдущего слоя в пространство меньшей размерности, чтобы число каналов не росло в геометрической прогрессии после каждой свертки 3х3. При этом данные почти не теряются.
Таким образом до сих пор сохраняется концепция разделения свертки на междуканальную точечную и внутриканальную при этом показываемая качество обучении сравнимо и иногда превосходит архитектуры, которые не концентрируются на уменьшении количества весов и вычислений.
Shake-ShakeNet
Последней архитектурой в списке мы выбрали Shake-ShakeNet. Данная идея предлагает новый механизм регуляризации, чтобы противостоять переобучению для получения наилучшей точности. Регуляризация в сети создаются при помощи использования особенных строительных блоков (ShakeBlock) с несколькими основными ветвями сверток (рис. 8).
Рисунок 8. Строительный блок Shake-ShakeNet [13]. Слева прямой проход при обучении. В центре обратное распространение ошибки. Справа работа сети при реальных расчётах и тестах.
Блок Shake-ShakeNet состоит из трех ветвей, а именно двух основных и одной остаточной обходной. На основных ветвях проводятся свертки после чего генерируется случайное число из равномерного распределения от 0 до 1. Результаты сверток двух ветвей складываются с коэффициентами и , после чего результат складывается с тензором из обходной ветви. Во время расчета градиентов функции ошибки также генерируется коэффициент отличающий от Обычно генерируется также либо случайным образом, либо задается строго . Таким образом каждый раз вносится изменение в данные, мешая сети легко выявить паттерны свойственные только тренировочной части датасета, заставляя искать более обобщенные закономерности. Во время стадии тестирования коэффициенты задаются строго равными математическому ожиданию распределения, откуда брались коэффициенты , то есть 0.5.
Данный механизм регуляризации действительно показывает впечатляющие результаты, однако требует изменения структуры нейронной сети, а также добавления дополнительных ветвей, что приводит к увеличению количества вычислений для прохода по сети. Однако из-за большого числа операций ввиду добавления вторых ветвей, возможно уменьшить глубину сети, тем самым уменьшив количество вычислений.
Глава 3. Разработка приложения
В этой главе приводится описание использованных при разработке методов, инструментов, технологий и особенности реализации приложения и средств разработки.
Инструменты разработки
Приложение разрабатывается в среде программирования IntelliJ IDEA и PyCharm. Данное программное обеспечение разработано компанией JetBrains. В качестве основного языка разработки был выбран Kotlin, разработанный JetBrains. Код для обучения и тестирования алгоритмов детекции и анализа лиц написан на Python 3.
Для контроля версий и изменений в проекте использовалась система контроля версий Git и сервис GitHub для хранения удаленных версий.
При разработке приложения использовалась библиотека OpenCV, предоставляющих весь функционал для работы с изображениями. Для создания API использовалась библиотека Spring Boot. При обучении нейронных сетей использовалась библиотека PyTorch 1.0, позволяющая обучать нейронные сети с использованием ускорения путем расчетов на GPU.
Подбор алгоритма обнаружения лица на изображении
Мы протестировали на собственном датасете оба алгоритма для детекции лиц. Результаты тестирования приведены ниже (табл. 1). Время приведено в секундах. Для обработки были предложены изображения разрешением 1920х1080 пикселей. Для измерения качества была взята мера отношения пересечения выявленной и фактической областей нахождения лица на картинке к их объединению (IoU).
Таблица 1
Результаты сравнения алгоритмов детекции лиц
Алгоритм |
IoU |
Время |
|
Haar Cascade |
97.21% |
0.32 |
|
HOG + SVM |
97.78% |
0.45 |
После проведения исследования было принято решение использовать в работе системы алгоритм, основанный на примитивах Хаара, поскольку работа алгоритма анализа гистограммы направленных градиентов занимает значительно больше время, однако выигрывает в точности незначительно. Пример работы выбранного алгоритма вы можете видеть ниже (рис. 9).
Рисунок 9. Пример работы алгоритма детекции лиц Haar Cascade.
Обучение нейронных сетей
Для обучения сетей был разработан набор скриптов на языке Python 3.7, использующий для обучения библиотеку PyTorch 1.0. для обучения с использованием GPU.
Для обучения требуется запустить скрипт main.py с параметрами командной строки, представляющие параметры обучения такие как learning rate, указать один из трех алгоритмов градиентного спуска (SGD, RMSprop, Adam), параметры изменения learning rate во время обучения, архитектуру сети из уже описанных выше, датасет для обучения, периодичность проведения валидации, а также количество потоков, которые будут читать изображения с диска для обучения (при указании количества потоков 0, чтение изображений будет производится в главном потоке исполнения скрипта). Скрипты способны производить обучение как на CPU, так и на GPU, однако предпочтительным является использование графического процессора. Ввиду этого скрипты при возможности выполняют обучение на GPU через технологию Cuda и Cudnn. Если это сделать невозможно, обучение будет производиться на CPU.
Во время обучения производится логирование для отслеживания результатов обучения. В самом начале в логи печатается информация об обучении, а точнее параметры обучения, а также выбор CPU или GPU как исполнителя расчётов для обучения. Обычно печатаются текущая эпоха, номер батча и текущая ошибка для этого батча. В ходе процесса валидации в логи печатаются F1 оценка, FAR и FRR, для тренировочной и тестовой части датасета, рисуются графики обучения, а также сохраняется текущее состояние модели с указание эпохи обучения.
Подбор архитектуры нейронной сети для анализа изображения лиц
При обучении сетей с различными способами ограничения пространства, был сделан вывод о том, что сети, обученные с помощью косинусной схожести, имеют слабую способность к генерализации, хуже различают лица людей, не участвовавших в обучении. Поэтому было решено тренировать сети с применением сигмоиды для ограничения значений выходных данных. Однако при применении и этого метода была выявлена проблема, состоящая в том, что требуется очень тонкая настройка параметра в Triplet loss, поскольку в процессе обучения параметры модели могут принять некорректные значения, такие как NaN и Inf. Ввиду вышесказанного было решено обучать модели без ограничений пространства.
Входные изображения лиц в ходе обучения и теста предобрабатывались и интерполировались до размера 192х192 перед входом в сеть. Пример входного изображения представлен ниже (рис. 10).
Рисунок 10. Пример входного изображения в сеть (разрешение 192x192).
Для сравнения применимости различных особенностей приведенных в первой главе архитектур искусственных нейронных сетей были построены три модели (по одной для каждой архитектуры) с приблизительно одинаковым количеством параметров, от 600 до 640 тысяч. Для SqueezeNet и MobileNetV2 сетей были вставлены dropout слои для регуляризации с параметром вероятности 0.1 для обнуления элемента тензора. Shake-ShakeNet сама по себе имеет регуляризацию, основанную на самой архитектуре, поэтому дополнительных средств для предотвращения переобучения для Shake-ShakeNet мы не использовали.
Перед просмотром архитектур сетей требуется внести некоторые пояснения по обозначениям. Слои располагаются в порядке исполнения, то есть выход с предыдущего является входом для следующего. Convkxk(input, output) - обозначение свертки с ядром kxk принимающее тензор с input каналами и возвращающее тензор с каналами output. FireBlock (input, output) - блок сети SqueezeNet, принимающий тензор с input каналами и возвращающий тензор с каналами output. Bottleneck (input, middle, output) - блок сети MobileNetV2, принимающий тензор с input каналами и возвращающий тензор с каналами output. Параметр middle указывает количество слоев, равное количеству слоев тензора внутри блока на внутриканальной (Dwise) свертке. ShakeBlock (input, output) - блок сети Shake-ShakeNet, принимающий тензор с input каналами и возвращающий тензор с каналами output. Архитектуры вы можете видеть ниже (табл. 2).
Таблица 2
Архитектуры сетей для эксперимента
Слой |
Архитектура |
|||
SqueezeNet |
MobileNetV2 |
Shake-ShakeNet |
||
1 input 3x192x192 |
Conv11x11 (3, 24) stride=3 BN, ReLU |
Conv11x11 (3, 24) stride=3 BN, ReLU |
Conv11x11 (3, 24) stride=3 BN, ReLU |
|
2 |
FireBlock (24, 24) |
Bottleneck (24, 48, 24) |
ShakeBlock(24, 24) stride=2 |
|
3 |
FireBlock (24, 64) |
Bottleneck (24, 48, 40) |
ShakeBlock(24, 64) stride=2 |
|
4 |
FireBlock (64, 64) |
Bottleneck (40, 96, 40) |
ShakeBlock(64, 128) stride=2 |
|
5 |
FireBlock (64, 96) |
Bottleneck (40, 96, 64) |
GlobalAvgPool |
|
6 |
FireBlock (96, 96) Dropout(0.1) |
Bottleneck (64, 128, 64) Dropout(0.1) |
FC 128 - > 128 |
|
7 |
FireBlock (96, 112) stride=2 |
Bottleneck (64, 128, 96) stride=2 |
||
8 |
FireBlock (112, 120) |
Bottleneck (96, 150, 96) |
||
9 |
FireBlock (120, 150) stride=2 |
Bottleneck (96, 150, 128) stride=2 |
||
10 |
FireBlock (150, 150) |
Bottleneck (128, 192, 128) |
||
11 |
FireBlock (150, 224) stride=2 |
Bottleneck (128, 240, 192) stride=2 |
||
12 |
FireBlock (224, 224) |
Bottleneck (192, 256, 192) |
||
13 |
FireBlock (224, 256) |
Bottleneck (192, 300, 256) Dropout(0.1) |
||
14 |
FireBlock (256, 256) Dropout(0.1) |
GlobalAvgPool |
||
15 |
GlobalAvgPool |
FC 256 - > 128 |
||
16 |
FC 256 - > 128 |
Далее все сети были обучены на датасете VGG Face 2 и затем оценены на тестовом подмножестве датасета LFW. Перед обучением и тестирование оба датасета были обработаны алгоритмом детекции лиц.
Shake-ShakeNet предполагает две главные стратегии регуляризации при обучении, поэтому сеть с архитектурой Shake-ShakeNet была обучена дважды.
Для обучения использовалась функция ошибки Triplet Loss. Как алгоритм обучения использовался стохастический градиентный спуск (SGD) с батчем размером 32. Начальное значение learning rate 0.025. Каждые 3 эпохи learning rate уменьшался на 0.01 от текущего значения. Всего обучение заняло 2001 эпоху. Обучение проводилось на GPU Nvidia GeForce GTX 1080 Ti с помощью библиотеки PyTorch 1.0 через технологию Cuda 10.0 (Cudnn 7.4). Для каждого случая было проведено два обучения, чтобы избежать эффекта потери точности от изначальной генерации неудачных весов модели.
Мы использовали идеи сиамских сетей, которые предполагают, что после обучения похожие объекты будут иметь маленькое расстояние после преобразований, проведенных моделью. Для сравнения моделей мы варьировали порог расстояния для того, чтобы прировнять FAR к значению 1.5% для удобства сравнения качества обучения. В таблице приведены лучшие результаты (табл. 3).
Таблица 3
Результаты обучения различных архитектур для датасета LFW
Архитектура |
FAR / FRR |
|
SqueezeNet |
1.42% / 8.38% |
|
MobileNetV2 |
1.36% / 7.82% |
|
Shake-ShakeNet () |
1.31% / 15.87% |
|
Shake-ShakeNet () |
1.37% / 16.93% |
По результатам можно сделать вывод, что наиболее успешные результаты дает архитектура MobileNetV2. Shake-ShakeNet на всем времени обучения показывал довольно медленную сходимость относительно остальных архитектур, что было вызвано сильной регуляризацией, которую дает это архитектура, а также небольшим количеством слоев в глубину. Однако добавление дополнительных слоев увеличило бы время количество операций. Скорость выполнения вычислений сети является тоже важным параметром при выборе модели, поэтому условия эксперимента изначально накладывали ограничения на количество весов сети, следовательно и количество требуемых вычислений. SqueezeNet не добилась результатов MobileNetV2. С большой вероятностью это вызвано тем, что идея уменьшения весов без серьезного падения точности лучше реализована в подходе MobileNetV2. Таким образом из обозреваемых архитектур наиболее подходящей для нашей задачи является архитектура MobileNetV2.
Реализация приложения
Развертывание сервиса
По результатам экспериментов для финального обучения на совмещенном датасете, состоящем из VGG Face2, Essex Face Dataset и подмножестве для обучения LFW была выбрана архитектура нейронной сети, использующая идеи MobileNetV2. Обучение проводилось с теми же параметрами, что были заявлены в эксперименте, однако количество эпох было увеличено до 3000. В итоге мы добились точности 96.52% на тестовом подмножестве датасета LFW. Также для детекции лиц на изображении будет использовать алгоритм Haar Cascade использующий примитивы Хаара. После обучения сети через библиотеку PyTorch веса и модель сети переводятся в формат ONNX. Данный формат позволяет описать граф архитектуры модели, а также указаны веса всех слоев сети, также библиотека OpenCV поддерживает исполнение работы нейронных сетей, сохраненных в этом формате.
Приложение является мини-сервисом, которые предлагается встраивать внутрь систем, благодаря которым можно получить доступ к камерам внутри компании. Перед началом работы сервер считывает веса модели детекции лиц, записанные в detection.xml формате, также считывает модель нейронной сети, записанная в файле Net.onnx. Оба файла должны находиться в директории откуда выполняется запуск сервиса. Далее сервис проверяет файлы в базе данных. Для работы бэкенда исполнения сети требуется подключение библиотеки OpenCV, поэтому она должна также находиться в директории запуска развертки сервиса.
Поскольку базы данных сотрудников также могут сильно различаться в различных организациях, равно как и системы, получающие изображения с камер компании, сервис предполагает загрузку фотографий и их нахождение на машине при развертке данного приложения. Ввиду вышесказанного был реализован следующий алгоритм работы. Приложение начинает исследовать папку DATABASE, лежащую в директории запуска сервиса. Она находит подпапки и фотографии в них, после выполняет на каждом изображении полный алгоритм работы сервиса по распознаванию вместе с выделением лиц на изображении. Полученные векторы хранятся сервером в оперативной памяти вместе с путями до фотографий. В дальнейшем именно с ними будут сравниваться преобразованные изображения пришедшие для распознавания.
После успешного выполнения всех предыдущих шагов сервер будет развернут. При возникновении ошибки сервер выведет информацию в лог о причине возникновения ошибки.
Запросы к сервису
В общем случае для использования сервиса требуется использовать get-запрос следующего вида:
http://localhost:8080/recognition?path={path}&d={d}
где path - обязательный параметр запроса с путем до фотографии; d - необязательный параметр, принимающий значение true в случае, если лицо было уже выделено до обращения к API сервиса и требуется пропустить модуль детекции лиц, по умолчанию false.
Если запрос обработан без ошибок, API приложения ответит кодом 200 ОК. В теле объекта возвращается флаг, информирующий об успешности детекции лица на фотографии, если применение модуля детекции было запрошено, а также отсортированный в порядке увеличения расстояния (уменьшения схожести) список топ-5 фотографий из базы данных с указание этого расстояния и id сотрудника. В случае, если невозможно прочесть изображение или файл не является файлом изображения, API ответить кодом 400 Bad Request. Пример ответа приведен ниже:
{
"results":
[
{"path":"path0","confidence":0.1,"id":"51"},
{"path":"path1","confidence":0.5,"id":"51"},
{"path":"path2","confidence":0.9,"id":"51"},
{"path":"path3","confidence":0.93,"id":"52"},
{"path":"path4","confidence":0.99,"id":"53"}
],
"detected":"OK"
}
Если обнаружить лицо на изображении не удалось, тело ответа будет следующим:
{
"results": null,
"detected":"NONE"
}
Во время работы сервер ведет логирование в файл. Логи включают в себя информацию о запросе и итогах его выполнения. Эту информацию в дальнейшем можно использовать для сбора статистики по работе системы распознавания.
Заключение
В рамках этой работы были разработаны скрипты для обучения нейронных сетей распознаванию личности на основе изображения лица с выбором нескольких архитектур сетей, параметров обучения, и приложение, обеспечивающее организацию системы распознавания личности на основе изображения лица.
Помимо этого, были изучены методы детекции объектов, в частности лиц, и их распознавания путем анализа схожести с помощью сиамских нейронных сетей. Также было проведено два исследования. Целью одного из них являлся выбор точного и быстрого алгоритма обнаружения лиц. Другое исследование ставило перед собой задачу выявить лучшую архитектурную идею для нейронных сетей для обучения задачи распознавания, обладающую высокой точностью обучения и малым количеством операций.
Дальнейшими направлениями работы над приложением стоит выделить реализацию возможности выполнения расчетов нейронной сети на GPU. Это позволит за приемлемое время выполнять вычисление глубоких нейронных сетей, которые способны показать более хорошие результаты распознавания. Другим направлением развития стоит отметить добавление в дальнейшем новых архитектур нейронных сетей, их обучение и выбор потенциально более точной модели. Это может позволить ускорить обработку запросов или также повысить качество работы алгоритма распознавания личности. Последним и самым простым направлением развития является долгое обучение модели. На примере Google, которые приводят в своей статьей цифры в три месяца обучения на огромном кластере, видно, что распознавание требует действительно долгого обучения и огромных мощностей для достижения state-of-the-art результатов.
...Подобные документы
Искусственные нейронные сети как одна из широко известных и используемых моделей машинного обучения. Знакомство с особенностями разработки системы распознавания изображений на основе аппарата искусственных нейронных сетей. Анализ типов машинного обучения.
дипломная работа [1,8 M], добавлен 08.02.2017Обзор существующих алгоритмов для обнаружения лиц. Выравнивание лица с помощью разнообразных фильтров. Использование каскадного классификатора Хаара для поиска лиц на изображении. Распознавание лиц людей с использованием локальных бинарных шаблонов.
дипломная работа [332,4 K], добавлен 30.09.2016Разработка алгоритма и программы для распознавания пола по фотографии с использованием искусственной нейронной сети. Создание алгоритмов: математического, работы с приложением, установки весов, реализации функции активации и обучения нейронной сети.
курсовая работа [1,0 M], добавлен 05.01.2013Оптико-электронная система идентификации объектов подвижного состава железнодорожного транспорта. Автоматический комплекс распознавания автомобильных номеров. Принципы и этапы работы систем оптического распознавания. Особенности реализации алгоритмов.
дипломная работа [887,3 K], добавлен 26.11.2013Обзор математических методов распознавания. Общая архитектура программы преобразования автомобильного номерного знака. Детальное описание алгоритмов: бинаризация изображения, удаление обрамления, сегментация символов и распознавание шаблонным методом.
курсовая работа [4,8 M], добавлен 22.06.2011Первое систематическое изучение искусственных нейронных сетей. Описание элементарного перцептрона. Программная реализация модели распознавания графических образов на основе перцептрона. Интерфейс программы, основные окна. Составление алгоритма приложения.
реферат [100,5 K], добавлен 18.01.2014Словесный, графический, табличный, программный способы представления алгоритма. Основные конструкции в любом алгоритмическом языке. Теория обнаружения, различения и оценивания сигналов. Радиолокационные системы обнаружения. Система распознавания образов.
презентация [4,8 M], добавлен 09.06.2015Обзор основных алгоритмов и методов распознавания лиц. Архитектура средств динамического отслеживания лиц в видеопоследовательности. Результаты тестирования на больших объемах видеоданных. Разработка алгоритмов и методов динамического отслеживания лиц.
дипломная работа [5,9 M], добавлен 20.07.2014Анализ физических предпосылок селекции движущихся малоразмерных наземных целей по спектральным параметрам. Разработка алгоритмов обнаружения МНЦ и повышения эффективности их распознавания в интересах радиолокационных станций разведки и целеуказания.
дипломная работа [830,3 K], добавлен 28.04.2009Методы предобработки изображений текстовых символов. Статистические распределения точек. Интегральные преобразования и структурный анализ. Реализация алгоритма распознавания букв. Анализ алгоритмов оптического распознавания символов. Сравнение с эталоном.
курсовая работа [2,1 M], добавлен 20.09.2014Понятие и особенности построения алгоритмов распознавания образов. Различные подходы к типологии методов распознавания. Изучение основных способов представления знаний. Характеристика интенсиональных и экстенсиональных методов, оценка их качества.
презентация [31,6 K], добавлен 06.01.2014Анализ существующих проблем и обзор библиотеки обработки изображений и алгоритмов общего назначения OpenCV. Особенности разработки и детальный анализ требований к программе. Основная логика ее работы и реализация. Трекинг лица и объекта по цвету.
дипломная работа [1,3 M], добавлен 26.06.2017Популярность алгоритмов машинного обучения для компьютерных игр. Основные техники обучения с подкреплением в динамической среде (компьютерная игра "Snake") с экспериментальным сравнением алгоритмов. Обучение с подкреплением как тип обучения без учителя.
курсовая работа [1020,6 K], добавлен 30.11.2016Анализ существующих алгоритмов распознавания режимов работы газотурбинного двигателя. Метод группового учета аргументов, метод Байеса. Применение технологий системного моделирования на этапе проектирования интеллектуальной системы распознавания режимов.
курсовая работа [1,4 M], добавлен 11.04.2012Подсистема анализа изображения отпечатка пальца в составе системы идентификации личности по отпечаткам пальцев на основе папиллярного узора для дальнейшего распознавания личности. Характеристика функциональных возможностей системы и код програмы.
дипломная работа [3,1 M], добавлен 01.07.2008Понятие системы распознавания образов. Классификация систем распознавания. Разработка системы распознавания формы микрообъектов. Алгоритм для создания системы распознавания микрообъектов на кристаллограмме, особенности его реализации в программной среде.
курсовая работа [16,2 M], добавлен 21.06.2014Основные понятия теории распознавания образов и ее значение. Сущность математической теории распознавания образов. Основные задачи, возникающие при разработке систем распознавания образов. Классификация систем распознавания образов реального времени.
курсовая работа [462,2 K], добавлен 15.01.2014Необходимость в системах распознавания символов. Виды сканеров и их характеристики. Оптимальное разрешение при сканировании. Программы распознавания текста. Получение электронного документа. FineReader - система оптического распознавания текстов.
презентация [469,2 K], добавлен 15.03.2015Анализ систем распознавания поведения лабораторных мышей. Классификация движений на основе построенных дескрипторов. Существующие методы обнаружения движения, разработка соответствующего программного обеспечения и оценка его эффективности, функции.
дипломная работа [1,1 M], добавлен 16.09.2017Нормальный алгоритм Маркова. Тезис Маркова и машина Тьюринга. Гипотеза теории алгоритмов. Алгоритмически неразрешимые проблемы. Задача эквивалентности двух слов в ассоциативном исчислении. Задача распознавания выводимости. Линейная оценка сложности.
методичка [57,0 K], добавлен 06.07.2009