Это третья часть моей серии сообщений в блоге о сверточных нейронных сетях. Вот необходимые части для этого сообщения в блоге:

Вот следующие части этой серии:

Необходимым условием здесь является знание свертки матриц, которую я кратко объяснил в первом разделе первой части этой серии. Кроме того, сведения о функции активации линейного блока выпрямителя (ReLU) могут помочь вам понять некоторые моменты, о которых я упоминал в разделе 2 здесь.

В предыдущих частях мы рассматривали изображения в оттенках серого (черно-белые изображения). Так что, если входные изображения имеют цвет? Оказывается, теперь мы должны рассматривать 3D-свертки вместо 2D-сверток.

1. Свертки по объему

1.1 Свертки на изображениях RGB

Изображение RGB представлено как объем 6 на 6 на 3, где 3 здесь соответствуют 3 цветным каналам (RGB). Чтобы обнаружить края или другие особенности на этом изображении, вы можете свернуть объем 6 на 6 на 3 с помощью трехмерного фильтра (фильтр 3 на 3 на 3), как показано на рисунке 1, а не с фильтром 3 на 3, как мы видели в предыдущих частях. Таким образом, сам фильтр также будет иметь 3 слоя, соответствующих красному, зеленому и синему каналам. На рисунке 1 обратите внимание, что первые 6 - это высота изображения, вторые 6 - это ширина, а 3 - количество каналов. И ваш фильтр также имеет высоту, ширину и количество каналов. Количество каналов в вашем изображении должно соответствовать количеству каналов в вашем фильтре (обратите внимание, что последние числа соединены изогнутой линией на рисунке 1). Также обратите внимание, что выходное изображение - это изображение 4 на 4 (или 4 на 4 на 1 изображение) вместо изображения 4 на 4 на 3. Это станет ясно, когда мы рассмотрим несколько фильтров в разделе 1.2.

Вот изображение 6 на 6 на 3 и фильтр 3 на 3 на 3, снова показанный на рисунке 2. Обратите внимание, что фильтр 3 на 3 на 3 имеет 27 чисел или 27 параметров, то есть три куба.

Так как же превратить это RGB-изображение в 3D-фильтр? Что вы делаете, так это берете каждое из 27 чисел фильтра и умножаете их на соответствующие числа из красного, зеленого и синего каналов изображения, то есть берете первые 9 чисел из красного канала, а затем 3 под ним в зеленый канал, затем три под ним к синему каналу и умножьте его на соответствующие 27 чисел, которые покрываются этим желтым кубом слева. Затем сложите все эти числа, и это даст вам это первое число на выходе, а затем для вычисления следующего результата вы берете этот куб и сдвигаете его на единицу, и снова, из-за 27 умножений, складываете 27 чисел, которые дает вам следующий результат, сделайте это для следующего числа, для следующей позиции, что дает третий результат и так далее.

1.2 Несколько фильтров

Теперь, когда вы знаете, как выполнять свертку по объемам, что, если бы мы не просто хотели обнаруживать вертикальные края? Что, если бы мы хотели обнаружить вертикальные и горизонтальные кромки, может быть, кромки под углом 45 градусов, а также кромки под 70 градусов, но, другими словами, что, если вы хотите использовать несколько фильтров одновременно?

Итак, вот изображение, которое мы получили из предыдущего раздела 1.1 на рисунке 3. Предположим, что желтоватый фильтр 3 на 3 на 3, возможно, является детектором вертикального края (или, может быть, он предназначен для обнаружения некоторых другая особенность).

Теперь предположим, что есть второй фильтр 3 на 3 на 3, обозначенный оранжевым цветом, это детектор горизонтальных краев, как показано на рисунке 4. Итак, свертка изображения с помощью желтого фильтра дает вам вывод 4 на 4 и свертка с оранжевым фильтром дает другой вывод 4 на 4. Теперь, что мы можем сделать, это взять эти два вывода 4 на 4 и сложить их, чтобы получить результат 4 на 4 на 2. Обратите внимание, что если изображение было сначала свернуто с желтым фильтром, тогда мы берем изображение и результат желтого фильтра как первый (спереди), а затем вы можете взять изображение и выходной оранжевый оранжевый фильтр и сложить его сзади. чтобы в итоге получилось выходное изображение 4 на 4 на 2, показанное справа на рисунке 4. Обратите внимание, что 2 получено из-за того, что мы использовали два разных фильтра.

2. Сверточный слой.

2.1 Пример

Последнее, что нужно сделать, чтобы превратить это в слой сверточной нейронной сети, - это то, что для каждого из них мы добавим смещение, так что это будет действительное число. А при вещании на python вам как бы нужно добавить такое же число, чтобы каждый из этих 16 элементов. А затем примените функцию нелинейности, которая для этой иллюстрации скажем, нелинейность ReLU (Линейный блок выпрямителя), и это дает вам выходной сигнал 4 на 4, все в порядке? После применения смещения и нелинейности. Мы также применяем нелинейность ReLU к оранжевому фильтру (после добавления смещения) и получаем другой выходной сигнал 4 на 4. То же самое, что и раньше, если мы возьмем это и сложим следующим образом, так что мы получим выход 4 на 4 на 2. Затем это вычисление, в котором вы переходите от 6 на 6 на 3 к 4 на 4 на 2, это один слой сверточной нейронной сети.

Итак, чтобы отобразить это обратно на один уровень прямого распространения в стандартной нейронной сети, в несверточной нейронной сети. Помните, что одним шагом прямого распространения было z ^ [1] = w ^ [1] a ^ [0] + b ^ [1]. И вы применяете нелинейность, чтобы получить a [1], так что это g (z ^ [1]), как подчеркнуто в figure 6. По аналогии, здесь входное изображение a ^ [0], это x ^ [3]. Фильтры здесь играют роль, аналогичную w ^ [1]. Итак, вы действительно вычисляете линейную функцию, чтобы получить выходную матрицу 4 на 4, которая имеет вид a ^ [1] = g (z ^ [1]).

2.2 Резюме

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

Выходная матрица матрицы 4 на 4, результат операции свертки, играет роль, аналогичную w ^ [1] a ^ [0]. а выходное изображение играет роль, аналогичную a ^ [1] = g (z ^ [1]), где g - функция нелинейности, такая как ReLU и z ^ [1] = w ^ [1] a ^ [ 0] + b ^ [1]. Так что на самом деле мы просто переходим от a ^ [0] к a ^ [1], где ^ [0] - это входное изображение 6 на 6 на 3, а ^ [1] - это выходное изображение 4 на 4 на 2. См. GIF 2.

Также обратите внимание, что если бы, например, у нас было 10 фильтров вместо 2, то у нас был бы выходной объем 4 на 4 на 10.

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

ССЫЛКИ: