Vision Transformer

论文: An Image Is Worth 16x16 Words: Transformers For Image Recognition At Scale
论文下载:https://arxiv.org/abs/2010.11929
原论文源码:https://github.com/google-research/vision_transformer

摘要

在这篇文章中,作者主要拿ResNet、ViT(纯Transformer模型)以及Hybrid(卷积和Transformer混合模型)三个模型进行比较。

Vision Transformer

在这里插入图片描述

  • Linear Projection of Flattened Patches(Embedding层)
  • Transformer Encoder(图右侧有给出更加详细的结构)
  • MLP Head(最终用于分类的层结构)

Embedding层

在这里插入图片描述

Transformer Encoder层

在这里插入图片描述在这里插入图片描述

MLP Head层

在这里插入图片描述

Vision Transformer网络结构

以ViT-B/16为例
在这里插入图片描述

Hybrid模型

在这里插入图片描述下表是论文用来对比ViT,Resnet(和刚刚讲的一样,使用的卷积层和Norm层都进行了修改)以及Hybrid模型的效果。通过对比发现,在训练epoch较少时Hybrid优于ViT,但当epoch增大后ViT优于Hybrid。
在这里插入图片描述

ViT模型搭建参数

在论文的Table1中有给出三个模型(Base/ Large/ Huge)的参数,在源码中除了有Patch Size为16x16的外还有32x32的。其中的Layers就是Transformer Encoder中重复堆叠Encoder Block的次数,Hidden Size就是对应通过Embedding层后每个token的dim(向量的长度),MLP size是Transformer Encoder中MLP Block第一个全连接的节点个数(是Hidden Size的四倍),Heads代表Transformer中Multi-Head Attention的heads数。
在这里插入图片描述

参考大佬:https://blog.csdn.net/qq_37541097/article/details/118242600

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vision TransformerViT)是一种基于Transformer架构的深度学习模型,用于处理计算机视觉任务。它将图像分割成一系列的图像块,并将每个图像块作为输入序列传递给Transformer编码器。每个图像块通过一个线性投影层转换为向量表示,并与位置嵌入向量相结合,然后输入到Transformer编码器中进行处理。Transformer编码器由多个自注意力层和前馈神经网络层组成,用于学习图像中的全局和局部特征。最后,通过一个线性分类器对编码器的输出进行分类。 Vision Transformer的优点是能够在没有使用传统卷积神经网络的情况下,实现对图像的高质量特征提取和分类。它在一些计算机视觉任务上取得了与传统方法相媲美甚至更好的性能,例如图像分类、目标检测和语义分割等任务。 以下是一个使用Vision Transformer进行图像分类的示例代码[^1]: ```python import torch import torch.nn as nn from torchvision import transforms from torchvision.models import resnet50 from vit_pytorch import ViT # 加载预训练的Vision Transformer模型 model = ViT( image_size = 224, patch_size = 16, num_classes = 1000, dim = 768, depth = 12, heads = 12, mlp_dim = 3072, dropout = 0.1, emb_dropout = 0.1 ) # 加载预训练的权重 model.load_from('vit_weights.pth') # 图像预处理 transform = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) # 加载图像并进行预处理 image = Image.open('image.jpg') image = transform(image).unsqueeze(0) # 使用Vision Transformer进行图像分类 output = model(image) _, predicted_class = torch.max(output, 1) # 输出预测结果 print('Predicted class:', predicted_class.item()) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值