сеньорчикОткрыть в Telegram
← вся теориятеория к собесу · Computer Vision

Основы свёрточных сетей

Зачем это спрашивают

Основы CNN (convolutional neural network) - проверка, понимаешь ли ты, почему свёртки победили полносвязные сети на картинках. Любимая арифметика собеса: размер выхода и число параметров слоя - считается в уме за десять секунд.

// Ключ к половине вопросов: параметры свёртки не зависят от размера картинки.

Свёртка: локальность и разделяемые веса

Свёртка - скользящее окно обучаемых фильтров. Две встроенные идеи: локальность (пиксель связан с соседями, а не со всей картинкой) и разделяемые веса (один фильтр едет по всему изображению). Отсюда мало параметров и инвариантность к сдвигу.

Арифметика: размер выхода = (W − K + 2P)/S + 1; padding сохраняет размер, stride уменьшает. Параметры слоя: K·K·C_in·C_out (+ bias) - от размера входа не зависят вовсе.

// Каналы глубже - паттерны абстрактнее: границы → текстуры → части объектов → объекты. Это и есть иерархия признаков.

разделяемые веса
один фильтр на всю картинку - мало параметров, инвариантность к сдвигу

Receptive field и пулинг

Receptive field - участок входа, который «видит» нейрон глубокого слоя; растёт с глубиной. Стек мелких 3×3 покрывает область большого фильтра дешевле по параметрам и с большей нелинейностью - так строятся все современные сети.

Пулинг (max/avg) агрегирует локально: меньше размерность, устойчивость к мелким сдвигам. В новых архитектурах его часто заменяют stride-свёртками.

// Для задач точной локализации агрессивный пулинг вредит - пространственная информация теряется, а она и есть ответ.

receptive field
область входа, видимая нейрону; растёт с глубиной

1×1-свёртки и голова без раздувания

1×1-свёртка - смеситель каналов: межканальные взаимодействия без пространственного контекста и главный инструмент снижения размерности (bottleneck-блоки).

Global average pooling вместо flatten + полносвязный слой: карта признаков усредняется в вектор - меньше параметров на порядки, вход любого размера, меньше переобучение головы.

// Полносвязная голова на большой карте признаков - миллионы лишних параметров и главный источник переобучения старых архитектур.

GAP
global average pooling: карта → вектор без гигантского FC (fully connected)

Как отвечать: «Почему для картинок свёртки, а не полносвязные слои?»

Полносвязный слой на картинке 224×224 это миллионы параметров на один слой и ноль знания о структуре: он не в курсе, что пиксель связан с соседями. Свёртка встраивает два правильных предположения: локальность - паттерны локальны, и разделяемые веса - один и тот же фильтр полезен в любом месте картинки. Получаем на порядки меньше параметров, инвариантность к сдвигу и иерархию признаков от границ к объектам. Число параметров свёрточного слоя вообще не зависит от размера входа - только от размера ядра и числа каналов.

Ответ через встроенные предположения о данных плюс арифметический факт про параметры - уровень «понимаю конструкцию».

На чём валят

  • Считать параметры свёртки зависящими от размера картинки - только K, C_in, C_out.
  • Глубокая сеть без нормализации и резидуалов - сигнал затухает, обучение стоит.
  • Max-pool везде «по традиции» - точной локализации агрессивный пулинг вредит.
  • Полносвязная голова на большой карте признаков вместо GAP (global average pooling) - миллионы лишних параметров.

Проверьте себя

