Классификация изображений с использованием Fas14MNet

Что такое Fas14MNet?

Fas14MNet — это сеть CNN, вдохновленная архитектурой ResNet-50, но имеющая гораздо меньше параметров. Сеть следует блочной архитектуре ResNet, но с расширением ядра и сверткой слоев по глубине, чтобы сократить всего до 2 основных слоев на блок и 3 блоков свертки в целом. ResNet-50 имеет остаточный механизм добавления, который был заменен слоем Layer Pruning после каждого блока. Fas14MNet использует только ~15 млн параметров по сравнению с ~24 млн параметров в ResNet-50. Ссылка на проект PIP: https://pypi.org/project/Fas14MNet/

О данных

Мы используем следующие данные от Kaggle: https://www.kaggle.com/paramaggarwal/fashion-product-images-small

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

Давайте посмотрим на необходимый импорт:

Подготовка и предварительная обработка данных

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

Итак, в итоге мы получаем 41 177 выборок данных. Мы разделим наборы на обучающие, проверочные и тестовые.

После разделения у нас есть 28 823 выборки данных для обучения, а остальные отправляются на проверку и тестирование.

Теперь давайте возьмем преобразования факела, которые мы использовали для предварительной обработки изображения.

Мы используем библиотеку под названием albumentations для преобразования изображений вместо обычного модуля torchvision.transforms. Альбументации — очень хорошая библиотека для предварительной обработки изображений, поскольку она имеет тенденцию создавать различные цвета в горячих точках особенностей изображения. Теперь давайте посмотрим, как выглядят изображения после преобразований.

Создание набора данных и загрузчика данных

Здесь мы используем класс Dataset для создания наших пакетов для загрузчика данных.

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

Давайте соберем все файлы обучения и проверки в 2 списка.

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

Обучение и проверка модели

Мы будем тренироваться на CUDA. Пожалуйста, измените на CPU, если ваша система не поддерживает CUDA. Мы будем использовать размер партии 48 и будем обучать более 50 эпох.

Теперь давайте определим модель и оптимизатор:

Мы берем начальную скорость обучения 0,01 и используем планировщик StepLR с размером шага 20 и уменьшением веса 0,1.

Давайте теперь проверим тренировочный цикл.

Теперь давайте проверим результаты нашего обучения и то, как наш график выглядит на Tensorboard.

Мы видим, что достигаем довольно хорошей точности и потерь. Мы, очевидно, проверим его на наших тестовых данных и получим другие статистические данные, такие как точность и полнота. На данный момент мы достигли потери при проверке 0,2612 и точности проверки 0,9222.

Теперь давайте проверим наши тестовые преобразования.

Давайте посмотрим на наш тестовый цикл.

А теперь результаты испытаний таковы:

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

Для цикла прогнозирования:

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

Ссылки:

  1. https://github.com/DigantaD/Fas14MNet/blob/main/notebooks/Fashion%20Image%20Classification%20using%20Fas14MNet.ipynb
  2. https://github.com/DigantaD/Fas14MNet
  3. https://pypi.org/project/Fas14MNet/

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

Спасибо!