Пошаговое руководство по обучению и классификации изображений всего в несколько строк кода
Введение
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. Используя эту мощную библиотеку, можно создавать более сложные и интересные приложения.
Спасибо за чтение, удачного кодирования.