Компьютерным зрением называют дисциплину, раздел искусственного интеллекта, которая занимается извлечением информации из изображений. Важно, что изображения могут быть разного типа: фотографии, видео, наборы фотографий или медицинский снимок из магнитно-резонансного томографа. В последнее время стали очень популярны алгоритмы, которые работают с изображениями и сочетают цветовую информацию о точках и их пространственное положение, потому что сенсоры, получающие такую информацию, стали гораздо более доступными, а понимать мир с помощью таких сенсоров роботам или компьютерам стало гораздо проще.
Информация, которую разные алгоритмы извлекают из изображений в компьютерном зрении, тоже может иметь разный тип. Некоторые алгоритмы просто разбивают изображение на части, которые соответствуют отдельным объектам или разным частям объектов. Например, врач может взять медицинский снимок, разбить его на части и взять ту, которая соответствует интересующему его объекту - органу или опухоли, и померить объем или измерить диаметр этого объекта. В таком случае не только экономится время врача, но и уменьшается вариативность, связанная с индивидуальными особенностями данного доктора, что особенно полезно в случаях, когда измерения для одного и того же пациента проводятся несколькими врачами или когда измерения отделяют несколько месяцев.
Еще один важный раздел компьютерного зрения — это построение трехмерных моделей из изображений, например из набора фотографий или из видео, причем эти фотографии могут быть сняты одним фотографом или скачаны из интернета. Можно взять тысячи фотографий, которые сняты разными фотографами и на которых запечатлена Красная площадь. Или изображения могут быть получены роботом, путешествующим по какому-то незнакомому помещению или в незнакомой местности и пытающимся во время путешествия построить трехмерную модель того, что его окружает. И чтобы ее построить, компьютеру нужно сопоставить части сцены, то есть понять, что на разных изображениях разные фрагменты соответствуют одним и тем же объектам в трехмерном мире.
Это очень непросто сделать. Если мы посмотрим на какое-нибудь большое здание, то заметим, что левый нижний уголок любого окна будет выглядеть одинаково для разных окон этого здания. И если просто посмотреть на те несколько пикселей, которые окружают этот уголок, то ни человек, ни компьютер не поймут, разные это окна или одни и те же. Поэтому, чтобы построить трехмерную модель изображений, компьютеру надо постепенно строить модель на основе более уникальных фрагментов сцены, а потом, сопоставляя их, распространять это знание на менее уникальные. Компьютер для этого использует алгоритмы оптимизации, а что для этого используют люди или животные, когда строят в мозгу трехмерные карты, мы до конца не понимаем.
В результате такого моделирования компьютер получает фактически трехмерный слепок сцены. Кроме того, он понимает положение камеры, ракурс, в момент, когда происходила фото- или видеосъемка. Впоследствии эта информация может быть использована разными способами. Например, можно измерять размеры в сцене — это так называемая фотограмметрия. Или полученную трехмерную модель и положение камеры при съемке разных кадров можно использовать в приложениях компьютерной графики. Такие системы используются во всех современных фильмах, которые используют спецэффекты, сочетающие реальные и виртуальные объекты. Кроме того, трехмерные модели будет в ближайшее время все более активно использоваться в компьютерных играх, приложениях реальной и дополненной реальности.
Компьютерная графика берет описание сцены, ее геометрии, свойства материалов, и по этому описанию строит картинки. Компьютерное зрение, наоборот, берет картинки и по ним извлекает описание сцены. Правда, бывают системы, которые, взяв картинку, получив ее описание, используют дальше это описание, чтобы идентифицировать входную картинку, например дорисовать маску поверх лица. И получается такая система, которая комбинирует графику и зрение, и еще их можно рассматривать как продвинутый вариант систем обработки изображений.
Однако главный прогресс происходит в областях компьютерного зрения, связанных с пониманием изображений – в так называемом высокоуровневом компьютерном зрении. Оно занимается задачами, которые очень легко формулируются. Например, вот фото, нужно выписать список объектов, которые на этом фото, их класс (человек, автомобиль, собака, кусок лужайки) и то, где они на изображении находятся. Или вот видео, нужно определить, что делают люди на этом видео: идут они спокойно по делам или начинается что-то необычное, например драка, и нужно срочно привлечь внимание оператора к этому видео. Потому что недостаточно просто завесить весь город камерами — нужно, чтобы видеопотоки с этих камер как-то обрабатывались.
В середине 2000-х алгоритмы высокоуровневого зрения работали плохо. Например, компьютер не мог отличить фотографию кошки от фотографии собаки, то есть самые лучшие алгоритмы работали почти как подбрасывание монетки. Десять лет спустя студент, прошедший курс компьютерного зрения и глубинного обучения, сможет за несколько дней создать систему, натренировать ее, и эта система будет отличать снимок кошки от снимка собаки с точностью до 99%. Это происходит за счет того, что теперь у нас есть программы, называемые сверточными нейронными сетями, которым можно подать на вход изображение, и эта программа с очень высокой точностью скажет, изображение это кошки или изображение собаки и даже, если нужно, какая порода кошки или собаки на этом изображении.
Эти программы работают так хорошо за счет того, что у них есть огромное количество настраиваемых параметров — миллионы, десятки миллионов. Настраивает их не программист вручную (это было бы невозможно), а сам компьютер в процессе машинного обучения, глядя на большое количество обучающих фотографий. Потом мы можем взять эту предобученную нейронную сеть и доучить ее для задач, которые нас интересуют. Более того, обученная нейросеть будет отображать изображения, содержащие похожие объекты или один и тот же объект, в многомерные вектора, которые находятся рядом в многомерном пространстве. Это очень важное и удобное свойство для всех систем обработки информации. И, что интересно, это будет происходить, даже если объекты на этих изображениях сеть во время обучения не видела. Как говорят специалисты по машинному обучению, происходит обобщение и перенос знаний на новые классы.
Происходит это по четырем причинам. Во-первых, компьютеры становятся все мощнее и мощнее, что, очевидно, упрощает задачу. Во-вторых, появляется все больше и больше данных, и они становятся лучше за счет того, что улучшаются обычные фото- и видеокамеры, медицинские сканеры, приборы у биологов и астрономов, и чем лучше данные, тем проще из них извлекать информацию. В-третьих, улучшаются алгоритмы, и тут главный прогресс связан прежде всего с глубинным обучением и сверточными нейросетями. В-четвертых, все это находится внутри системы с положительной обратной связью: чем лучше это все работает, тем больше в эту область приходит талантливых мозгов, а также денег.
Рост популярности этого направления очень заметен. Скажем, в середине 2000-х годов на главную конференцию по компьютерному зрению приезжало меньше тысячи человек, почти все они были из университетов – студенты, преподаватели. А в 2016 году на конференции было три с половиной тысячи исследователей, и большая часть из них была из компаний, причем самого разного размера — от стартапов до главных software-корпораций.
В ближайшие годы у компьютерного зрения будет несколько основных приложений-драйверов роста. Прежде всего, конечно, робототехника, в том числе системы автономного вождения, о которых сейчас все говорят. Робототехника всегда была главной покровительницей компьютерного зрения, областью, где его возможности и результаты были наиболее востребованы. Первые системы компьютерного зрения были связаны с промышленными роботами и проверяли, что деталь на конвейере занимает определенное количество пикселей. Сейчас появляются роботы, которым надо работать не с деталями, лежащими на плоском конвейере с известным цветом ленты, а понимать, анализировать сложные реальные миры, ориентироваться в трехмерном пространстве, осознавать, что это за объекты на изображении и куда они движутся, что это за люди, какими могут быть их намерения, и это на порядок сложнее.
Во-вторых, это системы, связанные с интернетом и с так называемыми Big Data. И тут мы уже видим, что главные игроки в области компьютерного зрения — это большие корпорации, такие как Google и Facebook, которым нужно обрабатывать, понимать, распознавать, индексировать огромное количество изображений, скажем миллиард или даже десятки миллиардов ежедневно. В-третьих, это медики, ученые. Изображений у них все больше и больше, и человеческих глаз, человеческого времени на них не хватает. В-четвертых, это индустрия развлечений: компьютерные игры, виртуальная реальность, расширенная реальность — тут тоже много работы будет связано с компьютерным зрением. И в-пятых, конечно, системы видеонаблюдения, биометрии, распознавания лиц и так далее — все, что связано с Большим Братом. Но тут нужно подчеркнуть, что приложения, связанные с Большим Братом, — это только небольшая часть приложения компьютерного зрения.