Пять вопросов из банка по этой подтеме. Всего их 13, остальные разбираются в тренажёре.

  1. #cnn_fundamentals1 / 5
    Что такое рецептивное поле нейрона и почему оно важно для детекции объектов разного размера?
    A)Это яркость отдельного пикселя на входном изображении, которую конкретный нейрон сети умеет измерять точнее прочих
    B)Область входного изображения, влияющая на активацию нейрона; мелкие объекты требуют мелких полей/ранних слоёв, крупные — глубоких
    C)Число обучаемых параметров в одном свёрточном фильтре, которое напрямую задаёт максимальный размер распознаваемого объекта
    D)Часть экрана, на которую смотрит пользователь при разметке, определяющая качество итоговой обучающей выборки изображений
    показать ответ и разбор
    +B)Область входного изображения, влияющая на активацию нейрона; мелкие объекты требуют мелких полей/ранних слоёв, крупные — глубоких

    // разбор: Рецептивное поле — область входного изображения, которая влияет на значение конкретного нейрона. У ранних слоёв оно маленькое (видят детали), у глубоких — большое (видят крупные структуры). Для детекции это ключево: мелкие объекты теряются на глубоких слоях с большим полем, крупные — не помещаются в мелкое. Отсюда мультимасштабные подходы (FPN), объединяющие признаки разных уровней.

  2. #cnn_fundamentals2 / 5
    Зачем в свёрточном слое добавляют padding (например, 'same')?
    A)Чтобы случайным образом занулить часть входа ради дополнительной регуляризации сети при обучении
    B)Чтобы увеличить число каналов на выходе слоя, не меняя ширину и высоту карты признаков
    C)Чтобы карта на выходе не сжималась по краям и граничные пиксели участвовали полноценно
    D)Чтобы перемешать пиксели по краям изображения перед подачей их в следующий слой сети
    показать ответ и разбор
    +C)Чтобы карта на выходе не сжималась по краям и граничные пиксели участвовали полноценно

    // разбор: Без паддинга каждая валидная свёртка отрезает рамку по краям: карта уменьшается, а угловые пиксели попадают под ядро реже центральных. padding='same' достраивает (обычно нулевую) рамку, так что выход сохраняет размер входа, а границы обрабатываются полноценно. 'valid' — без паддинга, с усадкой. На число каналов паддинг не влияет — это про пространственный размер.

  3. #cnn_fundamentals3 / 5
    Как страйд (stride) свёртки влияет на размер выходной карты признаков?
    A)Никак: страйд меняет число обучаемых весов в фильтре, но не размер выходной карты
    B)Пропорционально увеличивает выходную карту, повышая её пространственное разрешение
    C)Влияет лишь на глубину (число каналов) выхода, оставляя ширину и высоту неизменными у итоговой выходной карты признаков после свёртки
    D)Больше страйд — реже позиции фильтра — меньше карта: примерно вход, делённый на страйд
    показать ответ и разбор
    +D)Больше страйд — реже позиции фильтра — меньше карта: примерно вход, делённый на страйд

    // разбор: Страйд — шаг, с которым фильтр скользит по входу. При страйде 2 фильтр встаёт вдвое реже, и выходная карта примерно вдвое меньше по каждой оси (точно (W−K+2P)/S+1). Так страйд, как и пулинг, снижает пространственный размер и расширяет рецептивное поле. Число весов фильтра от страйда не зависит, каналы задаёт число фильтров.

  4. #cnn_fundamentals4 / 5
    Зачем в сетях используют свёртки 1×1 (например, в bottleneck-блоках)?
    A)Чтобы увеличить рецептивное поле, охватив одним фильтром заметно больший кусок входа сразу
    B)Чтобы сгладить изображение, усредняя соседние пиксели в пределах окна один на один и убрать из карты признаков высокочастотный шум
    C)Чтобы смешать и сжать/расширить каналы и добавить нелинейность, не трогая пространственный размер
    D)Чтобы заменить собой операцию пулинга, уменьшив ширину и высоту карты признаков вдвое
    показать ответ и разбор
    +C)Чтобы смешать и сжать/расширить каналы и добавить нелинейность, не трогая пространственный размер

    // разбор: Свёртка 1×1 не смотрит на пространственных соседей (окно один пиксель), зато линейно комбинирует значения по всем каналам в каждой точке — дешёвый способ поменять число каналов (сжать в bottleneck или расширить) и добавить нелинейность через активацию. Рецептивное поле она не растит и размер карты не меняет. Отсюда её роль в Inception и ResNet-bottleneck.

  5. #cnn_fundamentals5 / 5
    За счёт чего depthwise separable свёртки (MobileNet) резко сокращают вычисления?
    A)Разбивают свёртку на пространственную по каждому каналу отдельно и 1×1 по каналам — сумма дешевле полной
    B)Убирают свёртки, заменяя их полносвязными слоями меньшего размера
    C)Считают свёртку на каждом втором пикселе входа, пропуская половину позиций
    D)Обучаются сразу в пониженной точности int8, отчего и работают в несколько раз быстрее
    показать ответ и разбор
    +A)Разбивают свёртку на пространственную по каждому каналу отдельно и 1×1 по каналам — сумма дешевле полной

    // разбор: Обычная свёртка одновременно смешивает пространство и каналы — дорого. Depthwise separable факторизует её: depthwise (отдельный пространственный фильтр на каждый канал) плюс pointwise 1×1 (смешивание каналов). Сумма операций в разы меньше полной свёртки при близком качестве — отсюда лёгкие мобильные сети. Это факторизация, а не квантизация и не пропуск пикселей.

дальше

Теорию прочитали. Навык ставится повторением

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