EfficientNet
EfficientNet — семейство сверточных нейросетей для классификации изображений. “Efficient” — потому что авторы выбили лучший accuracy на ImageNet среди архитектур схожего размера.
Основная идея статьи следующая: сначала авторы подобрали небольшую оптимальную архитектуру EfficientNetB0, а затем путем ее итеративного масштабирования получили B1-B7. Давайте сперва разберемся, из чего же состоит B0 и как ее подбирали.
EfficientNetB0
EfficientNetB0 — сверточная сеть из 7 групп блоков MBConv.
Количество и порядок расположения этих блоков подобраны с помощью Multi-objective neural architecture search(reinforcement learning подход с подбором архитектуры сети другой нейронной сетью). Суть заключается в поиске архитектуры с наибольшей accuracy при фиксированном числе параметров и количестве вычислений. Благодаря этому EfficientNet и назвали “эффективной” — при своем размере она показывает наибольший accuracy. Возьмем, например, сеть DenseNet201. Она сравнима с EfficientNetB0 по accuracy. Но в ней будет в 3 раза больше параметров и в 5 раз больше вычислений.
Почему EffNetB0 состоит именно из MBConv блоков? Для перебора всевозможных вариантов слоев и их последовательностей нужна вечность. Авторы учли этот факт и решили ограничить область поиска. Взяв заведомо эффективный блок MBConv, они варьировали его гиперпараметры и подбирали оптимальную архитектуру. MBConv, известный также как Inverted Residual, впервые был представлен в MobileNetV2. Мы подробно рассказывали про этот блок в разборе семейства MobileNet — если вы еще не читали, то рекомендуем! Там мы представили основную идею инвертирования Bottleneck-а, DWS-слои и SE-блоки.
Как B0 масштабировали в B1-B7
Для улучшения качества сети можно увеличить ее глубину (количество слоев), ширину (количество фильтров) и разрешение протекающих тензоров (их высоту и ширину). До EfficientNet были работы с масштабированием двух параметров, но авторы статьи отмечают взаимосвязь именно трех параметров между собой, которые необходимо масштабировать вместе. Однако какая пропорция будет оптимальной? Увеличить все в 2 раза? Или глубину в 2, а ширину в 1,5? “Неочевидно, надо подбирать” — подумали авторы и разработали формализацию этого процесса.
Создатели EfficientNet решили: “Мы подобрали оптимальную архитектуру B0 и теперь хотим сделать ее больше и точнее. Давайте увеличим лимит количества операций в 2 раза и подберем коэффициенты увеличения глубины, ширины и размера входного тензора сети B0, которые дадут наибольший accuracy. Назовем эту архитектуру B1. Снова увеличим лимит по количеству операций в 2 раза и подберем оптимальные коэффициенты масштабирования архитектуры для получения B2 и так далее.”
Для описания процесса авторы вводят следующие обозначения:
α — константа, характеризующая глубину сети;
β — константа, характеризующая ширину;
γ — константа, характеризующая размер входного изображения;
φ — коэффициент масштабирования (compaund scaling фактор).
При такой постановке будет справедливо следующее соотношение:
Степень 2 над константами β и γ отражает квадратичную зависимость вычислительной сложности сети от ширины и разрешения. Для EfficientNetB1 коэффициент масштабирования φ равен 1 (поэтому у нее такой индекс: B1).
Подставляем φ = 1 и получаем соотношение:
\( \alpha \cdot \beta^2 \cdot \gamma^2 \approx 2 \)
Затем при помощи Grid Search авторы подобрали оптимальные α, β, γ. Они получили следующие значения: α=1.2, β=1.1, γ=1.15. Получается, масштабируя B0 в B1, оптимально будет увеличить размер входного изображения на 15%, глубину сети — на 20%, а ширину —на 10%.
Но подбирать коэффициенты для каждого этапа масштабирования вычислительно сложно. Поэтому авторы зафиксировали подобранные α, β, γ и получили архитектуры B2-B7 за счет увеличения φ в исходном соотношении:
\( \left(\alpha \cdot \beta^2 \cdot \gamma^2\right)^\varphi \)
Таким образом, B0 и B1 были действительно “подобраны”, и поэтому они в каком-то смысле “оптимальны”. Но их старшие версии B2-B7 просто унаследовали коэффициенты масштабирования, следовательно, “оптимальными” их можно назвать уже с натяжкой.
Стоит также отметить следующее: подбор параметров и оптимизация архитектуры были сделаны для датасета ImageNet. Следовательно, если ваши данные значительно от него отличаются — семейство EfficientNet уже не будет самым оптимальным. Имейте это в виду 🙂
Так или иначе, EffNet-ы — отличный выбор. Они хорошо себя показывают после transfer learning. Авторы доказали это с помощью установления SOTA accuracy на 5 датасетах из 8.
И напоследок покажем вам таблицу-сравнение архитектур B0-B7 с близкими по accuracy архитектурами уже на самом ImageNet датасете. Обратите внимание на последние 2 столбца: они подчеркивают огромную разницу по количеству операций между версией EffNet и ее ближайшими соседями по точности.
И напоследок покажем вам таблицу-сравнение архитектур B0-B7 с близкими по accuracy архитектурами уже на самом ImageNet датасете. Обратите внимание на последние 2 столбца: они подчеркивают огромную разницу по количеству операций между версией EffNet и ее ближайшими соседями по точности.