首页IT科技vggnet网络结构详解(vit网络模型简介)

vggnet网络结构详解(vit网络模型简介)

时间2025-05-04 23:06:53分类IT科技浏览3712
导读:目录...

目录

一           、前言

1.1 Transformer在视觉领域上使用的难点

1.2 输入序列长度的改进

1.3 VIT对输入的改进

二                  、Vision Transformer模型

2.1 Embedding层

2.2 Transformer Encoder

2.3 MLP Head

2.4  具体流程

三      、模型搭建参数

四           、结果分析

一                  、前言

1.1 Transformer在视觉领域上使用的难点

        在NLP中            ,输入transformer中的是一个序列                 ,而在视觉领域      ,需要考虑如何将一个2d图片转化为一个1d的序列      ,最直观的想法就是将图片中的像素点输入到transformer中                 ,但是这样会有一个问题            ,因为模型训练中图片的大小是224*224=50176      ,而正常的bert的序列长度是512                 ,是bert的100倍            ,这个的复杂度太高了            。

1.2 输入序列长度的改进

        如果直接输入像素点复杂度太高的话,就想着如何降低这部分的复杂度

        1)使用网络中间的特征图

        比如用res50最后一个stage res4 的feature map size只有14*14=196                 ,序列长度是满足预期的

        2)孤立自注意力

        使用local window而不是整张图                 ,输入的序列长度可以由windows size来控制

        3)轴自注意力

        将在2d图片上的自注意力操作改为分别在图片的高和宽两个维度上做self-attention,可以大大降低复杂度            ,但是由于目前硬件没有对这种操作做加速                 ,很难支持大规模的数据量级                 。

1.3 VIT对输入的改进

        先将图片切分成一个个patch      ,然后每一个patch作为一个token输入到transformer中            ,但是由于整个transformer每个token之间都会做attention                 ,所以输入本身并不存在一个顺序问题      。但是对于图片而言      ,每个patch之间是有顺序的      ,所以类比bert                 ,给每个patch embedding加上一个position embedding(是sum)      。同时最终的输出也借鉴了bert            , 用0和cls来替代整体      ,这部分对应的embedding就是最终的输出                 。

二      、Vision Transformer模型

        下图是原论文中给出的关于Vision Transformer(ViT)的模型框架            。简单而言                 ,模型由三个模块组成:

1.Linear Projection of Flattened Patches(Embedding层)

2.Transformer Encoder

3.MLP Head(最终用于分类的层结构)

2.1 Embedding层

        对于标准的Transformer模块            ,要求输入的是token(向量)序列,即二维矩阵[num_token, token_dim]                 ,如下图                 ,token0-9对应的都是向量,以ViT-B/16为例            ,每个token向量长度为768      。

        对于图像数据而言                 ,其数据格式为[H, W, C]是三维矩阵明显不是Transformer想要的                 。所以需要先通过一个Embedding层来对数据做个变换            。如下图所示      ,首先将一张图片按给定大小分成一堆Patches。以ViT-B/16为例            ,将输入图片(224x224)按照16x16大小的Patch进行划分                 ,划分后会得到196个Patches                 。接着通过线性映射将每个Patch映射到一维向量中      ,以ViT-B/16为例      ,每个Patche数据shape为[16, 16, 3]通过映射得到一个长度为768的向量(后面都直接称为token)                 。[16, 16, 3] -> [768]

        在代码实现中                 ,直接通过一个卷积层来实现。 以ViT-B/16为例            ,直接使用一个卷积核大小为16x16      ,步距为16                 ,卷积核个数为768的卷积来实现            。通过卷积[224, 224, 3] -> [14, 14, 768]            ,然后把H以及W两个维度展平即可[14, 14, 768] -> [196, 768],此时正好变成了一个二维矩阵                 ,正是Transformer想要的                 。

2.2 Transformer Encoder

        Transformer Encoder其实就是重复堆叠Encoder Block L次                 ,主要由Layer Norm     、Multi-Head Attention                  、Dropout和MLP Block几部分组成      。

​​

2.3 MLP Head

        上面通过Transformer Encoder后输出的shape和输入的shape是保持不变的,以ViT-B/16为例            ,输入的是[197, 768]输出的还是[197, 768]            。这里我们只是需要分类的信息                 ,所以我们只需要提取出[class]token生成的对应结果就行      ,即[197, 768]中抽取出[class]token对应的[1, 768]                 。接着我们通过MLP Head得到我们最终的分类结果      。MLP Head原论文中说在训练ImageNet21K时是由Linear+tanh激活函数+Linear组成      。但是迁移到ImageNet1K上或者你自己的数据上时            ,只用一个Linear即可                 。

2.4  具体流程

        1.首先将分辨率为 T × H × W 的输入视频                 ,其中 T 为帧数            、H 为高度     、W 为宽度      ,分割成尺寸为1×16×16的非重叠块      ,然后在平坦图像块上逐点运用线性层                 ,将其投影到潜在尺寸 D 中            。就是1×16×16的核大小和步长的卷积            ,如表1中patch1阶段所示      。

        2.位置嵌入E ∈ ​添加到长度为L且维数为D的投影序列的每个元素                 。

        3.通过N个变换器块的顺序处理      ,产生的长度为L+1的序列                 ,每个变换器块执行注意力(MHA)                 、多层感知机(MLP)和层规范化(LN)操作            。通过以下公式计算:

        注:此处产生长度为L+1的序列是因为spacetime resolution + class token

         4.N个连续块之后的结果序列被层规范化            ,通过线性层来预测输出。此处需要注意,默认情况下                 ,MLP的输入是4D                 。

三            、模型搭建参数

        在论文的Table1中有给出三个模型(Base/ Large/ Huge)的参数                 ,在源码中除了有Patch Size为16x16的外还有32x32的                 。

其中:

Layers

就是Transformer Encoder中重复堆叠Encoder Block的次数 L。

Hidden Size

就是对应通过Embedding层(Patch Embedding + Class Embedding + Position Embedding)后每个token的dim(序列向量的长度)

MLP Size

是Transformer Encoder中MLP Block第一个全连接的节点个数(是token长度的4倍)

Heads代表Transformer中Multi-Head Attention的heads数            。

四、结果分析

        上表是论文用来对比ViT,Resnet(和刚刚讲的一样            ,使用的卷积层和Norm层都进行了修改)以及Hybrid模型的效果                 。通过对比可得出结论:

        1.在训练epoch较少时Hybrid优于ViT -> Epoch小选Hybrid

        2.当epoch增大后ViT优于Hybrid -> Epoch大选ViT

声明:本站所有文章                 ,如无特殊说明或标注      ,均为本站原创发布      。任何个人或组织            ,在未征得本站同意时                 ,禁止复制                 、盗用                  、采集、发布本站内容到任何网站           、书籍等各类媒体平台            。如若本站内容侵犯了原著者的合法权益      ,可联系我们进行处理                 。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
python collections模块(python operator模块有何用法?) python cx_oracle安装(python oracle数据库如何安装?)