Свёрточные сети остаются базой компьютерного зрения и частой темой собеса: посчитать размер выхода и число параметров, объяснить рецептивное поле, рассказать про ResNet и про то, когда брать ViT.
Свёртка
Ядро k×k (по всем входным каналам) скользит по изображению и в каждой позиции считает взвешенную сумму окна. В нейросетях это кросс-корреляция, ядро не переворачивают.
out = ⌊(in + 2·padding - kernel) / stride⌋ + 1
Вход 32×32, ядро 5×5, stride 1, без padding: 28×28. Padding (k - 1)/2 при stride 1 сохраняет размер.
Параметры: (k·k·C_in + 1)·C_out. Слой 64 → 128 каналов с ядром 3×3: (576 + 1)·128 = 73 856. Число параметров не зависит от размера картинки.
Почему свёртки
- Локальность: соседние пиксели связаны.
- Разделение весов: одно ядро для всех позиций, параметров на порядки меньше, чем у полносвязного слоя.
- Эквивариантность к сдвигу: признак находится в любом месте.
Пулинг и уменьшение разрешения
Max pooling 2×2 со stride 2 вдвое уменьшает размер, без параметров. Сейчас часто используют свёртки со stride 2 и global average pooling перед классификатором: он сжимает каждую карту в число.
Рецептивное поле
Каждая свёртка 3×3 со stride 1 расширяет поле на 2: три подряд дают 7×7, как одна 7×7, но с 27C² параметров вместо 49C² и тремя нелинейностями (идея VGG).
Особые свёртки
- 1×1: смешивает каналы в каждой точке, меняет их число (bottleneck в ResNet).
- Depthwise separable: depthwise k×k по каналам плюс pointwise 1×1, в 8-9 раз дешевле. Основа MobileNet.
- Dilated: окно с пропусками, большое поле без потери разрешения (сегментация).
Архитектуры
- AlexNet, VGG: глубина и маленькие ядра.
- ResNet: residual-связи, сети 50-150 слоёв, популярный бэкбон.
- EfficientNet, MobileNet: эффективность для устройств.
- ConvNeXt: современная CNN, конкурентная с трансформерами.
- ViT: картинка режется на патчи-токены, дальше трансформер. Слабее встроенные предположения о локальности, поэтому на малых данных CNN обычно лучше, а при большом предобучении ViT сильнее.
Задачи CV
- Классификация: бэкбон и голова.
- Детекция: рамки и классы (одноэтапные и двухэтапные детекторы).
- Сегментация: класс для каждого пикселя (U-Net, энкодер-декодер).
Малые данные
Почти всегда transfer learning: предобученный бэкбон, новая голова, затем аккуратная разморозка. Нормализация входа как при предобучении, аугментации под реальную съёмку, валидация по партиям или камерам.
Частые ошибки
- Забыть +1 в формуле размера или округление вниз.
- Считать параметры без учёта входных каналов.
- Учить с нуля на тысяче картинок.
- Не нормализовать вход средними и std предобучения.
Что спросят на собесе
- Размер выхода и число параметров свёрточного слоя.
- Почему свёртки лучше полносвязных для картинок.
- Рецептивное поле, свёртки 1×1, depthwise separable.
- Идея ResNet, ViT против CNN.
- Как сделать классификатор на маленьком датасете.