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

Компьютерное зрение быстро улучшается с помощью глубокого обучения. Он применяется к таким вещам, как беспилотный автомобиль и система распознавания лиц. Он может решить такие проблемы, как классификация изображений, обнаружение объектов и передача стиля. Такая революция в компьютерном зрении стала возможной только с использованием сверточных слоев. При полносвязных слоях использование изображений в качестве входных данных требует слишком большого количества параметров. Например, размер матрицы W, которая соединяет вход размером 1000 x 1000 x 3 и скрытый слой 1 с 1000 нейронами, будет (1000, 3 миллиона). Изучение 3 миллиардов параметров всего для одного слоя слишком затратно с точки зрения вычислений. Слои свертки позволяют решить эту проблему.

Обнаружение края

Обнаружение краев - это базовый пример операции свертки, которая является фундаментальным элементом слоев свертки. Во время свертки ядро ​​ (фильтр) будет перемещаться по входу, и на каждой остановке мы вычисляем сумму произведений перекрывающихся значений. . Результатом свертки является матрица / вектор с набором чисел, которые мы вычисляли на каждой остановке. Детектор вертикального края - это ядро ​​ с набором положительных чисел слева и набором отрицательных чисел справа. После свертки изображения большие числа в результирующей матрице укажут нам, в какой части изображения есть резкие изменения значений пикселей слева направо. Используя аналогичную логику, детектор горизонтального края имеет набор положительных чисел вверху и набор отрицательных чисел внизу. В простейшей версии детекторов кромок используются 1 и -1, но в более сложных детекторах кромок, таких как фильтр Собела и фильтр Шарра, используются уникальные наборы чисел. В глубоком обучении мы пытаемся узнать эти числа, рассматривая их как параметры. Обычно обнаружение границ изучается более ранними слоями сети, потому что края являются элементом более низкого уровня.

Обивка

Если размер ядра свертки больше 1 x 1, результирующая матрица должна быть меньше входной. Уменьшение размера приводит к потере информации. Заполнив ввод, мы можем решить эту проблему. Для свертки с заполнением (pxp) входа (nxn) с ядром (fxf) размер вывода равен (n + 2p-f + 1) x (n + 2p-f + 1) . Есть два типичных способа дополнить вход. «Действительная» свертка вообще не выполняет заполнение, а свертка «То же» использует заполнение, так что размер вывода останется таким же, как размер ввода.

Строгая свертка

Во время последовательной свертки размер шага больше 1. Это еще больше сократит выходной размер, потому что ядро ​​будет делать меньше остановок при перемещении с большим размером шага. С шагом (-ами) размер вывода будет ⌊ (n + 2p-f) / s + 1⌋ или floor ((n + 2p-f) / s + 1 ).

Свертка по объемам

У большинства изображений есть такие каналы, как RGB. Итак, у них есть трехмерные формы. К счастью, правила свертки без проблем работают с дополнительными измерениями. С прокладкой (pxpxp) и шагом (sxsxs) свертка (nxnxn) с (fxfxf) выдаст ⌊ (n + 2p-f) / s + 1⌋ x ⌊ (n + 2p-f ) / s + 1⌋ x ⌊ (n + 2p-f) / s + 1⌋ тензор. Чтобы работать с несколькими каналами, мы используем ядра той же глубины, что и изображение. В результате свертка с одним ядром будет выводить двумерную матрицу, и интуитивно свертка с числом ядер N будет выводить трехмерный тензор с N каналами. .

Единый сверточный слой

Слой Conv состоит из двух частей. Сначала вход свертывается с несколькими фильтрами, и к каждому выходу фильтра добавляется смещение. Затем мы передаем его функции активации, такой как ReLU. Это как если бы мы сделали Wx + b = Z, а затем ReLU (Z) в слоях FC. Мы можем выразить две операции в слоях Conv как W @ x + b = Z и ReLU (Z). Для каждого слоя Conv мы можем установить различный размер фильтра (f), отступ (p), шаг (s ) и количество каналов (nc) для W слоя. И они являются гиперпараметрами слоя. Размер W равен f x f x nc, а размер b - nc x 1. Таким образом, общее количество параметров для изучения в слое равно f²nc + nc.

Пример сверточной сети

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

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

Слой пула уменьшает размер входных данных, чтобы ускорить вычисления и сделать функции более надежными. Объединение входных данных 4 x 4 с фильтром 2 x 2 с шагом 4 даст матрицу 2 x 2. Есть два типа операций объединения: максимальное объединение и среднее объединение. Максимальный пул, который используется чаще, выбирает максимальное число в ядре, а средний пул занимает среднее значение в пределах ядра. Для такой операции не требуется никаких параметров. Размер фильтра и шага - это гиперпараметры каждого слоя пула.

Почему свертки?

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