Как камеры следят за нами на улицах российских городов. И как их обмануть. Современное компьютерное зрение. Задачи и технологии компьютерного зрения. Программирование компьютерного зрения на Python Unity3d системы компьютерного зрения примеры pdf

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

В данном курсе будут подробно разобраны решения основных задач компьютерного зрения: классификация изображений, распознавание и детекция объектов и сегментация изображений. Также мы затронем темы поиска изображений и распознавание рукописного ввода. В первой части курса слушатели познакомятся с классическими алгоритмами компьютерного зрения и разберут практические примеры с использованием библиотеки OpenCV. Вторая часть курса посвящена сверточным нейронным сетям. В этой части мы уделим особое внимание практическому применению нейронных сетей для задач компьютерного зрения. Также познакомимся с популярными библиотеками для работы с нейросетями такими как Keras и TensorFlow.

Преподаватель

Руслан Рахимов

Выпускник Московского Физико-Технического Института, Сколковского Института Науки и Технологий. Разработчик-исследователь в команде компьютерного зрения в компании Huawei.

Основные темы программы

  • Базовая теория: форматы, преобразование изображений с помощью фильтров, знакомство с библиотекой OpenCV
  • Выделение инвариантных признаков, стичинг и поиск похожих изображений
  • Сегментация изображений, детекция и трекинг объектов на изображении
  • Введение в нейронные сети
  • Сверточные сети для обработки изображений. Знакомство с фреймворком Keras
  • Обзор популярных архитектур сетей. Аугментация изображений и тюнинг обученных сетей
  • Обзор архитектур сетей для сегментации и детекции объектов на изображении.
  • Решение задачи распознавания рукописного ввода с помощью нейронных сетей

Начальные требования

Знание базовой программы курса «Высшая математика» и основ программирования (желательно Python).

Расписание занятий
С 25 сентября по 30 октября 2019 г.

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

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

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

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

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

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

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

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

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

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

Как видно, система машинного зрения включает следующие основные компоненты:

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

Применение в робототехнике

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

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

Точкой отсчета этого события может служить выпуск первой версии робота AIBO (Sony), который, несмотря на сравнительно высокую цену ($2500), пользовался большим спросом. Первая партия этих роботов в количестве 5000 экземпляров была раскуплена в Интернете за 20 мин., вторая партия (также в 1999 г.) - за 17 с, и далее темп продаж составлял порядка 20 000 экземпляров в год.

Также в конце 90-х появились в массовом производстве устройства, которые можно было бы назвать бытовыми роботами в полном смысле этого слова. Наиболее типичными автономными бытовыми роботами являются роботы-пылесосы. Первой моделью, выпущенной в 2002 г. фирмой iRobot, стала Roomba. Затем появились роботы-пылесосы, выпущенные фирмами LG Electronics, Samsung и др. К 2008 г. суммарные объемы продаж роботов-пылесосов в мире составили более полумиллиона экземпляров в год.

Показательно то, что первые роботы-пылесосы, оснащенные системами компьютерного зрения, появились лишь в 2006 г. К этому моменту использование мобильных процессоров типа семейства ARM с частотой 200 МГц позволяло добиться сопоставления изображений трехмерных сцен внутри помещений на основе инвариантных дескрипторов ключевых точек в целях сенсорной локализации робота с частотой порядка 5 кадров/с. Использование зрения для определения роботом своего местоположения стало экономически оправданным, хотя еще недавно для этих целей производители предпочитали использовать сонары.

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

Таким образом, современная робототехника требует решения широкого круга задач компьютерного зрения, включающего, в частности:

  • набор задач, связанных с ориентацией во внешнем пространстве (например, задачу одновременной локализации и картографирования - Simultaneous Localization and Mapping, SLAM), определением расстояний до объектов и т. д;
  • задачи по распознаванию различных объектов и интерпретации сцен в целом;
  • задачи по обнаружению людей, распознаванию их лиц и анализу эмоций.

