如何使用Huggingface对Swin Transformer进行微调

660 阅读4分钟

用Trainer API对预训练的SOTA模型进行微调

Computer with code on it. Swin Transformer HuggingFace fine-tuning

照片:James Harrisonon Unsplash

CNN统治计算机视觉领域的日子已经一去不复返了,现在基于变换器的模型比以往任何时候都能在一些任务上显示出SOTA的性能。

在本教程中,我将向你展示如何微调这些模型中的一个,即用于图像分类的Swin变换器。我将在仅使用Huggingface平台的Foods101数据集上进行调整,更具体地说,是使用转化器和数据集库。

注意。

  1. 如果你想在继续之前自己测试一下这个模型,可以找到(这里)
  2. 为了理解本教程,你需要有python和迁移学习的中级知识。
  3. 如果你想知道更多关于Swin转化器的工作原理,这篇伟大的文章将深入解释。
  4. 如果你只是想要完整的代码,可以在这个Google Colab笔记本中找到(这里)

摘要。

  1. 第1步:加载和预处理数据。
  2. 第2步:初始化模型。
  3. 第3步:训练和评估。

第1步:加载和预处理数据。

本教程使用的数据集是Foods101数据集,该数据集在Huggingface的数据集库中已经可用,但在自定义数据集上执行这项任务也很简单,你只需要有一个csv文件,其列的格式为。[PIL Image | Label],然后用数据集库加载它。

foods101数据集是一个为图像分类而设计的数据集,它由101000张101类食物的图片组成,包括寿司、草莓酥饼、马卡龙等等。

对于加载数据,我们只需使用load_dataset函数,就可以看到数据集的结构,一个示例图片和所有可用的标签

medium.com/media/d73fb…

但是,我们不能只是将原始图像送入我们的模型,还有一些必要的预处理步骤,如调整图像大小和标准化,直到我们得到模型作为输入的像素值。为此,我们将使用该模型的内置特征提取器,该提取器在transformers库中可用,然后将其分批应用于我们数据集中的图像。

medium.com/media/e0a0d…

第二步:初始化模型。

首先,我们需要创建数据整理器,它将负责从数据集中的例子列表中创建批次。

medium.com/media/912a8…

之后,我们需要定义我们将用来评估我们的模型的指标,这里使用的指标是准确性,因为这对图像分类任务来说是一个令人满意的指标。

medium.com/media/24cdd…

现在我们使用转化器中的SwinForImageClassification类来定义模型。

medium.com/media/5e95f…

我们根据我们的数据集设置标签,并通过使用我们的标签列表定义id(整数)到标签(字符串)的交换。

ignore_mismatched_sizes = True`参数是必要的,因为这个模型是在Imagenet 1k数据集上预训练的,这意味着它期望预测该数据集中的1000个标签中的一个,而不是我们的101个标签,但是通过设置为True`我们告诉模型忽略这种标签数量的不匹配。

第三步:训练和评估。

下一步包括定义训练参数和训练者对象,以便我们可以训练我们的模型。

medium.com/media/29f74…

我们定义基本但非常重要的训练参数,如学习率、批次大小、预热步骤等。

在代码中,有几行值得注意。

remove_unused_columns = False`是必要的,因为我们需要图像列来创建我们模型的输入(pixel_values),但是由于这个列本身并不被模型使用,我们需要确保它不会被丢弃。

push_to_hub = True`行被用来使模型在训练结束后被自动推送到Huggingface的模型中心

定义完参数后,我们用之前编码的函数和我们定义的参数实例化一个训练器对象。

对于下一部分,我们需要训练模型并在我们的验证集上评估结果。

medium.com/media/c809d…

现在剩下的就是等待训练结束,检查结果,并随时用推理API来使用它!希望这个教程能帮助大家。

我希望这个教程能够帮助那些想用简单的方法,利用Huggingface提供的非常简单的Trainer API和强大的预训练模型,用SOTA变换器模型进行图像分类,从而获得良好的结果。

参考文献

[1]https://arxiv.org/abs/2103.14030

[2]https://huggingface.co/transformers/v4.1.1/examples.html

[3]https://huggingface.co/docs


如何使用Huggingface对Swin Transformer进行微调》最初发表于Dev Geniuson Medium,人们在这里通过强调和回应这个故事继续进行对话。