В этой статье рассматриваются детали реализации MobileNetV3 в TorchVision.

искусственный интеллект PyTorch

TorchVision v0.9 добавляет серию мобильных моделей,Его можно использовать для решения таких задач, как классификация, обнаружение объектов и семантическая сегментация.

В этой статье мы углубимся в код для этих моделей, поделимся важными деталями реализации, объясним, как эти модели настраиваются и обучаются, а также интерпретируем важные компромиссы, сделанные официальными лицами во время оптимизации модели.

Цель этой статьи — показать технические детали модели, которые не задокументированы в оригинальных документах и ​​репозиториях.

Сетевая архитектура

Реализация архитектуры MobileNetV3 строго следует настройкам в оригинальной статье,Поддерживает пользовательскую настройку и предоставляет различные конфигурации для построения классификации, обнаружения объектов и семантической сегментации Backbone.Его структурный дизайн похож на MobileNetV2, и оба используют одни и те же строительные блоки.

из коробки.Официально доступны два варианта: Большой и Маленький. Оба построены с использованием одного и того же кода, разница только в конфигурации (количество модулей, размер, функции активации и т.д.).

Параметры конфигурации

Хотя пользователь может настроить параметр InvertedResidual и передать его непосредственно классу MobileNetV3, для большинства приложенийРазработчики могут корректировать существующие конфигурации, передавая параметры методу построения модели.Вот некоторые ключевые параметры конфигурации:

  • width_multПараметр представляет собой множитель, который определяет количество модельных конвейеров.Значение по умолчанию равно 1.Количество сверточных фильтров можно изменить, изменив значение по умолчанию, включая первый слой и последний слой.Убедитесь, что количество фильтров 8. кратно. Это трюк аппаратной оптимизации, который ускоряет векторизацию операций.

  • reduced_tailПараметры в основном используются для оптимизации скорости работы, что вдвое сокращает количество конвейеров в последнем модуле сети. Эта версия часто используется в моделях обнаружения объектов и семантической сегментации. Согласно описанию документа, относящегося к MobileNetV3, использование параметра Reduced_tail может уменьшить задержку на 15%, не влияя на точность.

  • dilatedПараметры в основном влияют на последние 3 модуля InvertedResidual модели.Свертка по глубине этих модулей может быть преобразована в свертку Atrous для управления выходным шагом модуля и повышения точности модели семантической сегментации.

детали реализации

Класс MobileNetV3 отвечает за построение сети из предоставленной конфигурации, подробности реализации следующие:

  • Последний блок свертки увеличивает выходные данные последнего блока InvertedResidual в 6 раз. Эта реализация может адаптироваться к различным параметрам множителя.

  • Как и в модели MobileNetV2, перед последним линейным слоем классификатора находится слой Dropout.

Класс InvertedResidual является основным строительным блоком сети, и детали реализации, о которых следует знать, следующие:

  • Если входной конвейер и конвейер расширения совпадают, шаг расширения не требуется. Это происходит на первом сверточном модуле сети.

  • Даже если расширенный конвейер совпадает с выходным каналом, всегда требуется шаг проекции.

  • Активация модуля Depthwise имеет приоритет над слоем Squeeze-and-Excite, что может в определенной степени повысить точность.

MobileNetV3 模块架构示意图 Схема архитектуры модуля MobileNetV3

Классификация

Здесь рассматриваются контрольные показатели и конфигурация, обучение и детали квантования предварительно обученных моделей.

Benchmarks

Инициализируйте предварительно обученную модель:

large = torchvision.models.mobilenet_v3_large(pretrained=True, width_mult=1.0,  reduced_tail=False, dilated=False)
small = torchvision.models.mobilenet_v3_small(pretrained=True)
quantized = torchvision.models.quantization.mobilenet_v3_large(pretrained=True)

在这里插入图片描述 Подробное сравнение производительности старых и новых моделей.

Как показано, если пользователь готов пожертвовать небольшой точностью ради примерно 6-кратного увеличения скорости,Тогда MobileNetV3-Large может стать заменой ResNet50.

Обратите внимание, что время вывода здесь измеряется на ЦП.

тренировочный процесс

Все предварительно обученные модели были настроены как нерасширенные модели с множителем ширины, равным 1, с полными хвостами и подогнаны к ImageNet. И Большой, и Малый варианты обучаются с одинаковыми гиперпараметрами и скриптами.