Системы помощи водителю

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

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

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

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

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

Таким образом, для систем помощи водителю требуется решение разных задач компьютерного зрения, включая:

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

Мобильные приложения

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

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

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

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

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

Информационный поиск и обучение

Многие задачи дополненной реальности тесно связаны с информационным поиском (так что некоторые системы, такие как Google Goggles, сложно отнести к какой-то конкретной области), который представляет существенный самостоятельный интерес.

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

Как уже достигнутый прогресс, так и перспективы его продолжения видны на примере конкурса Large Scale Visual Recognition Challenge , в котором количество распознаваемых классов увеличилось с 20 в 2010 г. до 200 в 2013-м.

Распознавание объектов стольких классов сейчас немыслимо без привлечения методов машинного обучения в область компьютерного зрения. Одно из крайне популярных направлений здесь - сети глубокого обучения, предназначенные для автоматического построения многоуровневых систем признаков, по которым происходит дальнейшее распознавание. Востребованность этого направления видна по фактам приобретения различных стартапов такими корпорациями, как Google и Facebook. Так, корпорацией Google в 2013 г. была куплена фирма DNNresearch, а в начале 2014 г. - стартап DeepMind. Причем за покупку последнего стартапа конкурировал и Facebook (который до этого нанял такого специалиста, как Ян Ле Кун, для руководства лабораторией, ведущей разработки в области глубокого обучения), а стоимость покупки составила $400 млн. Стоит отметить, что и упоминавшийся метод , выигравший в конкурсе по распознаванию дорожных знаков, также основан на сетях глубокого обучения.

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

Заключение

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

