Как это работает? Компьютерное зрение

29 мая 2014, 13:55

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

Пейзаж


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

Детектирование и распознавание


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

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

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

15 комментариев
Подписаться на комментарии к посту
Дармаев Тимур
29 мая 2014, 22:17
Очень интересно! Спасибо! Был бы рад увидеть больше подобных, в плане познавательности, статей.
Пишите ещё! Люблю когда приводятся конкретные остроумные алгоритмы для сложных задач.
Спасибо, очень познавательно :)
CHINAJINDIA.RF
31 мая 2014, 19:25
ПОЗНОВАТЕЛЬНО ! А КАК ВЕДЁТСЯ ПЛАЗМИЧЕСКАЯ ПЕРЕДАЧА ДАННЫХ ДО 10КМ В ЗАЩИЩЁННЫХ КАНАЛАХ БИО ИЗЛУЧАЮЩЕЙ ТРУБЫ ???
sayty-prodvizhenie2
1 июня 2014, 16:52
Ясно, надо строить дома в виде котов с ушами или в виде грузовиков с песком и анонимность дома гарантирована *старательно записывает лайфхак в блокнотик*.

"Для компьютера изображение — это набор пикселей, у каждого из которых есть своё значение яркости или цвета". Всегда казалось, что есть только цвет. Если что-то ярче, значит, это уже другой цвет 000000...FFFFFF.

"В умении распознавать человек, однако, пока оставляет компьютер далеко позади." довольно забавно будет читать данную фразу, если будут факты, что наша Вселенная смоделирована компьютером :)



sayty-prodvizhenie2,

вселенная моделировалась круглыми гениями, все во вселенной имеет сглаживание, никаких острых углов.
cobrascript,
вы все рачье
Интересно и познавательно! Спасибо!
gosha.zolotukhin2012
1 июня 2014, 21:19
Класс!
kuzmenko.ivan2002
4 июня 2014, 18:41
Круто!
Подход интересный (затратный), а если дом круглый и не с прямоугольными окнами :))
Можно поиск по картинкам сделать. Загружаешь картинку и поиск выдает сайты где она опубликована. Или поиск подобных картинок, нужны картинки с домами, загрузил и поиск выдает подобные загруженной.... отличная тма.
За статью спасибо, пишите больше подобных. Очень интересно
sadar.li,
Это уже сделано) blog.yandex.ru/post/71302/
Яндекс в свем амплуа! Как всегда гонит "умную пургу". Хоть бы настроили ИП6 на всех своих проектах, а то вместо этого пилят бюджеты на "распознаваниях картинок.
vanya-goncherenko
7 июля, 09:22
интересно а если одеть новогоднюю маску дед мороза что подумает компьютер это дед мороз или  неопознанный объект?)