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

В этой статье мы рассмотрим более эффективную версию CNN под названием «CNN с разделением по глубине».

  1. Простой CNN: рассмотрим входное изображение с размерами Df x Df x M и применим CNN с N ядрами свертки размером Dk x Dk x M. Свертка будет выполняться на всем изображении, учитывая его глубину с тремя каналами (RGB). ), что приводит к выходу размера Dg x Dg x N.

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

  • Количество умножений в 1 операции свертки = Dk x Dk x M.
  • Так как имеется N фильтров, каждый фильтр будет скользить по горизонтали и вертикали Dg раз.
  • Результат свертки становится N x Dg x Dg x (умножения на сверток).
  • Общее количество умножений = N x Dg² x Dk² x M.
  1. CNN с разделением по глубине: этот усовершенствованный метод CNN еще больше сокращает количество параметров. Он широко используется по двум причинам:

  • Меньшее количество параметров, уменьшающее переоснащение по сравнению со стандартными CNN.
  • Вычислительная эффективность за счет сокращения вычислений делает его пригодным для приложений мобильного зрения.

CNN с разделением по глубине выполняется в два этапа:

  1. Свертки по глубине (стадия фильтрации). В свертках по глубине мы применяем свертки к одному слою за раз, используя размерность ядра Dk x Dk x 1. Поскольку на входе есть M слоев, этот однослойный свертка выполняется M раз. Результирующий результат этого шага имеет размерность (Dg x Dg x M).

  1. Точечные свертки (этап фильтрации): в точечных операциях операция свертки 1×1 применяется к M каналам. Размерность фильтра для этой операции составляет 1 x 1 x M. Если используется N фильтров, выходной размер становится равным Dg x Dg x N. Комбинация обоих шагов завершает CNN с разделением по глубине.

Общее количество операций умножения в этом процессе определяется выражением:

  • Сложность свертки по глубине: M x Dp² x (Dk² + N)
  • Стандартная сложность свертки: N x Dp² x Dg² x M

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

Например, при N = 1024 и Dk = 3 отношение равно 0,112, что указывает на то, что стандартная CNN имеет в девять раз больше параметров, чем CNN с разделением по глубине.

Приложения CNN с разделением по глубине включают MobileNet и Xception, оба предложенные Google.

· В приведенной выше структуре вы можете видеть, что мы начали наш процесс с ввода изображения размером 224 x 224 x3.

· Затем мы применяем слой CONV размером 3 x 3 x 3 (соответствующий входным каналам) и 32 фильтра с шагом 2.

· Точно так же вся структура определяется разным количеством нейронов в слоях, и шаг меняется непрерывно.

· Полносвязный слой из 1024 нейронов добавляется после выравнивания слоя CNN, а на выходном слое используется функция активации SoftMax.

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

MobileNet, например, демонстрирует эффективный дизайн с полностью связанным слоем из 1024 нейронов после выравнивания слоя CNN с использованием функции активации SoftMax на выходном слое. Его компактные характеристики и замечательные результаты делают его одним из самых эффективных CNN, доступных в настоящее время, и личным фаворитом для многих.