场景文本检测识别学习 day06(Vi-Transformer论文精读、MAE论文阅读)

Vi-Transformer论文精读

  • 在NLP领域,基于注意力的Transformer模型使用的非常广泛,但是在计算机视觉领域,注意力更多是和CNN一起使用,或者是单纯将CNN的卷积替换成注意力,但是整体的CNN 架构没有发生改变
  • VIT说明,纯Transformer不使用CNN也可以在视觉领域表现很好,尤其是当我们在大规模数据集上做预训练,再去小数据集上做微调,可以获得跟最好的CNN相媲美的结果
  • 在NLP领域,BERT提出的方法已经成为主流:先在大规模的数据集上做预训练,再去小数据集上做微调,同时由于Transformer模型的高扩展性和高效性,现在的数据集和模型可以做的越来越大,同时还没有任何性能饱和的现象,因此VIT想将Transformer应用到计算机视觉中
    在这里插入图片描述
  • 但是Transformer有以下的问题:
    1. Transformer中最主要的操作是自注意力操作,而自注意力操作是需要所有元素都要和所有元素去交互,两两相互的,计算得到的Attention,再将这个Attention去做加权平均,最后得到输出,因此自注意力的计算复杂度为 O ( n 2 ) O(n^2) O(n2),但是目前硬件能支持的这个序列长度n为几百或者上千,在BERT中n为512
    2. 但是在计算机视觉领域,如果我们想把2D的图片变成1D的序列,那么最简单最直观的方法就是把图片中的所有像素点当成序列的元素,直接拉直并输入进Transformer,一般来说在视觉领域,输入图片的尺寸为224224、800800等,将它直接拉直送入Transformer,得到的序列长度直接过万,计算复杂度太高,硬件跟不上
  • 针对以上的问题,有如下的解决方案:
    1. Local Network:既然直接把像素点当作Transformer的输入太长,导致计算复杂度太高无法训练,那么我们把网络中间的特征图当作Transformer的输入,直接降低输入序列的长度,例如Res50的特征图只有14*14,这就是可以接受的范围之内了
    2. Stand-Alone Attention:孤立注意力,既然使用整张输入图片的复杂度太高,那么我们改为使用一个局部的小窗口,来缩小输入序列的长度。Axial Attention:轴注意力,将图片的宽高拆分为两个轴,因此225225的输入序列就变为了2225的输入序列,也降低了输入序列的长度。
    3. Sparse Attention:稀疏点注意力。Block Attention:将输入图片分块,进行注意力计算
  • 以上这些解决方案虽然在CV上的结果都不错,但是需要很复杂的工程来加速运算。
  • 虽然已经有人在视觉领域使用注意力,但是一个纯Transformer的CV模型还没有,而纯Transformer可以继承它在NLP的高扩展性,这就是VIT的想法
    在这里插入图片描述
  • VIT通过将图片分割为1616个块,来解决输入序列太长的问题,如果输入图片的尺寸为224224,那么分割后的每块的尺寸为1414(224/16 = 14),那么输入序列长度就变为1414,这个输入长度就是Transformer可接受的长度,这样在NLP中一个句子有多少个单词就转换为了在CV中一个图片有多少个patch。
  • 同时不同于BERT的自监督训练方式,在VIT中,采用了有监督的方式来进行训练。同时类似于BERT,也仅仅使用了Transformer Encoder作为模型
  • 在中等大小的数据集上进行训练(如ImageNet),如果不加强约束,VIT其实比同等大小的Resnet性能要弱。这主要是因为Transformer比CNN要缺少一些归纳偏置(先验知识):
    1. 局部性:由于卷积核是一步一步的在输入图片上进行移动卷积的,所以CNN假设图片上相邻的区域会有相似的特征
    2. 平移等变性:由于卷积核不考虑位置,所以在输入图片的不同的位置的相同物体,卷积核的输出是相同的,但是由于在Transformer中,加入了位置编码,所以不同位置的相同物体,Transformer Encoder的输出也不会相同
  • 在大型数据集上进行训练,VIT就可以获得跟最好的CNN一样的性能,甚至可以超过它们
  • VIT只是单纯的将输入图片做一个预处理,分割成16*16的块,然后送到Transformer中就可以了,其他什么改动都不需要,这样就可以把一个视觉问题理解成一个NLP问题,同时仅仅在分割图片和位置编码的时候,使用了图像特有的归纳偏置。因此不需要我们对CV领域有什么了解,直接把图片当成是一个序列的图像块,就跟一个句子有很多单词一样。然后就可以把NLP领域的标准Transformer来做图像分类,当把VIT加上大规模的数据集时,模型的性能表现出奇的好。
    在这里插入图片描述
  • VIT的模型设置是尽可能地按照最原始的Transformer的结构来设计,这样做的好处是可以直接把NLP中高效的模块部分,直接拿过来用
  • VIT的流程如下:
    1. 先将输入图片分块,假设输入图片为 3 * 224 * 224 的尺寸,分成尺寸为 16 * 16 的块,那么可以得到196个块,每个块拉直后的尺寸为 3 * 16 * 16 = 768,3为通道数
    2. 将拉直后的块X,输入进全连接层E,E的尺寸为 768 * 768,后一个768为D,代表模型的大小可以改变,前一个768是每个块拉直后的尺寸不能改变,那么:X · E 的尺寸为196 * 768
    3. 类似于BERT,需要加入一个特殊字符 [ CLS ] 作为最后的分类输出,并且[ CLS ] 的位置信息为0,因为所有的输入块都在跟所有的输入块做注意力计算,所以我们假设第一个块 [ CLS ] 可以学到其他块的有用信息,那么可以只根据 [ CLS ] 的输出来做最后的分类判断即可,[ CLS ] 的尺寸为 1 * 768,所以整体输入的尺寸为 197 * 768
    4. 整体的输入还需要加上位置编码(这里为1D的可学习位置编码,类似BERT),由于是直接加上位置编码,所以整体的输入尺寸仍然为 197 * 768,即Embedded Patches的尺寸为 197 * 768
    5. 整体的输入先进入Layer Norm层,再进入Multi-Head Attention层,由于采用了多头(这里是12),所以每个头的K、Q、V的尺寸为 197 * 64,最后将这些头的输出拼接起来,最后的尺寸又变成197 * 768,再经过Layer Norm层,和MLP层,注意MLP一般会将输入的尺寸先放大再缩小,如这里先放大四倍变为 197 * 3072 ,再缩小投射回 197 * 768,最后就输出了
    6. 同时由于这个Transformer Encoder Block的输入尺寸等于输出尺寸,都是 197 * 768。所以可以直接叠加Block
    7. 在VIT用作分类任务时,直接将经过很多Encoder Block层的 [ CLS ] 当作VIT模型的最后输出,即整个图片的特征,然后添加一个MLP的分类头来实现分类任务
  • 在CNN中,我们做分类任务,并不是类似于BERT的做法,使用 [ CLS ]来作为图片整体的特征进行输出,而是通过对特征图进行全局平均池化,得到一个拉直的向量,再通过这个向量来做分类。这里VIT由于想尽可能地接近Transformer,所以采用了BERT的方法,但是使用传统CNN的方法,效果差不多
  • 注意:由于我们是先将图像块的全部像素点拉直后,输入进全连接层,得到抽象后的特征,此时这个特征代表了整个图像块的内容,我们可以看作这个特征具有了这个图像块内部的位置信息,因此只需要给出图像块之间的位置编码即可,图像块内部的位置信息就不需要再额外指定了
    在这里插入图片描述
  • 上图可以看出在小型数据集(ImageNet)上训练的时候,BiT(ResNet)的预训练效果要比ViT的效果好,在中等数据集(ImageNet-21K)及以上(JFT-300M)时ViT的预训练效果最好,因此如果只有较小的数据集,那么CNN的效果比较好
    请添加图片描述
  • 上图都是在JFT-300M的数据集上进行预训练得到的模型,可以看出:
    1. 在同等计算复杂度的情况下Transformer要比ResNet的性能好,这就证明了VIT说的:训练一个Transformer比训练一个CNN要便宜
    2. 在比较小的模型下,混合模型(CNN+Transformer)的性能最好,但是随着模型越来越大,混合模型的精度跟VIT差不多了,甚至在特别大的模型上,VIT的性能是最好的
  • 在图片分类、目标检测这类简单的任务上,输出层(解码器)可能就是一个简单的全连接层,但是在语义分割这类复杂的任务上(需要对每一个像素做一个像素级别的输出),就不简简单单的使用一个全连接层,而是使用一个转置的CNN,来做一个比较大的解码器

