5 как работает компьютерное зрение от какого типа информации оно способно оградить пользователя

Обновлено: 03.07.2024

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

Что такое компьютерное зрение

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

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

Как это работает

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

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

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

Как создаются технологии

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

Актуальные задачи технологий

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

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

Как определить лучший алгоритм

Для сравнения различных биометрических технологий по точности принято оценивать по показателям:

ошибки первого рода — доля ложно-отрицательных (FNR, False Negatives Rate или FRR, False Rejection Rate) срабатываний от общего количества положительных запросов;ошибки второго рода — доля ложно-положительных (FPR, False Positives Rate или FAR, False Acceptance Rate) срабатываний от общего количества отрицательных запросов.

Например, если рассмотреть процесс разблокировки мобильного телефона при помощи технологии распознавания лиц, то FNR — это вероятность того, что ваш телефон вас не узнает, а FPR — это вероятность того, что злоумышленник сможет разблокировать ваш телефон своим лицом.

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

Отраслевым бенчмарком является тестирование NIST Face Recognition Vendor Test Ongoing, которое ежегодно проводит Национальный институт стандартов и технологий США на больших закрытых наборах данных. Его цель — определить наиболее универсальные алгоритмы распознавания лиц, которые одинаково успешно работают в самых разных сценариях применения: Visa, Border, Visaborder, Mugshot. Их отличие в том, что тестирование проводится на разных типах изображений: фото на документы, снимки при прохождении паспортного контроля в аэропорту, портрет для картотеки. Типичный уровень точности современных систем распознавания лиц — FNR=0,003 при FMR=0,000001.

Почему технологии взлетели сейчас и что будет дальше

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как стать спецом по анализу данных

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



Реверс малвари

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

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



Внутриклассовая изменчивость

Возьмем другой пример. На вопрос, что такое стул, можно ответить первое, что придет в голову. Например, стул — это нечто с четырьмя ножками и спинкой. А как тебе вот такой стул?



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

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

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

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

Задачи компьютерного зрения

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

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

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

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

Вот несколько других примеров.

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

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

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

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

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

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

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

«Низкоуровневое» зрение

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

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

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

Самая популярная библиотека для решения задач «низкоуровневого» компьютерного зрения — это OpenCV. В ней содержится огромное количество алгоритмов, есть интерфейсы для многих языков программирования, в том числе С++ и Python. Другая известная библиотека — skimage, она активно используется в скриптах на Python. В примерах дальше мы будем применять OpenCV.

Представление изображения в памяти компьютера

Представление изображения в памяти компьютера

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

Арифметические операции

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

В OpenCV используется такое же представление матриц, как в библиотеке NumPy. Это значит, что для них можно использовать стандартные арифметические операции, например сложение.

Однако не все так просто: сложение матриц в NumPy не учитывает переполнение. Для изображений переполнение — это нелогичная операция. Если при сложении двух картинок яркость где-то превысила 255, то, как правило, она должна оставаться равной 255, а не превратиться в 4. Пример ниже показывает, как отличается сложение в NumPy и OpenCV.

Для примера возьмем картинку.



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

Команда cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) будет неоднократно встречаться в дальнейшем. Она используется для преобразования цветовых пространств, в том числе из RGB в серые картинки. После превращения картинки в серую можно прибавить к ней какое-то число.

Такое преобразование эквивалентно увеличению яркости картинки.



Можно не прибавлять, а умножать на некий коэффициент.

Умножение картинки эквивалентно увеличению ее контрастности. Можно попробовать использовать больший коэффициент (например, 1.8 ).



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

Эквилизация гистограммы

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

Гистограмма до эквилизации и после

Гистограмма до эквилизации и после

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

Если взять нашу предыдущую картинку, то результат будет выглядеть вот так.



Блендинг

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



Пусть для одной картинки известно, где расположен объект, а все остальное пространство занимает фон. Тогда можно помещать второй объект туда, где находится фон. В месте, где первый объект накрывается вторым, будет также использоваться второй объект.

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

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

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



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



Цветовые пространства

Пока что мы говорили только о представлении в RGB, но существуют и другие варианты. Например — HSV.



Компоненты этого пространства — тон (hue), насыщенность (saturation) и значение (value). Это пространство позволяет манипулировать цветом и его насыщенностью по отдельности. Тон обозначает цвет пикселя, он закодирован числом от 0 до 360, как угол на цилиндре. Насыщенность принимает значение 0, если картинка серая.

Если мы работаем с картинкой в HSV, то можем легко сделать ее более насыщенной, умножив соответствующий канал на какой-то коэффициент. Попробуем увеличить насыщенность на 50% (коэффициент 1,5).



Каскады Хаара — детектор лиц

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

Каскады Хаара

Каскады Хаара

Пиксели, попадающие в белый прямоугольник, берутся со знаком «плюс», в черный — со знаком «минус». Все значения суммируются, и получается одно число. Прямоугольники и коэффициенты для них выбираются с помощью алгоритма AdaBoost. У лица имеются некоторые паттерны, и в итоге каскад фильтров такого рода показывает, есть ли внутри него лицо или нет.

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

Сегментация

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

Сегментация изображения

Сегментация изображения

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

Линейная фильтрация изображений

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

Скользящее среднее — свертка

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



Переписав формулу в следующем виде, можно получить выражение для свертки:



где f — это изображение (двухмерная функция, характеризующая картинку), k, l — координаты пикселя, f — яркость пикселя, h — ядро свертки (матрица 3 × 3, состоящая из единиц).


Если ядро свертки — матрица, то свертка — это скользящее среднее. В OpenCV произвести такую свертку можно следующим образом:

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

Фото до применения скользящего среднего, после и после применения гауссовского размытия

Фото до применения скользящего среднего, после и после применения гауссовского размытия

Детекция границ

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

Свертки для получения границ: слева — горизонтальных, справа — вертикальных
Границы изображения, полученные с помощью применения свертки. Слева — горизонтальные, в середине — вертикальные, справа — все границы, полученные объединением результатов двух сверток

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

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

Корреляция

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



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



На рисунке слева показан результат применения корреляции для поиска лица. Белое пятно — это место, где оно найдено. Корреляцию можно использовать с различными параметрами: нормировать, применять ее различные вариации.

Получается, что корреляция — это очень простой способ поиска объектов на изображении, если имеется их точные копии.

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

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

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

По оценкам, к 2022 году мировой рынок компьютерного зрения вырастет до $48,6 млрд. Еще в 2015 году он составлял всего $6,6 млрд.

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

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

Технология позволяет компьютерам выполнять разнообразные задачи.

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

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

Расскажи, как цифровая трансформация изменила твой бизнес

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

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

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

Развитие компьютерного зрения

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

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

В течение следующих нескольких десятилетий новые технические достижения сделали компьютерное зрение возможным.

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

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

Большинство существующих систем компьютерного зрения были созданы на базе ImageNet. Но они по-прежнему содержали много ошибок. Все изменилось в 2012 году, когда модель AlexNet, которая использовала ImageNet, значительно снизила частоту ошибок при распознавании изображений, открыв современную область компьютерного зрения.

Предвзятость и проблемы компьютерного зрения

Доступность ImageNet одновременно помогла и нанесла ущерб столь влиятельной сегодня технологии. Это иллюстрирует популярную фразу в области дата-сайенс и ИИ: «мусор на входе, мусор на выходе».

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

Исследователь ИИ Кейт Кроуфорд в своей книге «Атлас ИИ» отмечает, что внутри ImageNet встречались довольно оскорбительные и вредные категории, содержащие дискриминацию по полу, расе, возрасту или физическим возможностям. Сейчас уже ведется работа над тем, чтобы исключить предвзятость из датасета. Его критикуют и за нарушение приватности, поскольку люди, чьи снимки были включены, не давали согласие на использование и разметку фото.

сэлфи, группа молодых людей с телефоном

Фото в тексте: marvent / Shutterstock

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

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

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

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

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

Читайте также: