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

Как свёрточные нейросети имитируют работу мозга

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

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

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

Нейронная сеть распознаёт кошку

AlexNet – первая глубокая свёрточная нейронная сеть, которая стала основой для современных архитектур. Разработчики сети выиграли конкурс по классификации изображений LSVRC-2012 на наборе данных ImageNet.

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

Ещё один вариант — ImageNet. В этом датасете 1000 разных классов, а кроме кошек и собак, есть, например, вишня, дерево или фотоаппарат. На курсе «Специалист по Data Science» студенты работают с конкретным датасетом для проекта по компьютерному зрению. Например, строят и обучают модель, которая на основе массива данных будет определять возраст человека по фото.

Структура свёрточной нейронной сети

Структура свёрточных нейронных сетей похожа на воронку: всё начинается с общей картины, а потом фокус смещается на детали. Мозг устроен так же: сначала человек видит на улице кошку, а затем начинает разглядывать цвет её шерсти или глаз. Это называется обучением представлениям (англ. Representation Learning).

Свёрточные нейронные сети состоят из нескольких слоёв. Чем больше слоёв, тем мощнее архитектура и лучше обучение нейросети. Основные элементы свёрточной нейронной сети:

● свёрточный слой,
● пулинг,
● нормализация по батчу,
● полносвязный слой.

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

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

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

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

Параметры в свёрточной нейронной сети

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

Cвёрточная нейронная сеть «видит» изображение в особом представлении — в виде трёхмерных массивов чисел или массивов матриц. В математике это называется тензорами. В RGB цвет закодирован в виде трёх целых чисел от 0 до 255. Каждый пиксель в массиве матриц представлен в виде числа, которое показывает яркость в этом диапазоне.

Как выглядит тензор изображения в формате RGB. Изображение состоит 3 массивов. Каждый отвечает за свой цвет: красный, синий, зелёный
Слева — изображение, разбитое на пиксели, по центру — каждый пиксель получил значение от 0 до 255, справа — массив, с которым работает свёрточная нейронная сеть
Чтобы анализировать изображение и выделять признаки кошки, у свёрточного слоя есть что-то вроде сканеров. Они называются фильтрами или ядрами свёртки и тоже представлены как массивы матриц. Количество фильтров в слое зависит от числа признаков.

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

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

Так выглядит операция свёртки по всему изображению:

  1. Фильтр проходит по каждому пикселю изображения, перемножает и суммирует числа своей матрицы и матрицы картинки. На выходе получается новая матрица.
  2. Числа полученных матриц суммируются в одну матрицу.
  3. К каждому значению матрицы добавляется одинаковое число — значение, на которое переместился фильтр, или шаг свёртки. Шаг равен 1 — фильтр перемещался на один пиксель. Шаг равен 2 — фильтр шагал на 2 пикселя. Финальная матрица — это один канал выходной карты признаков.
  4. Все каналы, или матрицы, которые получили после обработки изображения фильтрами, объединяются в один тензор. В итоге получается изображение другого размера и с другим числом каналов.
Как получается один канал выходной карты признаков. Фильтр сканирует изображение, результат работы фильтра объединяется в новую матрицу, к каждому значению матрицы прибавляют шаг, на который перемещался фильтр по изображению
Фильтр может проходить только по тем участкам изображения, где для каждого значения своей матрицы найдёт значение входного изображения. Чтобы сохранять исходный размер изображения и не уменьшать его по размеру фильтра, используют дополнение нулями. Это количество пикселей, которые добавляются с каждого края изображения.

Архитектуры свёрточных нейронных сетей

Нагляднее всего архитектуру свёрточных нейросетей видно на двух примерах — ResNet и U-Net. Они похожи, но используются для разных задач. ResNet — для классификации, а U-Net — для сегментации.
Архитектура свёрточной сети U-Net состоит из нескольких слоёв, некоторые из которых чередуются
Например, беспилотнику нужно определить, где на дороге пешеход. В U-Net изображение проходит два пути. Сначала нейросеть прогоняет изображение через слои свёртки и пулинга. Так она определяет, кто или что на изображении. Красные слои содержат свёртку, нормализацию по батчу для стабильности обучения и функцию активации ReLU. Она помогает отбросить незначительные признаки и выбрать только нужную информацию. Жёлтый слой — пулинг. Здесь изображение сжимается: например, было 224×224, а стало 112×112. На обработку небольшого изображения нейросеть тратит меньше вычислительной мощности. Ещё это важно, когда нужно определить доминирующие признаки, например цвет шерсти у кошки и форму её ушей.

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

Архитектура ResNet. Каждые несколько строк происходит пулинг и сжимает изображение, как в U-Net

ResNet тоже состоит из нескольких типовых шагов с типовыми операциями: свёртка, нормализация и пулинг. У ResNet есть особенность: после серии свёрточных блоков следуют несколько полносвязных слоёв. Это стандартный подход для задач классификации изображений. У U-Net нет полносвязных слоёв, а после «сжимающих» блоков идут «восстанавливающие» свёрточные. Поэтому ResNet используют для классификации, а U-Net — для сегментации.

Использование свёрточных нейронных сетей

В 2010-х свёрточные нейронные сети использовали в госучреждениях и медицине для таких задач:

● распознавание рукописных букв и цифр в письмах и других документах;

● классификация документов, например паспортов или СНИЛС;

● распознавание раковых опухолей и других аномалий по снимкам.

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

Ещё одно популярное направление, где используют свёрточные нейросети, — генеративное искусство. Человек формирует запрос, а нейросеть создаёт по нему изображение. За преображение текста отвечают различные алгоритмы, а за генерацию картинки — свёрточная нейросеть. Самые популярные модели для генерации изображений — Midjourney, Stable Diffusion, Dream, DALL-E 2 и ruDALL-E.

Обложка Cosmopolitan, которую нарисовали в компании OpenAI с помощью нейросети DALL-E 2
Модель Stable Diffusion использует архитектуру свёрточной нейросети U-Net. Инструмент состоит из трёх компонентов, в каждом — своя нейросеть. U-Net отвечает за процесс диффузии и помогает создать массив информации, который декодер использует для рисования готового изображения.
Структура Stable Diffusion. Нейросеть U-Net — розовый блок. Вместе с декодером они создают изображение

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

  1. Человек формулирует идею, каким должен быть телефон его мечты.
  2. Отправляет идею нейросети в виде текста с помощью специального бота и функции prompt или приложения для нейросети.
  3. Сеть в несколько шагов генерирует изображение, делая его более детальным на каждом шаге. Например, если попросить нейросеть нарисовать кошку, то на первом уровне будет сгенерирована шерсть, а на последнем — глаза. В случае с телефоном последними будут цифры на экране.
Пробуем нарисовать телефон с кнопками из кораллов с помощью нейросети Dream. Видимо, модель обучалась в основном на изображениях смартфонов, а кнопки воспринимает слишком буквально. Но пара близких к идее вариантов всё же есть

С какими задачами свёрточные нейросети не справляются

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

Нейросетям сложно анализировать изображения разного масштаба: например, несколько документов разного формата — А3, А4 и А5 — с одинаковым текстом. Если не привести эти документы к одному размеру или не указать в настройках, что все документы формата А4, нейросеть не всегда поймёт, что на бумагах написано одно и то же.

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

Даниил Водолазский

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

Если хочется развиваться в качестве специалиста в области компьютерного зрения, то знаний потребуется больше — и без математики уже никуда. Например, разбираться в свойствах операции свёртки и понимать метод обратного распространения ошибки. Тем, кто хочет погрузиться в эту тему по максимуму, после обучения с нуля в Практикуме рекомендую пройти курс Стэнфордского университета Deep Learning CS231n.

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

Даниил Водолазский
Ведущий эксперт по исследованию данных
Яндекс Практикум
Редактор

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

Поделиться

Успейте начать учебу в Практикуме до конца ноября со скидкой 20%

Fri Nov 15 2024 12:12:29 GMT+0300 (Moscow Standard Time)