位置编码

在这里插入图片描述

  • 1D位置编码:有两种1D位置编码,BERT采用可学习的,原始Transformer采用固定的。1D位置编码的维度和输入特征向量的维度相同
  • 2D位置编码:也有两种2D位置编码,可学习的,固定的。2D位置编码的维度分为两部分,假设输入特征向量的维度为D,那么前D/2和后D/2分别为横坐标和纵坐标的维度,将横坐标和纵坐标的维度拼接起来,就得到了维度为D的2D位置编码
  • 注意:以上这两种都是绝对位置编码。
  • 相对位置编码:如果是1D的情况,两个图像块之间的距离,可以用相对距离(间隔多少个图像块等方法)来表示。
  • 由于VIT的图像块一共有14 * 14 = 196个,仍然是比较少的,所以不管使用哪种位置编码都可以得到差不多的性能
  • 由于VIT的微调采取了更大尺寸的输入图片,但是如果保持patch size不变,那么会有更多的图像块,因此之前预训练的位置编码就不再适用了,这对这个问题VIT采用的是2D插值,因此2D插值和分图像块这两部分是VIT中唯一的两部分使用2D信息的归纳偏置

VIT挖的坑

  1. 由于VIT是做图片分类,但是Transformer不能只用来做图片分类,还有分割和检测任务,所以VIT-FRCNN(检测)、SETR(分割)在同年12月出现了
  2. 由于VIT使用的是有监督的训练方式,但是在NLP中大的Transformer模型,如BERT,使用的是自监督的训练方式,那么VIT可不可以也使用自监督的训练方式呢?

