Познакомьте вас с 9 распространенными сверточными нейронными сетями

глубокое обучение

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

Эта статья опубликована в сообществе HUAWEI CLOUD.«Сводка общих сверток в нейронных сетях», оригинальный автор: fdafad.

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

содержание:

1. 2D-свертка

2. 3D свертка

3. 1*1 свертка

4. Пространственно отделимая свертка

5. Разделимые по глубине свертки

6. Групповые данные

7. Расширенная свертка

8. Деконволюция

9. Involution

2D свертка

Один канал: в глубоком обучении свертка, по сути, представляет собой поэлементное умножение и накопление сигнала для получения значения свертки. Для изображения с 1 каналом на следующем рисунке показано, как работает свертка:

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

Многоканальный: поскольку изображения обычно имеют 3 канала RGB, свертка обычно используется для сценариев многоканального ввода. На следующем рисунке показана рабочая форма сценария многоканального ввода:

Здесь входной слой представляет собой матрицу 5 x 5 x 3 с 3 каналами, а фильтры представляют собой матрицу 3 x 3 x 3. Сначала каждое ядро ​​в фильтрах применяется к трем каналам во входном слое отдельно, выполняя кубическую свертку, в результате получается 3 канала размером 3×3:

Затем эти три канала суммируются (поэлементно) для формирования единого канала (3 x 3 x 1), который представляет собой сверток входного слоя (матрица 5 x 5 x 3) с фильтрами (матрица 3 x 3 x 3). Продукт результат:

3D свертка

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

1*1 свертка

Для свертки 1 * 1 кажется, что каждое значение в картах признаков умножается на число на поверхности, но на самом деле это не просто так.Во-первых, поскольку оно будет проходить через слой активации, на самом деле это нелинейное отображение, и во-вторых, количество каналов в картах характеристик можно изменить.

На рисунке выше показано, как он работает с входным слоем размером В x Ш x Г. После свертки 1 x 1 с фильтрами размером 1 x 1 x D размер выходного канала составляет В x Ш x 1. Если мы выполним N таких сверток 1 x 1, а затем объединим результаты, мы получим выходной слой размером H x W x N.

Пространственно отделимая свертка

В разделимой свертке мы можем разделить операцию ядра на несколько шагов. Обозначим свертку через y = conv(x, k), где y — выходное изображение, x — входное изображение, а k — ядро. Этот шаг прост. Далее предположим, что k можно вычислить по следующему уравнению: k = k1.dot(k2). Это сделает свертку отделимой, поскольку мы можем добиться того же результата, выполнив 2 одномерные свертки для k1 и k2 вместо двумерной свертки с k.

Возьмем, к примеру, ядро ​​Sobel, которое обычно используется при обработке изображений. Вы можете получить одно и то же ядро, перемножив векторы [1,0,-1] и [1,2,1].T. Вам нужно всего 6 параметров вместо 9, когда делаете то же самое.

Разделимая по глубине свертка

Пространственно разделимая свертка (предыдущий подраздел), в то время как в глубоком обучении разделимая по глубине свертка будет выполнять пространственную свертка, сохраняя независимость каналов, за которой следует операция свертки по глубине. Предположим, у нас есть сверточный слой 3x3 с 16 входными каналами и 32 выходными каналами. Что произойдет тогда, так это то, что каждый из 16 каналов будет пройден 32 ядрами 3x3, в результате чего карта признаков будет равна 512 (16x32). Затем мы синтезируем большую карту объектов, суммируя карты объектов в каждом входном канале. Так как мы можем сделать это 32 раза, мы получаем желаемые 32 выходных канала. Итак, для того же примера, как работает свертка с разделением по глубине? Мы перебираем 16 каналов, каждый с ядром 3x3, что дает 16 карт функций. Теперь, прежде чем выполнять какое-либо слияние, мы пройдемся по этим 16 картам объектов, каждая из которых содержит 32 свертки 1x1, а затем начнем добавлять одну за другой. В результате получается 656 (16x3x3 + 16x32x1x1) параметров, а не 4608 (16x32x3x3) параметров, как указано выше. Подробное описание будет приведено ниже. Ядро 2D-свертки, упомянутое в предыдущем разделе, представляет собой свертку 1x1. Давайте сначала кратко рассмотрим стандартные 2D свертки. В качестве частного случая предположим, что входной слой имеет размер 7 x 7 x 3 (высота x ширина x каналы), размер фильтра составляет 3 x 3 x 3, а после двумерной свертки фильтра выходной слой имеет размер 5 х 5 х 1 (только 1 канал). Как показано ниже:

