Всем привет!

Сегодня я проверю свои знания о классификации изображений из предыдущих руководств, используя набор данных DOGS от Kaggle. Это будет не объяснение кода, как это уже было описано в предыдущих постах, а скорее публикация моего кода вместе с необходимыми модификациями и результатами здесь. Я рекомендую вам также попробовать построить свою собственную модель классификации изображений, используя либо DOGS, либо другой набор данных (https://docs.fast.ai/data.external.html), и не стесняйтесь комментировать свой уровень ошибок ниже.

Код:

!pip install fastai -q --upgrade
from fastai.vision.all import *
from fastai.callback.all import *
from fastai.basics import *
path = untar_data(URLs.DOGS)
dogcat = DataBlock(
    blocks = (ImageBlock, CategoryBlock),
    get_items = get_image_files,
    splitter = RandomSplitter(valid_pct = 0.2, seed= 100),
    get_y = using_attr(RegexLabeller(pat = r'([\w]+).\d+..*$'), 'name'),
    item_tfms = Resize(460),
    batch_tfms = aug_transforms(size = 224, min_scale = 0.75)
)
dls = dogcat.dataloaders(path/'train')
dls.show_batch(max_n=10, figsize = (6,9))
model = cnn_learner(dls, resnet34, metrics = error_rate)
model.fit_one_cycle(4)
model.unfreeze()
model.lr_find()
model.fit_one_cycle(2, lr_max = slice (2e-5,6e-5)) #modify to the learning rates range you find
model.save("awesome")
model.recorder.plot_loss()
results = ClassificationInterpretation.from_learner(model)
results.plot_confusion_matrix(figsize=(12,12), dpi=60)
results.plot_top_losses(9, figsize = (8, 8))

Комментарии к коду:

  • Я заметил некоторые опечатки в исходном коде, который я опубликовал, поэтому я вернулся, чтобы изменить их.
  • По какой-то причине компилятор Regex с трудом понимает косые черты в моем шаблоне, даже когда я использую escape-символ, поэтому мне пришлось потратить значительное количество времени на поиск правильного шаблона Regex для извлечения метки изображения.
  • Одна проблема, с которой я столкнулся, заключается в том, что многие другие наборы данных требуют некоторой формы манипулирования данными, так что это может быть темой моего следующего поста, либо об этом, либо о том, как выполнить веб-развертывание модели.

Результаты:

Посмотри на это! Уровень ошибок 0,85%! Это означает, что наша модель на 99,15% точна при выборе собак по сравнению с кошками, что действительно замечательно!

Я повторно провел подгонку, изменив скорость обучения, как описано в предыдущих сообщениях, и получил следующие результаты:

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

Я также проверил графики потерь и матрицу путаницы, которая показана ниже.

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

Для некоторых из них я определенно могу понять путаницу. У некоторых на изображении и кошка, и собака, а у некоторых даже я не могу на 100% сказать, например. первые три. Мне интересно, почему изображения 4, 8 и 9 сбивали с толку, но эй, точность более 99% — это не то, над чем можно посмеяться.

Это все на сегодня! Короткий, но милый пост. На следующей неделе мы будем работать над новой концепцией, так что не забудьте подписаться на эту страницу, чтобы быть в курсе контента!

А пока, выздоравливайте, мои друзья-программисты ❤