MAE论文阅读

  • MAE是BERT在计算机视觉上的应用,即通过自监督的掩码训练机制,不需要使用有标号的数据集,而是通过预测一张图片中被MASK的部分,从而获取对图像进行特征抽取的能力。
  • 虽然MAE不是第一个将BERT应用到CV上的,但是是最有影响力的一篇
  • 由于BERT只需要预测下一个词是什么,任务将对简单,所以输出层(解码器)只需要一个全连接层即可,但是MAE需要还原出MASK块的所有像素,所以需要复杂一些的输出层(解码器),在MAE中,输出层的最后一层为一个线性层,用来重构出原始的像素,如果一块的尺寸为1616,那么线性层就会投影到长为256的一个维度,之后把它reshape到1616即可
  • 由于对于CV来说,MASK如果只是少部分,那么我们可以通过选取邻近位置的像素点,进行插值,很容易得到一个近似的结果,所以MAE是将输入图像的大部分都MASK掉(如75%往上),那么模型就可以学习到更好的图像表征,即构造一个有挑战的任务来迫使模型学习一个复杂的解(而不是一个显然的解),从而获得更好的性能以及迁移学习效果
    在这里插入图片描述
  • MAE的编码器只会对没有被MASK的区域进行编码,从而加快计算,节省内存空间。之后先将编码器的输出放回到原本的位置上,并将被MASK的区域和没有被MASK的区域组合起来,加上位置编码后,再送入解码器得到还原后的特征,最后送入输出层得到还原的图片
  • MAE的主要计算量来自编码器,同时编码器和解码器不是对称关系,因为编码器和解码器看到的图片不是一致的,编码器只看到了没有被MASK的部分,而解码器看到的是完整的,无论有没有被MASK
  • MAE的结果是,在ImageNet-1K的数据集上,使用VIT-Huge的模型,可以得到87.8%的结果,VIT使用VIT-Huge在JFT-300M预训练,在ImageNet-1K的数据集上,得到的结果也才88.55%,同时MAE是主要用来做迁移学习,它的迁移学习能力也很好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/589985.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

