Просто о сложном. Как работает компьютерное зрение

Александра Царева, ведущий специалист Центра машинного обучения ИТ-компании «Инфосистемы Джет»:

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

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

Что это может быть?

Для слайда «Что это может быть?» специально использовано изображение собаки, похожей на кота: на этой фотографии еще более-менее понятно, что это собака, но в целом, если бы я смотрела серию фотографий серых котов, я бы отнесла это животное к ним. Таким образом, мои способности к генерализации отличий изображений с серым котом и серым щенком с плюшевой шерстью имеют предел.

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

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

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

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

Основные задачи распознавания изображений:

1. Классификация изображения — мы смотрим на картинку целиком и присваиваем ей некий класс из заранее нам известных.

2. Локализация на изображении конкретного объекта (или объектов) в рамке. Множество объектов отличается от одного только тем, что будет применяться более замысловатая нейросеть.

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

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

3. Восстановление изображений. Нейросеть убирает шум и улучшает качество картинки, но я неслучайно выбрала изображение, которое с точки зрения человека распознано неудачно:

Эта иллюстрация — результат работы одного открытого проекта.

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

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

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

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

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

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

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

4. Еще одна из задач касается исключительно видео — отслеживание движущегося объекта.

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

Если вам интересна тема развития методов обработки object detection с помощью нейросетей, рекомендую прочитать статью моего коллеги.

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

Александра Царева, ведущий специалист Центра машинного обучения ИТ-компании «Инфосистемы Джет»

0
1 комментарий
Виталий

принцип работы компьютерного зрения так и не описан в статье, как это было указано в заголовке.

Ответить
Развернуть ветку
-2 комментариев
Раскрывать всегда