Vit,DeiT,DeepViT,CaiT,CPVT,CVT,CeiT简介

2023-11-06

Vit:

       最基础的,就是将transformer的encoder取出来。

输入图像大小维度(B,C,H,W),将图片不重叠地划分为H/patch_height * w/patch_weight个patch,每个patch为patch_height * patch_weight * c。

之后,concat用于分类的cls token,维度+1,同时加入可学习的绝对位置编码,送入transformer的主体。

       之后就与tansformer的计算相同,这里不多做赘述。

如果要加入mask屏蔽,应该在未softmax前的attention weights进行屏蔽。

最终送入分类头时,可以选择对所有patch求均值或只送入cls token。

Deit

       DeiT是在ViT的基础上,多加入了一个distill token用于蒸馏学习。

       这篇论文提出了两个蒸馏方法:

软蒸馏:

λ,τ是超参数,y 是ground truth,ψ是softmax函数,Zs和Zt分别是学生模型、教师模型的输出, LCE是交叉熵损失,K L是KL散度。

KL散度也就是相对熵,也是用来计算两个概率分布的一种差异

硬蒸馏:

       也就是计算学生的输出分别于与真实标签,yt教师输出做损失。 

DeepViT

      主要在于VIT深层,自我注意机制无法学习到有效的表征学习概念,阻碍了模型获得预期的性能增益。也就是出现了注意力坍塌的问题。

       基于这一观察,为了解决注意力崩溃的问题,并有效地将视觉转换扩展到更深的层面,提出了一种简单而有效的自我注意机制再注意(re-attention)用于ViTs中。

定义了一个端到端可学习的变换矩阵,变换矩阵沿着头部维度乘以自注意力映射图,将多头注意力映射图混合到重新生成的新的注意力映射图中,并且Norm取得是BatchNorm而不是传统的LayerNorm,然后与Value相乘。实现时,变换矩阵是一个(heads,head,1,1)的二维卷积。

 

Cait:

       b)(c)中的 α 是一个实数,即,FFNSA的输出特征都统一乘以α;而图(d)中,FFNSA输出特征的不同channel乘上不同的数值,在一定程度上会使得特征更细化,更精准。

       该作者认为,既然用于分类的cls token只是为了获得图片的全部信息,那么完全不必在一开始就送入网络进行信息交互,只在最后两层transformer加入进行信息交互。,而这里的CA与SA的区别是,Q只计算cls的,意思是只获取类别 token 和其他 token 的关联就行了,不需要再更新特征 token 自己内部关联了,可以看公式:

 侵删

问题1:为什么class token 放到了网络的后面也可以呢?我们知道图片的信息都在patch embedding里面,所以我们只需要用class token来抽取patch embedding中的信息就相当于class token拥有了图片的信息。

问题2:为什么class token 放到了网络的后面效果更好呢?class token若是和patch embedding同时送入网络,在计算attention时候,class token和patch embedding二者之间就会有信息的相互传递,而然事实上,我们想要的是,用class token 抽取patch embedding中的信息,而不需要将class token 中的信息传递给patch embedding 。所以将class token 往后放,就使得class token专注于它的工作,即专注于抽取图片的信息。

CPVT:

       这篇论文主要的侧重点在于,位置的编码。常见的position encoding方式包括绝对位置编码和相对位置编码等。

目前常用的一般是绝对位置编码,包括在Transformer中提出的sinusoidal编码方式,以及在GPTViT等中所使用的可训练的位置编码等。但是一般的绝对位置编码针对特定分辨率的任务,在训练时就会生成固定尺寸的编码,无法处理不同分辨率大小的图片,这极大地妨碍了Transformer地灵活性和更大的应用空间。常见的处理方式是在处理不同分辨率的图像时,对训练好的position encoding进行插值适用,但需要fine-tune来恢复,不然会造成较大的精度下降。

所以,该文提出了提出一种能够根据不同尺寸输入改变长度的position encoding 方式

首先对上一个transformer encoder的输出进行reshape,回退为2D的图像形式;

然后对该2D信息进行一个2D可分离卷积等来进行局部信息的提取;

最后对新生成的tensor重新reshape到序列化信息格式作为输出。

由于class token中不包含位置相关信息,因此将其隔离不参与PEG的操作。

CVT

       将卷积与transformer两种设计相互结合,寻求最佳组合方式,从而提高了视觉TransformerViT)的性能和效率。

CvT的整体流程如图所示。在ViT架构中引入了2种基于卷积的操作,即卷积Token嵌入和卷积映射。

卷积Token也就是,在VIT中使用linear实现patch_embeddingpos_embedding,而在这里使用卷积替代。并且每一个stage,都会进行卷积+LNtoken embedding。这允许每个阶段逐步减少Token的数量(即特征分辨率),同时增加Token的宽度(即特征维度),从而实现空间下采样和增加丰富度。

QKV的计算上使用深度可分离的卷积运算,称为卷积映射,分别用于查询、键和值的嵌入,而不是ViT中标准的位置线性映射。此外,分类Token只在最后阶段添加。

CeiT

      该论文同样,也是希望将CNNtransformer相结合。

       主要的创新点有三个:

       首先设计Image-to-Tokens模块来从low-level特征中得到embedding

       其次是Transformer中的Feed Forward模块替换为Locally-enhanced Feed-Forward(LeFF)模块,增加了相邻token之间的相关性。

       也就是在mlp中加了卷积来融合不同通道的特征。

       最后是本文最为突出的一个特点使用Layer-wise Class Token AttentionLCA)捕获多层的特征表示。也就是将前面所有stageclass token取出来,将所有的class token作相关与前馈,相互进行信息交互。也就是在提取出来的所有class token的基础上使用一个MSA+FFN得到最终的logits输出。作者认为这样可以获取多尺度的表征。

        

如有错误,欢迎大家批评指正!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vit,DeiT,DeepViT,CaiT,CPVT,CVT,CeiT简介 的相关文章

