Сайт о телевидении

Сайт о телевидении

» » Распознавание изображений. Пару слов о распознавании образов

Распознавание изображений. Пару слов о распознавании образов



( , часть 6.1)

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

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

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

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

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

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

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

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

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

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

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

«Чистая» распознавалка должна справляться с перечисленными деформациями изображений сама по себе, без точных моделей и специально подготовленных тренировочных наборов. Распознавалка должна оперировать не изображением, как одномерным массивом, а должна понимать, что изображение состоит из двумерных фрагментов, содержание фрагмента может меняться, хотя смысл его остаётся тем-же (пример выше про изменение направления освещения или другое выражение лица), сам фрагмент может сместиться относительно центра изображения и относительно других кусочков (другой ракурс или смена выражения лица), комбинация кусочков может измениться (например, появились очки, изменилась причёска/борода на лице, хотя сам обладатель прежний).

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

Как именно распознавалки справляются с вышеперечисленными деформациями изображения.

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

  • итеративным, а не одномоментным снимком вход-выход, без построения длинных логических цепочек, поиск шёл «в ширину» с перебором локальных вариантов,
  • перебирались не все возможные варианты, а только самые реальные,
  • поиск прекращён по достижении оптимального критерия, оптимальность не гарантированная.


Идентификационные точки и расстояния: а) используемые при криминалистической фотоэкспертизе; б) наиболее часто применяемые при построении автоматизированных систем идентификации.

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

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


Эластичная деформация - совмещение пикселей на исходном и новом изображении





Оптический поток (неэластичная деформация). Отображение неизвестного изображения на известное, один и тот же человек. Слева направо: неизвестное изображение, изображение из базы данных, неизвестное изображение, в котором блоки заменены блоками из известного изображения.


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


Оптический поток (неэластичная деформация). Искажений решётки изображения при преобразовании одного изображения в другое. Слева - изображения одного человека, справа - разных.

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

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

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


Следующий способ называется Скрытые Марковские Модели (СММ). Суть её описана ниже мутновато (но кратко), зато пример с распознаванием изображений всё проясняет. Грубо говоря, СММ – это матрица вероятностей перехода между состояниями физической системы или сигнала. При попадании в какое-то состояние система выдаёт наружу одно из «значений» из набора «значений» этого состояния. У каждого «значения» этого состояния – своя вероятность выдачи. Причём какие-то «значения» могут быть характерны и для других состояний. Обычно мы не знаем, по каким состояниям проходит процесс сигнала или физической системы, а видим только выдаваемые наружу «значения», поэтому модели и называются скрытыми.



Схема Марковской модели, пример последовательности наблюдений O и последовательности состояний S

Для распознавания СММ применяются так. Каждый образ рассматривается как последовательность таких «значений». Для каждого класса вычисляется своя СММ. Потом для неизвестного образа запускаются все имеющиеся модели и среди них ищется та, которая выдаёт самую похожую последовательность «значений». Это называется задачей распознавания, и для её решения есть точная формула. Для задачи настройки моделей по имеющимся образам точных формул нет, но, как и в обучении нейронных сетей, есть эвристические (субоптимальные, разновидность градиентного спуска) методы.

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








Есть вариация обучения СММ, когда каждую СММ изначально «натаскивали» на все тренировочные образы, и только потом уточняли «своими», результат распознавания был выше. То есть, СММ обучилась тому, как выглядит и изменяется типичный объект «вообще», и потом донастроилась на вид и изменения конкретного объекта. И это произошло не за счёт знания точной и конкретной физической модели, а за счёт общей процедуры обучения и конкретных примеров из реального мира.

