searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

ViT:用transformer做大规模的图像识别

2023-10-07 05:28:22
92
0

transformer大家都知道,在nlp领域已经用的很成熟了,基于此发展出了GPT和BERT两种方式的预训练语言模型,为NLP各项下游任务带来了显著的性能提升。那transformer这么有效好用的方法是否适用于cv领域呢?答案是肯定的,ViT将标准的transformer结构运用到图像识别任务上取得了很好的性能,并证明了在大量数据进行预训练后,再迁移到中小型数据集(ImageNet, CIFAR-100, VTAB等),ViT能够取得和最高水平卷积神经网络类似的结果,同时大幅减少训练中的计算资源消耗。

论文题目:AN IMAGE IS WORTH 16x16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE

这篇文章是ICLR 2021的谷歌团队提出了一种全新的计算机视觉模型,Vision Transformer(ViT),是将transformer运用于cv领域的经典之作。

1. Q:ViT的具体结构是什么?

根据上面结构图,模型训练流程如下:

  1. 首先把一张图划分成了九宫格(9个patch),把patch变成一个序列;
  2. 每个patch通过线性投射层(全连接层)得到一个特征,即patch embedding,每个patch也有自己的位置编码,即position embedding;
  3. patch embedding+position embedding组成一个patch的token,包含图像块原本图像信息和位置信息;
  4. 将所有token输入到Transformer encoder(标准Transformer结构,如图右侧所示);
  5. 通过自注意力,所有的token都在做交互信息,所以第0个class embedding也能够从别的embedding学到有用信息,从而只需根据class embedding的输出做分类判断就可以了。这里需要注意的是,第0个class embedding是借鉴了bert中的特殊字符[cls],上图中用*号代替,它也有位置信息,永远是0;
  6. 使用交叉熵损失函数训练。

2. Q:ViT前向传播的维度是什么样的?

下面以一个具体例子来说明。

图片 X 维度: 224 * 224 * 3 ,

patch 数 N: 224 ^ 2 / 16 ^ 2 = 14 ^ 2 = 196 ,即将一张图划分成了 14*14 个小patch,

每一个 patch 的维度:16 * 16 * 3= 768 ,

Linear Projection 全连接层 E 维度: 768* D(embedding_dim) 

图片 X * E = patches (196 * 768) * E ( 768 * D ) = 196 * D

进入 transformer encoder 的序列长度就是196 * 768拼接 [CLS] token (1 * 768) = 197 * 768

position embedding 和 patch embedding直接相加,patch embedding(197 * 768) + position embedding (197 * 768)= (197 * 768)维度

3. Q:ViT实验结果怎么样?

在JFT-300M数据集上预训练的Vision Transformer模型在所有数据集上都优于基于resnet的基线,同时预训练的计算资源要少得多。在较小的公共 ImageNet-21k 数据集上预训练的 ViT 也表现良好。

左图在较小的ImageNet数据集上进行预训练时,大型 ViT 模型的性能比 BiT ResNets(阴影区域)差,但当在更大的数据集上进行预训练时,它们表现更好。右图ResNets 在较小的预训练数据集上表现更好,但比 ViT 更快地趋于稳定。

0条评论
0 / 1000
9****m
7文章数
1粉丝数
9****m
7 文章 | 1 粉丝
原创

ViT:用transformer做大规模的图像识别

2023-10-07 05:28:22
92
0

transformer大家都知道,在nlp领域已经用的很成熟了,基于此发展出了GPT和BERT两种方式的预训练语言模型,为NLP各项下游任务带来了显著的性能提升。那transformer这么有效好用的方法是否适用于cv领域呢?答案是肯定的,ViT将标准的transformer结构运用到图像识别任务上取得了很好的性能,并证明了在大量数据进行预训练后,再迁移到中小型数据集(ImageNet, CIFAR-100, VTAB等),ViT能够取得和最高水平卷积神经网络类似的结果,同时大幅减少训练中的计算资源消耗。

论文题目:AN IMAGE IS WORTH 16x16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE

这篇文章是ICLR 2021的谷歌团队提出了一种全新的计算机视觉模型,Vision Transformer(ViT),是将transformer运用于cv领域的经典之作。

1. Q:ViT的具体结构是什么?

根据上面结构图,模型训练流程如下:

  1. 首先把一张图划分成了九宫格(9个patch),把patch变成一个序列;
  2. 每个patch通过线性投射层(全连接层)得到一个特征,即patch embedding,每个patch也有自己的位置编码,即position embedding;
  3. patch embedding+position embedding组成一个patch的token,包含图像块原本图像信息和位置信息;
  4. 将所有token输入到Transformer encoder(标准Transformer结构,如图右侧所示);
  5. 通过自注意力,所有的token都在做交互信息,所以第0个class embedding也能够从别的embedding学到有用信息,从而只需根据class embedding的输出做分类判断就可以了。这里需要注意的是,第0个class embedding是借鉴了bert中的特殊字符[cls],上图中用*号代替,它也有位置信息,永远是0;
  6. 使用交叉熵损失函数训练。

2. Q:ViT前向传播的维度是什么样的?

下面以一个具体例子来说明。

图片 X 维度: 224 * 224 * 3 ,

patch 数 N: 224 ^ 2 / 16 ^ 2 = 14 ^ 2 = 196 ,即将一张图划分成了 14*14 个小patch,

每一个 patch 的维度:16 * 16 * 3= 768 ,

Linear Projection 全连接层 E 维度: 768* D(embedding_dim) 

图片 X * E = patches (196 * 768) * E ( 768 * D ) = 196 * D

进入 transformer encoder 的序列长度就是196 * 768拼接 [CLS] token (1 * 768) = 197 * 768

position embedding 和 patch embedding直接相加,patch embedding(197 * 768) + position embedding (197 * 768)= (197 * 768)维度

3. Q:ViT实验结果怎么样?

在JFT-300M数据集上预训练的Vision Transformer模型在所有数据集上都优于基于resnet的基线,同时预训练的计算资源要少得多。在较小的公共 ImageNet-21k 数据集上预训练的 ViT 也表现良好。

左图在较小的ImageNet数据集上进行预训练时,大型 ViT 模型的性能比 BiT ResNets(阴影区域)差,但当在更大的数据集上进行预训练时,它们表现更好。右图ResNets 在较小的预训练数据集上表现更好,但比 ViT 更快地趋于稳定。

文章来自个人专栏
论文笔记
5 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0