【Transformer】ViT and TNT(2)

文章目录

  • VIT
  • TNT

太…完整了!同济大佬唐宇迪博士终于把【Transformer】入门到精通全套课程分享出来了,最新前沿方向

学习笔记


VIT

【Transformer】ViT and TNT(2)_第1张图片

【Transformer】ViT and TNT(2)_第2张图片

【Transformer】ViT and TNT(2)_第3张图片
【Transformer】ViT and TNT(2)_第4张图片

【Transformer】ViT and TNT(2)_第5张图片

eg,图片分块,10x10x3 的 patch 通过 conv 拉成向量,就无缝对接了

【Transformer】ViT and TNT(2)_第6张图片
位置编码可以多种方式,一维序号,二维坐标,无

【Transformer】ViT and TNT(2)_第7张图片
位置编码 0 这里的 token,为分类任务设计的,encoder 堆叠后(self-attention),0 位置上的 token 已有了全局信息,最后把 0 位置上的特征向量作为分类特征就行

分类仅用到了 encoder,检测任务中会用到 decoder

CNN 的缺点

【Transformer】ViT and TNT(2)_第8张图片

【Transformer】ViT and TNT(2)_第9张图片

层多,每一层需要设计

【Transformer】ViT and TNT(2)_第10张图片
需要的数据比较多,比较难训练

【Transformer】ViT and TNT(2)_第11张图片

eg, patch P 为 14*14,C 为 256, D 为 512
Epos 是位置编码
MSA 是 multi-head self-attention
LN 是 layer normalization

【Transformer】ViT and TNT(2)_第12张图片
【Transformer】ViT and TNT(2)_第13张图片
多层共用一个位置编码即可,不用每层都用

仅能反应分类任务的规律,检测可能 2D 位置编码还是更好

【Transformer】ViT and TNT(2)_第14张图片

下面跟随数据的维度和代码(我也没有,哈哈)看看整体流程

(1)embedding

输入 [16,3,224,224]

cls token = [16,1,768]

  • 768 超参, hidden size

patch = 16,划分的方式如下。输入通道 3,输出通道 768,kernel size =16, stride = 16 的 conv 把图片分成 patch,[16,768,14,14]

  • 16x14 = 224

拉长一下成向量,[16,768,196],transpose 一下成 [16,196,768]

  • batch 16,每个 batch 196 个 token,每个 token 的特征维度是 768

加上 position embedding,维度为 [16,197,768]

  • 在这里插入图片描述
    每个 batch 的位置编码一样,所以第一个维度是 1
    在这里插入图片描述
    【Transformer】ViT and TNT(2)_第15张图片

(2)encoder

LN [16,197,768]

query (fc)[16,197,768]
key (fc)[16,197,768]
value(fc)[16,197,768]

在这里插入图片描述

q,k,v transpose for score [16,197,768]->[16,197,12,64]->[16,12,197,64],12 表示共有 12 个 multi-head attention,197 个 token,每个 token 64 维的特征

【Transformer】ViT and TNT(2)_第16张图片
q,k 内积 attention score [16,12,197,197],197 个 token 间相互的关系

归一化,消除数量的影响

在这里插入图片描述

再接一个 softmax 计算出来权重

权重乘以 v,重构了特征得到 [16,12,197,64],还原回去得到 [16,197,768]

再来个 fc 层,和输入来个 res 结构

在这里插入图片描述

[16,197,768]

【Transformer】ViT and TNT(2)_第17张图片

继续

在这里插入图片描述
再来个 layer norm + MLP + res

【Transformer】ViT and TNT(2)_第18张图片

重复执行 L 次,输出选第 0 个 token 作为预测

接个 fc 得到 logits,eg:[16,197,768]->[16,768]->[16,10] 十分类

在这里插入图片描述

TNT

【Transformer】ViT and TNT(2)_第19张图片

conv 是基于每个空间位置进行的,相比于来说 patch 过于大了,可以把patch 进一步细分,

【Transformer】ViT and TNT(2)_第20张图片
【Transformer】ViT and TNT(2)_第21张图片
类似于 focus,eg 16 ∗ 16 ∗ 3 16*16*3 16163 变成 4 ∗ 4 ∗ 28 4*4*28 4428

【Transformer】ViT and TNT(2)_第22张图片

内部 transformer 得到的结果和外部 transformer 得到的结果相加

【Transformer】ViT and TNT(2)_第23张图片
【Transformer】ViT and TNT(2)_第24张图片
T-SNE 蓝色特征更发散一些(更能分得开)

方差越大,特征越鲜明,越容易区分

你可能感兴趣的:(CNN,/,Transformer,transformer,深度学习,人工智能,ViT,TNT)