Получается, что внутри СММ (касается и свёрточных сетей, см. ниже) строится правдоподобная модель объекта. Это не та модель, которая получается, например, при трёхмерном реконструировании изображения, и не та модель, когда вручную определяют набор ключевых признаков и взаимосвязей между ними. СММ, наоборот, воссоздаёт не точную физическую модель, а правдоподобную модель. Модель, которая выдаёт похожее поведение объекта, но за счёт процессов, ничего не имеющих общего с реальной физикой объекта. При правильной настройке, физическая и правдоподобная модель совпадают в выдаваемых результатах, в тех условиях, в которых мы обучили правдоподобную модель. Но за пределами этих условий начинаются расхождения, иногда имеющие интересные эффекты. Например, человек легко узнаёт по карикатуре другого человека, хотя математически изображение карикатуры ну никак не сопоставимо с оцифрованным изображением лица человека. Легко найти и другие повседневные примеры. Человек в своих действиях руководствуется не точными законами физики, а «наивной» физикой, которая действует в бытовых условиях, но совершенно неприменима, когда мы выходим за границы этих условий. Похожее можно найти и в логическом, и в образном мышлении, отсюда происходят фантазии и творчество, посмотрев на которые, человек может сопоставить им или прочувствовать настоящие физические процессы, которые с научной точки зрения такими фантазиями ну никак не могут быть описаны. И кстати, для таких распознавалок нетрудно обратить их «вспять», чтобы по заданному объекту они выдавали вариации его изменений. Естественно, кроме реальных образов, мы ещё получим кучу «фантазий» от распознавалки, странных на наш взгляд. На этом же основано и определение ключевых участков изображения – тех участков, которые вносят наибольший вклад в распознавание. Но к фантазиям и правдоподобным моделям мы ещё вернёмся, продолжим теперь про распознавание изображений.

Таким образом, СММ – это почти идеальная распознавалка изображений:

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

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



Выход нейронной сети при распознавании - чётко видна разница между распознанным классом (s11) и всеми остальными. Марковские модели так не умеют.

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

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



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



Архитектура свёрточной нейронной сети. Свёрточные (convolutional) и усредняющие (subsampling) слои.

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

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

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

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


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

Второй вариант – веса для карт признаков настраиваются как веса нейронов при обратном распространении ошибки. То есть с выхода сети поступает настройка, которая говорит, какие признаки надо вытаскивать из изображения, чтобы получить результат. В оригинальной работе по свёрточным сетям утверждается, что такая настройка проста, но я бы не стал верить авторам наслово, потому что здесь есть масса вариантов, и далеко не каждый из них даст что-то хорошее. В оригинальном варианте свёрточная сеть обучается и работает очень быстро, и даёт точность, близкую к СММ (но всё-же меньшую). СММ же, при своей потрясающей точности, обучаются очень долго.

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

Из описания архитектуры свёрточных сетей, посмотрим, что они могут делать:

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

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

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

Итог таков. При распознавании изображений сначала производится предобработка изображения, потом вручную и/или автоматически извлекаются признаки, эти признаки подаются на любую распознавалку, самая сложная из которых – это нелинейные разделяющие поверхности в пространстве признаков. Этап извлечения признаков может происходить с привлечением физических моделей, для реконструкции сущности объекта, но это уже точная математика. В правила распознавания может быть заложена логика человека-эксперта в данной области. Другой вид распознавалок (деформации изображения, Марковские модели, свёрточные сети) пытается эвристическими методами воссоздать правдоподобную модель предметной области и наложить её на неизвестный образ.

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