Быстрое и стабильное обучение модели

Правильная настройка RMSProp имеет решающее значение для ускорения процесса обучения и гарантии числовой стабильности. Автор статьи использовал TensorFlow в эксперименте, и по сравнению со значением по умолчанию во время операции использовалось относительно высокое значение.rmsprop_epsilon.

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

Еще одна важная деталь заключается в том, что, хотя реализации PyTorch и TensorFlow RMSProp в целом ведут себя одинаково, в настройке здесь важно отметить различия в том, как две платформы обрабатывают гиперпараметр epsilon.

В частности, PyTorch добавляет эпсилон в дополнение к вычислению квадратного корня, а TensorFlow добавляет эпсилон внутрь. Это заставляет пользователей корректировать значение эпсилон при переносе гиперпараметров этой статьи и может использовать формулуPyTorch_eps=sqrt(TF_eps)для расчета разумного приближения.

Повысьте точность модели, настроив гиперпараметры и улучшив процесс обучения.

Как только оптимизатор настроен на быстрое и стабильное обучение, пришло время оптимизировать точность модели. Есть несколько методов, которые могут помочь пользователям достичь этого.

Во-первых, чтобы избежать переобучения,Данные могут быть дополнены с помощью AutoAugment и RandomErasing.. Кроме того, очень важно использовать метод перекрестной проверки для настройки таких параметров, как снижение веса, и для усреднения весов контрольных точек разных эпох после обучения. Наконец, использование таких методов, как сглаживание меток, случайная глубина и введение шума LR, также может повысить общую точность как минимум на 1,5%.图片 Критические итерации для повышения точности MobileNetV3-Large

图片 Базовый уровень гиперпараметров в стиле MobileNetV2

Обратите внимание, что после достижения заданной точности производительность модели будет проверена на проверочном наборе.Этот процесс помогает обнаружить переоснащение.

количественно

Вес QNNPack для вариантов Mobilenetv3-Large обеспечивает вес квантования, увеличивая скорость работы в 2,5 раза. Для количественной оценки моделиЗдесь используется обучение с учетом квантования (QAT).

Обратите внимание, что QAT позволяет моделировать эффекты квантования и корректировать веса для повышения точности модели.По сравнению с квантованными результатами простой обученной модели точность повышается на 1,8%: 在这里插入图片描述

Обнаружение цели

В этом разделе сначала будут представлены эталонные тесты опубликованных моделей, а затем обсуждается, как MobileNetV3-Large Backbone используется с детектором FasterRCNN для Feature Pyramid Network для обнаружения объектов.

Также будет объяснено, как сеть обучается и настраивается, и где необходимо идти на компромиссы.(В этом разделе не рассматриваются подробности того, как использовать его с SSDlite).

Benchmarks

Инициализируйте модель:

high_res = torchvision.models.detection.fasterrcnn_mobilenet_v3_large_fpn(pretrained=True) 
low_res = torchvision.models.detection.fasterrcnn_mobilenet_v3_large_320_fpn(pretrained=True)

图片 Сравнительный анализ старых и новых моделей

Видно, что если пользователь готов пожертвовать небольшой точностью ради увеличения скорости обучения в 5 раз,Faster R-CNN высокого разрешения с магистралью MobileNetV3-Large FPN может заменить эквивалентную модель ResNet50.

детали реализации

Детектор использует магистраль в стиле FPN, которая извлекает признаки из различных сверток модели MobileNetV3.По умолчанию предварительная обработанная модель использует выход 13-го инвертируемого модуля и вывод свертки до слоя объединения. Реализация также поддерживает использование более устойчивых результатов.

Все карты функций, извлеченные из сети, их выходы проецируются модулем FPN до 256 трубопроводов,Это может значительно увеличить скорость сети.Эти карты функций, предоставляемые магистралью FPN, будут использоваться детектором FasterRCNN для предоставления прогнозов блоков и классов в различных масштабах.

Процесс обучения и настройки

В настоящее время официально предоставлены две предтренировочные модели, которые могут выполнять обнаружение целей с разным разрешением. Обе модели обучаются на наборе данных COCO с одинаковыми гиперпараметрами и сценариями.

Детекторы с высоким разрешением обучаются на изображениях с разрешением 800–1333 пикселей, а детекторы с низким разрешением для мобильных устройств — на изображениях с разрешением 320–640 пикселей.

