Свёрточная нейронная сеть — класс нейронных сетей, который специализируется на обработке изображений и видео. Такие нейросети хорошо улавливают локальный контекст, когда информация в пространстве непрерывна, то есть её носители находятся рядом. Например, пиксели — части изображения, которые расположены близко друг к другу и содержат визуальные данные: яркость и цвет. Если в одном пикселе на фото или на рисунке нейросеть «видит» кошку, значит, и в соседних пикселях — тоже.
Чаще всего с помощью свёрточных нейросетей можно решать две задачи: распознавание и классификацию. Например, с помощью нейросети на изображении кошки можно определить её окрас — по большому фрагменту изображения, цвет глаз — по более маленьким фрагментам или отличить кошку от собаки.
AlexNet – первая глубокая свёрточная нейронная сеть, которая стала основой для современных архитектур. Разработчики сети выиграли конкурс по классификации изображений LSVRC-2012 на наборе данных ImageNet.
Есть несколько датасетов, или наборов данных, на которых новички могут с помощью свёрточных нейросетей тренироваться решать задачи по классификации. MNIST — это база, с которой обычно начинают изучение свёрточных нейронных сетей. Инструмент можно найти в наборе Google Colab и попробовать за полчаса научить нейросеть распознавать рукописные цифры.
Ещё один вариант — ImageNet. В этом датасете 1000 разных классов, а кроме кошек и собак, есть, например, вишня, дерево или фотоаппарат. На курсе «Специалист по Data Science» студенты работают с конкретным датасетом для проекта по компьютерному зрению. Например, строят и обучают модель, которая на основе массива данных будет определять возраст человека по фото.
Структура свёрточных нейронных сетей похожа на воронку: всё начинается с общей картины, а потом фокус смещается на детали. Мозг устроен так же: сначала человек видит на улице кошку, а затем начинает разглядывать цвет её шерсти или глаз. Это называется обучением представлениям (англ. Representation Learning).
Свёрточные нейронные сети состоят из нескольких слоёв. Чем больше слоёв, тем мощнее архитектура и лучше обучение нейросети. Основные элементы свёрточной нейронной сети:
● свёрточный слой,
● пулинг,
● нормализация по батчу,
● полносвязный слой.
Чтобы нейросеть «узнала» кошку, нужно проделать с изображением несколько типовых операций на каждом слое. Ключевая из этих операций — свёртка. Во время свёртки нейросеть удаляет лишнее и оставляет полезное — то, что поможет проанализировать изображение. Например, линии, края или ровные области. Свёртку можно создавать для каждого признака. Нейросеть будет сама подбирать их во время распознавания и классификации на каждом свёрточном слое.
Первые слои нейросети анализируют мелкие детали изображения — ворсинки, трещины. Размер изображения может быть 2×2 или 3×3 пикселя — по такому маленькому контексту сложно выделить глаза, уши кошки или деревья, на фоне которых она сидит, но можно найти цвета или перепады света, то есть границы разных объектов. На следующих слоях появляются объекты посложнее — круги и другие формы.
Нейросети в основном обучаются на цветных изображениях в формате RGB. Их пиксели передают яркость по трём каналам: красному, зелёному и синему. Разные сочетания этих цветов создают любой цвет из спектра.
Cвёрточная нейронная сеть «видит» изображение в особом представлении — в виде трёхмерных массивов чисел или массивов матриц. В математике это называется тензорами. В RGB цвет закодирован в виде трёх целых чисел от 0 до 255. Каждый пиксель в массиве матриц представлен в виде числа, которое показывает яркость в этом диапазоне.
Разберём свёртку на примере одного пикселя. По каждому пикселю проходит фильтр, или ядро, свёртки. На картинке выбрали пиксель со значением 2. Сначала нужно перемножить по очереди выбранный пиксель и соседние с ним со значениями в матрице свёртки, а потом всё сложить. После этого на исходной картинке заменить первое значение пикселя на то, что получилось, — 13, а значения соседних пикселей не менять. Эти же действия нужно проделать с каждым пикселем на картинке.
Так выглядит операция свёртки по всему изображению:
После того как нейросеть определила, что на изображении, она определяет, где находится этот объект. Для этого она постепенно увеличивает его и применяет повышающую дискретизацию. Чтобы не углубляться в математику, приведём простую аналогию с художником-портретистом. Сначала он рисует овал лица, а потом детали: подбородок, уши, волосы.
ResNet тоже состоит из нескольких типовых шагов с типовыми операциями: свёртка, нормализация и пулинг. У ResNet есть особенность: после серии свёрточных блоков следуют несколько полносвязных слоёв. Это стандартный подход для задач классификации изображений. У U-Net нет полносвязных слоёв, а после «сжимающих» блоков идут «восстанавливающие» свёрточные. Поэтому ResNet используют для классификации, а U-Net — для сегментации.
В 2010-х свёрточные нейронные сети использовали в госучреждениях и медицине для таких задач:
● распознавание рукописных букв и цифр в письмах и других документах;
● классификация документов, например паспортов или СНИЛС;
● распознавание раковых опухолей и других аномалий по снимкам.
Сейчас свёрточные нейросети применяют в системах видеонаблюдения, анализе видео, беспилотных автомобилях. Например, камера и свёрточные нейросети помогают роботам и беспилотным такси Яндекса оценивать обстановку на дороге.
Ещё одно популярное направление, где используют свёрточные нейросети, — генеративное искусство. Человек формирует запрос, а нейросеть создаёт по нему изображение. За преображение текста отвечают различные алгоритмы, а за генерацию картинки — свёрточная нейросеть. Самые популярные модели для генерации изображений — Midjourney, Stable Diffusion, Dream, DALL-E 2 и ruDALL-E.
Проверим нейросеть в деле и попробуем нарисовать мобильный телефон с кнопками в виде кораллов. Процесс генерации изображения с помощью свёрточной нейросети выглядит так:
Свёрточные нейронные сети плохо подходят для анализа глобального контекста, например смысла текстов. В изображении элементы, которые анализирует сеть, находятся рядом. В текстах более длинные связи между элементами: между началом и концом предложения может быть много слов. Такие нейросети не подходят для табличных данных, потому что они, в отличие от пикселей, разнородные: где-то текст, где-то дата, где-то — процент.
Нейросетям сложно анализировать изображения разного масштаба: например, несколько документов разного формата — А3, А4 и А5 — с одинаковым текстом. Если не привести эти документы к одному размеру или не указать в настройках, что все документы формата А4, нейросеть не всегда поймёт, что на бумагах написано одно и то же.
Даниил Водолазский
Чтобы поработать со свёрточными нейросетями на базовом уровне, нужно уметь писать на Python, понимать основы машинного обучения и то, как вообще хранятся изображения на компьютере. Высшая математика поначалу не нужна — однажды я помогал группе школьников готовить задание к хакатону, и за 12 часов ребята научились классифицировать цифры с помощью свёрточных нейросетей.
Если хочется развиваться в качестве специалиста в области компьютерного зрения, то знаний потребуется больше — и без математики уже никуда. Например, разбираться в свойствах операции свёртки и понимать метод обратного распространения ошибки. Тем, кто хочет погрузиться в эту тему по максимуму, после обучения с нуля в Практикуме рекомендую пройти курс Стэнфордского университета Deep Learning CS231n.
Читать также: