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

Введение

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

Fastai v2 был выпущен в августе, я буду использовать его для создания и обучения модели глубокого обучения, чтобы классифицировать различные спортивные поля на Colab всего несколькими строками кода.

Сбор данных

Во-первых, мне нужно собрать изображения для обучения модели. Я хочу иметь модель, классифицирующую различные спортивные области: бейсбол, баскетбол, футбол, теннис и американский футбол. Я поискал и загрузил изображения, сохранил их в отдельных папках и загрузил на Google Диск.

Настройка среды Colab

Как только набор данных будет готов, я могу начать работу над Colab.

Первый апгрейд фастай,

!pip install fastai --upgrade -q

и импортировать fastai.vision,

from fastai.vision.all import *

затем смонтируйте Google Диск и настройте путь

from google.colab import drive
drive.mount(‘/content/gdrive’, force_remount=True)
root_dir = ‘gdrive/My Drive/Colab Notebooks/’
base_dir = root_dir + ‘ball_class’
path=Path(base_dir)

Теперь мы готовы к работе.

DataBlock и DataLoader

Fastai предоставляет API среднего уровня: DataBlock для работы с данными, его довольно легко использовать.

fields = DataBlock(blocks=(ImageBlock, CategoryBlock),
   get_items=get_image_files,
   get_y=parent_label,
   splitter=RandomSplitter(valid_pct=0.2, seed=42),
   item_tfms=RandomResizedCrop(224, min_scale=0.5),
   batch_tfms=aug_transforms())

Можно использовать разные blocks, в этом случае мы использовали ImageBlock как x и CategoryBlock как метку. Также можно использовать другие блоки, такие как MultiCategoryBlock, MaskBlock, PointBlock, BBoxBlock, BBoxLblBlock для различных приложений.

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

Затем я использовал RandomSplitter, чтобы разделить наборы данных для обучения и проверки.

Затем использовал RandomResizedCrop для изменения размера изображения до 224 и aug_transforms() для увеличения данных.

Это своего рода шаблон Fastai DataBlock, он достаточно гибкий, вы можете менять его в зависимости от ситуации. Вы можете найти подробные уроки l здесь.

Как только у нас будет готов DataBlock, мы можем создать загрузчик данных:

и проверьте этикетки с помощью vocab

и покажите некоторые изображения с ярлыками

Тренироваться

Теперь мы готовы к тренировке.

Я создал ученика CNN, используя resnet34:

learn = cnn_learner(dls, resnet34, metrics=error_rate)

и использовал lr_find(), чтобы найти подходящую скорость обучения

затем мы можем обучить модель, используя fit_one_cycle

Только через 5 эпох мы можем достичь ›90% точности.

Теперь мы можем разморозить сеть и обучить всю сеть.

Допустим, только через несколько эпох мы достигаем точности 95%.

Интерпретация

Мы также можем интерпретировать модель. Матрицу путаницы можно построить следующим образом:

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

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

Спасибо за чтение, удачного кодирования.