Восстановление 3D-профиля листа металла, наблюдаемого с помощью микроскопа, методом «глубина из фокусировки»

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

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

  • Машинное обучение
  • Последние лет восемь я активно занимаюсь задачами, связанными с распознаванием образов, компьютерным зрением, машинным обучением. Получилось накопить достаточно большой багаж опыта и проектов (что-то своё, что-то в ранге штатного программиста, что-то под заказ). К тому же, с тех пор, как я написал пару статей на Хабре, со мной часто связываются читатели, просят помочь с их задачей, посоветовать что-то. Так что достаточно часто натыкаюсь на совершенно непредсказуемые применения CV алгоритмов.
    Но, чёрт подери, в 90% случаев я вижу одну и ту же системную ошибку. Раз за разом. За последние лет 5 я её объяснял уже десяткам людей. Да что там, периодически и сам её совершаю…

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

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

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


    Хы . Пока готовил статью натолкнулся на это . Очень хороший пример, на котором видны все потенциальные проблемы. Это и разные шрифты, это и нестабильный фон с тенями, это нерезкость и замятые углы. И самое главное. Заказчик предлагает идеализированную базу . Снятую на хороший фотоаппарат солнечным днём. Попробуйте посмотреть номера спортсменов на майках поискав поиском яндыкса.
    Хы.Хы За пару часов до публикации автор заказа внезапно вышел на меня сам с предложением взяться за работу, от которого я отказался:) Всё же это карма, добавить это в статью.

    2) Распознавание текста на фотографиях экранов телефонов


    3) И, мой любимый пример. Письмо на почту:
    " нужна программа в коммерческий сектор для распознания избражений.
    Алгоритм работы такой. оператор программы задает изображения предмета(-ов) в нескольких ракурсах и т.п.
    потом при появленини этого или максимально похожего изображения предмета, програма совершает требуемое/заданное действие.
    деталей естественно не могу пока рассказать.
    " (орфография, пунктуация сохранены)

    Хорошие
    Но не всё так плохо! Ситуация, когда задача ставится идеально, встречается часто. Моя любимая: «Нужно ПО для автоматического подсчета лосей на фото.
    Пример фото с лосями высылаю.»



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

    Мысль - вывод

    Единственный способ поставить задачу - набрать базу и определить методологию работы по этой базе. Что вы хотите получить? Какие границы применимости алгоритма? Без этого вы не только не сможете подойти к задаче, вы не сможете её сдать. Без базы данных заказчик всегда сможет сказать «У вас не работает такой-то случай. Но это же критичная ситуация! Без него я не приму работу».

    Как сформировать базу

    Наверное, всё это был приквел к статье. Настоящая статья начинается тут. Идея того, что в любой задаче CV и ML нужна база для тестирования - очевидна. Но как набрать такую базу? На моей памяти три-четыре раза первая набранная база спускалась в унитаз. Иногда и вторая. Потому что была нерепрезентативна. В чём сложность?
    Нужно понимать, что «сбор базы» = «постановка задачи». Собранная база должна:
    1. Отражать проблематику задачи;
    2. Отражать условия, в которых будет решаться задача;
    3. Формулировать задачу как таковую;
    4. Приводить заказчика и исполнителя к консенсусу относительно того, что было сделано.
    Время года
    Пару лет назад мы с другом решили сделать систему, которая могла бы работать на мобильниках и распознавать автомобильные номера.. На тот момент мы были весьма умудрённые в CV системах. Знали, что нужно собирать такую базу, чтобы плохо было. Чтобы посмотрел на неё и сразу понял все проблемы. Мы собрали такую базу:


    Сделали алгоритм, и он даже неплохо работал. Давал 80-85% распознавания выделенных номеров.
    Ну да… Только летом, когда все номера стали чистые и хорошие точность системы просела процентов на 5…
    Биометрия
    Достаточно много в своей жизни мы работали с биометрией ( , ). И, кажется, наступили на все возможные грабли при сборе биометрических баз.
    База должна быть собрана в разных помещениях. Когда аппарат для сбора базы стоит только у разработчиков - рано или поздно выяснится, что он завязан на соседнюю лампу.
    В биометрических базах нужно иметь 5-10 снимков для каждого человека. И эти 5-10 снимков должны быть сделаны в разные дни, в разное время дня. Подходя к биометрическому сканеру несколько раз подряд, человек сканируется одним и тем же способом. Подходя в разные дни - по-разному. Некоторые биометрические характеристики могут немножко меняться в течении суток.
    База, собранная из разработчиков нерепрезентативна. Они подсознательно считываются так, чтобы всё сработало…
    У вас новая модель сканера? А вы уверены, что он работает со старой базой?
    Вот глаза собранные с разных сканеров. Разные поля работы, разные блики, разные тени, разные пространственные разрешения, и.т.д.





    База для нейронных сетей и алгоритмов обучения
    Если у вас в коде используется какой-то алгоритм обучения - пиши пропало. Вам нужно формировать базу для обучения с его учётом. Предположим, в вашей задаче распознавания имеется два сильно отличающихся шрифта. Первый встречается в 90% случаев, второй в 10%. Если вы нарежете эти два шрифта в данной пропорции и обучитесь по ним единым классификатором, то с высокой вероятностью буквы первого шрифта будут распознаваться, а буквы второго нет. Ибо нейронная сеть/SVM найдёт локальный минимум не там, где распознаётся 97% первого шрифта и 97% второго, а там где распознаётся 99% первого шрифта и 0% второго. В вашей базе должно быть достаточно примеров каждого шрифта, чтобы обучение не ушло в другой минимум.

    Как сформировать базу при работе с реальным заказчиком

    Одна из нетривиальных проблем при сборе базы - кто это должен делать. Заказчик или исполнитель. Сначала приведу несколько печальных примеров из жизни.
    Я нанимаю вас, чтобы вы решили мне задачу!
    Именно такую фразу я услышал однажды. И блин, не поспоришь. Но вот только базу нужно было бы собирать на заводе, куда бы нас никто не пустил. А уж тем более, не дал бы нам монтировать оборудование. Те данные, которые давал заказчик были бесполезны: объект размером в несколько пикселей, сильно зашумлённая камера с импульсными помехами, которая периодически дергается, от силы двадцать тестовых картинок. На предложения поставить более хорошую камеру, выбрать более хороший ракурс для съёмки, сделать базу хотя бы на пару сотен примеров, заказчик ответил фразой из заголовка.
    У нас нет времени этим заниматься!
    Однажды директор весьма крупной компании (человек 100 штата + офисы во многих странах мира) предложил пообщаться. В продукте, который выпускала эта компания часть функционала была реализована очень старыми и очень простыми алгоритмами. Директор рассказал нам, что давно грезит о модификации данного функционала в современные алгоритмы. Даже нанимал две разных команды разработчиков. Но не срослось. Одна команда по его словам слишком теоретизировала, а вторая никакой теории не знала и тривиальщину делала. Мы решили попробовать.
    На следующий день нам выдали доступ к огромному массиву сырой информации. Сильно больше, чем я бы сумел просмотреть за год. Потратив на анализ информации пару дней мы насторожились спросили: «А что собственно вам нужно от новых алгоритмов?». Нам назвали десятка два ситуаций, когда текущие алгоритмы не работают. Но за пару дней я видел лишь одну-две указных ситуации. Просмотрев ещё пачку данных смог найти ещё одну. На вопрос: «какие ситуации беспокоят ваших клиентов в первую очередь?», - ни директор ни его главные инженеры не смогли дать ответа. У них не было такой статистики.
    Мы исследовали вопрос и предложили алгоритм решения, который мог автоматически собрать все возможные ситуации. Но нам нужно было помочь с двумя вещами. Во-первых, развернуть обработку информации на серверах самой фирмы (у нас не было ни достаточной вычислительной мощности, ни достаточного канала к тому месту, где хранились сырые данные). На это бы ушла неделя работы администратора фирмы. А во-вторых, представитель фирмы должен был классифицировать собранную информацию по важности и по тому как её нужно обрабатывать (это ещё дня три). К этому моменту мы уже потратили две-три недели своего времени на анализ данных, изучение статей по тематике и написание программ для сбора информации (никакого договора подписано на этот момент не было, всё делали на добровольных началах).
    На что нам было заявлено: «Мы не можем отвлекать на эту задачу никого. Разбирайтесь сами». На чём мы откланялись и удалились.
    Заказчик даёт базу
    Был и другой случай. На этот раз заказчик поменьше. А система, которой занимается заказчик разбросана по всей территории страны. Зато заказчик понимает, что мы базу не соберём. И из всех сил старается собрать базу. Собирает. Очень большую и разнообразную. И даже уверяет, что база репрезентативна. Начинаем работать. Почти доделываем алгоритм. Перед сдачей выясняется, что на собранной базе-то алгоритм работает. И условиям договора мы удовлетворяем. Но вот база-то была нерепрезентативной. В ней нет 2/3 ситуаций. А те ситуации, что есть - представлены непропорционально. И на реальных данных система работает сильно хуже.
    Вот и получается. Мы старались. Всё что обещали - сделали, хотя задача оказалась сильно сложнее, чем планировали. Заказчик старался. Потратил много времени на сбор базы.
    Но итоговый результат - хреновый. Пришлось что-то придумывать на ходу, хоть как-то затыкать дырки…
    Так кто должен сформировать базу?
    Проблема в том, что очень часто задачи компьютерного зрения возникают в сложных системах. Системах, которые делались десятки лет многими людьми. И разобраться в такой системе часто сильно дольше, чем решить саму задачу. А заказчик хочет чтобы разработка началась уже завтра. И естественно, предложение заплатить за подготовку ТЗ и базы сумму в 2 раза больше стоимости задачи, увеличить сроки в 3 раза, дать допуск к своим системам и алгоритмам, выделить сотрудника, который всё покажет и расскажет, вызывает у него недоумение.
    На мой взгляд решение любой задачи компьютерного зрения требует постоянного диалога между заказчиком и исполнителем, а так же желания заказчика сформулировать задачу. Исполнитель не видит всех нюансов бизнеса заказчика, не знает систему изнутри. Я ни разу не видел чтобы подход: «вот вам деньги, завтра сделайте мне решение» сработал. Решение-то было. Но работало ли оно как нужно?
    Сам я как огня пытаюсь шарахаться от таких контрактов. Работаю ли я сам, или в какой-то фирме, которая взяла заказ на разработку.
    В целом ситуацию можно представить так: предположим, вы хотите устроить свою свадьбу. Вы можете:
    Продумать и организовать всё самому от начала до конца. По сути данный вариант - «решать задачу самому».
    Продумать всё от начала до конца. Написать все сценарии. И нанять исполнителей для каждой роли. Тамаду для того чтобы гости не скучали, ресторан, чтобы все приготовили и провели. Написать основную канву для тамады, меню для ресторана. Этот вариант - это диалог. Обеспечить данными исполнителя, расписать всё, что требуется.
    Можно продумать большими блоками, не вникая в детали. Нанять тамаду, пусть делает, что делает. Не согласовывать меню ресторана. Заказать модельеру подбор платья, причёски, имиджа. Головной боли минимум, но когда начнутся конкурсы на раздевание, то можно понять что что-то было сделано не так. Далеко не факт, что сформулировав задачу в стиле «распознайте мне символ» исполнитель и заказчик поймут одно и то же.
    А можно всё заказать свадебному агентству. Дорого, думать совсем не надо. Но вот, что получится - уже не знает никто. Вариант - «сделайте мне хорошо». Скорее всего, качество будет зависеть от стоимости. Но не обязательно

    Есть ли задачи, где база не нужна

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

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

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

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

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

    Как учится компьютер

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


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

    Анализ изображения

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

    Сначала на картинке выявляют потенциально значимые места - то есть предполагаемые объекты или их границы. Это можно сделать несколькими способами. Рассмотрим, к примеру, алгоритм Difference of Gaussians (DoG, разность гауссиан). Он подразумевает, что исходную картинку несколько раз подвергают размытию по Гауссу, каждый раз используя разный радиус размытия. Затем результаты сравнивают друг с другом. Этот способ позволяет выявить на изображении наиболее контрастные фрагменты - к примеру, яркие пятна или изломы линий.

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

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

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

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

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

    Где используется компьютерное зрение

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

    Тем не менее, в ряде случаев компьютерное зрение может выступать серьёзным подспорьем. Один из таких случаев - это работа с лицами. Рассмотрим две связанные друг с другом, но разные по смыслу задачи: детектирование и распознавание.


    Часто бывает достаточно просто найти (то есть детектировать) лицо на фотографии, не определяя, кому оно принадлежит. Так работает фильтр « » в Яндекс.Картинках. Например, по запросу [формула-1] будут найдены главным образом фотографии гоночных болидов. Если же уточнить, что нас интересуют лица, Яндекс.Картинки покажут фотографии гонщиков.

    В иных ситуациях нужно не только отыскать лицо, но и узнать по нему человека («Это - Вася»). Такая функция есть в Яндекс.Фотках. При распознавании система берёт за образец уже размеченные фотографии с человеком, поэтому область поиска сильно сужается. Имея десять фотографий, на которых уже отмечен Вася, узнать его на одиннадцатом снимке будет несложно. Если Вася не хочет, чтобы его знали в лицо, он может запретить отмечать себя на фото.

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

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

    Лекция рассчитана на старшеклассников – студентов Малого ШАДа, но и взрослые смогут почерпнуть из нее много полезного.

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

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

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

    Компьютеру все это дается гораздо сложнее. И в первую очередь из-за проблемы накопления опыта. Нужно собрать огромное количество примеров, что пока что не очень получается.

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

    Мальчик или девочка?
    Представим, что нам нужно научиться с одного взгляда определять пол человека (одетого!) по фотографии. Для начала нужно определить факторы, которые могут указывать на принадлежность к тому или иному объекту. Кроме того, нужно собрать обучающее множество. Желательно, чтобы оно было репрезентативным. В нашем случае возьмем в качестве обучающей выборки всех присутствующих в аудитории. И попробуем на их основе найти отличительные факторы: например, длина волос, наличие бороды, макияжа и одежда (юбка или брюки). Зная, у какого процента представителей одного пола встречались те или иные факторы, мы сможем создать достаточно четкие правила: наличие тез или иных комбинаций факторов с некоей вероятностью позволит нам сказать, человек какого пола на фотографии.
    Машинное обучение
    Конечно, это очень простой и условный пример с небольшим количеством верхнеуровневых факторов. В реальных задачах, которые ставятся перед системами компьютерного зрения, факторов гораздо больше. Определять их вручную и просчитывать зависимости – непосильная для человека задача. Поэтому в таких случаях без машинного обучения не обойтись никак. Например, можно определить несколько десятков первоначальных факторов, а также задать положительные и отрицательные примеры. А уже зависимости между этими факторами подбираются автоматически, составляется формула, которая позволяет принимать решения. Достаточно часто и сами факторы выделяются автоматически.
    Изображение в цифрах
    Чаще всего для хранения цифровых изображений используется цветовое пространство RGB. В нем каждой из трех осей (каналов) присваивается свой цвет: красный, зеленый и синий. На каждый канал выделяется по 8 бит информации, соответственно, интенсивность цвета на каждой оси может принимать значения в диапазоне от 0 до 255. Все цвета в цифровом пространстве RGB получаются путем смешивания трех основных цветов.

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

    Но существуют и другие цветовые пространства. Весьма интересно в нашем контексте пространство HSV (Hue, Saturation, Value). В нем присутствует ось Value, обозначающая количество света. На него выделен отдельный канал, в отличие от RGB, где это значение нужно вычислять каждый раз. Фактически, это черно-белая версия изображения, с которой уже можно работать. Hue представляется в виде угла и отвечает за основной тон. От значения Saturation (расстояние от центра к краю) зависит насыщенность цвета.

    HSV гораздо ближе к тому, как мы представляем себе цвета. Если показать человеку в темноте красный и зеленый объект, он не сможет различить цвета. В HSV происходит то же самое. Чем ниже по оси V мы продвигаемся, тем меньше становится разница между оттенками, так как снижается диапазон значений насыщенности. На схеме это выглядит как конус, на вершине которого предельно черная точка.

    Цвет и свет
    Почему так важно иметь данные о количестве света? В большинстве случаев в компьютерном зрении цвет не имеет никакого значения, так как не несет никакой важной информации. Посмотрим на две картинки: цветную и черно-белую. Узнать все объекты на черно-белой версии не намного сложнее, чем на цветной. Дополнительной нагрузки для нас цвет в данном случае не несет никакой, а вычислительных проблем создает великое множество. Когда мы работаем с цветной версией изображения, объем данных, грубо говоря, возводится в степень куба.

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

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

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

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

    Дескрипторы и визуальные слова
    Существует много разных подходов к распознаванию.

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

    Один из наиболее распространенных способов называется Difference of Gaussians (DoG). Размывая картинку с разным радиусом и сравнивая получившиеся результаты, можно находить наиболее контрастные фрагменты. Области вокруг этих фрагментов и являются наиболее интересными.

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

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

    Дескрипторы можно записывать в числовом виде. Дескриптор можно представить в виде точки в многомерном массиве. У нас на иллюстрации двумерный массив. В него попали наши дескрипторы. И мы можем их кластеризовать – разбить на группы.

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

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

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

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

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