Построение нейронной сети раскрашивания изображения. Часть 3. Сверточные нейронные сети

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

Вся серия состоит из следующих 4 частей:

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

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

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

Сверточные нейронные сети

Базовая форма искусственных нейронных сетей действительно хорошо работает в тех случаях, когда входные данные «структурированы» с относительно «небольшим» числом измерений. Однако есть входные данные, такие как изображения, которые считаются «неструктурированными», поскольку содержат чрезмерное количество измерений. Давайте рассмотрим сценарий, в котором у нас есть цветные изображения размером 256x256 пикселей. Размеры ввода будут 256x256x3 = 196 608, потому что у нас есть 3 канала: красный, зеленый и синий. Если мы создадим простую линейную нейронную сеть, которая получает эти изображения в качестве входных данных и создает изображения одинакового размера, нам потребуется 196 608² параметров! К настоящему времени должно быть ясно, что таким сетям потребуется чрезвычайно много памяти, не говоря уже о чрезмерном времени обучения.

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

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

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

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

Конфигурации

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

Прокладка

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

Страйд

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

Объединение

Подобно шагу, существует еще один метод, называемый объединением, который имеет ту же цель, то есть ускорить обработку без потери ценных деталей. Существует множество вариантов объединения, таких как среднее объединение и максимальное объединение. В первом случае мы вычисляем средние входные данные по рецептивному полю, что аналогично применению свертки k x k с шагом с фиксированными весами 1/k². Во втором случае мы вычисляем и сохраняем максимальный вход над рецептивным полем.

Расширение

Расширение отвечает за расширение рецептивного поля. Расширение 1 означает, что рецептивное поле 3x3 останется 3x3, а расширение 2 означает, что то же самое поле будет преобразовано в поле 5x5, так как оно было расширено за счет добавления «отверстий» между грузами. Расширение пытается имитировать большие рецептивные поля, сохраняя при этом меньший вес. Например, поле 3x3 с расширением 2 имеет 9 обучаемых весов (с 1 каналом), а поле 5x5 с расширением 1 имеет 25 обучаемых весов.

Транспонированная свертка

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

Заключение

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

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