Сверточные нейронные сети (CNN) стали важным математическим методом обработки изображений, позволяя решать такие задачи, как классификация и распознавание изображений. Успех CNN заключается в их способности значительно сократить количество параметров по сравнению с базовыми нейронными сетями. Однако поиск более эффективных алгоритмов и методов не прекращается.
В этой статье мы рассмотрим более эффективную версию CNN под названием «CNN с разделением по глубине».
- Простой 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.
- CNN с разделением по глубине: этот усовершенствованный метод CNN еще больше сокращает количество параметров. Он широко используется по двум причинам:
- Меньшее количество параметров, уменьшающее переоснащение по сравнению со стандартными CNN.
- Вычислительная эффективность за счет сокращения вычислений делает его пригодным для приложений мобильного зрения.
CNN с разделением по глубине выполняется в два этапа:
- Свертки по глубине (стадия фильтрации). В свертках по глубине мы применяем свертки к одному слою за раз, используя размерность ядра Dk x Dk x 1. Поскольку на входе есть M слоев, этот однослойный свертка выполняется M раз. Результирующий результат этого шага имеет размерность (Dg x Dg x M).
- Точечные свертки (этап фильтрации): в точечных операциях операция свертки 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, доступных в настоящее время, и личным фаворитом для многих.