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

Понимание сверточных нейронных сетей (часть 1)

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

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

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

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

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

Далее мы разделим приведенное выше изображение на каналы RGB, чтобы извлечь из изображения функции, зависящие от цвета.

Визуализация процесса

В анимации выше есть изображение пикселя 5x5. ядро, также известное как извлекатель функций или фильтр<. /em> — это темный компонент, перемещающийся по изображению и имеющий размер 3x3. Выходные данные 3x3 называются картой объектов или промежуточным изображением, так как они не обладают всеми свойствами исходного изображения.Свертка используется для создания выходных данных, что влечет за собой извлечение фрагмента информации из исходных данных, в данном случае из ядра. Мы видим уменьшение количества пикселей и потерю информации из-за процесса свертки.

Примечание. Описанный выше процесс свертки происходит на одном канале.

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

При работе с ядрами помните, что размер ядра всегда должен быть нечетным, т. е. 3x3, 5x5, 7x7, поскольку сохранение четного размера ядра приведет к потере симметрии. который не будет правильно извлекать информацию из изображения, оставляя некоторые пиксели несвернутыми. Однако размер ядра 1x1 в основном используется для уменьшения размерности, и никакая информация не теряется в процессе свертки ядра размером 1x1, который называется двухточечной сверткой.

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

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

Матричный расчет

В конце концов, изображение, используемое в нейронной сети, проходит некоторые матричные вычисления, поэтому нам нужны некоторые значения для свертки изображения. Значение ядра устанавливается равным [[0,1,2],[2,2,0],[0,1,2]] и умножается на значения пикселей, захваченных ядром в данный момент.

Прокладка

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

Шагать

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

Шаг — это гиперпараметр, который при правильном использовании не приводит к потере большого количества информации на изображении. Например, если есть изображение размером 1000x1000, то использование шага 3 будет выгоднее, так как мы не потеряем много данных, тогда как использование того же значения шага для 60x60 image приведет к большой потере информации. Таким образом, значение шага полностью зависит от размера изображения.

Накопление и агрегирование функций

Накопление признаков – это процесс построения карт признаков на основе процесса свертки каждого канала. В приведенном выше примере мы объединили или собрали три карты функций из трех каналов одного и того же изображения. Точно так же, если есть 11 каналов, будет собрано 11 карт объектов, а также 26, 72 и любое другое количество каналов.

Примечание. Для свертки изображений один и тот же фильтр или ядро ​​​​отправляется через каждый канал.

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

Максимальное объединение

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

Глубина фильтра

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

Полная архитектура сверточной нейронной сети

Основная предпосылка архитектуры CNN заключается в следующем. Входные данные содержат изображение 28x28 с атрибутами padding=1, kernel=3x3, stride=1,иactivation function=’Relu’. В результате получилось 32 карты объектов, что означает, что они свернуты по 32 каналам, а слой имеет padding=1, что означает, что выходные данные сохраняют исходный размер изображения 28x28. Информация помещается в меньшую матрицу с теми же каналами и картами объектов, т. е. 32, а размер уменьшается до 14x14 на следующем уровне, где максимальное объединение используется для уменьшения размерности. Третий уровень использует тот же метод свертки, что и второй, а четвертый уровень использует метод максимального объединения. К настоящему времени мы собрали достаточно признаков изображения, и данные готовы к передаче в полностью подключенные нейронные сети.

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

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

Ключевые моменты

  1. CNN — это категория нейронных сетей, доказавших свою эффективность в таких областях, как распознавание и классификация изображений. Они состоят из одного или нескольких сверточных слоев, за которыми следует один или несколько полносвязных слоев, как в стандартной многослойной нейронной сети. сеть.
  2. Фильтр или ядро просматривает небольшие фрагменты или фрагменты изображения. Эти патчи имеют тот же размер, что и фильтр.
  3. Заполнение обычно используется для сохранения размера изображения таким же, как у входного изображения, где все еще происходит сокращение информации.
  4. Концепция шага используется для пропуска свертки пикселей и ускорения процесса. Шаг — это в основном то, сколько пикселей ядро ​​​​должно пропустить для своего следующего вычисления.
  5. Когда мы создаем карты функций из процесса свертки из каждого канала, этот процесс называется накоплением функций, а инкапсуляция всех этих функций в одну единую карту функций называется агрегацией функций.
  6. Max Pooling – это операция объединения, которая вычисляет максимальное значение для исправлений карты объектов и использует его для создания карты объектов с уменьшенной выборкой (объединенной).

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

А пока продолжайте учиться.

Следующий блог — Понимание сверточных нейронных сетей (часть 2)