В контексте машинного обучения свертка — это процесс вычисления двух матриц A и B, где матрица A будет входом, а B — фильтром, также называемым ядром, затем будет сгенерирована новая матрица C, которая называется карта объектов.

Существуют разные типы сверток, каждый из которых имеет свои плюсы и минусы, но здесь мы рассмотрим свертки с разделением по глубине, а также как их реализовать в Pytorch.

Свертки с разделением по глубине были впервые использованы в Rigid-Motion Scattering, а затем популяризированы сетями Xception.

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

Поточечная свертка — это тип свертки, в котором используется ядро ​​1x1.

Свертка с разделением по глубине – это комбинация обеих сверток по глубине, за которой следует точечная свертка.

Основные преимущества отделимых по глубине сверток

  • У них меньшее количество параметров для настройки по сравнению со стандартными CNN, что уменьшает переобучение.
  • Они в вычислительном отношении дешевле из-за меньшего количества вычислений, что делает их отличным вариантом для работы на слабом оборудовании (см. MobileNet).

Реализация Pytorch

Как видите, в свертке по глубине намного меньше параметров (1/4), что просто означает, что свертка с разделением по глубине работает намного быстрее, чем обычная свертка.

Если вы хотите глубже изучить извилины, а также производительность, я рекомендую вам прочитать оригинальную статью Xception, объясняющую все это https://arxiv.org/pdf/1610.02357v3.pdf.

Если этот пост был полезен, пожалуйста, несколько раз нажмите кнопку аплодисментов 👏, чтобы выразить свою поддержку автору 👇

🚀Разработчики: учитесь и развивайтесь, не отставая от того, что важно, ПРИСОЕДИНЯЙТЕСЬ К FAUN.