Компьютерное зрение

Объяснение архитектуры Resnet

В своей публикации 2015 года Глубокое остаточное обучение для распознавания изображений Каймин Хэ, Сянъюй Чжан, Шаоцин Рен и Цзянь Сунь создали особый тип нейронной сети, известный как ResNet или Остаточная сеть.

Каждая последовательная архитектура-победитель использует больше слоев в глубокой нейронной сети, чтобы снизить частоту ошибок после первой архитектуры на основе CNN (AlexNet), которая выиграла конкурс ImageNet 2012. Это эффективно для меньшего количества слоев, но когда мы добавляем больше слоев, возникает типичная проблема глубокого обучения, известная как исчезающий/взрывающийся градиент. Это приводит к тому, что градиент становится нулевым или слишком большим. Следовательно, частота ошибок при обучении и тестировании одинаково увеличивается с увеличением количества слоев.

На следующем рисунке видно, что 20-уровневая архитектура CNN лучше подходит для обучения и тестирования наборов данных, чем 56-уровневая архитектура CNN. Авторы пришли к выводу, что частота ошибок вызвана исчезающим/взрывающимся градиентом после дальнейшего анализа частоты ошибок.

Новая архитектура под названием Residual Network была запущена экспертами Microsoft Research в 2015 году с предложением ResNet.

Что такое Реснет?

Идея Residual Blocks была создана этим дизайном для решения проблемы исчезающего/взрывающегося градиента. Мы применяем метод, известный как пропуск соединений в этой сети. Соединение с пропуском обходит некоторые промежуточные уровни для активаций связующего уровня на последующих уровнях. Это создает остаточный блок. Эти оставшиеся блоки складываются для создания реснетов.

Стратегия этой сети состоит в том, чтобы позволить сети соответствовать остаточному отображению, а не заставлять слои изучать лежащее в основе отображение. Таким образом, пусть сеть подходит вместо использования, скажем, начального отображения H(x),

F(x) := H(x) - x which gives H(x) := F(x) + x.

Преимущество включения такого рода ссылки для пропуска заключается в том, что регуляризация пропускает любой уровень, который снижает производительность архитектуры. В результате обучение чрезвычайно глубокой нейронной сети возможно без проблем с исчезновением или расширением градиентов. 100–1000 слоев набора данных CIFAR-10 использовались для экспериментов авторами статьи.

Подобные методы существуют под названием «сети автомобильных дорог», в которых также используются пропускные соединения. Эти пропущенные соединения также используют параметрические вентили, как и LSTM. Эти шлюзы контролируют объем данных, которые проходят через пропущенное соединение. Однако эта конструкция не обеспечивает точности, превосходящей архитектуру ResNet.

Существенные особенности архитектуры ResNet:

  • С долей ошибок 3,57 % в пятерке лучших занял первое место в классификационном соревновании ILSVRC в 2015 году (образцовый ансамбль).
  • Выиграл первый приз в категориях обнаружения ImageNet, локализации ImageNet, обнаружения Coco и сегментации Coco на конкурсе ILSVRC и COCO 2015 года.
  • ResNet-101 используется в Faster R-CNN для замены слоев VGG-16. Они заметили относительное улучшение на 28 процентов.
  • Сети из 100 слоев и 1000 слоев, которые хорошо обучены.

Зачем нам нужен ResNet?

Мы добавляем дополнительные уровни в глубокие нейронные сети, что повышает точность и производительность, часто для решения сложной задачи. Идея многослойности заключается в том, что когда добавляются дополнительные слои, они в конечном итоге изучают более сложные функции. Например, при распознавании фотографий первый слой может распознавать края, второй — текстуры, третий — объекты и так далее. Однако было обнаружено, что обычная модель сверточной нейронной сети имеет максимальный порог глубины. На этом графике показан процент ошибок для обучающих и тестовых данных для 20-слойной сети и 56-слойной сети соответственно.

Как при обучении, так и при тестировании мы можем наблюдать, что процент ошибок для 56-слойной сети выше, чем для 20-слойной сети. Это показывает, что производительность сети снижается по мере добавления дополнительных слоев поверх нее. Это может быть связано с инициализацией сети, функцией оптимизации и, что наиболее важно, с проблемой исчезающего градиента. Можно предположить, что виновата и переобучение, однако в этом случае процент ошибок 56-слойной сети наихудший как на обучающих, так и на тестовых данных, чего не происходит при переобучении модели.

Ресет-архитектура

Вдохновленная VGG-19 34-уровневая простая сетевая архитектура, используемая ResNet, сопровождается добавлением быстрого соединения. Архитектура впоследствии преобразуется в остаточную сеть с помощью этих коротких соединений, как показано на следующем рисунке:

ResNet с использованием Keras

Платформа нейронной сети на основе Python с открытым исходным кодом под названием Keras может использоваться с TensorFlow, Microsoft Cognitive Toolkit, R, Theano или PlaidML. Это сделано для того, чтобы ускорить эксперименты с глубокими нейронными сетями. Следующие реализации ResNet являются частью приложений Keras и предлагают ResNet V1 и ResNet V2 с 50, 101 или 152 слоями.

  • Реснет50
  • Реснет101
  • Реснет152
  • Реснет50в2
  • Реснет101V2
  • Реснет152V2

ResNetV2 и исходная версия ResNet (V1) различаются главным образом тем, что V2 применяет пакетную нормализацию перед каждым слоем веса.

Ренет 50

Чтобы реализовать ResNet версии 1 с 50 слоями (ResNet 50), мы просто используем функцию из Keras, как показано ниже:

Используемые аргументы:

  • include_top: включать ли полносвязный уровень в верхнюю часть сети.
  • веса: один из вариантов «Нет» (случайная инициализация), «ImageNet» (предварительное обучение в ImageNet) или путь к загружаемому файлу весов.
  • input_tensor: необязательный тензор Кераса (т. е. вывод Layers.Input()) для использования в качестве входного изображения для модели.
  • input_shape: необязательный кортеж формы, который следует указывать только в том случае, если include_top имеет значение False (в противном случае входная форма должна быть (224, 224, 3) (с форматом данных 'channels_last') или (3, 224, 224) (с форматом данных 'channels_first'). Он должен иметь ровно 3 входных канала, а ширина и высота должны быть не меньше 32. Например, (200, 200, 3) будет одним допустимым значением.
  • объединение: дополнительный режим объединения для извлечения функций, если для include_top установлено значение False.

1 . None означает, что выходными данными модели будут четырехмерные тензорные выходные данные последнего блока свертки.

2. avg означает, что объединение глобальных средних значений будет применяться к выходным данным последнего блока свертки, и, таким образом, выходными данными модели будет двумерный тензор.

3. max означает, что будет применяться глобальное максимальное объединение.

  • classes: необязательное количество классов для классификации изображений, которое должно быть указано только в том случае, если include_top имеет значение True и если аргумент веса не указан.

Аналогичным образом мы можем использовать остальные варианты ResNet с Keras, которые вы можете найти в их официальной документации.

Заключение

  • Надежная магистральная модель под названием ResNet часто используется в различных задачах компьютерного зрения.
  • ResNet использует пропущенные соединения для передачи вывода с одного уровня на другой. Это помогает уменьшить проблему исчезающих градиентов.
  • Вы можете загрузить ResNet 50, уже обученный с помощью Keras, или написать ResNet самостоятельно.