社区计算机视觉课程文档
迁移学习与微调视觉Transformer用于图像分类
并获得增强的文档体验
开始使用
迁移学习与微调视觉Transformer用于图像分类
简介
随着Transformer架构在自然语言处理领域表现出色,同样的架构也通过创建图像的小块并将其视为标记而被应用于图像。其结果便是视觉Transformer(ViT)。在我们开始讨论迁移学习/微调概念之前,让我们先比较一下卷积神经网络(CNN)与视觉Transformer。
视觉Transformer (VT) 概述
总而言之,在视觉Transformer中,图像被重新组织成2D网格补丁。模型就是基于这些补丁进行训练的。
主要思想见下图:
但有一个问题!卷积神经网络(CNN)的设计中包含了一个VT中缺失的假设。这个假设基于我们人类感知图像中物体的方式。下面一节将对此进行描述。
CNNs 和 视觉Transformer 有何不同?
归纳偏置
归纳偏置是机器学习中一个术语,用于描述学习算法用来进行预测的一组假设。简单来说,归纳偏置就像一个捷径,帮助机器学习模型根据它目前所看到的信息做出有根据的猜测。
以下是我们观察到的CNN中的几个归纳偏置:
- 平移等变性:一个物体可以出现在图像中的任何位置,CNN可以检测到它的特征。
- 局部性:图像中的像素主要与其周围的像素相互作用形成特征。
CNN模型在这两个偏置上表现非常出色。而ViT没有这个假设。这就是为什么在数据集大小达到一定阈值之前,CNN实际上比ViT更好。但ViT有另一种优势!Transformer架构(大部分)是不同类型的线性函数,这使得ViT具有高度可扩展性。而这反过来又使得ViT能够通过海量数据克服上述两个归纳偏置的问题!
但每个人如何才能获取海量数据集呢?
并非每个人都能在数百万张图片上训练视觉Transformer以获得良好性能。相反,可以使用Hugging Face Hub等地方公开的模型权重。
你如何处理预训练模型呢?你可以应用迁移学习并对其进行微调!
用于图像分类的迁移学习与微调
迁移学习的理念是,我们可以利用在非常大的数据集上训练的视觉Transformer所学到的特征,并将这些特征应用于我们自己的数据集。这可以显著提高模型性能,特别是当我们的数据集用于训练的数据有限时。
由于我们正在利用已学习的特征,因此我们也不需要更新整个模型。通过冻结大部分权重,我们只需训练某些层即可在更短的训练时间和更低的GPU消耗下获得出色的性能。
多类别图像分类
你可以通过这个笔记本学习使用视觉Transformer进行图像分类的迁移学习教程
我们将构建一个图像分类器,用于区分猫狗品种
你的数据集领域可能与预训练模型的领域不太相似。然而,我们不必从头开始训练一个视觉Transformer,而是可以选择以较低的学习率更新整个预训练模型的权重,这将“微调”模型,使其在我们的数据上表现良好。
多标签图像分类
上面的教程教授了多类别图像分类,其中每张图像只分配一个类别。那么,在多类别数据集中,每张图像有多个标签的场景呢?
本笔记本将引导你完成使用视觉Transformer进行多标签图像分类的微调教程
我们还将学习如何使用Hugging Face Accelerate编写自定义训练循环。这就是多标签分类教程的预期结果:
额外资源
- 原始视觉Transformer论文:《一图胜千言:用于大规模图像识别的Transformer》论文
- Swin Transformers 论文:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 论文
- 一项系统的实证研究,旨在更好地理解Vision Transformers的训练数据量、正则化、数据增强、模型大小和计算预算之间的相互作用:《如何训练你的Vision Transformers?Vision Transformers中的数据、增强和正则化》论文