Что такое технология распознавания изображений? Распознавание изображений (некоторые также называют «компьютерным зрением») это технология, которая создана получать, обрабатывать, анализировать, и понимать изображения реального мира, с целью предоставить цифровую или символьную информацию. Что вы сказали? Не беспокойтесь. Мы понимаем, что это сложно. Позвольте перефразировать: когда вы загружаете свою фотографию, или фотографию ваших друзей на Facebook, все лица будут распознаны и пользователи будут автоматически отмечены: это и называется распознаванием изображений. Хорошо, это звучит намного понятнее Прекрасно! Потому что сейчас будет еще сложнее… Компьютерное зрение – очень широкая область компьютерных наук, так как сюда вовлечено множество аспектов, таких как машинное обучение, интеллектуальный анализ данных, расширение базы знаний, распознавание шаблонов, и другие. Исследования в данной области привели к технологиям, которые имитируют человеческое зрение. И для того, чтобы создать программное обеспечение, способное видеть, вам для начала понадобится пара линз. Что вы имеете в виду? Я имею в виду, что для того, чтобы обработать изображение, вам для начала нужно его снять с помощью камеры. Затем, программное обеспечение извлекает из него необходимую информацию, и после этого, совершает действия, основываясь на полученных данных. До недавних пор, цифровые камеры были неприлично дорогими, имели очень низкое разрешение, и распознавание изображений было невозможно совершать в режиме реального времени. Но с приходом мобильных телефонов и высокоскоростных камер, возможности стали безграничны. Например, знали ли вы, что несколько лет назад Японская компания создала робота, который мог играть в «камень, ножницы, бумага» и побеждать в 10 из 10 случаях. Это невозможно… Я так не думаю. Вот ссылка на это видео. Робот использует высокоскоростные камеры для распознавания движения руки человека. Анализируя шаблоны движения руки со скоростью 500 кадров в секунду, робот способен немедленно реагировать в ответ, и в результате выигрывать. Чтобы этого добиться, камера захватывает изображение очертаний руки, формирует объект и отравляет информацию программному обеспечению, которое распознает шаблон и генерирует реакцию робота в ответ. Объект руки человека формируется 60 мс, и затем робот выполняет все вышеперечисленное за 1 мс. Хорошо, но я думал, что речь пойдет о мобильных … Не беспокойтесь, мы дойдем и до этого. Одной из самых вызывающих и перспективных областей является обработка и распознавание изображений для имитации человеческого зрения: восприятия изображения, обработки и дальнейшей реакции. Это именно то, что делает робот на предыдущем примере: он воспринимает изображение путем захвата картинки, понимает, что делает человек, и реагирует, выполняя ответный ход. Конечно, мы, разработчики программного обеспечения, более заинтересованы в той части программы, где происходит распознавание шаблона. Так как же воспринимающая часть на самом деле работает? Ответ весьма прост - «математика». Самое важное направление в алгоритмах распознавания шаблонов - вероятностная классификация. Когда изображение сравнивается с набором других сохраненных изображений, задается значение (вероятность) для каждого другого изображения, с которым оно совпадает. Комбинируя несколько алгоритмов вероятностных классификаций, которые применяются к тому же набору изображений, называемых «ансамблем», предоставляется итоговая оценка для каждого изображения, которая затем используется программой для предположения, на какие изображение это похоже. Как вы могли представить, это довольно сложно для мобильного устройства. Вы можете подумать, что мощность процессора является проблемой. Так и есть! И самое тонкое место - база данных изображений, с которыми сравнивается оригинал. На примере робота, о котором уже говорилось, Вы можете иметь только ограниченное количество изображений (камень, ножницы, бумага), с которыми можно работать, но в примере с распознаванием изображений в Facebook, невозможно сохранять лица каждого человека, кто зарегистрирован в социальной сети на мобильном устройстве (это не совсем тот способ, по которому работает данная функция; Facebook сохраняет уникальный хэш для каждого человека, используя определенные характеристики лица как основу, но пример был предоставлен исключительно для того, чтоб объяснить идею). Чтоб решить эту и другие проблемы, распознавание изображений обычно выполняется на стороне сервера, где процессорная мощность, либо место для хранения данных не представляет проблем. Мобильные устройства могут просто отправлять изображение, и нейронная сеть или оборудование обработают запрос. Одну минуту! Я видел, как это работает на мобильных устройствах без соединения с интернетом Да, но тут только часть правды. Мобильному устройству все еще необходимо отправлять изображения на сервер, также как и серверу необходимо хранить их. Как только изображения окажутся там, сервер обработает изображение, сгенерирует намного меньший хэш, и вернет обратно в приложение. И затем, к примеру, вы можете зайти в режим полета и увидеть изображение на камере телефона, сравнение будет сделано в режиме оффлайн. Спасибо за все эти объяснения. Теперь поговорим о деле А, так вы хотите знать, как применить распознавание изображений на деле? Конечно, для вас не станет сюрпризом, что у распознавания изображений есть потенциал произвести революцию во всем мире. В области здравоохранения, например, IBM начали использовать технологию распознавания изображений для обработки большого количества медицинских данных. Это может помочь врачам диагностировать болезни быстрее и с большей точностью. Baidu разработали прототип DuLight: продукт для распознавания объектов, который поможет слепым «видеть» с помощью снимков всего, что их окружает и передавая обработанные данные через наушник. Однако, на продукцию в области искусственного интеллекта обычно налагаются этические и законодательные ограничения. Возьмем, к примеру, автомобильную индустрию и беспилотные автомобили от Google. Технология готова, но предстоит еще долгий процесс, прежде чем эти машины появятся на рынке. Хорошо, но я не планирую строить беспилотный автомобиль – что может технология распознавания изображений дать моему бизнесу? Честно говоря, многое! Существует множество мелкомасштабных методов применения технологии распознавания изображений для получения преимуществ. Так как мы говорим о мобильных устройствах, давайте рассмотрим некоторые примеры использования технологии распознавания изображений в мобильной связи. Одним из крупнейших игроков в этой области является Blippar: платформа для визуального обнаружения, которая позволяет пользователям сканировать объекты и получать их описание, что делает физический мир интерактивным игровым полем. Для любителей растений существует LeafSnap, для любителей вина - Delectable. Но существуют и такие маркетинговые компании, такие как Makeup Genius, TrackMyMaccas, и SnapFindShop, на которые стоит взглянуть. Эти брэнды применяют распознавание изображений для изучения социального обмена и привлечения пользователей. Так вы говорите, что технология распознавания изображений может помочь мне привлечь клиентов? Так как мы говорим о мобильных технологиях, слово «привлечение» так или иначе, всплыло бы в течение разговора. Мир приложений вращается вокруг привлечения пользователей: если вы не преуспели в этом, то есть шанс, что пользователь просто никогда не вернется к использованию вашего приложения. Распознавание изображений даст вашему приложению огромные возможности для расширения, поскольку технология позволит Вам выйти за пределы мобильного устройства в физический мир пользователя. Ваше приложение сможет предоставить что-то более материальное, что позволит создать сильную эмоциональную связь. И так как эмоции тесно связаны с памятью, у вас есть шанс создать незабываемое впечатление о Вашем бизнесе. http://www.softacom.ru/ru_imagesrecognition

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

