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

Если вы недавно просматривали списки лидеров Kaggle, первые 10 процентилей сражались в диапазоне 0,0001–0,001 балла.

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

  1. Перенос обучения
  2. Прогрессивное изменение размера изображения
  3. CNN с вниманием
  4. Модели ансамбля
  5. Увеличение времени тестирования (TTA)

Краткое описание распространенных архитектур CNN

Почти все архитектуры CNN следуют одному и тому же общему принципу проектирования, состоящему в наложении сверточных слоев на вход, при этом периодически уменьшая пространственные измерения и увеличивая количество карт объектов.

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

Ниже приведены некоторые из известных классических сетевых архитектур:

  1. Ле-Нет
  2. Алекс Нет
  3. ВГГ-16

Ниже приведены некоторые из современных сетевых архитектур:

  1. Начало
  2. Реснет
  3. Плотная сеть
  4. ResNext
  5. Эффективная сеть

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



Трансферное обучение

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

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

Преимущество трансферного обучения заключается в сокращении времени обучения модели нейронной сети и может привести к меньшей ошибке обобщения.

В этом посте я буду использовать модели Efficient Net для демонстрации процесса трансферного обучения.

Я настоятельно рекомендую прочитать приведенный ниже пост, чтобы понять архитектуру модели Efficient Nets.



Шаг 1: Построение базовой модели (Эффективная сеть — B5)

Библиотека Tensorflow предоставляет готовую к использованию реализацию Efficient Nets. Итак, мы начнем с импорта пакетов для построения базовой модели.

Далее мы построим модель Efficient Net и заморозим базовые слои, а верхний блок модели сохраним для обучения. Кроме того, я использую веса модели для задачи классификации «imagenet».

2 вещи, на которые следует обратить внимание при использовании Efficient Nets для трансферного обучения:

  1. Каждый блок должен быть включен или выключен. Это связано с тем, что архитектура включает в себя ярлык от первого уровня к последнему слою для каждого блока. Несоблюдение блоков также значительно ухудшает итоговую производительность. На изображении выше я оставил 18 верхних слоев модели (то есть верхний блок) обучаемыми.
  2. Слои Пакетная нормализация должны оставаться замороженными. Если их еще и превратить в обучаемые, то первая эпоха после разморозки значительно снизит точность.

Шаг 2: Построение окончательной модели поверх базовой модели

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

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

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

Модель достигла точности проверки 90% за 60 эпох.

Заключительные замечания

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

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