10 лучших предобученных моделей для встраивания изображений, которые должен знать каждый data scientist

10 лучших предварительно обученных моделей для встраивания изображений, о которых должен знать каждый дата-саентист

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

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

Предварительно обученные модели могут использоваться различными способами:

  • Использование предварительно обученных весов и прямого прогнозирования на тестовых данных
  • Использование предварительно обученных весов для инициализации и тренировки модели с использованием пользовательского набора данных
  • Использование только архитектуры предварительно обученной сети и обучение ее с нуля на пользовательском наборе данных

В этой статье рассматриваются 10 лучших современных предварительно обученных моделей для получения внедрения изображения. Все эти предварительно обученные модели можно загрузить как модели keras с использованиемAPI keras.application.

1) VGG:

Сети VGG-16/19 были представлены на конференции ILSVRC 2014, так как они являются одной из самых популярных предварительно обученных моделей. Они были разработаны Группой визуальной графики в Университете Оксфорда.

Существует два варианта модели VGG: сеть с 16 и 19 слоями, причем VGG-19 (сеть с 19 слоями) является улучшением модели VGG-16 (сеть с 16 слоями).

Архитектура:

(Источник, Материалы доступны по лицензии CC BY-SA 4.0), Архитектура сети VGG-16

Сеть VGG проста и последовательна по своей природе и использует много фильтров. На каждом этапе используются небольшие фильтры (3*3)для сокращения количества параметров.

В сети VGG-16 следующее:

  • Сверточные слои = 13
  • Слои пулинга = 5
  • Полносвязные плотные слои = 3

Ввод: Изображение размером (224, 224, 3)

Вывод: Встраивание изображения размерностью 1000-мер

Другие данные для VGG-16/19:

  • Ссылка на статью: https://arxiv.org/pdf/1409.1556.pdf
  • Git-репозиторий: VGG
  • Опубликовано в: Апрель 2015
  • Производительность на наборе данных ImageNet: 71% (Точность TOP 1), 90% (Точность TOP 5)
  • Количество параметров: ~140M
  • Количество слоев: 16/19
  • Размер на диске: ~530MB

Реализация:

  • Вызовите tf.keras.applications.vgg16.preprocess_input на ваших входных данных, чтобы преобразовать входные изображения в BGR с нулевым центром для каждого цветового канала.
  • Создайте модель VGG16, используя указанный ниже код:
tf.keras.applications.VGG16(    include_top=True,    weights="imagenet",    input_tensor=None,    input_shape=None,    pooling=None,    classes=1000,    classifier_activation="softmax",)

Вышеприведенный код предназначен для реализации VGG-16, keras предлагает аналогичный API для реализации VGG-19, для получения дополнительной информации см. эту документацию.

2) Xception:

Xception – это глубокая архитектура CNN, которая использует слои глубинного разделения. Глубинное разделение можно понять как модель Inception с максимально большим количеством блоков.

Архитектура:

(Источник, использование разрешено в рамках лицензии CC BY-SA 4.0), архитектура Xception

Входные данные: изображение размером (299, 299, 3)

Выходные данные: векторное представление изображения размером 1000

Другие детали Xception:

  • Ссылка на статью: https://arxiv.org/pdf/1409.1556.pdf
  • GitHub: Xception
  • Опубликовано в: апрель 2017 года
  • Показатель точности на наборе данных ImageNet: 79% (Точность Топ-1), 94,5% (Точность Топ-5)
  • Число параметров: около 30 миллионов
  • Глубина: 81
  • Размер на диске: 88 МБ

Реализация:

  • Создайте экземпляр модели Xception, используя указанный ниже код:
tf.keras.applications.Xception(    include_top=True,    weights="imagenet",    input_tensor=None,    input_shape=None,    pooling=None,    classes=1000,    classifier_activation="softmax",)

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

3) ResNet:

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

Архитектура ResNet предлагает использование пропуска соединений для решения проблемы затухания градиента.

Архитектура:

(Источник, использование разрешено в рамках лицензии CC BY-SA 4.0), архитектура ResNet

Модель ResNet использует сетевую архитектуру из 34 слоев, вдохновленную моделью VGG-19, к которой добавлены соединения с пропуском. Эти соединения с пропуском преобразуют архитектуру в остаточную сеть.

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

  • ResNet50
  • ResNet50V2
  • ResNet101
  • ResNet101V2
  • ResNet152
  • ResNet152V2

Входные данные: изображение размером (224, 224, 3)

Выходные данные: векторное представление изображения размером 1000

Другие детали моделей ResNet:

  • Ссылка на статью: https://arxiv.org/pdf/1512.03385.pdf
  • GitHub: ResNet
  • Опубликовано в: декабрь 2015 года
  • Показатель точности на наборе данных ImageNet: 75-78% (Точность Топ-1), 92-93% (Точность Топ-5)
  • Число параметров: 25-60 миллионов
  • Глубина: 107-307
  • Размер на диске: около 100-230 МБ

Реализация:

  • Создайте экземпляр модели ResNet50, используя указанный ниже код:
tf.keras.applications.ResNet50(    include_top=True,    weights="imagenet",    input_tensor=None,    input_shape=None,    pooling=None,    classes=1000,    **kwargs)

Приведенный выше код предназначен для реализации ResNet50. Keras предлагает похожий API для других архитектур ResNet, более подробную информацию смотрите в документации.

4) Inception:

Многослойные свертки привели к переобучению данных. Для избежания переобучения модель Inception использует параллельные слои или несколько фильтров разных размеров на одном уровне, чтобы сделать модель шире, а не глубже. Модель Inception V1 состоит из 4 параллельных слоев с (1*1), (3*3), (5*5) свертками и (3*3) максимальным объединением.

Inception (V1/V2/V3) – модель глубокого обучения CNN, разработанная командой Google. InceptionV3 – продвинутая и оптимизированная версия моделей InceptionV1 и V2.

Архитектура:

Модель InceptionV3 состоит из 42 слоев. Архитектура InceptionV3 поэтапно строится следующим образом:

  • Факторизованные свертки
  • Меньшие свертки
  • Асимметричные свертки
  • Вспомогательные свертки
  • Уменьшение размера сетки

Все эти концепции собраны в финальную архитектуру, описанную ниже:

(Источник, Бесплатная лицензия на использование CC BY-SA 4.0), архитектура InceptionV3

Вход: Изображение размером (299, 299, 3)

Выход: Векторное представление изображения размером 1000

Другие детали моделей InceptionV3:

  • Ссылка на статью: https://arxiv.org/pdf/1512.00567.pdf
  • GitHub: InceptionV3
  • Опубликовано: Декабрь 2015
  • Результат на наборе данных ImageNet: 78% (Точность Top 1), 94% (Точность Top 5)
  • Количество параметров: 24 миллиона
  • Глубина: 189
  • Размер на диске: 92 МБ

Реализация:

  • Создайте экземпляр модели InceptionV3, используя указанный ниже код:
tf.keras.applications.InceptionV3(    include_top=True,    weights="imagenet",    input_tensor=None,    input_shape=None,    pooling=None,    classes=1000,    classifier_activation="softmax",)

Приведенный выше код предназначен для реализации InceptionV3. Более подробную информацию смотрите в документации.

5) InceptionResNet:

InceptionResNet-v2 – модель CNN, разработанная исследователями Google. Цель этой модели была снизить сложность модели InceptionV3 и исследовать возможность использования резидуальных сетей в модели Inception.

Архитектура:

(Источник, Бесплатная лицензия для использования в соответствии с CC BY-SA 4.0), Архитектура Inception-ResNet-V2

Входные данные: изображение размером (299, 299, 3)

Выходные данные: векторное представление изображения размером 1000-мерное

