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

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

Это было началом новой эры в компьютерном зрении, и до сих пор мы импровизировали и создали несколько архитектур, таких как VGG16, VGG19, ResNet50, ResNet150, которые решают проблемы компьютерного зрения с точностью почти человеческого уровня. Сверточная нейронная сеть была основой для всех этих архитектур.

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

Что такое нейронная сеть?

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

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

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

Чем нейронная сеть свертки лучше традиционных подходов?

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

Искусственная нейронная сеть (ANN) принимает входные данные как все функции и пытается изучить функцию между всеми входными функциями и выходными данными.

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

Но если мы используем CNN, он сначала попытается извлечь функции из изображения, используя матрицу весов, называемую фильтром, а затем создаст карту функций, которая обычно известна как карта функций. . Затем эта карта признаков будет передана на слои ANN или Dense сети, которые сделают прогноз.

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

Как создаются эти карты и как фильтры помогают в этом процессе?

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

Это пример, когда входное изображение 6 * 6, и у нас есть фильтр 3 * 3, который извлекает функции. Сначала мы берем часть 3 * 3 из изображения 6 * 6, а затем вычисляем скалярное произведение между фильтром и той частью изображения, которая в конечном итоге генерирует одно число. В данном случае мы сгенерировали 31.

На самом деле у нас есть изображения с каналом RGB, что означает, что в этом случае изображение будет 6 * 6 * 3, а часть будет 3 * 3 * 3, как и фильтр. Представьте, что вы просто сглаживаете вектор 3*3*3 до 1*27, а затем получаете скалярное произведение между ядром и частью изображения.

Теперь мы повторяем этот процесс для всего изображения, перемещая фильтр по всему изображению, что приводит к созданию двумерной карты или матрицы. Мы называем эту карту картой объектов. На практике мы используем более одного фильтра, чтобы извлечь больше признаков из изображения. Обычное количество используемых фильтров обычно кратно 2, например 32, 64, 128 или 256.

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

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

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

n-2*p+f/s →некоторое число

n - входной размер изображения. (если размер изображения 100*100, то n равно 100)

p дополняет (какое-то число)

f — размер фильтра(если размер фильтра 3*3, f равно 3)

s — шаг (некоторое число).

Теперь, когда мы знаем о пространственных картах и ​​сверточных слоях. Мы используем некоторые дополнительные методы для уточнения результатов. Есть еще два компонента, обычно встречающихся в архитектуре CNN. Это Объединяющие слои и Reluфункция активации.

Объединение слоев

Объединяющий слой — это еще один строительный блок CNN. Его функция заключается в постепенном уменьшении пространственного размера представления для уменьшения количества параметров и вычислений в сети. Объединенный слой работает с каждой картой объектов независимо.

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

Распространенные способы объединения

  1. Максимальное объединение
  2. Минимальный пул
  3. Средний пул

Прежде чем разбираться в каждом типе объединения, давайте разберемся, как работает объединение.

На приведенной выше диаграмме предположим, что мы создали карту объектов размером 4*4 и теперь хотим уменьшить размер этой карты объектов. Мы можем использовать слои пула и размер пула.

Размер пула — это просто размер карты объектов, которая будет использоваться на каждом этапе сокращения. Здесь мы использовали 2*2. Это обрежет карту 2 * 2 из карты объектов, а затем извлечет из нее максимальное количество. (Максимальное количество пулов)

Этот процесс будет повторяться для каждой карты объектов независимо. Мы можем взять максимальное количество, используя Max Pooling. Мы можем взять минимальное число, используя Min Pooling, и мы также можем взять среднее значение всех чисел в этом регионе, используя Average pooling. Наиболее распространенными являются максимальное и среднее объединение.

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

Функция активации Relu

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

В нейронных сетях используются различные функции активации, такие как сигмовидная, Relu, Tanh, дырявая Relu, но когда дело доходит до CNN, Relu является наиболее используемой функцией активации.

Relu(Выпрямленная линейная единица) – это просто положительное значение x при заданном входном положительном x и нулях для отрицательного x. Это помогает уточнить функции, а вычисление градиентов также становится быстрее, потому что для всех отрицательных x он будет равен 0.

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

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

Этот процесс можно повторить на несколько уровней в глубину, как в Vgg16, Vgg19, но основные компоненты сверточных нейронных сетей остаются прежними.

Как только мы уточним эти функции, мы используем ИНС или плотные слои, в конце концов, чтобы окончательно изучить функцию между входами и выходами.

Предположим, у нас есть карта объектов размером 30*30*20, тогда мы можем просто сгладить карту объектов и передать ее в искусственную нейронную сеть. В этом случае ввод будет 1*18000. Это очень большой вектор, который будет дорого обрабатывать.

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

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

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