Рассмотрим пример распознавания простых объектов на основе набора признаков. При реализации метода в качестве основных будем использовать две функции bwlabel и imfeature, которые встроены в приложение Image Processing Toolbox.

Сначала считаем исходное тестовое изображение в рабочее пространство Matlab

L=imread("test_image.bmp");

и визуализируем его

Figure, imshow(L);

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

Функции bwlabel и imfeature в качестве исходных данных используют полутоновые двумерные изображения. Поскольку изображение test_image.bmp было сформировано как бинарное, но сохранено в формате bmp, то из трехмерной матрицы изображения L, которая содержит три идентичных цветовых шара, необходимо выделить один из шаров, например, первый.

L=L(:,:,1);

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

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

Size(L);

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

Bwlabel(L,8);

Кроме того, в функции bwlabel указывается еще один параметр – значение связности.

Далее приступаем к вычислению признаков объектов, которые отмечены в матрице номеров объектов L. Рассмотрим этот вопрос более подробно. Значения признаков возвращаются в массиве структур feats. Как было отмечено ранее, при распознавании объектов могут использоваться любые наборы признаков.

В рамках этого примера применим наиболее наглядный статистический подход к классификации объектов на основе морфометрических признаков. К основным морфометрическим признакам относятся коэффициенты формы:

  1. ‘solidity’ – коэффициент выпуклости: равен отношению площади к выпуклой площади объекта. Представляется числом в диапазоне (0,1].
  2. ‘extent’ – коэффициент заполнения: равен отношению площади объекта к площади ограничивающего прямоугольника. Представляется числом в диапазоне (0,1].
  3. ‘eccentricity’ – эксцентриситет эллипса с главными моментами инерции, равными главным моментам инерции объекта. Представляется числом в диапазоне (0,1].

Поскольку в данном примере используется тестовое изображение объектов простой формы, то из перечисленных признаков в программной реализации будем использовать только коэффициент заполнения ‘extent’. Как было сказана ранее, параметр ‘extent’ определяется отношением площади объекта к площади ограничивающего прямоугольника. Для круга этот параметр будет равен , а для квадрата – 1. Но эти данные приведены для случая, когда круг и квадрат имеют идеальную форму. Если форма круга или квадрата искажена, то значения параметра ‘extent’ также могут отличаться от приведенных выше значений. Поэтому коэффициенты формы могут вычисляться с некоторой погрешностью. Таким образом, вводя некоторую погрешность в коэффициент формы, допускаются некоторые ее искажения. Причем значение погрешности пропорционально степени искажения. Однако слишком большое значение погрешности может привести к неправильному распознаванию объектов.

Дополнительно также будем определять центр масс объекта с помощью опции ‘centroid’.

Feats=imfeature(L,"Centroid","Extent",8);

Перепишем значения признаков из массива структур feats в отдельные массивы:

Extent=zeros(num); CentX=zeros(num); CentY=zeros(num); for i=1:1:num; Extent(i)=feats(i).Extent; CentX(i)=feats(i).Centroid(1); CentY(i)=feats(i).Centroid(2); end;

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

