Более высокая производительность по сравнению с современными моделями при тренировке в 5–10 раз быстрее

Благодаря прогрессивному обучению наша EfficientNetV2 значительно превосходит предыдущие модели в наборах данных ImageNet и CIFAR / Cars / Flowers. Путем предварительного обучения на том же ImageNet21k наша EfficientNetV2 достигает 87,3% первой первой точности на ImageNet ILSVRC2012, превосходя последнюю версию ViT на 2,0% точности при обучении в 5-11 раз быстрее с использованием тех же вычислительных ресурсов. Код будет доступен по адресу https://github.com/ google / automl / effectivenetv2.

Источник: Arxiv

EfficientNets был SOTA за высокое качество и быструю классификацию изображений. Они были выпущены около 2 лет назад и были довольно популярны благодаря своему способу масштабирования, что сделало их обучение намного быстрее по сравнению с другими сетями. Несколько дней назад Google выпустил EfficientNetV2, который является большим улучшением по сравнению с EfficientNet с точки зрения скорости обучения и приличного улучшения с точки зрения точности. В этой статье мы собираемся изучить, насколько новый EfficientNet является улучшением по сравнению с предыдущим.

Основная основа более эффективных сетей, таких как DenseNets и EfficientNets, - это достижение лучшей производительности при меньшем количестве параметров. Когда вы уменьшаете количество параметров, вы обычно получаете много преимуществ, таких как меньшие размеры модели, что облегчает их размещение в памяти. Однако это обычно снижает производительность. Таким образом, основная задача - уменьшить количество параметров без снижения производительности.

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

Я не хочу вдаваться в подробности об EfficientNets в этой статье. Но я хочу напомнить вам о концепции EfficietNets, чтобы мы могли точно определить основные различия в архитектуре, которые на самом деле приводят к повышению производительности. EfficientNets использует NAS для построения базовой сети (B0), затем они используют «составное масштабирование» для увеличения пропускной способности сети без значительного увеличения количества параметров. Самая важная метрика для измерения в этом случае - это FLOPS (операций с плавающей запятой в секунду) и, конечно же, количество параметров.

1. Прогрессивное обучение

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

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

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

Благодаря улучшенному прогрессивному обучению наша EfficientNetV2 достигает хороших результатов в наборе данных ImageNet, CIFAR-10, CIFAR-100, Cars и Flowers. В ImageNet мы достигаем точности 85,7% при обучении в 3–9 раз быстрее и до 6,8 раз меньше, чем предыдущие модели.

Источник: Arxiv

2. Слои Fused-MB Conv поверх слоев MB Conv

EfficientNets использует сверточный слой, называемый «глубинным сверточным слоем». Эти слои имеют меньшее количество параметров и FLOPS, но они не могут полностью использовать современные ускорители (GPU / CPU) [1]. Чтобы решить эту проблему, в недавней статье под названием «MobileDets: поиск архитектур обнаружения объектов для мобильных ускорителей» эта проблема решается с помощью нового слоя, который они называют «слой Fused-MB Conv». Этот новый уровень используется здесь в EfficientNetV2. Однако они не могут просто заменить все старые слои MB Conv объединенными, потому что они имеют большее количество параметров.

Вот почему они используют NAS с возможностью обучения для динамического поиска наилучшего сочетания объединенных и обычных слоев MB Conv [1]. Результаты NAS показывают, что замена некоторых слоев MB Conv объединенными на ранних этапах обеспечивает лучшую производительность с меньшими моделями. Это также показывает, что меньший коэффициент расширения для слоев MB Conv (по сети) является более оптимальным. Наконец, это показывает, что меньшие размеры ядра с большим количеством слоев лучше.

3. Более динамичный подход к масштабированию

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

Теперь мы видим, что этот подход снова используется при расширении сети. EfficientNet равномерно масштабирует все этапы, используя простое составное правило масштабирования [1]. Авторы EfficientNetV2 отмечают, что в этом нет необходимости, поскольку не все эти этапы нуждаются в масштабировании для повышения производительности. Вот почему они используют стратегию неравномерного масштабирования, чтобы постепенно добавлять больше слоев на более поздних этапах. Они также добавляют правило масштабирования, чтобы ограничить максимальные размеры изображений, поскольку EfficientNets имеет тенденцию агрессивно увеличивать размеры изображений [1] (что приводит к проблемам с памятью).

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

Ссылки:

[1] EfficientNetsV2 в Arxiv