首页 > 其他分享 >看ViT串讲-cnblog

看ViT串讲-cnblog

时间:2023-03-19 16:01:08浏览次数:47  
标签:14 串讲 ResNet patch ViT CNN times cnblog

ViT

概括

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

论文地址:https://openreview.net/pdf?id=YicbFdNTTy

作者来自 Google

亮点:

  • 一些有趣的特性:
    • CNN 处理不太好但是 ViT 可以处理好的例子:
    • 遮挡
    • 数据分布偏移
    • 加入对抗性的 patch
    • 排列

作者认为:

  • 对于 CNN 的依赖是不必要的
  • 纯 Transformer 可以做到和 CNN 媲美的结果
  • Transformer 需要更少的训练资源,即使如此,也需要 2500 TPUv3 天数。这里说的少,只是跟更耗卡的模型做对比。
  • 在 CV 使用 Transformer
    • 难点:
      • 像素点过多,而 maxlength 太短
    • 于是前人提出许多思路,降低 length 长度:
      • 用 ResNet 最后的特征图 \(14 \times 14=196\) 输入 transformer
      • 用局部小窗口或者把图像这个二维的拆成两个一维的向量
      • 没有硬件加速,模型都无法做到太大
    • 大规模还是 ResNet 效果最好
  • 于是 ViT 做法:
    • 模型
      • 把一张图片分成很多 patch,每一个 patch 的大小为 16 * 16
      • 由于 224 / 16 = 14,因此共有 14 * 14 个 patch
      • 所以 length 为 14 * 14 = 196
      • 然后把每一个 patch 通过一个 linear embedding,这些再作为输入传给 Transformer
    • 训练
      • 用有监督的方式训练,原因是 cv 还是需要有监督的
    • 有钱
      • 之前有一个思路一样的,但是那个作者没钱
  • 一些结果
    • 中型大小数据集上,ViT 比同等大小的 ResNet 要弱几个点,作者认为原因有
      • Transformer 模型缺少一些 CNN 的归纳偏置
        • 局部临近 locality
          • 相邻的图片有相邻的特征
        • 平移等变性 translation equivariance:
          • \(f(g(x)) = g(f(x))\)
          • 即函数顺序变换最后结果也一样。
          • 在 CNN 中,即为相同的物体无论平移到哪里,只要遇到相同的卷积核,那么输出一样。
      • 因此 Transformer 缺少一些 CNN 拥有的前置知识,需要自己从数据里学。
    • 于是作者又在大规模的数据集上学习,效果很好,得到与 ResNet 相近或者更好的结果。

模型

image-20230319134248530

模型介绍

  1. 首先给定一张图,然后把这张图打成许多个 patch
  2. 然后每个 patch 通过一个线性的投射层得到一个特征。
  3. 再通过 Patch + Position Embedding 的方式,把位置编码弄上去。
  4. 丢进 TFM enc。
  5. 然后拿 [CLS] 最后对应的 representation 丢进一个 MLP Head 里。

图像的维度从 \(224 \times 224 \times 3\),变成了一个有 196 个有的 \(16 \times 16 \times 3 = 768\) 维度的 patch。

线性投射层是一个全连接层,维度是 \(D \times D = 768 \times 768\).

然后要加上 [CLS] token

最后加上位置编码信息

  • 具体是把位置编码编成一张表,每一个位置对应一个向量
  • 位置编码,三种效果差不多
    • 作者做了 1D 的位置编码。常规方法。
    • 2D 的做法:假设之前 1D 的位置编码维度是 D,2D 的位置编码横坐标有 \(\frac{D}{2}\) 的维度,纵坐标亦然,然后直接拼在一起。
    • 相对位置编码:两个 patch 之间的距离可以用相对距离来表示

归纳偏置,ViT 比 CNN 少了很多归纳偏置

  • CNN 中,局部性和平移等变性在模型每一层都有所体现,因此先验知识贯穿模型始终。
  • 而 ViT 中,只有 MLP 这个层有局部性和平移等变性,自注意力层是全局的。