Предоставление двух независимых предварительных тренировок ПРИЧИНА веса обучает детектор, по сравнению с моделью с высоким разрешением изображение передается на маленькое предварительно обученное изображение непосредственно на маленьком изображении,Это приводит к увеличению точности на 5 мАд.

Обе магистрали были инициализированы с весами в ImageNet, а последние три этапа их весов были точно настроены во время обучения.

Можно выполнить дополнительную оптимизацию скорости для мобильных моделей, отрегулировав пороговое значение RPN NMS.Пожертвовав точностью в 0,2 мАп, можно увеличить скорость процессора модели примерно на 45%. Детали оптимизации следующие:在这里插入图片描述 在这里插入图片描述 Диаграмма прогноза модели Faster R-CNN MobileNetV3-Large FPN

Семантическая сегментация

В этом разделе приведены некоторые опубликованные ориентиры для предварительной тренировки, которые обсудят, как MobileNETV3-Card Bosbone сочетается с LR-ASPP, DeePlabv3 и FCN и т. Д., которые семантически разделены.

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

Benchmarks

Инициализируйте предварительно обученную модель:

lraspp = torchvision.models.segmentation.lraspp_mobilenet_v3_large(pretrained=True) 
deeplabv3 = torchvision.models.segmentation.deeplabv3_mobilenet_v3_large(pretrained=True)

在这里插入图片描述 Подробное сравнение производительности старых и новых моделей.

Как видно из рисунка, в большинстве приложений DeepLabV3 с магистралью MobileNetV3-Large является жизнеспособной альтернативой FCN и ResNet50, работая в 8,5 раз быстрее при сохранении аналогичной точности. **Кроме того, производительность сети ЛР-АСПП по всем показателям превосходит FCN при тех же условиях.

детали реализации

В этом разделе обсуждаются важные детали реализации протестированной разъемной головки. Обратите внимание, что все модели, описанные в этом разделе, используют расширенную магистраль MobileNetV3-Large.

LR-ASPP

LR-ASPP — это урезанная версия модели пула уменьшенной пространственной пирамиды Atrous, предложенной авторами статьи MobileNetV3. В отличие от других моделей сегментации в TorchVision,Вместо использования вспомогательной потери он использует функции низкого и высокого уровня с выходными шагами 8 и 16 соответственно.

В отличие от слоя AveragePooling 49x49 и переменного шага, используемых в статье, слой AdaptiveAvgPool2d используется здесь для обработки глобальных признаков.

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

DeepLabV3 & FCN

Комбинация MobileNetV3 с DeepLabV3 и FCN очень похожа на комбинацию других моделей, и этап оценки этих методов такой же, как LR-ASPP.

Обратите внимание, что здесь не используются высокоуровневые и низкоуровневые функции,Вместо этого нормальная потеря присоединяется к карте признаков с выходным шагом 16, а вспомогательная потеря прикрепляется к карте признаков с выходным шагом 8.

FCN уступает LR-ASPP по скорости и точности, поэтому здесь не рассматривается. Предварительно обученные веса по-прежнему доступны с небольшой модификацией кода.

Процесс обучения и настройки

Вот две предварительно обученные модели MobileNetV3, которые можно использовать для семантической сегментации:LR-ASPP и DeepLabV3.Основы этих моделей инициализируются с помощью весов ImageNet и проходят сквозное обучение.

Обе архитектуры обучаются на наборе данных COCO с использованием одного и того же сценария и схожих гиперпараметров.

Как правило, во время логического вывода размеры изображений изменяются до 520 пикселей. Необязательная оптимизация скорости заключается в использовании предварительно обученных весов с высоким разрешением для построения конфигурации модели с низким разрешением и уменьшении размера логического вывода до 320 пикселей.Это увеличит время выполнения ЦП примерно до 60%, при этом пожертвовав несколько Miou Point.

在这里插入图片描述 Подробные цифры после оптимизации

在这里插入图片描述 LR-ASPP MobileNetV3-Large Пример прогнозирования модели

Выше приведены детали реализации MobileNetV3, кратко изложенные в этом выпуске, и я надеюсь, что они помогут вам лучше понять и понять эту модель.

Ссылаться на:

Бумага MobileNetV3

PyTorch Blog