Анализ данных  •  21 февраля  2023  •  5 мин чтения

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

Когда человек использует Face ID на телефоне или запускает поиск по изображению в браузере, «открывает глаза» компьютерное зрение. Разбираем в общих чертах его основные методы.

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

Компьютерное зрение (англ. computer vision, CV) — это область искусственного интеллекта. Способность «видеть» у компьютера появилась благодаря глубокому обучению (англ. deep learning) — разновидности машинного обучения, которое использует для решения задач нейронные сети.

Материал по теме:
Для чего строят и обучают нейросети в IT
Задача специалистов в области компьютерного зрения — научить компьютер воспринимать изображения как человек.

Человеческое зрение устроено так, что позволяет улавливать высокоуровневые признаки, то есть легко отличить кота от воробья, опираясь на опыт: у кота есть уши, усы и хвост, у воробья — крылья и клюв.

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

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

Всё потому, что машине не хватает рецептивного поля — способности обрабатывать бо́льшую область целиком и оперировать высокоуровневыми признаками.

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

В начале 2000-х учёные пытались определять и заносить признаки вручную, отсюда появилось название hand-crafted features. Это трудоёмкий процесс, поэтому к нему догадались подключить нейросети: они обучаемы, а значит, им можно показать, как находить закономерности.

Полносвязные нейронные сети, которые обрабатывают числовые данные, справлялись с задачей с долей ошибок более 28%. Революция в компьютерном зрении произошла, когда стали использовать нейросети, нацеленные на работу с изображениями. Они называются свёрточными. В 2012 году свёрточные нейросети значительно уменьшили ошибку в классификации и приблизились к результату, который показывает при распознавании изображений человек, — около 5% ошибок. А в 2015 году нейросети обогнали человека в точности распознавания и показали результат в 3,6%.

На курсе «Специалист по Data Science» студенты проводят статистический анализ данных, изучают модели компьютерного зрения и обучают нейросети.

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

Можно выделить четыре ключевые задачи, для которых используют компьютерное зрение:

1. Классификация, когда объекту присваивается определённый класс. Простыми словами, нейросеть определяет его в одну из групп, которую знает: человек, скамейка, чемодан.

2. Локализация, то есть определение местоположения объекта.

3. Детектирование. Например, можно обнаружить в метро забытую вещь в режиме реального времени. Компьютер проведёт локализацию и классифицирует его.

4. Сегментация делится на два вида. Первый — семантическая сегментация, которая отделяет изображения от фона и позволяет накладывать на них маски. Ей удастся разделить объекты на классы и выделить масками разного цвета: котов — красной, а собак — зелёной. Другой пример — размытый фон позади человека. На шаг впереди сегментация объектов. Котов и собак она распределит по классам, но вдобавок покажет, что они отличаются, и выделит их как разные объекты: собака № 1 и собака № 2.

Цветные рамки показывают суть каждой задачи

Технологии компьютерного зрения

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

Ядро свёртки — это квадрат с цифрами в окошках, в основном 3х3, но может быть 5х5 или 7х7. Числа внутри ядра нейросеть подбирает сама — в этом заключается процесс её обучения. Процесс свёртки — это движение ядра из левого верхнего угла изображения до правого нижнего, слева направо и сверху вниз.

Если взять в качестве примера ядро свёртки размером 3х3, то более детально этот процесс происходит так:

1. Цифры свёрточного фильтра накладываются на область из 9 пикселей и перемножаются друг на друга парами, а затем эти результаты складываются. Итоговое число попадает только в центральный пиксель, поэтому в итоговом изображении по краям отрезается по одному пикселю. На области из примера в каждой паре есть 0, кроме одной в правом нижнем углу, где перемножаются 2 и -4, поэтому в итоге получается -8.

Слева — процесс работы свёрточного фильтра. Справа видно, что после операции свёртки изображение обрезается на один пиксель, если у ядра свёртки размер 3х3.

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

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

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

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

4. После работы свёрток остаётся набор карт признаков (англ. feature maps). Например, он может выглядеть как тёмный фон с высвеченными белыми чертами объекта. Теперь это оцифрованные признаки, которые компьютер сможет распознать.

С помощью свёрток нейросеть извлекает признаки объекта. Каждый свёрточный слой в архитектуре создаёт новую карту признаков

Дальнейшие действия нейросети зависят от задачи:

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

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

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

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

Дообучение модели компьютерного зрения

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

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

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

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

Для этого есть два способа: fine tuning и transfer learning. При transfer learning (от англ. «перенос обучения») дообучается последний полносвязный слой, который отвечает за количество классов для задачи. С fine tuning (от англ. «тонкая настройка») помимо этого слоя можно дообучить любые слои из имеющихся. Таким образом, не придётся собирать и обучать модель с нуля — достаточно видоизменить и дообучить её на подходящих для задачи данных.

Применение компьютерного зрения

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

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

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

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

Главные тренды в компьютерном зрении

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

● Беспилотные автомобили

Нейросети учатся детектировать объекты и ситуацию на дороге каждую секунду и выдавать верное решение: тормозить, разгоняться, поворачивать налево или направо. Маленькие роботы-курьеры путешествуют из точки А в точку Б и не врезаются в прохожих, используя компьютерное зрение.

Роботы

Внутри некоторых роботов, в том числе и роботов-курьеров, тоже «сидят» алгоритмы, которые обучаются не на базе данных, а на ходу. Компьютерное зрение изучает полученное изображение, а дальше дело за deep reinforcement learning — обучением с подкреплением, которое работает благодаря нейросетям. Они учатся, взаимодействуя с окружением, а не на основе датасета.

● Космические исследования

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

● Распознавание эмоций

Например, «умные очки» Google Glass помогают нейроотличным людям распознавать эмоции окружающих, показывают подсказки.

● Обработка аудиосигналов

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

Совет эксперта

Ксения Цыганова
Качественная и большая база имеет решающее значение для успешной работы нейросети. Многие свёрточные нейросети с открытым исходным кодом обучены на колоссальном количестве данных. Поэтому иногда не имеет смысла создавать новую модель компьютерного зрения и обучать её с нуля — скорее всего, собрать такое же количество данных не получится. Можно взять предобученную нейросеть с готовой архитектурой, видоизменить её для своей задачи и дообучить на текущих данных, используя fine-tuning. Предобученные нейросети можно найти в открытой библиотеке Keras для Python или, например, на GitHub.

Статью подготовили:

Ксения Цыганова
Яндекс Практикум
Ревьюер проектов DS
Варя Скопина
Яндекс Практикум
Редактор

Дайджест блога: ежемесячная подборка лучших статей от редакции

Поделиться
Сочините нейробалладу или смешной гороскоп: идеи необычных подарков своими руками + бонусы от партнёров
Mon Jul 15 2024 21:29:52 GMT+0300 (Moscow Standard Time)