Использование увеличения изображения fastai уменьшило мою точность - PullRequest
1 голос
/ 30 мая 2020

Я работаю над классификатором с использованием набора данных Food-101. Я пытаюсь получить оценку SOTA> = 90%, используя ResNet50. Изначально сидел на 75% точности. Когда я включил сглаживание меток, я подскочил до сладкого 81%, но теперь, когда я использую get_transforms fastai, я упал до 79%. Я также заметил, что, хотя я использую увеличение изображения, размер моих данных не увеличивался, когда я управлял эпохой.

В настоящее время переменная tfms - это мое увеличение:

np.random.seed(42)

path = '/content/food-101/images/train'
file_parse = r'/([^/]+)_\d+\.(png|jpg|jpeg)$'
tfms = get_transforms(do_flip=True,flip_vert=True, max_rotate=10.0, max_zoom=1.1, max_lighting=0.2, max_warp=0.2, p_affine=0.75, p_lighting=0.75)

data = ImageList.from_folder(path).split_by_rand_pct(valid_pct=0.2).label_from_re(pat=file_parse).transform(tfms, size=224).databunch()

top_1 = partial(top_k_accuracy, k=1)
learn = cnn_learner(data, models.resnet50, metrics=[accuracy, top_1], loss_func = LabelSmoothingCrossEntropy(), callback_fns=ShowGraph)

learn.lr_find()
learn.recorder.plot(suggestion=True)

enter image description here

My learning rate also slightly increased from 1.02e-06 to 1.023e-06 when I applied get_transforms() to my model.

I’m running another 5 epochs. The accuracy is low due to label smoothing. This isn’t an issue:

learn.fit_one_cycle(5, max_lr=slice(1.023e-06/5, 1.023e-06/15))
learn.save('stage-2')
epoch   train_loss  valid_loss  accuracy    top_k_accuracy  time
0       6.549849    5.393574    0.009835    0.009835        18:39
1       6.520850    5.373156    0.009835    0.009835        17:57
2       6.468420    5.362789    0.009901    0.009901        17:49
3       6.461528    5.363743    0.009769    0.009769        17:51
4       6.473554    5.364657    0.009901    0.009901        18:05

enter image description here

Now I’m pulling out another learning rate. It jumped to 1.03e-06.

learn.unfreeze()
learn.lr_find()
learn.recorder.plot(suggestion=True)

enter image description here

Running another 5 epochs using the new LR and saving it. In this round, the label smoothing does not seem to have the same effect as it did on the earlier run. The model is now showing better accuracy than the earlier 5 epochs:

learn.fit_one_cycle(5, max_lr=slice(1e-03/5, 1e-03/15))
learn.save('stage-3')
epoch   train_loss  valid_loss  accuracy    top_k_accuracy  time
0       3.476312    2.645357    0.491683    0.491683        18:11
1       2.781384    2.276255    0.599670    0.599670        18:22
2       2.356208    1.974409    0.677426    0.677426        18:31
3       2.068619    1.836324    0.732409    0.732409        18:26
4       1.943876    1.789893    0.742310    0.742310        18:20

введите описание изображения здесь

Когда я проверял путаницу, используя этот блок кода:

interp.plot_confusion_matrix()
interp.most_confused(min_val=5)
interp.plot_multi_top_losses()
interp.plot_confusion_matrix(figsize=(20, 20), dpi=200)

, я получил этот вывод о моем наборе проверки:

15081 misclassified samples over 15150 samples in the validation set.

Наконец, когда я проверяю модель с помощью тестового набора, я получаю следующее:

path = '/content/food-101/images'
data_test = ImageList.from_folder(path).split_by_folder(train='train', valid='test').label_from_re(file_parse).transform(size=224).databunch()

learn.load('stage-3')
learn.validate(data_test.valid_dl)

[1.602944, тензор (0,7987), тензор (0,7987)]

...