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

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

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

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

Рекомендуем по этой теме:
6996
Разведочный информационный поиск

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

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

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

В середине 2000-х алгоритмы высокоуровневого зрения работали плохо. Компьютер не мог отличить фотографию кошки от фотографии собаки, то есть самые лучшие алгоритмы работали почти как подбрасывание монетки. Десять лет спустя студент, прошедший курс компьютерного зрения и глубинного обучения, сможет за несколько дней создать систему, натренировать ее, и эта система будет отличать снимок кошки от снимка собаки с точностью до 99%. Это происходит за счет того, что теперь у нас есть программы, называемые сверточными нейронными сетями, которым можно подать на вход изображение, и эта программа с очень хорошей точностью скажет, изображение это кошки или изображение собаки и даже, если нужно, какая порода кошки или собаки на этом изображении.

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

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

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

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

Во-вторых, это системы, связанные с интернетом и с так называемыми Big Data. И тут мы уже видим, что главные игроки в области компьютерного зрения — это большие корпорации, такие как Google и Facebook, которым нужно обрабатывать, понимать, распознавать, индексировать огромное количество изображений, скажем миллиард или даже десятки миллиардов ежедневно. В-третьих, это медики, ученые — тут тоже все понятно. Изображений у них все больше и больше, и человеческих глаз, человеческого времени на них не хватает. В-четвертых, это индустрия развлечений: компьютерные игры, виртуальная реальность, расширенная реальность — тут все тоже будет очень интересно, много всего будет связано с компьютерным зрением. И в-пятых, конечно, системы видеонаблюдения, биометрии, распознавания лиц и так далее — все, что связано с Большим Братом. Но тут я хочу подчеркнуть, что приложения, связанные с Большим Братом, — это только небольшая часть приложения компьютерного зрения.