Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 提高多类图像分类精度_Python_Computer Vision_Pytorch_Classification_Fast Ai - Fatal编程技术网

Python 提高多类图像分类精度

Python 提高多类图像分类精度,python,computer-vision,pytorch,classification,fast-ai,Python,Computer Vision,Pytorch,Classification,Fast Ai,我正在使用Food-101数据集构建一个分类器。数据集具有预定义的训练集和测试集,两者都已标记。它总共有101000张图片。我正在尝试为top-1构建一个准确率>=90%的分类器模型。我现在坐在75%。提供的训练设备不干净。但是现在,我想知道我可以改进模型的一些方法,以及我做错了什么 我已经将火车和测试图像划分到各自的文件夹中。在这里,我使用0.2的训练数据集通过运行5个阶段来验证学习者 np.random.seed(42) data = ImageList.from_folder(path).

我正在使用Food-101数据集构建一个分类器。数据集具有预定义的训练集和测试集,两者都已标记。它总共有101000张图片。我正在尝试为top-1构建一个准确率>=90%的分类器模型。我现在坐在75%。提供的训练设备不干净。但是现在,我想知道我可以改进模型的一些方法,以及我做错了什么

我已经将火车和测试图像划分到各自的文件夹中。在这里,我使用0.2的训练数据集通过运行5个阶段来验证学习者

np.random.seed(42)
data = ImageList.from_folder(path).split_by_rand_pct(valid_pct=0.2).label_from_re(pat=file_parse).transform(size=224).databunch()

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

在这里,我试图找到学习率。与讲座中的情况相当标准:

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

使用1e-06的学习率运行另外5个时代。将其保存为第2阶段

learn.fit_one_cycle(5, max_lr=slice(1.e-06))
learn.save('stage-2')

之前我一共运行了3个阶段,但是模型没有超过0.706403,所以我不想重复。下面是我的混淆矩阵。我为这个糟糕的决议道歉。这是科拉布干的

由于我已经创建了一个额外的验证集,我决定使用测试集来验证已保存的stage-2模型,以查看它的性能:

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-2')
learn.validate(data_test.valid_dl)
结果是:

[0.87199837, tensor(0.7584), tensor(0.7584)]
  • 尝试增强功能,如RandomHorizontalFlip、RandomResizedCrop、, 从torchvision变换中随机旋转、规格化等。这些在分类问题上总是有很大帮助

  • 标签平滑和/或混合精度训练

  • 只需尝试使用更优化的架构,如EfficientNet
  • 而不是一个周期,更长,更手动的培训方法可能会有所帮助。尝试随机梯度下降,权重衰减为5e-4,Nesterov动量为0.9。使用大约1-3个阶段的热身训练,然后定期进行大约200个阶段的训练。您可以设置手动学习速率计划或余弦退火或其他方案。与通常的单周期训练相比,整个方法将花费更多的时间和精力,并且只有在其他方法没有显示出可观的收益时,才应该进行探索

项目规定我只能使用ResNet50或更低版本。我现在正处于标签平滑的中间,但是你能告诉我更多关于扩充的事情吗?RoopSoto,SaleOnTalk Lip等给你的训练集带来了更多的多样性,并且直接影响了它在测试评估上的泛化能力。为了在分类问题上获得良好的精度,通常需要进行一些扩充。
epoch   train_loss  valid_loss  accuracy    top_k_accuracy  time
0       0.940980    1.124032    0.705809    0.705809    18:18
1       0.989123    1.122873    0.706337    0.706337    18:24
2       0.963596    1.121615    0.706733    0.706733    18:38
3       0.975916    1.121084    0.707195    0.707195    18:27
4       0.978523    1.123260    0.706403    0.706403    17:04
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-2')
learn.validate(data_test.valid_dl)
[0.87199837, tensor(0.7584), tensor(0.7584)]