Другие детали для модели Inception-ResNet-V2:

  • Ссылка на работу: https://arxiv.org/pdf/1602.07261.pdf
  • GitHub: Inception-ResNet-V2
  • Опубликовано: август 2016
  • Точность на данных ImageNet: 80% (Топ 1), 95% (Топ 5)
  • Количество параметров: 56 миллионов
  • Глубина: 189
  • Размер на диске: 215 МБ

Реализация:

  • Инициализируйте модель Inception-ResNet-V2 с помощью указанного ниже кода:
tf.keras.applications.InceptionResNetV2(    include_top=True,    weights="imagenet",    input_tensor=None,    input_shape=None,    pooling=None,    classes=1000,    classifier_activation="softmax",    **kwargs)

Вышеуказанный код предназначен для реализации Inception-ResNet-V2, для получения более подробной информации обратитесь к этой документации.

6) MobileNet:

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

Архитектура:

(Источник, Бесплатная лицензия для использования в соответствии с CC BY-SA 4.0), Архитектура MobileNet

Входные данные: изображение размером (224, 224, 3)

Выходные данные: векторное представление изображения размером 1000-мерное

Другие детали для моделей MobileNet:

  • Ссылка на работу: https://arxiv.org/pdf/1602.07261.pdf
  • GitHub: MobileNet-V3MobileNet-V2
  • Опубликовано: апрель 2017
  • Точность на данных ImageNet: 71% (Топ 1), 90% (Топ 5)
  • Количество параметров: 3.5–4.3 миллиона
  • Глубина: 55–105
  • Размер на диске: 14–16 МБ

Реализация:

  • Инициализируйте модель MobileNet с помощью указанного ниже кода:
tf.keras.applications.MobileNet(    input_shape=None,    alpha=1.0,    depth_multiplier=1,    dropout=0.001,    include_top=True,    weights="imagenet",    input_tensor=None,    pooling=None,    classes=1000,    classifier_activation="softmax",    **kwargs)

Вышеуказанный код предназначен для реализации MobileNet, keras предлагает аналогичный API для других архитектур MobileNet (MobileNet-V2, MobileNet-V3), для более подробной информации обратитесь к этой документации.

7) DenseNet:

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

Архитектура:

Архитектура DenseNet имеет 3 плотных блока. Слои между двумя смежными блоками называются переходными слоями и изменяют размеры карт функций с помощью свертки и субдискретизации.

(Источник, Бесплатная лицензия на использование CC BY-SA 4.0), Архитектура DenseNet

Входной слой: изображение размером (224, 224, 3)

Выходной слой: встроенное изображение размером 1000-мерность

Другие подробности моделей DenseNet:

  • Ссылка на статью: https://arxiv.org/pdf/1608.06993.pdf
  • GitHub: DenseNet-169, DenseNet-201, DenseNet-264
  • Опубликовано: январь 2018
  • Показатель производительности на наборе данных ImageNet: 75–77% (Точность Top 1), 92–94% (Точность Top 5)
  • Количество параметров: 8–20M
  • Глубина: 240–400
  • Размер на диске: 33–80MB

Реализация:

  • Создайте экземпляр модели DenseNet121 с использованием приведенного ниже кода:
tf.keras.applications.DenseNet121(    include_top=True,    weights="imagenet",    input_tensor=None,    input_shape=None,    pooling=None,    classes=1000,    classifier_activation="softmax",)

Вышеуказанный код предназначен для реализации DenseNet, keras предлагает аналогичный API для других архитектур DenseNet (DenseNet-169, DenseNet-201), для более подробной информации обратитесь к этой документации.

8) NasNet:

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

Входной слой: изображение размером (331, 331, 3)

Другие подробности моделей NasNet:

  • Ссылка на статью: https://arxiv.org/pdf/1608.06993.pdf
  • Опубликовано: апрель 2018
  • Показатель производительности на наборе данных ImageNet: 75–83% (Точность Top 1), 92–96% (Точность Top 5)
  • Количество параметров: 5–90M
  • Глубина: 389–533
  • Размер на диске: 23–343MB

Реализация:

  • Создайте экземпляр модели NesNetLarge с использованием приведенного ниже кода:
tf.keras.applications.NASNetLarge(    input_shape=None,    include_top=True,    weights="imagenet",    input_tensor=None,    pooling=None,    classes=1000,    classifier_activation="softmax",)

Вышеуказанный код предназначен для реализации модели NesNet, keras предлагает подобный API для реализации других архитектур NasNet (NasNetLarge, NasNetMobile), более подробную информацию можно найти в этой документации.

9) EfficientNet:

EfficientNet – это архитектура сверточной нейронной сети (CNN) от исследователей Google, которая может достичь лучшей производительности с помощью метода масштабирования, называемого compound scaling. Этот метод масштабирования равномерно масштабирует все размерности глубины/ширины/разрешения на фиксированное значение (коэффициент масштабирования) равномерно.

Архитектура:

(Источник, свободная лицензия CC BY-SA 4.0), архитектура Efficient-B0

Дополнительные сведения о моделях EfficientNet:

  • Ссылка на статью: https://arxiv.org/pdf/1905.11946v5.pdf
  • GitHub: EfficientNet
  • Опубликовано в: сентябре 2020 года
  • Производительность на наборе данных ImageNet: 77–84% (Точность Top 1), 93–97% (Точность Top 5)
  • Количество параметров: 5–67 миллионов
  • Глубина: 132–438
  • Размер на диске: 29–256 МБ

Реализация:

  • Создайте экземпляр модели EfficientNet-B0 с использованием следующего кода:
tf.keras.applications.EfficientNetB0(    include_top=True,    weights="imagenet",    input_tensor=None,    input_shape=None,    pooling=None,    classes=1000,    classifier_activation="softmax",    **kwargs)

Вышеуказанный код предназначен для реализации модели EfficientNet-B0, keras предлагает подобный API для реализации других архитектур EfficientNet (EfficientNet-B0 до B7, EfficientNet-V2-B0 до B3), более подробную информацию можно найти в этой документации, и этой документации.

10) ConvNeXt:

Модель ConvNeXt CNN была разработана как чистая сверточная модель (ConvNet), вдохновленная дизайном Vision Transformers, которая, как утверждается, превосходит их в производительности.

Архитектура:

(Источник, свободная лицензия CC BY-SA 4.0), архитектура ConvNeXt

Дополнительные сведения о моделях ConvNeXt:

  • Ссылка на статью: https://arxiv.org/pdf/1905.11946v5.pdf
  • GitHub: ConvNeXt
  • Опубликовано в: марте 2022 года
  • Производительность на наборе данных ImageNet: 81–87% (Точность Top 1)
  • Количество параметров: 29–350 миллионов
  • Размер на диске: 110–1310 МБ

Практическое применение:

  • Создайте экземпляр модели ConvNeXt-Tiny с использованием указанного ниже кода:
tf.keras.applications.ConvNeXtTiny(    model_name="convnext_tiny",    include_top=True,    include_preprocessing=True,    weights="imagenet",    input_tensor=None,    input_shape=None,    pooling=None,    classes=1000,    classifier_activation="softmax",)

Вышеуказанный код предназначен для реализации ConvNeXt-Tiny, keras предлагает аналогичный API другой архитектуры EfficientNet (ConvNeXt-Small, ConvNeXt-Base, ConvNeXt-Large, ConvNeXt-XLarge) реализации, для получения более подробной информации см. эту документацию.

Резюме:

Я рассказал о 10 популярных архитектурах сверточных нейронных сетей, которые могут создавать векторные представления с помощью переноса обучения. Эти предварительно обученные модели сверточных нейронных сетей превосходят набор данных ImageNet и являются лучшими. Библиотека Keras предлагает API для загрузки архитектуры и весов обсуждаемых предварительно обученных моделей. Векторные представления изображений, созданные с помощью этих моделей, могут быть использованы для различных задач.

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

Статья первоначально опубликована здесь автором Suraj Gurav.