与 Apollo 共创生态:企业解决方案Apollo X 9.0,七载同舟,携手远航,视频简说

目录 介绍背景方案与项目Apollo 开源项目Apollo X 企业解决方案落地因素助力企业落地流程 预置套件需求定义功能定义场景用例融合技术面向园区功能安全Cyber RT企业硬件套件 开发工具链研发迭代范式协同研发工具链标定工具地图工具仿真平台数据闭环 企业合作模式合作方式 共创计…

[初阶数据结构】时间复杂度与空间复杂度

前言 📚作者简介:爱编程的小马,正在学习C/C,Linux及MySQL。 📚本文收录于初阶数据结构系列,本专栏主要是针对时间、空间复杂度,顺序表和链表、栈和队列、二叉树以及各类排序算法,持续…

nuxt3使用记录六:禁用莫名其妙的Tailwind CSS(html文件大大减小)

发现这个问题是因为,今天我突然很好奇,我发现之前构建的自动产生的200.html和404.html足足290k,怎么这么大呢?不是很占用我带宽? 一个啥东西都没有的静态页面,凭啥这么大!所以我就想着手动把他…

ICode国际青少年编程竞赛- Python-1级训练场-基础训练2

ICode国际青少年编程竞赛- Python-1级训练场-基础训练2 1、 a 4 # 变量a存储的数字是4 Dev.step(a) # 因为变量a的值是4,所以Dev.step(a)就相当于Dev.step(4)2、 a 1 # 变量a的值为1 for i in range(4):Dev.step(a)Dev.turnLeft()a a 1 # 变量a的值变为…

未来科技的前沿:深入探讨人工智能的进展、机器学习技术和未来趋势

文章目录 一、人工智能的定义和概述1. 人工智能的基本概念2. 人工智能的发展历史 二、技术深入:机器学习、深度学习和神经网络1. 机器学习2. 深度学习3. 神经网络 三、人工智能的主要目标和功能1. 自动化和效率提升2. 决策支持和风险管理3. 个性化服务和预测未来 本…

DHCPv4_CLIENT_ALLOCATING_01: 在其本地物理子网上广播DHCPDISCOVER消息

测试目的: 确保客户端能够在其本地物理子网上广播DHCPDISCOVER消息。 描述: 该测试用例旨在验证DHCP客户端是否能够正确地在其本地物理子网上广播DHCPDISCOVER消息,以便进行IP地址的自动分配。 测试拓扑: 测试步骤&#xff1a…

机器学习:深入解析SVM的核心概念【三、核函数】

核函数 **问题一:为什么说是有限维就一定存在高维空间可分呢?**原始空间与特征空间为什么映射到高维空间可以实现可分核函数的作用 **问题二:最终怎么得到函数**从对偶问题到决策函数的步骤:结论 **问题三:为什么说特征…

【Proteus】LED呼吸灯 直流电机调速

1.LED呼吸灯 #include <REGX51.H> sbit LEDP2^0; void delay(unsigned int t) {while(t--); } void main() {unsigned char time,i;while(1){for(time0;time<100;time){for(i0;i<20;i){LED0;delay(time);LED1;delay(100-time);}}for(time100;time>0;time--){fo…

003 redis分布式锁 jedis分布式锁 Redisson分布式锁 分段锁

文章目录 Redis分布式锁原理1.使用set的命令时&#xff0c;同时设置过期时间2.使用lua脚本&#xff0c;将加锁的命令放在lua脚本中原子性的执行 Jedis分布式锁实现pom.xmlRedisCommandLock.javaRedisCommandLockTest.java 锁过期问题1乐观锁方式&#xff0c;增加版本号(增加版本…

GPT-1

GPT 系列是 OpenAI 的一系列预训练模型&#xff0c;GPT 的全称是 Generative Pre-Trained Transformer&#xff0c;顾名思义&#xff0c;GPT 的目标是通过 Transformer&#xff0c;使用预训练技术得到通用的语言模型。目前已经公布论文的有 GPT-1、GPT-2、GPT-3。 最近非常火的…

腾讯云ubuntu新建用户后,命令行只显示$

这是因为&#xff0c;新建用户命令行解释器默认是sh&#xff0c;需要手动切换为bash&#xff0c;bash可以认为是sh的加强版本。 所以我们只需要将&#xff0c;shell切换为bash就好了。 切换到root 修改配置文件 vim/etc/bash 将sh修改为bash

AcWing 3194:最大的矩形 ← 笛卡尔树

【题目来源】https://www.acwing.com/problem/content/3197/【题目描述】 在横轴上放了 n 个相邻的矩形&#xff0c;每个矩形的宽度是 1&#xff0c;而第 i&#xff08;1≤i≤n&#xff09;个矩形的高度是 hi。 这 n 个矩形构成了一个直方图。 例如&#xff0c;下图中六个矩形的…

类和对象【四】运算符重载

文章目录 运算符重载的概念运算符重载&#xff08;函数&#xff09;返回值类型&#xff1a;任意类型函数名&#xff1a;operator已有操作符 运算符重载&#xff08;函数&#xff09;的特点和注意点3个比较特殊的运算符重载赋值运算符&#xff08;&#xff09;重载返回值类型和返…

Linux CentOS7部署ASP.NET Core应用程序,并配置Nginx反向代理服务器和Supervisor守护服务

前言&#xff1a; 本篇文章主要讲解的是如何在Linux CentOS7操作系统搭建.NET Core运行环境并发布ASP.NET Core应用程序&#xff0c;以及配置Nginx反向代理服务器。因为公司的项目一直都是托管在Window服务器IIS上&#xff0c;对于Linux服务器上托管.NET Core项目十分好奇。因为…

简单学生信息管理系统

简单&#xff0c;单表&#xff1b; https://download.csdn.net/download/bcbobo21cn/89251742

【QT学习】12.UDP协议,广播,组播

一。Udp详细解释 UDP&#xff08;User Datagram Protocol&#xff09;是一种无连接的传输层协议&#xff0c;它提供了一种简单的、不可靠的数据传输服务。与TCP相比&#xff0c;UDP不提供可靠性、流量控制、拥塞控制和错误恢复等功能&#xff0c;但由于其简单性和低开销&#x…

Java | Leetcode Java题解之第64题最小路径和

题目&#xff1a; 题解&#xff1a; class Solution {public int minPathSum(int[][] grid) {if (grid null || grid.length 0 || grid[0].length 0) {return 0;}int rows grid.length, columns grid[0].length;int[][] dp new int[rows][columns];dp[0][0] grid[0][0]…

《罪与罚》读后感

陀思妥耶夫斯基和列夫托尔斯泰是公认的俄国文学黄金时代的两座高峰&#xff0c;分别代表着俄国文学的“深度”和“广度”。列夫托尔斯泰的鸿篇巨著《复活》《安娜卡列尼娜》等等都已经拜读过&#xff0c;但陀思妥耶夫斯基的作品却一本也没有看过&#xff0c;实在是有点遗憾。这…

LabVIEW换智能仿真三相电能表研制

LabVIEW换智能仿真三相电能表研制 在当前电力工业飞速发展的背景下&#xff0c;确保电能计量的准确性与公正性变得尤为重要。本文提出了一种基于LabVIEW和单片机技术&#xff0c;具有灵活状态切换功能的智能仿真三相电能表&#xff0c;旨在通过技术创新提高电能计量人员的培训…

Flutter笔记:谈Material状态属性-为什么FlatButton等旧版按钮就废弃了

Flutter笔记 谈Material状态属性-为什么FlatButton等旧版按钮就废弃了 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this artic…