随机推荐

  • shell 学习记录(一)-Orange Pi Linux 5.4 SDK启动脚本build.sh

    前言 完全shell菜鸟 以Orange Pi Linux 5 4 SDK编译启动脚本build sh学习shell 对不懂的语法 命令记录 一 获取当前文件夹绝对路径 SRC dirname realpath BASH SOURCE 0
  • 带你玩转Visual Studio

    带你玩转Visual Studio 带你新建一个工程 工程目录下各文件的含义 解决方案与工程 在这之前先了解一个概念 解决方案与工程 解决方案 Solution 一个大型项目的整体的工作环境 工程 Project 一个解决方案下的一个子工程
  • 小程序中如何将页面生成图片?

    记一次开发一款小程序遇到的需求 根据用户填写的商品信息 生成一张可分享的购买海报 简单的看了一下小程序的canvas组件 是可以满足这个需求的实现 所以就开始规划 组织代码了 1 小程序组件 canvas 是可以实现的 这里我就不多说了 但
  • 英语怎么学

    我是怎么从零开始学英语的 哈哈哈 在很多人眼里 英语难 和我以前的认为一样 其实英语是最好学的一个语言 很有规则 远比我们的母语中文好学 多数不要一年 就能够过关了 但要友技巧 很多人一定会认为我晕了头 不要急 等我说完了 你再说这话也不迟
  • MySQL 利用UDF执行命令

    UDF即User Defined Functions lib mysqludf sys 在github的介绍 A UDF library with functions to interact with the operating syste
  • Openwrt-搭建一个Git服务器

    简介 对于Git文件的管理 一直是一个比较困扰的问题 目前是流行的Github是一个不错的选择 但是默认是开源的 如果是一些不愿共享出来的文件代码 我们最好是搭建一个自己的服务器 在git官方网站有git服务器的搭建方法 今天 我要说的是在
  • PYQT5表格及样式设置方法

    PYQT5遇到的问题和解决 1 给table添加样式 table 透明度设置 构造一个含图片的label 再用setCellWidget把label插入单元格 1 给table添加样式 1 qApp setStyleSheet font s
  • 《因果学习周刊》第6期:因果推荐系统

    No 06 智源社区 因果学习组 因 果 学 习 研究 观点 资源 活动 关于周刊 因果学习作为人工智能领域研究热点之一 其研究进展与成果也引发了众多关注 为帮助研究与工程人员了解该领域的相关进展和资讯 智源社区结合领域内容 撰写了第6期
  • 【GeekUninstaller】卸载程序

    软件介绍 删除不了的文件 或者软件可以下载试试不需要安装 文章目录 前言 一 如何下载 二 使用步骤 1 安装完之后自动打开 前言 GeekUninstallers是一款高效 快速 小巧 免费的软件卸载与清理工具 旨在帮助用户删除系统上安装
  • caffe源码追踪--syncedmem

    首先来看看caffe include caffe syncedmem hpp ifndef CAFFE SYNCEDMEM HPP define CAFFE SYNCEDMEM HPP include
  • 深度学习之 python pandas

    在数据科学领域 pandas是非常有用的工具 在数据科学细分领域大数据 通常和深度学习有关 这部分 本篇博客从pandas重要函数开始 到数据变换以及数据分析 pandas提供了数据变换 数据清理 数据可视化以及数据提取等主要数据处理功能
  • tar -xf_linux 解压缩命令tar

    linux环境下常见的压缩文件格式 tar tar gz tar bz2 tar xz 参数 c create create a new archive 创建文件 x extract get extract files from an ar
  • 静态资源上传七牛云

    一 七牛云SDK function 请参考demo的index js中的initQiniu 方法 若在使用处对options进行了赋值 则此处config不需要赋默认值 init options 即updateConfigWithOptio
  • Python爬虫实战(五) :下载百度贴吧帖子里的所有图片

    准备工作 目标网址 https tieba baidu com p 5113603072 目的 下载该页面上的所有楼层里的照片 第一步 分析网页源码 火狐浏览器 gt 在该页面上右击 查看页面源代码 会打开一个新的标签页 第二步 查找图片源
  • ue4蓝图中的customevent和function的细微差别。

    在调用第三方库时 我用customEvent时 可以调用LowEntryHttpRequest中的 Executes the request This blueprint can NOT execute several HTTP Reque
  • 记录一下浏览器缩放和移动端缩放的区别,其实两者是有很大的不同的,之前一直搞不明白。

    直接问AI它们之间的区别的话 是这么回答的 浏览器缩放和移动端缩放是两种不同的概念 它们涉及到用户在不同设备上改变网页内容大小的方式 以下是它们的主要区别 浏览器缩放 Desktop Browser Zoom 浏览器缩放是指在桌面计算机浏览
  • 以太坊学习计划1

    1 如果链接远程链 需要上链才可以 打开服务才可以 2 开启本地geth 服务 下载https geth ethereum org downloads 默认启动geth服务 不启动rpc服务 手动用命令行启动 geth rpc 代码端调用
  • C++的使用小教程8——多态与接口

    C 的使用小教程8 多态与接口 1 什么是多态与接口 2 实现方式 3 应用实例 学习好幸苦 1 什么是多态与接口 C 多态意味着调用成员函数时 会根据调用函数的对象的类型来执行不同的函数 接口描述了类的行为和功能 而不需要完成类的特定实现
  • Qgis国际化

    参考文章 QT实现多国语言 几点需要注意的 1 pro文件生成方法 2 ts文件生成方法 输入命令 lupdate f code QT Code QtApplication2 QtApplication2 QtApplication pro
  • Vit,DeiT,DeepViT,CaiT,CPVT,CVT,CeiT简介

    Vit 最基础的 就是将transformer的encoder取出来 输入图像大小维度 B C H W 将图片不重叠地划分为H patch height w patch weight个patch 每个patch为patch height p