Krug=imread("krug.bmp"); Kvadrat=imread("kvadrat.bmp"); d=0.15; % погрешность коэффициента формы for i=1:num; L(round(CentY(i)):round(CentY(i))+1,round(CentX(i)):round(CentX(i))+1)=0; if (abs(Extent(i)-0.7822)

Представим результат распознавания

Figure, imshow(L);

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

Выполнен обзор нейросетевых методов, используемых при распознавании изображений. Нейросетевые методы - это методы, базирующиеся на применении различных типов нейронных сетей (НС). Основные направления применения различных НС для распознавания образов и изображений:

  • применение для извлечение ключевых характеристик или признаков заданных образов,
  • классификация самих образов или уже извлечённых из них характеристик (в первом случае извлечение ключевых характеристик происходит неявно внутри сети),
  • решение оптимизационных задач.

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

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

Опишем применение НС для распознавания изображений, отмечая возможности применения для распознавания человека по изображению лица.

1. Многослойные нейронные сети

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

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

Рис. 1. Многослойная нейронная сеть для классификации изображений. Нейрон с максимальной активностью (здесь первый) указывает принадлежность к распознанному классу.

МНС так же используется для непосредственной классификации изображений – на вход подаётся или само изображение в каком-либо виде, или набор ранее извлечённых ключевых характеристик изображения, на выходе нейрон с максимальной активностью указывает принадлежность к распознанному классу (рис. 1). Если эта активность ниже некоторого порога, то считается, что поданный образ не относится ни к одному из известных классов. Процесс обучения устанавливает соответствие подаваемых на вход образов с принадлежностью к определённому классу. Это называется обучением с учителем. В применении к распознаванию человека по изображению лица, такой подход хорош для задач контроля доступа небольшой группы лиц. Такой подход обеспечивает непосредственное сравнение сетью самих образов, но с увеличением числа классов время обучения и работы сети возрастает экспоненциально. Поэтому для таких задач, как поиск похожего человека в большой базе данных, требует извлечения компактного набора ключевых характеристик, на основе которых можно производить поиск.

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

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

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

В классической МНС межслойные нейронные соединения полносвязны, и изображение представлено в виде одномерного вектора, хотя оно двумерно. Архитектура свёрточной НС направлена на преодоление этих недостатков. В ней использовались локальные рецепторные поля (обеспечивают локальную двумерную связность нейронов), общие веса (обеспечивают детектирование некоторых черт в любом месте изображения) и иерархическая организация с пространственными подвыборками (spatial subsampling). Свёрточная НС (СНС) обеспечивает частичную устойчивость к изменениям масштаба, смещениям, поворотам, искажениям. Архитектура СНС состоит из многих слоёв, каждый из которых имеет несколько плоскостей, причём нейроны следующего слоя связаны только с небольшим числом нейронов предыдущего слоя из окрестности локальной области (как в зрительной коре человека). Веса в каждой точке одной плоскости одинаковы (свёрточные слоя). За свёрточным слоем следует слой, уменьшающий его размерность путём локального усреднения. Затем опять свёрточный слой, и так далее. Таким образом, достигается иерархическая организация. Более поздние слои извлекают более общие характеристики, меньше зависящие от искажений изображения. Обучается СНС стандартным методом обратного распространения ошибки. Сравнение МНС и СНС показало существенные преимущества последней как по скорости, так и по надёжности классификации. Полезным свойством СНС является и то, что характеристики, формируемые на выходах верхних слоёв иерархии, могут быть применимы для классификации по методу ближайшего соседа (например, вычисляя евклидово расстояние), причём СНС может успешно извлекать такие характеристики и для образов, отсутствующих в обучающем наборе. Для СНС характерны быстрая скорость обучения и работы. Тестировании СНС на базе данных ORL, содержащей изображения лиц с небольшими изменениями освещения, масштаба, пространственных поворотов, положения и различными эмоциями, показало приблизительно 98% точность распознавания, причём для известных лиц, предъявлялись варианты их изображений, отсутствующие в обучающем наборе. Такой результат делает эту архитектуру перспективной для дальнейших разработок в области распознавания изображений пространственных объектов.

МНС применяются и для обнаружения объектов определённого типа. Кроме того, что любая обученная МНС в некоторой мере может определять принадлежность образов к “своим” классам, её можно специально обучить надёжному детектированию определённых классов. В этом случае выходными классами будут классы принадлежащие и не принадлежащие к заданному типу образов. В применялся нейросетевой детектор для обнаружения изображения лица во входном изображении. Изображение сканировалось окном 20х20 пикселей, которое подавалось на вход сети, решающей принадлежит ли данный участок к классу лиц. Обучение производилось как с использованием положительных примеров (различных изображений лиц), так и отрицательных (изображений, не являющихся лицами). Для повышения надёжности детектирования использовался коллектив НС, обученных с различными начальными весами, вследствие чего НС ошибались по разному, а окончательное решение принималось голосованием всего коллектива.

Рис. 2. Главные компоненты (собственные лица) и разложение изображения на главные компоненты.

НС применяется так же для извлечения ключевых характеристик изображения, которые затем используются для последующей классификации. В , показан способ нейросетевой реализации метода анализа главных компонент. Суть метода анализа главных компонент заключается в получении максимально декореллированных коэффициентов, характеризующих входные образы. Эти коэффициенты называются главными компонентами и используются для статистического сжатия изображений, в котором небольшое число коэффициентов используется для представления всего образа. НС с одним скрытым слоем содержащим N нейронов (которое много меньше чем размерность изображения), обученная по методу обратного распространения ошибки восстанавливать на выходе изображение, поданное на вход, формирует на выходе скрытых нейронов коэффициенты первых N главных компонент, которые и используются для сравнения. Обычно используется от 10 до 200 главных компонент. С увеличением номера компоненты её репрезентативность сильно понижается, и использовать компоненты с большими номерами не имеет смысла. При использовании нелинейных активационных функций нейронных элементов возможна нелинейная декомпозиция на главные компоненты. Нелинейность позволяет более точно отразить вариации входных данных. Применяя анализ главных компонент к декомпозиции изображений лиц, получим главные компоненты, называемые собственными лицами (holons в работе ), которым так же присуще полезное свойство – существуют компоненты, которые в основном отражают такие существенные характеристики лица как пол, раса, эмоции. При восстановлении компоненты имеют вид, похожий на лицо, причём первые отражают наиболее общую форму лица, последние – различные мелкие отличия между лицами (рис. 2). Такой метод хорошо применим для поиска похожих изображений лиц в больших базах данных. Показана так же возможность дальнейшего уменьшения размерности главных компонент при помощи НС . Оценивая качество реконструкции входного изображения можно очень точно определять его принадлежность к классу лиц.

Я продолжаю серию статей посвящённую тематике pattern recognition, computer vision и machine learning. Сегодня я вам представляю обзор алгоритма, который носит название eigenface.

В основе алгоритма лежит использование фундаментальных статистических характеристик: средних (мат. ожидание) и ковариационной матрицы ; использование метода главных компонент . Мы также коснёмся таких понятий линейной алгебры, как собственные значения (eigenvalues) и собственные вектора (eigenvectors) (wiki: , eng). И вдобавок, поработаем в многомерном пространстве.
Как бы страшно всё это не звучало, данный алгоритм, пожалуй, является одним из самых простых рассмотренных мною, его реализация не превышает нескольких десятков строк, в тоже время он показывает неплохие результаты в ряде задач.


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

Инструментарий

По сложившейся, в рамках моего скромного опыта, методике, после обдумывания какого-либо алгоритма, но перед его реализацией на С/С++/С#/Python etc., необходимо быстро (насколько это возможно) создать математическую модель и опробовать её, что-нибудь посчитать. Это позволяет внести необходимые коррективы, исправить ошибки, обнаружить то, что не было учтено при размышлении над алгоритмом. Для этого всего я использую MathCAD . Преимущество MathCAD в том, что наряду с огромным количеством встроенных функций и процедур, в нём используется классическая математическая нотация. Грубо говоря, достаточно знать математику и уметь писать формулы.

Краткое описание алгоритма

Как и любой алгоритм из серии machine learning, eigenface необходимо сначала обучить, для этого используется обучающая выборка (training set), представляющая собой изображения лиц, которые мы хотим распознать. После того как модель обучена, мы подадим на вход некоторое изображение и в результате получим ответ на вопрос: какому изображению из обучающей выборки с наибольшей вероятностью соответствует пример на входе, либо не соответствует никакому.

Задача алгоритма представить изображение как сумму базисных компонент (изображений):

Где Ф i – центрированное (т.е. за вычетом среднего) i-ое изображение исходной выборки, w j представляют собой веса и u j собственные вектора (eigenvectors или, в рамках данного алгоритма, eigenfaces).

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

Обучающую выборку необходимо спроецировать в новое пространство (причём пространство, как правило, гораздо больше размерности, чем исходное 2х мерное изображение), где каждая размерность будет давать определённый вклад в общее представление. Метод главных компонент позволяет найти базис нового пространство таким образом, чтобы данные в нём располагались, в некотором смысле, оптимально. Чтобы понять, просто представьте, что в новом пространстве некоторые размерности (aka главные компоненты или собственные вектора или eigenfaces) будут «нести» больше общей информации, тогда как другие будут нести только специфичную информацию. Как правило, размерности более высокого порядка (отвечающие меньшим собственным значениям) несут гораздо меньше полезной (в нашем случае под полезной понимается нечто, что даёт обобщённое представление о всей выборке) информации, чем первые размерности, соответствующие наибольшим собственным значениям. Оставляя размерности только с полезной информацией, мы получаем пространство признаков, в котором каждое изображение исходной выборки представлено в обобщённом виде. В этом, очень упрощённо, и состоит идея алгоритма.
Далее, имея на руках некоторое изображение, мы можем отобразить его на созданное заранее пространство и определить к какому изображению обучающей выборки наш пример расположен ближе всего. Если он находится на относительно большом расстоянии от всех данных, то это изображение с большое вероятностью вообще не принадлежит нашей базе.

За более подробным описанием я советую обращаться к списку External links википедии.

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

Создание модели

Для составления обучающей выборки использовалась Olivetti Research Lab"s (ORL) Face Database . Там имеются по 10 фотографий 40 различных людей:

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

FaceNums задаёт вектор номеров лиц, которые будут использоваться в обучении. varNums задаёт номер варианта (согласно описанию базы у нас 40 директорий в каждой по 10 файлов изображений одного и того же лица). Наша обучающая выборка состоит из 4х изображений.
Далее мы вызываем функцию ReadData. В ней реализуется последовательное чтение данных и перевод изображения в вектор (функция TwoD2OneD):

Таким образом на выходе имеем матрицу Г каждый столбец которой является «развёрнутым» в вектор изображением. Такой вектор можно рассматривать как точку в многомерном пространстве, где размерность определяется количеством пикселей. В нашем случае изображения размером 92х112 дают вектор из 10304 элементов или задают точку в 10304-мерном пространстве.

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

Функция AverageImg считает и возвращает вектор средних. Если мы этот вектор «свернём» в изображение, то увидим «усреднённое лицо»:

Функция Normalize вычитает вектор средних из каждого изображения и возвращает усреднённую выборку:

3. Следующий шаг это вычисление собственных векторов (они же eigenfaces) u и весов w для каждого изображения в обучающей выборке. Другими словами, это переход в новое пространство.

Вычисляем ковариационную матрицу, потом находим главные компоненты (они же собственные вектора) и считаем веса. Те, кто познакомятся с алгоритмом ближе, въедут в математику. Функция возвращает матрицу весов, собственные вектора и собственные значения. Это все необходимые для отображения в новое пространство данные. В нашем случае, мы работаем с 4х мерным пространством, по числу элементов в обучающей выборке, остальные 10304 - 4 = 10300 размерности вырождены, мы их не учитываем.

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

Собственные значения на самом деле показывают дисперсию по каждой из осей главных компонент (каждой компоненте соответствует одна размерность в пространстве). Посмотрите на правое выражение, сумма данного вектора = 1, а каждый элемент показывает вклад в общую дисперсию данных. Мы видим, что 1 и 3 главные компоненты дают в сумме 0.82. Т.е. 1 и 3 размерности содержат 82% всей информации. 2ая размерность свёрнута, а 4ая несёт 18% информации и нам она не нужна.

Распознавание

Модель составлена. Будем тестировать.

Мы создаём новую выборку из 24 элементов. Первые 4ре элемента те же, что и в обучающей выборке. Остальные это разные варианты изображений из обучающей выборки:

Далее загружаем данные и передаём в процедуру Recognize. В ней каждое изображение усредняется, отображается в пространство главных компонент, находятся веса w. После того как вектор w известен необходимо определить к какому из существующих объектов он ближе всего расположен. Для этого используется функция dist (вместо классического евклидова расстояния в задачах распознавания образов лучше применять другую метрику: расстояние Махалонобиса). Находится минимальное расстояние и индекс объекта к которому данное изображение расположено ближе всего.

На выборке из 24 показанных выше объектов эффективность классификатора 100%. Но есть один ньюанс. Если мы подадим на вход изображение, которого нет в исходной базе, то всё равно будет вычислен вектор w и найдено минимальное расстояние. Поэтому вводится критерий O, если минимальное расстояние < O значит изображение принадлежит к классу распознаваемых, если минимальное расстояние > O, то такого изображения в базе нет. Величина данного критерия выбирается эмпирически. Для данной модели я выбрал O = 2.2.

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

Из 24 образцов имеем 4 ложных срабатывания. Т.е. эффективность составила 83%.

Заключение

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

Например, у нас в качестве классификатора применяется простой distance classifier. Однако мы могли бы применить более совершенный алгоритм классификации, например