Как правило, между двумя слоями нейронной сети применяется несколько фильтров, теперь предположим, что количество фильтров равно 128. 128 двумерных сверток дают 128 выходных карт размером 5 x 5 x 1. Затем эти карты складываются в один слой размером 5 x 5 x 128. Пространственные размеры, такие как высота и ширина, уменьшаются, а глубина увеличивается. Как показано ниже:

Давайте посмотрим, как такого же преобразования можно добиться с помощью отделимых по глубине сверток. Во-первых, мы применяем свертки по глубине к входному слою. Вместо использования одного фильтра размером 3x3x3 мы используем 3 ядра свертки (каждый фильтр размером 3x3x1) каждое в двумерной свертке. Каждое ядро ​​свертки сворачивает только 1 канал входного слоя, такая свертка каждый раз создает карту размером 5x5x1, а затем эти карты складываются вместе для создания изображения 5x5x3, в результате получается выходное изображение размером 5х5х3. Таким образом, глубина изображения остается такой же, как у оригинала.

Свертка с разделением по глубине. Шаг 1. Используйте 3 ядра свертки (каждый фильтр размером 3x3x1) в двумерной свертки вместо одного фильтра размером 3x3x3. Каждое ядро ​​свертки сворачивает только 1 канал входного слоя, такая свертка каждый раз создает карту размером 5x5x1, а затем эти карты складываются вместе для создания изображения 5x5x3, в результате чего получается выходное изображение размером 5х5х3. Второй шаг свертки с разделением по глубине заключается в увеличении глубины, мы делаем свертку 1x1 с ядром свертки размером 1x1x3. Каждое ядро ​​свертки 1x1x3 сворачивает входное изображение 5x5x3, в результате чего получается карта размером 5x5x1.

Таким образом, сделав 128 сверток 1x1, вы получите слой размером 5x5x128.

групповая свертка

Групповая свертка Групповая свертка впервые появилась в AlexNet.Из-за ограниченных аппаратных ресурсов в то время операции свертки не могли обрабатываться на одном и том же графическом процессоре при обучении AlexNet, поэтому автор разделил карты функций на несколько графических процессоров для отдельной обработки, и Наконец, результаты с нескольких графических процессоров объединены.

Ниже описано, как реализована групповая свертка. Во-первых, на рисунке ниже показаны традиционные этапы 2D-свертки. В этом случае входной слой размером 7x7x3 преобразуется в выходной слой размером 5x5x128 путем применения 128 фильтров (каждый размером 3x3x3). В общем случае это можно резюмировать следующим образом: применяя ядра Dout (каждое ядро ​​размером hx wx Din), входной слой размера Hin x Win x Din можно преобразовать во входной слой размера Hout x Wout x Dout выходной слой. При групповой свертке фильтры разбиваются на разные группы, каждая из которых отвечает за работу традиционной 2D свертки с определенной глубиной. Пример на рисунке ниже делает это более понятным.

Расширенная свертка

Параметр, который расширенная свертка вводит в другой сверточный слой, называется скоростью расширения. Это определяет интервал между значениями в ядре. Ядро 3x3 с коэффициентом расширения 2 будет иметь то же поле зрения, что и ядро ​​5x5, используя только 9 параметров. Представьте себе использование ядра 5x5 и удаление строк и столбцов для каждого интервала. (Как показано на рисунке ниже) система может обеспечить большее рецептивное поле при тех же вычислительных затратах. Расширенные свертки особенно популярны при сегментации в реальном времени. Используйте его, когда вам нужна большая область просмотра и вы не можете позволить себе несколько сверток или более крупные ядра.

Интуитивно сложная свертка «расширяет» ядро, вставляя пространство между частями ядра. Этот увеличенный параметр l (скорость расширения) указывает, насколько мы хотим ослабить ядро ​​свертки. На рисунке ниже показан размер ядра свертки при l=1,2,4. (При l=1 атрусная свертка становится стандартной сверткой).

Деконволюция

Упомянутая здесь деконволюция сильно отличается от вычисления деконволюции при обработке одномерных сигналов.Автор FCN называет это обратной сверткой, а некоторые люди называют егоСлой деконволюции - очень неудачное имя, и его скорее следует называть транспонированным сверточным слоем.Мы можем знать, в CNN есть слой con и слой пула, слой con извлекает функции путем свертки изображения, слой пула уменьшает изображение наполовину, чтобы отобразить важные функции, для классической сети распознавания изображений CNN, такой как IMAGENET, конечный результат 1X1X1000, 1000 - это категория вид, 1x1 получить есть. Автор FCN или человек, который исследовал от начала до конца позже, использует деконволюцию для окончательного результата 1x1 (на самом деле окончательный вывод автора FCN не 1X1, что составляет 1/32 размера изображения, но не влияют на деконволюцию. использование). Деконволюция изображения здесь такая же, как принцип полной свертки на рисунке 6. Этот метод деконволюции используется для увеличения изображения. Метод, используемый автором FCN, является вариантом упомянутой здесь деконволюции, так что соответствующий значение пикселя может быть получено, и изображение может быть реализовано от начала до конца.

В настоящее время чаще всего используются 2 типа деконволюции:

Метод 1: полная свертка, полная свертка может увеличить исходный домен определения.

Способ 2: Запишите индекс пула, затем расширьте пространство, а затем заполните его сверткой. Процесс деконволюции изображения выглядит следующим образом:

Ввод: 2x2, ядро: 4x4, скользящий шаг: 3, вывод: 7x7

То есть процесс деконволюции с шагом 3 через ядро ​​свертки 4x4 для изображения 2x2

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

2. Слияние (т. е. добавление) 4 карт признаков с размером шага 3. Например, красная карта признаков по-прежнему находится в исходной позиции ввода (верхний левый угол), а зеленая — в исходной позиции ( правый верхний угол), а размер шага 3 означает, что слияние выполняется каждые 3 пикселя, и добавляются перекрывающиеся части, то есть первая строка и четвертый столбец вывода состоят из первой строки и четвертого столбца вывода. красная карта объектов и первая строка и первый столбец зеленой карты объектов Складываем и так далее.

Можно видеть, что размер деконволюции определяется размером ядра свертки и размером скользящего шага, in — входной размер, k — размер ядра свертки, s — размер скользящего шага, а out — выходной размер

выйти = (in- 1) * s + k

Вышеупомянутый процесс: (2 - 1) * 3 + 4 = 7

Involution

Диссертация: Инволюция: инвертирование свойства свертки для визуального распознавания (CVPR'21).

Адрес открытого исходного кода:GitHub.com/the-li14/Я женщина или…

Несмотря на быстрое развитие архитектур нейронных сетей, свертки по-прежнему являются основным компонентом в построении архитектур глубоких нейронных сетей. Вдохновленное классическими методами фильтрации изображений, ядро ​​свертки обладает двумя замечательными свойствами: пространственно-независимым и зависящим от канала. В Spatial первое свойство гарантирует, что ядра свертки совместно используются в разных позициях, что обеспечивает инвариантность перевода. В области канала спектр ядра свертки отвечает за сбор различной информации, закодированной в разных каналах, удовлетворяя последней характеристике. Кроме того, с момента появления VGGNet современные нейронные сети удовлетворяют требованиям компактности ядер свертки, ограничивая пространственный диапазон ядер свертки не более чем 3*3.

С одной стороны, хотя свойства Spatial-Agnostic и Spatial-Compact имеют смысл с точки зрения повышения эффективности и объяснения трансляционно-инвариантной эквивалентности, они лишают сверточное ядро ​​способности адаптироваться к различным визуальным модальностям в разных пространственных положениях. Кроме того, локальность ограничивает рецептивное поле свертки, создавая проблемы для мелких объектов или размытых изображений. С другой стороны, хорошо известно, что межканальная избыточность внутри ядер свертки заметна во многих классических глубоких нейронных сетях, что ограничивает гибкость ядер свертки для разных каналов.

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

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

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

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

Всем также известно, что недавние дальнейшие исследования, основанные на Self-Attention, показывают, что для многих задач предлагается использовать Transformer для моделирования, чтобы зафиксировать долгосрочные зависимости признаков. В этих исследованиях чистое самовнимание можно использовать для построения независимых моделей с хорошей производительностью. Эта статья покажет, что Само-Внимание моделирует отношения между соседними пикселями через сложную формулу о ядерной структуре, которая на самом деле является частным случаем инволюции. Напротив, ядро, используемое в этой статье, генерируется из одного пикселя, а не из его отношения к соседним пикселям. Делая шаг вперед, авторы демонстрируют в экспериментах, что точность Самовнимания может быть достигнута даже в простой версии.

Процесс расчета оборотов показан на следующем рисунке:

Для вектора признаков в координатной точке входной карты признаков сначала разверните его в форму ядра с помощью преобразования ∅ (FC-BN-ReLU-FC) и измените форму (канал-в-пространство), чтобы получить соответствующее involutionkernel в этой координатной точке, затем выполните Multiply-Add с вектором признаков окрестности этой координатной точки на входной карте признаков, чтобы получить окончательную выходную карту признаков. Конкретный рабочий процесс и изменения формы тензора следующие:​

Кроме того, автор реализует некоторые модели в mmclassficton, mmsegmentation и mmdetection на основе кода серии MM.

Нажмите «Подписаться», чтобы впервые узнать о новых технологиях HUAWEI CLOUD~