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

news2024/11/25 22:53:11

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是主要用来做迁移学习,它的迁移学习能力也很好。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亚马逊关键字搜索商品列表API接口:探索海量商品的利器

亚马逊关键字搜索商品列表API接口允许开发者通过输入关键字或特定参数,在亚马逊平台上进行商品搜索,并返回符合搜索条件的商品列表信息。这些信息包括商品的标题、图片、价格、评价等,为商家、开发者以及市场分析师提供了丰富的商品数据支持。…

信息系统项目管理师0082:项目基础(6项目管理概论—6.2项目基本要素—6.2.1项目基础)

点击查看专栏目录 文章目录 6.2项目基本要素6.2.1项目基础1.独特的产品、服务或成果2.临时性工作3.项目驱动变更4.项目创造业务价值5.项目启动背景记忆要点总结6.2项目基本要素 6.2.1项目基础 项目是为创造独特的产品、服务或成果

【Java从入门到精通】Java 正则表达式

目录 正则表达式实例 🍉java.util.regex 包 🍉实例 🍉捕获组 🍉实例 🍉RegexMatches.java 文件代码: 🍉正则表达式语法 🍉Matcher 类的方法 🍉索引方法 &#…

常用SQL命令

应用经常需要处理用户的数据,并将用户的数据保存到指定位置,数据库是常用的数据存储工具,数据库是结构化信息或数据的有序集合,几乎所有的关系数据库都使用 SQL 编程语言来查询、操作和定义数据,进行数据访问控制&…

一周零碎时间练习微服务(nacos,rq,springcloud,es等)内容

目录 1 总览1.1 技术架构1.2 其他1.2.1 数据库1.2.2 后端部分1.2.2.1 复习feign1.2.2.2 复习下网关网关的核心功能特性:网关路由的流程断言工厂过滤器工厂全局过滤器 过滤器执行顺序解决跨域问题 1.2.2.3 es部分复习 1.2.3 前端部分 2 day1 配置网关2.1 任务2.2 网关…

机器学习笔记-14

机器学习系统设计 1.导入 以垃圾邮件分类器为例子,当我们想要做一个能够区分邮件是否为垃圾邮件的项目的时候,首先在大量垃圾邮件中选出出现频次较高的10000-50000词作为词汇表,并为其设置特征,在对邮件分析的时候输出该邮件的特…

OpenCV4.9失焦去模糊滤镜(67)

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV4.9的基于距离变换和分水岭算法的图像分割(66) 下一篇 :OpenCV4.9去运动模糊滤镜(68) 目标 在本教程中,您将学习: 什么是退化图像模型失焦图像的 PSF 是多少如何恢复…

SQL注入漏洞--报错/union/布尔盲注/时间盲注

之前介绍了数据库的基本操作,今天这篇文章就来实操SQL注入。 阅读本文前可以先看一下基本操作,有助于更换理解本文。。。 https://blog.csdn.net/weixin_60885144/article/details/138356410?spm1001.2014.3001.5502 what SQL---结构化查询语言---S…

ubuntu外置网卡配置AP模式

外置网卡RTL8811CU设置 UBUNTU使用RTL8811CU网卡(包含树莓派) 外置网卡配置AP模式流程 1. 检查网卡支持情况(是否支持AP模式) iw list找到以上部分,发现支持AP 2. 安装依赖 sudo apt-get update sudo apt-get in…

Django数据库创建存储及管理

一、什么是ORM Django的ORM(Object-Relational Mapping)是Django框架中一个非常重要的组件。ORM可以让开发者以面向对象的方式操作数据库,而不需要直接编写SQL语句。 具体来说,Django ORM提供了以下功能: 模型定义:开发者可以在Django应用中定义Python类来表示数据库表,这些…

模方试用版水面修整,调整水岸线功能进程缓慢该怎么解决?

答:水面修整,第一个点选取准确的高程位置和水边,其他点就可以包含整个水面范围就行,可以绘制大一些。上图绘制区域没有包含到所有的水面,可以尝试下图的红线绘制区域。 模方是一款针对实景三维模型的冗余碎片、水面残缺…

van-cascader(vant2)异步加载的bug

问题描述:由于一次性返回所有的级联数据的话,数据量太大,接口响应时间太久,因此采用了异步加载的方案,看了vant的官方示例代码,照着改了下,很轻松地实现了功能。正当我感叹世界如此美好的时候&a…

【LeetCode刷题】34. 在排序数组中查找元素的第一个和最后一个位置

1. 题目链接 34. 在排序数组中查找元素的第一个和最后一个位置 2. 题目描述 3. 解题方法 找到元素的第一个位置,也就是找大于等于目标的最小值找到元素的最后一个位置,也就是找小于等于目标的最大值可以利用2次二分查找来解决 3.1. 第一次查找 3.2. …

数据分析--客户价值分析RFM(分箱法/标准化)

原数据 原数据如果有异常或者缺失等情况,要先对数据进行处理 ,再进行下面的操作,要不然会影响结果的正确性 一、根据RFM计算客户价值并对客户进行细分 1. 数据预处理 1.1 创建视图存储 R、F、M的最大最小值 创建视图存储R 、F、M 的最大最小…

CHiME-8多通道远场语音识别Baseline介绍

语音领域每年都有很多比赛,每个比赛都有自己的侧重点,其中CHiME系列比赛的侧重点就是多通道远场语音识别,与其他的语音识别比赛有所区别的是,CHiME提供分布式麦克风和麦克风阵列数据,这样可以选择合适的前端算法以降低…

【C++ | 语句】条件语句(if、switch)、循环语句(while、do while、for、范围for)、跳转语句、try语句块和异常处理

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰:2024-05-02 2…

【工具类安装教程】IDEA Ui设计器JFormDesigner

1、下载插件 File->Settings->Plugins->JFormDesigner 2、注册教程 2.1注册机下载 链接:https://pan.baidu.com/s/1Rb1EMva5HIYbyBcYgCxIsw 提取码:6666 2.2找到目录 1、找到idea目录 2.3进入plugins目录 找到在JFormDesigner文件夹下lib文…

Flutter笔记:使用Flutter私有类涉及的授权协议问题

Flutter笔记 使用Flutter私有类涉及的授权协议问题 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.cs…

【51单片机LCD1602显示矩阵键盘原始键值】2023-6-1

缘由https://ask.csdn.net/questions/7955623 #include "reg52.h" sbit LCD1602_RS P3^5;//RS端数据命令选择(H/L) sbit LCD1602_RW P3^6;//RW端读写选择(H/L) sbit LCD1602_EN P3^7;//EN端使能信号上升沿25ns void PanDuan1602(/*LCD1602忙判断*/) { LCD1602…

Word文件导出为PDF

Word文件导出为PDF 方法一、使用Word自带另存为PDF功能 打开需要转换为PDF格式的Word文件,依次点击【文件】➡【另存为】➡选择文件保存类型为.PDF 使用这种方法导出的PDF可能存在Word中书签丢失的情况,在导出界面点击,选项进入详细设置 勾…