作者还做了一个混合的网络,前面 CNN,后面 TFM

预训练以及更大的图片

图片更大,patch 的个数也变了,于是位置编码也会变。

  • 作者直接用了 pytorch 官方自带的 interpolate 函数做 2D 插值。
  • 这个插值只能算一个临时解决方案,是 ViT 的局限性。

实验

主要对比 ResNet,ViT,hybrid

下游任务主要是分类

实验结果

image-20230319152940086

ImageNet 结果

  • 中型大小数据集上,ViT 比同等大小的 ResNet 要弱几个点
  • 大型数据集上,ViT 几乎全面超过 ResNet

线性 5-shot 评估

  • 没有经过微调
  • 结果同上

image-20230319153257667

  • 同等预训练计算复杂度下,ViT 比 ResNet 强
  • 预训练计算次数小时,混合模型最强
  • 数据越来越大时,ViT 越来越强,接近超越混合模型和 ResNet
  • ViT 和 ResNet 模型似乎都没有饱和,仍然可以继续往上走

标签:14,串讲,ResNet,patch,ViT,CNN,times,cnblog
From: https://www.cnblogs.com/bringlu/p/17233396.html

相关文章

  • 【Activiti工作流】10.排他网关
    很久没有更新Activiti的文章,有朋友想看之后的技术总结,我这里就顺着上一次的记忆继续写,把这个系列完结了。上一次介绍了Activiti中的其中一种模式“连线......
  • 李沐多模态串讲视频总结 ALBEF VLMo BLIP CoCa BEITv3 模型简要介绍
    开场多模态串讲的上篇是比较传统的多模态任务多模态最后的模态交互很重要传统的缺点是都用了预训练的目标检测器,训练和部署都很困难。ViLT把预训练的目标检......
  • vite/storybook/rollup搭建一个自己的组件库
    构建测试项目首先vite初始化一个项目vuecreatestory-book-demo##或者vuecreatestory-book-demo然后添加storybook,具体参看官网:​​https://storybook.js.org/docs/......
  • vite/storybook/rollup搭建一个自己的组件库
    构建测试项目首先vite初始化一个项目vue create story-book-demo## 或者 vue create story-book-demo然后添加storybook,具体参看官网:https://storybook.js.or......
  • activity-程序活动单元
    Activity介绍activity是一个与用户交互的控件,主要来显示界面以及处理界面上一些控件的事件。Activity的生命周期启动,运行,暂停,停止,销毁生命周期方法oncreated:创建时......
  • Spring Boot + Activiti 快速实现工作流
     注:本文转自:https://mp.weixin.qq.com/s/w9-uXhm9QOXoas-h37cgFw1、概念工作流。通过计算机对业务流程自动化执行管理,主要解决的是“使在多个参与者之间按照某种预定义......
  • cnblogs 博客园自定义样式
    在博客园搜索资料时,发现很多博友的园子装饰的非常炫酷。想着也装饰一下自己的园子,搜索后发现一个不错的插件,记录一下。使用、配置教程:https://bndong.github.io/Cnblog......
  • 关于onActivityResult( ) 方法的使用
    关于onActivityResult()方法的使用使用场景:AActivity跳转到BActivity,按下返回键,将BActivity的部分数据带给AActivity注释:相当于,AActivity请求BActivity里的......
  • vue3+vite+vant文件上传
    1:文件上传下载1//上传文件2constafterRead=()=>{3for(letfileoffileList.value){4//1:加载状......
  • 使用vscode + vite + vue3+ vant 搭建vue3脚手架
    【术栈】开发工具:VSCode代码管理:Git前端框架:Vue3构建工具:Vite路由:vue-router4x状态管理:vuex4xAJAX:axiosUI库:vant数据模拟:mockjscss预处理:sass构建vue3项目1,安装 vite......