Открыть сервис

ResNet-50

ResNet-50 — это глубокая свёрточная нейронная сеть (CNN), архитектура которой была предложена исследователями из Microsoft Research в 2015 году. Она является одной из наиболее известных и широко используемых реализаций концепции остаточного обучения (Residual Learning), позволившей решить проблему деградации точности при увеличении глубины сети. ResNet-50 состоит из 50 слоёв (включая свёрточные, пакетной нормализации и полносвязные) и насчитывает около 25,6 миллиона обучаемых параметров. Модель стала основой для многих задач компьютерного зрения, включая классификацию изображений, детекцию объектов и сегментацию.

История

Архитектура ResNet (Residual Network) была впервые представлена в 2015 году в статье «Deep Residual Learning for Image Recognition» авторства Кайминг Хэ, Сянюй Чжана, Шаоцин Жэня и Цзянь Суня. На момент публикации глубина нейронных сетей была ограничена проблемой исчезающего градиента: при добавлении новых слоёв точность на обучающей выборке сначала насыщалась, а затем резко падала (так называемая проблема деградации). ResNet предложила механизм «коротких соединений» (skip connections), позволяющий градиентам распространяться напрямую через несколько слоёв, что сделало возможным обучение сетей глубиной более 100 слоёв.

Модель ResNet-50 стала одним из вариантов, предложенных в той же работе. Она представляет собой компромисс между глубиной и вычислительной сложностью, будучи менее ресурсоёмкой, чем ResNet-101 или ResNet-152, но значительно более точной, чем более мелкие варианты (ResNet-18, ResNet-34). В 2015 году ансамбль из нескольких глубоких ResNet занял первое место в соревновании ILSVRC 2015 (ImageNet Large Scale Visual Recognition Challenge) по классификации изображений, показав ошибку топ-5 в 3,57%, что превзошло результаты человека (около 5%).

Архитектура

Основные компоненты

Архитектура ResNet-50 основана на последовательном применении свёрточных слоёв, слоёв пакетной нормализации (Batch Normalization) и функций активации ReLU. Ключевым нововведением являются остаточные блоки (residual blocks), которые реализуют короткие соединения.

Остаточный блок

Вместо того чтобы пытаться выучить отображение H(x) напрямую, остаточный блок учит функцию F(x) = H(x) — x. Выход блока вычисляется как y = F(x) + x, где x — входной сигнал, а F(x) — результат применения нескольких свёрточных слоёв. Если F(x) оказывается близкой к нулю, блок приближается к тождественному отображению, что позволяет легко добавлять новые слои без ущерба для производительности.

Структура сети

ResNet-50 делится на пять основных стадий (stages), каждая из которых содержит несколько остаточных блоков:

  • Стадия 1 (начальная обработка): 7×7 свёртка (64 фильтра) с шагом 2, затем 3×3 макс-пулинг с шагом 2.
  • Стадия 2: 3 остаточных блока с 64, 64 и 256 фильтрами соответственно (с использованием «узких мест» — bottleneck blocks).
  • Стадия 3: 4 остаточных блока с 128, 128 и 512 фильтрами.
  • Стадия 4: 6 остаточных блоков с 256, 256 и 1024 фильтрами.
  • Стадия 5: 3 остаточных блока с 512, 512 и 2048 фильтрами.

После последней стадии следует глобальный средний пулинг (average pooling) и полносвязный слой с 1000 нейронами (для классификации на 1000 классов ImageNet). Функция активации на выходе — softmax.

Bottleneck-блоки

Для уменьшения вычислительной сложности в ResNet-50 используются блоки типа «bottleneck». Внутри каждого такого блока последовательно применяются три свёрточных слоя: 1×1 (сжатие размерности), 3×3 (основная свёртка) и 1×1 (восстановление размерности). Например, в блоке стадии 2: 1×1 (64 фильтра), 3×3 (64 фильтра), 1×1 (256 фильтров). Это позволяет сократить количество параметров по сравнению с прямым использованием трёх слоёв 3×3.

Обучение

Предварительное обучение

Наиболее распространённым способом использования ResNet-50 является предварительное обучение на наборе данных ImageNet (более 14 миллионов изображений, 1000 классов). Процесс обучения включает:

  • Оптимизатор: стохастический градиентный спуск (SGD) с импульсом (momentum) 0,9.
  • Скорость обучения: начальная скорость обучения 0,1, которая уменьшается в 10 раз каждые 30 эпох.
  • Аугментация данных: случайные обрезки, горизонтальные отражения, изменение яркости и насыщенности.
  • Регуляризация: L2-регуляризация (weight decay) с коэффициентом 0,0001.
  • Размер мини-батча: 256.

Обучение на одном GPU (например, NVIDIA Tesla M40) занимает около 2–3 недель. Модель достигает точности топ-1 около 76% и топ-5 около 93% на валидационном наборе ImageNet.

Тонкая настройка

Благодаря предварительному обучению, ResNet-50 широко используется для трансферного обучения. Пользователи загружают веса, обученные на ImageNet, заменяют последний полносвязный слой на новый с нужным количеством классов и дообучают модель на своём наборе данных. Обычно тонкая настройка включает:

  • Заморозку первых нескольких стадий (чтобы сохранить общие признаки).
  • Обучение последних слоёв с меньшей скоростью обучения (например, 0,001).
  • Использование той же аугментации данных, что и при предварительном обучении.

Применение

ResNet-50 нашла применение в широком спектре задач компьютерного зрения:

Классификация изображений

Базовое применение — распознавание объектов на изображениях. Модель способна классифицировать изображения по 1000 категориям ImageNet (например, «кот», «автомобиль», «самолёт»). В промышленности используется для сортировки товаров, контроля качества, медицинской диагностики (например, классификация рентгеновских снимков).

Детекция объектов

ResNet-50 часто используется как backbone (основная сеть) в детекторах объектов, таких как Faster R-CNN, YOLO (начиная с версии 3) и RetinaNet. В этом случае сеть извлекает карты признаков, которые затем передаются в специализированные головы для предсказания bounding boxes и классов.

Сегментация изображений

В архитектурах для семантической сегментации (например, DeepLab, U-Net с ResNet-50 в качестве энкодера) модель используется для извлечения многомасштабных признаков, которые затем декодируются в карту сегментации.

Генерация изображений

ResNet-50 может служить частью генеративно-состязательных сетей (GAN) в качестве дискриминатора, оценивающего реалистичность сгенерированных изображений.

Обработка видео

Применяется для анализа видеопотоков: распознавание действий, трекинг объектов, детекция аномалий.

Производительность

Точность

На наборе данных ImageNet ResNet-50 показывает:

  • Топ-1 ошибка: около 24,5% (точность 75,5%).
  • Топ-5 ошибка: около 6,8% (точность 93,2%).

Для сравнения, более глубокая ResNet-152 даёт топ-1 ошибку около 22,5%, но требует в 2–3 раза больше вычислений.

Скорость

На современном GPU (например, NVIDIA RTX 3090) ResNet-50 обрабатывает около 1000–1500 изображений в секунду при размере батча 32. На CPU (Intel Core i7-10700K) скорость составляет около 10–20 изображений в секунду.

Размер модели

Объём файла с весами (в формате .h5 или .pth) составляет около 98 МБ. В памяти GPU модель занимает около 200–300 МБ при батче 32.

Варианты и модификации

На основе ResNet-50 создано множество вариантов и улучшений:

  • ResNet-50v2: модификация, где пакетная нормализация и ReLU перенесены внутрь остаточного блока (pre-activation), что улучшает сходимость.
  • ResNeXt-50: использует групповые свёртки (group convolutions) для увеличения ёмкости без роста числа параметров.
  • Wide ResNet-50: увеличивает ширину (количество фильтров) в блоках, что повышает точность при меньшей глубине.
  • ResNet-50 с вниманием (SENet-50): добавляет блоки сжатия-возбуждения (Squeeze-and-Excitation), которые адаптивно перекалибруют канальные признаки.

Критика и ограничения

Несмотря на успех, ResNet-50 имеет ряд недостатков:

  • Высокая вычислительная нагрузка: для мобильных устройств или встраиваемых систем модель слишком тяжёлая (требуется квантизация или дистилляция).
  • Чувствительность к аугментации: без правильной аугментации данных модель может переобучаться на небольших наборах.
  • Ограниченная интерпретируемость: как и большинство глубоких нейросетей, ResNet-50 остаётся «чёрным ящиком», что затрудняет отладку и объяснение решений.
  • Устаревание: с появлением архитектур на основе трансформеров (ViT, Swin Transformer) ResNet-50 постепенно уступает в точности на крупных наборах данных, хотя остаётся конкурентоспособной на средних и малых наборах.

Интересные факты

  • ResNet-50 — одна из первых моделей, которая была успешно обучена с глубиной более 50 слоёв. До её появления сети с 20+ слоями часто страдали от деградации.
  • Архитектура ResNet вдохновила создание многих других моделей, включая DenseNet, ResNeXt и EfficientNet.
  • В 2016 году ResNet-50 была портирована на мобильные устройства с помощью технологии TensorFlow Lite, что позволило выполнять классификацию в реальном времени на смартфонах.
  • Модель используется в популярных фреймворках машинного обучения, таких как TensorFlow, PyTorch и Keras, где доступна как предварительно обученная модель в один клик.

Источники

  • He, K., Zhang, X., Ren, S., & Sun, J. (2016). Deep Residual Learning for Image Recognition. Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR).
  • He, K., Zhang, X., Ren, S., & Sun, J. (2016). Identity Mappings in Deep Residual Networks. European Conference on Computer Vision (ECCV).
  • Russakovsky, O., et al. (2015). ImageNet Large Scale Visual Recognition Challenge. International Journal of Computer Vision (IJCV).
  • Документация TensorFlow: ResNet-50 предварительно обученная модель. TensorFlow Hub.
  • Документация PyTorch: torchvision.models.resnet50. PyTorch.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →