万字长文解读深度学习——ViT、ViLT、DiT
文章目录
- 🌺深度学习面试八股汇总🌺
- ViT
- 1. ViT的基本概念
- 2. ViT的结构与工作流程
- 1. 图像分块(Image Patch Tokenization)
- 2. 位置编码(Positional Encoding)
- 3. Transformer 编码器(Transformer Encoder)
- 4. 分类标记(Classification Token)
- 3. ViT的关键组件
- 1. 图像块(Patch Embedding)
- 2. 多头自注意力机制(Multi-Head Self-Attention)
- 3. 位置编码(Positional Encoding)
- 4. ViT与CNN的对比
- 5. ViT的优势和挑战
- 优势
- 挑战
- 6. ViT的应用
- ViT 与 CNN 的混合模型 Hybrid ViT
- ViLT
- 1. ViLT 的工作流程
- 1. 图像和语言的输入处理
- 2. 图像和语言的融合
- 3. 自注意力机制
- 4. 输出处理
- 2. ViLT 的主要创新点
- 1. 无卷积特征提取器
- 2. 视觉和语言的早期融合
- 什么时候用 CLIP,什么时候用 ViLT?
- 3. 简化的架构
- 3. ViLT 的优缺点
- 优点
- 缺点
- DiT
- 1. DiT 的核心思想
- 2. DiT 的组成元件
- (1)图像块嵌入(Patch Embedding)
- (2)位置编码(Positional Encoding)
- (3)Transformer 编码器(Transformer Encoder)
- (4)[CLS] 标记
- (5)分类头或任务特定头部(Task-Specific Heads)
- 3. DiT 的工作流程
- 4. DiT 的优缺点
- 优点
- 缺点
- 5. DiT 的典型应用场景
- 与 OCR 结合的文档分析
- 总结
- ViT、ViLT、DiT区别和联系
- 设计目标、输入类型、模型结构、适用任务对比
🌺深度学习面试八股汇总🌺
ViT
ViT(Vision Transformer) 是一种将 Transformer 模型用于计算机视觉任务中的创新架构。ViT 只使用了 Transformer 的编码器 部分进行特征提取和表征学习。
1. ViT的基本概念
ViT 的核心思想是将传统的(CNN)的卷积操作替换为 Transformer 的注意力机制,借鉴 Transformer 模型在自然语言处理(NLP)中的成功经验,用于图像分类任务。
2. ViT的结构与工作流程
ViT 模型的工作流程如下:
1. 图像分块(Image Patch Tokenization)
ViT 将输入的图像划分为固定大小的图像块(patches),并将这些图像块展开为一维向量,类似于将图像分成许多小的"单词"。然后,将每个图像块转换为一个嵌入向量,这些嵌入向量类似于 NLP 中的词嵌入(Word Embedding)。
- 假设输入图像的尺寸是 224 × 224 224 \times 224 224×224,将其划分为尺寸为 16 × 16 16 \times 16 16×16 的小块。这将产生 14 × 14 = 196 14 \times 14 = 196 14×14=196 个图像块。
- 每个图像块的像素值被展平成一维向量,并通过线性映射(全连接层)转换为固定维度的嵌入向量。
2. 位置编码(Positional Encoding)
因为 Transformer 的注意力机制不依赖于输入的顺序,而图像中的空间信息是重要的,因此需要给每个图像块添加位置编码(Positional Encoding),以保留图像块的位置信息。这样,Transformer 可以理解图像块之间的相对位置关系。
- 位置编码的方式与 NLP 中的 Transformer 类似,使用正弦和余弦函数来编码图像块的位置。
3. Transformer 编码器(Transformer Encoder)
图像块和位置编码结合后,作为输入送入 Transformer 编码器。Transformer 编码器的每一层由多头自注意力机制(Multi-Head Self-Attention)和前馈神经网络(Feed-Forward Network, FFN)组成,并通过残差连接和层归一化来保持梯度稳定性。
- 多头自注意力机制:每个图像块与其他所有图像块之间的相似性通过自注意力机制计算,模型通过这种机制捕捉全局的特征表示。
- 前馈神经网络(FFN):每个图像块的特征表示通过前馈网络进一步提炼。
这个过程类似于传统的 Transformer 中对词的处理,只不过这里处理的是图像块。
4. 分类标记(Classification Token)
ViT 模型在输入图像块之前,通常会添加一个分类标记([CLS] Token)。这个分类标记类似于 BERT 模型中的 [CLS] 标记,用来代表整个图像的全局特征。最终,经过 Transformer 编码器的处理后,CLS 标记的输出被用于进行图像分类。
- CLS 标记的输出经过一个全连接层,将其映射到目标类别空间中,得到最终的分类结果。CLS 是 “classification” 的缩写,表示分类。它是一个附加到图像块序列之前的向量,类似于 BERT 模型中处理文本任务时添加的 [CLS] 标记。CLS 标记没有直接对应于任何特定的图像块,它只是一个特殊的向量,用于捕获整个图像的全局信息。
[0.9, 0.05, 0.05]
表示 90% 的概率是“猫”,5% 的概率是“狗”,5% 的概率是其他类别。
3. ViT的关键组件
1. 图像块(Patch Embedding)
ViT 将图像划分为固定大小的图像块,并将其展平为一维向量。这与传统 CNN 的卷积操作不同,CNN 的卷积操作是基于局部感受野,而 ViT 直接处理全局特征。
2. 多头自注意力机制(Multi-Head Self-Attention)
ViT 的核心是使用多头自注意力机制来计算每个图像块与其他图像块之间的关系。与 CNN 通过层级卷积提取特征不同,ViT 通过全局的自注意力机制捕捉图像的特征表示。
3. 位置编码(Positional Encoding)
ViT 通过位置编码来为每个图像块提供位置信息,这在视觉任务中是非常重要的,因为图像块的相对位置对分类任务有重要影响。
4. ViT与CNN的对比
对比维度 | CNN | ViT (Vision Transformer) |
---|---|---|
局部 vs 全局 | 依赖于卷积核的局部感受野,逐层提取局部特征并组合成全局特征 | 通过自注意力机制直接捕捉图像块之间的全局关系 |
参数规模 | 通常参数较少,适合处理小数据集,具有较好的泛化能力 | 通常拥有更多参数,在小数据集上容易过拟合,但在大规模数据集上效果出色 |
数据需求 | 在小数据集上表现稳定,具有先验信息(如卷积操作中的平移不变性) | 缺少 CNN 中的先验信息,因此需要大规模数据集进行训练,在小数据集上表现不如 CNN |
5. ViT的优势和挑战
优势
- 全局信息捕捉:ViT 通过自注意力机制能够直接捕捉图像块之间的全局关系,而不依赖于局部的卷积操作。这在处理一些全局依赖性较强的任务时表现出色。
- 充分利用数据的丰富性:ViT 在大规模数据集上训练时,能够充分利用数据的丰富性,并展示出优越的性能。尤其在超大规模数据集(如 ImageNet21k、JFT-300M)上,ViT 的性能超过了传统 CNN。
挑战
- 数据需求量大:ViT 模型的参数量较大,因此需要大规模的数据集来训练。如果数据集规模较小,ViT 容易过拟合。
- 训练复杂:与 CNN 相比,ViT 的训练更复杂,尤其在资源有限的情况下,训练大规模的 ViT 模型会面临内存和计算资源的挑战。
6. ViT的应用
主要用于图像分类任务,但其架构可以扩展到其他计算机视觉任务,如目标检测、图像分割、视觉问答等。由于其全局特征捕捉能力,ViT 在一些需要处理全局上下文的任务中表现尤为出色。
ViT 与 CNN 的混合模型 Hybrid ViT
Hybrid ViT 是一种将 CNN 和 Transformer 结合的架构,它将 CNN 用于特征提取,Transformer 用于全局建模。可以补充,这种混合模型可以在一定程度上解决 ViT 在小数据集上的表现问题,并保留 Transformer 全局建模的优点。
ViLT
ViLT(Vision-and-Language Transformer) 是一种使用Transformer 的编码器将视觉信息和语言信息整合在同一Transformer架构中解决视觉与语言的联合任务的多模态模型。
主要特点在于去除了传统视觉-语言模型中的卷积神经网络,
ViLT 的主要创新点在于它不依赖卷积神经网络(CNN)来处理图像,而是通过直接将图像块和文本输入给 Transformer 模型,实现视觉和语言的早期融合。
传统的视觉-语言模型有显著不同,传统模型通常会先提取,再结合(先通过卷积网络提取视觉特征,再与语言特征结合)。
早期融合和晚期融合指的是进入 Transformer 编码器的顺序,早期融合,在融合后再进入Transformer,CLIP等,是经过Transformer后提取特征进行对比,是晚期融合。
1. ViLT 的工作流程
ViLT 直接通过Transformer对图像和文本进行融合处理,它的工作流程可以概括为以下几个步骤:
1. 图像和语言的输入处理
- 图像输入:与 ViT(Vision Transformer)类似,ViLT 通过将输入图像划分为固定大小的图像块(patch)。例如,一个 224 × 224 224 \times 224 224×224 的图像可以划分成多个 16 × 16 16 \times 16 16×16 的图像块,展平后形成向量序列。
- 语言输入:文本输入通过词嵌入(Word Embedding)表示为向量。文本的输入与 BERT 模型中的处理类似。
2. 图像和语言的融合
ViLT 的核心是通过单一 Transformer 模型同时处理图像和语言数据。其输入序列是图像块和词嵌入的融合。具体步骤如下:
- 图像块嵌入+位置编码:每个图像块被展平成一维向量,并与对应的位置编码(Positional Encoding) 结合在一起,类似于 ViT。
- 文本嵌入+位置编码:文本序列通过嵌入层映射为固定维度的向量,并且每个词也被添加位置编码。
- 联合输入:图像块嵌入和文本嵌入会串联在一起,作为 Transformer 的输入序列。
图像 patch 嵌入在前,文本 token 嵌入在后。如果需要,也会在前面加上【CLS】
3. 自注意力机制
ViLT 使用自注意力机制来捕捉图像块和文本词之间的相互关系。通过多头自注意力机制,模型可以让每个输入块(无论是图像还是词)与其他块交互,捕捉图像和语言之间的上下文信息。
这种全局的注意力机制能够高效地融合视觉和语言信息,从而使得模型能够处理如图文匹配、视觉问答等跨模态任务。
4. 输出处理
最终,ViLT 的输出经过 Transformer 编码器处理,得到的结果可以用于多种下游任务。具体根据任务的不同,输出会有不同的处理方式:
- 图文匹配(Image-Text Matching, ITM):模型判断输入的图像和文本是否匹配,这可以用于图像-文本检索任务。
- 视觉问答(Visual Question Answering, VQA):模型根据图像和问题文本生成答案。
- 图像描述(Image Captioning):模型根据输入图像生成描述性文本。
2. ViLT 的主要创新点
1. 无卷积特征提取器
与传统的视觉-语言模型(如 LXMERT、UNITER 等)不同,ViLT 不使用卷积神经网络,而是直接将图像切分成小块后,使用 Transformer 模型对图像和文本进行融合处理。
- 优势:减少了模型的计算开销,因为不需要预训练一个大型 CNN 模型来提取视觉特征。
- 挑战:直接处理图像块可能在细粒度视觉理解任务上存在性能瓶颈,尤其是在需要精细局部信息时。
2. 视觉和语言的早期融合
ViLT 通过早期融合(early fusion)的方式,将图像块和文本词嵌入直接结合在 Transformer 的输入中。
早期融合和晚期融合指的是进入 Transformer编码器的顺序,早期融合,在融合后再进入Transformer,CLIP等,是经过Transformer后提取特征进行对比,是晚期融合。
什么时候用 CLIP,什么时候用 ViLT?
-
使用 CLIP:
- 当需要进行 图像-文本检索(给定图像或文本检索相关配对)时,CLIP 的对比学习在跨模态检索方面表现优异。
- 零样本分类任务,CLIP 在没有类别标签的条件下,通过类别描述实现分类,无需对新类别进行微调。
- 常规的 图像分类 场景中,CLIP 由于有强大的跨模态对比能力,可以使用类别描述进行分类,而不需要针对每个类别进行单独的训练。
-
使用 ViLT:
- 视觉问答(VQA) 或 图文匹配 任务中,ViLT 的早期融合能捕捉图像和文本间的细粒度关系,适合需要图像-文本联合推理的任务。
- 细粒度的图文理解 任务中,如果任务需要在图像的局部信息和文本的上下文之间进行交互,ViLT 可以更有效地捕捉图像和文本之间的深层语义关系。
总结:
- CLIP 适合在 跨模态检索、零样本分类 和 简单图像分类 场景中使用。
- ViLT 则更适合 视觉问答、图文匹配 和 细粒度图文理解 场景。
3. 简化的架构
通过使用单一的 Transformer 模型处理图像和文本,ViLT 提供了一种简化的架构,避免了传统视觉-语言模型中分别处理图像和文本的复杂性。这种设计大大简化了模型的计算流程,同时在许多视觉-语言任务上仍然保持了很高的性能。
3. ViLT 的优缺点
优点
- 计算效率高:由于不使用 CNN 或区域提取网络(如 Faster R-CNN),ViLT 相比传统视觉-语言模型具有更少的计算开销,训练和推理速度更快。
- 模型简洁:单一的 Transformer 模型处理视觉和语言,避免了复杂的多模块设计,架构简单易于扩展。
- 多模态融合效果好:通过早期融合,ViLT 能够捕捉图像和语言的全局上下文信息,表现出色。
缺点
- 精细视觉特征提取能力较弱:由于没有使用卷积神经网络进行图像特征提取,ViLT 在处理需要细粒度视觉理解的任务时,可能性能不如传统模型。这是因为 Transformer 对局部信息的提取能力不如 CNN。
- 对大规模数据集的依赖:和 Vision Transformer 类似,ViLT 在较小数据集上的表现可能不如传统方法,因此需要大规模数据集进行预训练才能发挥最佳性能。
DiT
DiT(Document Image Transformer) 是一种基于 Transformer编码器部分 的文档图像理解模型,处理复杂的文档图像任务,比如表格检测、文档分类和版面识别等图像理解任务。
“文档图像”专指 文档类型的图像,包含文字和结构信息的文档内容,以图像的形式呈现,而非普通的自然图像(如风景图或人像)。例如扫描的文档、PDF 文件、发票、合同、表格、账单、报告等。
DiT 的设计灵感来自 ViT(Vision Transformer),但它针对文档图像特有的复杂布局结构进行了专门优化,以便更好地理解图像中的文字、表格、布局和视觉信息。
1. DiT 的核心思想
DiT 的核心思想是使用 Transformer 模型直接在文档图像上进行端到端的特征学习和信息抽取。它将文档图像划分成一系列小图像块,并使用 Transformer 结构对这些图像块进行全局建模。通过这种方式,DiT 能够捕捉到文档图像中的复杂布局和层次结构,实现文档级的图像理解。
2. DiT 的组成元件
DiT 主要由以下几个关键组成元件构成:
(1)图像块嵌入(Patch Embedding)
- DiT 首先将输入文档图像划分为固定大小的块(如 16x16 或 32x32 的图像块),然后对每个图像块进行展平处理,并通过一个线性变换层将其映射到固定维度的特征空间。
- 这一步生成了每个图像块的特征向量,就像文本中的词向量一样。这些特征向量形成了一个序列,将作为 Transformer 编码器的输入。
(2)位置编码(Positional Encoding)
- 为了使 Transformer 了解每个图像块在文档中的位置,DiT 使用了位置编码来表示图像块的位置。
- DiT 中采用了类似 ViT 的绝对位置编码,将位置编码添加到每个图像块的嵌入中,从而让模型对文档布局的空间信息有清晰的感知。
(3)Transformer 编码器(Transformer Encoder)
- DiT 的核心部分是堆叠的 Transformer 编码器层。每一层编码器包括多头自注意力机制和前馈网络,通过逐层提取图像块间的全局关系,DiT 可以学习到文档中不同区域间的长距离依赖关系。
- 由于文档图像往往包含复杂的排版和结构(如文本块、表格、图片等),Transformer 的全局建模能力可以更有效地捕捉这些信息。
(4)[CLS] 标记
- 类似于 BERT 等语言模型,DiT 在输入序列的最前端添加了一个 [CLS] 标记,作为文档级的特征表示。
- 在 Transformer 编码器的最后一层,模型使用 [CLS] 标记的输出表示整个文档图像的综合信息。这个输出可以用于分类、特征提取或其他文档级任务。
(5)分类头或任务特定头部(Task-Specific Heads)
- 根据任务需求,DiT 会在 [CLS] 标记或每个图像块的输出后接入不同的任务特定头部:
- 文档分类:基于 [CLS] 标记的输出进行分类。
- 表格检测:输出每个图像块的特征,用于进一步的边界框预测。
- 布局识别:结合每个图像块的特征,实现对文档内容的分块和标记。
3. DiT 的工作流程
DiT 的工作流程可以分为以下几个步骤:
- 图像预处理:将输入的文档图像划分成若干固定大小的图像块,并将其展平为向量表示。
- 图像块嵌入和位置编码:通过线性变换和位置编码,将每个图像块映射到 Transformer 可以处理的特征空间中,并形成输入序列。
- Transformer 编码:将图像块嵌入序列输入到 Transformer 编码器中,逐层捕捉图像块间的全局关系和文档的层次结构。
- [CLS] 标记和任务特定头部:通过 [CLS] 标记或每个图像块的特征输出执行文档级或块级任务,例如分类、布局分析等。
4. DiT 的优缺点
优点
- 端到端文档理解:DiT 能够在不依赖 CNN 的情况下直接处理文档图像,实现端到端的文档理解,减少了特征提取的复杂性。
- 强大的全局建模能力:Transformer 的自注意力机制使 DiT 在长距离依赖建模和复杂布局结构理解上表现出色,适合处理表格、复杂布局等文档元素。
- 灵活性高:DiT 的输入可以扩展到不同大小和格式的文档图像,同时能够适应多种任务(如文档分类、表格检测、布局识别),具有较高的任务适应性。
缺点
- 计算复杂度高:由于 Transformer 的自注意力机制,DiT 的计算复杂度为 ( O ( n 2 ) O(n^2) O(n2)),其中 (n) 是图像块的数量。在处理高分辨率文档图像时,可能导致计算和内存负担较大。
- 对大规模数据依赖强:Transformer 模型通常需要大量数据进行预训练,以实现较好的泛化性能。DiT 在小数据集上的表现可能受到限制。
- 位置敏感性较弱:虽然使用了位置编码,但 Transformer 本身并不直接感知图像的空间结构,可能在某些需要精确空间关系的任务中不如 CNN 表现优异。
5. DiT 的典型应用场景
- 文档分类:通过 [CLS] 标记的输出对整个文档图像进行分类,例如文档类型识别。
- 表格检测与识别:将文档图像中的表格区域检测出来,或进一步识别表格结构。
- 文档布局分析:识别文档的布局结构,例如标题、段落、表格、图片等不同内容块的位置和类别。
与 OCR 结合的文档分析
在文档图像理解任务中,DiT 可以结合 OCR 提取文字信息,实现更全面的文档理解。面试中可能会考察如何在文档图像分析中结合 OCR,DiT 提取图像布局信息,OCR 提取文字内容,两者结合可以进行复杂的文档内容分析。
OCR(Optical Character Recognition),即 光学字符识别,是一种通过识别图像中的文字并将其转化为计算机可编辑、可搜索文本的技术。OCR 在各种应用场景中被广泛使用,如文档数字化、表单处理、车牌识别等。OCR 技术能够从扫描文件、照片、PDF 等图像中提取文字信息,使文字数据易于存储、编辑、搜索和分析。
总结
DiT(Document Image Transformer) 是一个基于 Transformer 的模型,专门设计用于文档图像理解任务。通过直接将图像划分为块并使用 Transformer 进行全局建模,DiT 能够捕捉复杂的布局和层次信息,适合应用在文档分类、表格检测和布局分析等任务上。然而,由于其高计算复杂度和对大规模数据的依赖,DiT 在应用时需要权衡计算资源和模型性能。
ViT、ViLT、DiT区别和联系
ViT(Vision Transformer)、ViLT(Vision-and-Language Transformer) 和 DiT(Document Image Transformer) 都是基于 Transformer 的模型,专门针对图像分类、图文融合和文档图像理解。它们虽然共享一些相似的架构基础,但在设计目标、任务应用和数据输入等方面有显著的区别。以下是它们之间的区别和联系:
设计目标、输入类型、模型结构、适用任务对比
特性 | ViT (Vision Transformer) | ViLT (Vision-and-Language Transformer) | DiT (Document Image Transformer) |
---|---|---|---|
1. 设计目标 | 适用于通用计算机视觉任务,如图像分类、分割 | 专为 视觉-语言融合任务 设计,如视觉问答和图文检索 | 专注于 文档图像理解,处理文档分类、表格检测、版面分析等 |
2. 输入类型 | 仅接受 图像 输入,将图像划分为小块(patch) | 接受 图像-文本对 输入,直接处理视觉和文本信息 | 仅接受 文档图像 输入,将文档图像划分为小块进行处理 |
3. 模型结构 | 只使用 Transformer 编码器,堆叠多层编码器处理图像块 | 轻量化设计,将图像和文本嵌入输入同一个 Transformer 编码器 | 类似 ViT,只使用 Transformer 编码器,专注文档布局和结构信息 |
4. 适用任务和应用场景 | 适合图像分类、目标检测、图像分割等计算机视觉任务 | 适合视觉问答、图文匹配、图文检索等视觉-语言多模态任务 | 适合文档分类、表格检测、版面分析等文档图像理解任务 |