Convolutional Neural Network (CNN)
Сверточная нейронная сеть (CNN) обучается извлекать признаки изображений с помощью общих фильтров, перемещаемых по входным данным. Разбираем её слои, свойства, ключевые модели и сравнение CNN с ViT.
Свёрточная нейронная сеть (CNN) — это архитектура глубокого обучения, которая обрабатывает данные, организованные в виде сетки, чаще всего изображения, с помощью небольших обучаемых фильтров, перемещающихся по входным данным. Каждый фильтр повторно использует одни и те же веса в каждой позиции, поэтому CNN обнаруживает шаблон, например край или колесо, где бы он ни встречался, используя при этом гораздо меньше параметров, чем полносвязная сеть. Последовательность слоёв формирует иерархию признаков: от краёв и текстур в первых слоях до частей объектов и целых объектов в глубоких слоях. CNN обеспечили большую часть прогресса в компьютерном зрении после того, как AlexNet победила в соревновании ImageNet в 2012 году, и остаются самым распространённым выбором для компьютерного зрения в реальном времени на периферийных устройствах.
Как работает CNN#
CNN повторяет несколько типов слоёв в этапах, каждый из которых работает с более низким разрешением, чем предыдущий:
- Слои свёртки: каждый слой перемещает набор обучаемых фильтров, обычно размером 3×3, по высоте и ширине входных данных. Каждый фильтр формирует один канал выходной карты признаков, поэтому слой с 64 фильтрами выдаёт 64 канала.
- Нормализация и активация: Пакетная нормализация поддерживает выходные значения каждого слоя в стабильном диапазоне во время обучения, а нелинейная функция активации, например ReLU или SiLU, позволяет последовательности слоёв представлять не только одно линейное преобразование.
- Уменьшение разрешения: Максимальный пулинг или свёртка с шагом 2 уменьшают высоту и ширину вдвое, увеличивая рецептивное поле последующих слоёв и сокращая вычисления. Во многих современных архитектурах разрешение уменьшается преимущественно с помощью свёрток с шагом.
- Голова: при классификации изображений глобальный средний пулинг сводит каждый конечный канал к одному числу, а полносвязный слой преобразует эти числа в оценки классов. В моделях обнаружения и сегментации вместо этой головы используются слои, предсказывающие рамки или попиксельные маски.
Ключевые свойства CNN#
Три свойства объясняют, почему свёртки подходят для изображений. Локальная связность означает, что каждый выход зависит только от небольшой окрестности входных данных, что соответствует сильной корреляции соседних пикселей. Благодаря разделению весов один фильтр обрабатывает всё изображение, поэтому количество параметров не зависит от размера входных данных. Эквивариантность относительно сдвига означает, что при сдвиге входных данных карта признаков сдвигается на такое же расстояние. Поэтому шаблон, изученный в одном углу, распознаётся повсюду, а слои пулинга дополнительно обеспечивают некоторую устойчивость к небольшим сдвигам. Вместе эти свойства формируют индуктивное смещение CNN — встроенные предположения, которые позволяют ей обучаться на меньшем количестве изображений, чем требуется трансформеру.
Приведённый ниже фрагмент кода на PyTorch сравнивает свёрточный слой и полносвязный слой, применённые к одному RGB-изображению размером 224×224.
import torch
from torch import nn
image = torch.randn(1, 3, 224, 224)
# 64 learnable 3x3 filters, each reused at every position of the RGB image
conv = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, padding=1)
# A fully connected layer mapping the same flattened image to only 64 numbers
dense = nn.Linear(3 * 224 * 224, 64)
conv_params = sum(p.numel() for p in conv.parameters())
dense_params = sum(p.numel() for p in dense.parameters())
print(f"Conv2d: output {tuple(conv(image).shape)}, {conv_params:,} parameters")
print(f"Linear: output {tuple(dense(image.flatten(1)).shape)}, {dense_params:,} parameters")Он выводит Conv2d: output (1, 64, 224, 224), 1,792 parameters и Linear: output (1, 64), 9,633,856 parameters. Благодаря разделению весов свёртка формирует 64 карты признаков полного разрешения всего из 1,792 параметров, а полносвязному слою нужно в 5,376 раз больше параметров, чтобы выдать лишь 64 числа.
Знаковые архитектуры CNN#
- LeNet-5 (1998): сеть Янна Лекуна для распознавания рукописных цифр задала структуру из чередующихся свёрточных слоёв и слоёв пулинга с последующими полносвязными слоями; её использовали в коммерческих системах для чтения банковских чеков.
- AlexNet (2012): обученная на двух GPU с активациями ReLU и дропаутом, она победила в соревновании ILSVRC 2012 с ошибкой тестирования top-5 15.3%, тогда как у занявшей второе место модели она составила 26.2%.
- VGG (2014): показала, что последовательное объединение небольших свёрток 3×3 в сеть глубиной от 16 до 19 слоёв с весами значительно повышает точность на ImageNet.
- ResNet (2015): остаточные соединения позволили обучать сети глубиной до 152 слоёв, а ансамбль ResNet победил в ILSVRC 2015.
- U-Net (2015): CNN типа энкодер-декодер с пропускающими соединениями, ставшая стандартной архитектурой для сегментации биомедицинских изображений.
- ConvNeXt (2022): модернизированная ResNet с элементами дизайна эпохи трансформеров, достигающая точности top-1 на ImageNet 87.8% и превосходящая Swin Transformer в обнаружении объектов на COCO.
Где применяются CNN#
- Обнаружение объектов: одностадийные детекторы на основе CNN находят и классифицируют объекты за один прямой проход — достаточно быстро для обработки видео с камер, телефонов и встроенных плат.
- Анализ медицинских изображений: CNN типа U-Net сегментируют органы, опухоли и поражения на снимках КТ и МРТ, где важна метка каждого пикселя.
- Оценка позы: CNN предсказывают ключевые точки тела для анализа спортивных результатов, эргономики и фитнес-приложений.
- Сигналы, отличные от изображений: свёртки одномерного типа обрабатывают звуковые волны и временные ряды с датчиков, а двумерные CNN классифицируют спектрограммы при распознавании речи.
CNN и визуальные трансформеры#
Визуальный трансформер (ViT) разбивает изображение на фрагменты и связывает каждый фрагмент со всеми остальными с помощью самовнимания, поэтому глобальный контекст доступен уже с первого слоя. За более слабое индуктивное смещение приходится платить: исходная ViT уступала ResNet сравнимого размера при обучении только на ImageNet и сравнялась с ними или превзошла их лишь после предварительного обучения на 14–300 миллионах изображений. Вычислительная стоимость механизма внимания растёт пропорционально квадрату количества фрагментов, из-за чего обработка изображений высокого разрешения обходится дорого; стоимость свёртки растёт лишь линейно с количеством пикселей. Поэтому во многих современных моделях используются оба подхода: свёрточные этапы работают с высоким разрешением, а внимание добавляется там, где карта признаков имеет небольшой размер. YOLO26 использует именно такой подход: блоки Conv (свёртка, пакетная нормализация и SiLU) и блоки C3k2 выполняют основную работу, а многоголовое самовнимание применяется только к карте признаков с шагом 32 — сетке 20×20 для изображения 640×640.










