当前位置: 首页 > news >正文

Transformer在计算机视觉中的应用-VIT、TNT模型

上期介绍了Transformer的结构、特点和作用等方面的知识,回头看下来这一模型并不难,依旧是传统机器翻译模型中常见的seq2seq网络,里面加入了注意力机制,QKV矩阵的运算使得计算并行。

当然,最大的重点不是矩阵运算,而是注意力机制的出现。

一、CNN最大的问题是什么

CNN依旧是十分优秀的特征提取器,然而注意力机制的出现使得CNN隐含的一些问题显露了出来。

CNN中一个很重要的概念是感受野,一开始神经网络渐层的的卷积核中只能看到一些线条边角等信息,而后才能不断加大,看到一个小小的“面”,看到鼻子眼睛,再到后来看到整个头部。一方面的问题是:做到这些需要网络层数不断地加深(不考虑卷积核的大小),感受野才会变大;另一方面的问题是:特征图所表达出来的信息往往是十分抽象的,我们不清楚到底需要多少层也不清楚每层的抽象信息是否都有用(ResNet出现)。

假设我们的脸贴在一幅画上,我们无法看出一幅画里都有什么; “管中窥豹”、“坐井观天”、“一叶障目”  等都是我们此时的感受野太小了;稍微抬下头,我们看到了画中的人;稍微站得远一步,我们看到了整幅画从脑中的经验得知,这是《清明上河图》。

上面这种情况是我们机械的从视野的角度去分辨看待事物,然而我们是人类,我们拥有注意力。

我们会在观察一张图片时会忽略背景,注意图片中的主体(或相反)

我们会在区分狮子还是老虎时,更注意看它们的毛发,它们的头上有没有“王”。

回想注意力机制的特点,它是从"整体"上观察我们需要什么,要注意的地方在哪里。既然是在整体上观察,那么其“感受野”,一定就相当于许多层之后的CNN了。

CNN许多层才做到的事情,在Transformer中第一层就做到了。

二、VIT整体架构解读

2.1 图像转换成序列

接下来就是该怎么做了,由于Transofrmer是序列到序列模型,我们需要把图像信息转为序列传给Encoder。

观察上图左下角,一个完整的图片,我们可以把它切割成9份(举例),9个patch,每一份比如说是10x10x3的矩阵。将每一份通过一次卷积变成1x300的矩阵,由此变成序列。

如上图,9个300维的向量传递给Linear Projection of Flattened Patches层,其实就是一次全连接进行映射,把我们这些300维的向量映射成256/512维等的向量。

之后传递给Transformer Encoder。

2.2 VIT位置编码

我们上面把一张图片切成了9份,每份都有建筑物的一部分,要让计算机更好地识别出图片内容,这9份应当给它们加上序号,即位置编码

论文实验证明,加上序号比不加效果好;以1-9为序号和以(1,1) (1,2) (1,3) (2,1)...(3,3)为序号结果相差不大。

当然,该论文进行的是分类任务,位置编码1D和2D确实没有太大区别。但如果放在分割等任务就不一定了。

2.3 VIT工作原理

可以看到,上图除了1-9以外,还存在一个序列0,我们把这个0叫做token。这个token一般只用于分类任务,而检测分割一般用不到。

以分类任务为例,无非是多了一行序列。

当把0号token+序列1-9传递给Encoder后,它内部进行QKV计算,和权重矩阵W^{Q}W^{K}W^{V}计算转变为QKV矩阵继续计算。其本质就是0号token+序列1-9这10个序列点积,这样0号token中就是存储着序列1-9的特征9个patch的。如此经过L轮,经过L轮计算,0号token中的信息就是全局信息了。

之后,就可以使用0号token这个向量去做分类了。

2.4 backbone

 如上,Embedded Patches+位置编码后经过层归一化,多头注意力,层归一化,全连接,期间还有这残差连接。

另外这不只是一轮,而是会执行多次。

三、Transformer为什么能

就像 一 中末尾说的那样,它是从"整体"上观察我们需要什么,要注意的地方在哪里。既然是在整体上观察,那么其“感受野”,一定就相当于许多层之后的CNN了。

因为0号token是最后拿去进行分类的,在计算时,第一层第一次的计算0号就分别于1-9patch进行了点积,这9个局部信息组成的整体便是这张图片。

上图可以看到,这样做在浅层就能获得较大的范围信息;可能5层就做得比CNN好了;全局信息丰富,更有助于理解图像。

四、VIT公式解读和效果图

E表示的是全连接,P²·C的矩阵映射为P²·D维。后面的则是位置编码,(N+1)·D维,N是N个patch,+1是因为前面所提的0号token。

Z是每层的输入,Z0就是第0层,记得加上位置编码。 

然后就是进行多轮多头注意力机制的运算,MSA是多头注意力,LN是层归一化,MLP是全连接。后面的加法是残差连接。

最后输出结果。 

效果图 

其中ViT后面的16 14 32指的是patch的大小,对于一张图片来说,patch越大窗口数量越少,patch越小窗口数量越多。

显然与ResNet相比,ViT更好些。

五、TNT模型

5.1 TNT介绍

TNT:Transformer in Transformer

在VIT中,只针对patch进行了建模,比如一个patch是16*16*C (其中C是特征图个数,可能是256、512等)。每个patch可能有点大了,越大的patch所蕴含的信息就越多,学习起来难度就越大。

因此,一方面可以基于patch去做,另一方面还可以把patch再分得细一点,如16*16分成4个4*4。

所以TNT的名字就代表了它要做什么,在Transformer里嵌套一个Transformer。

5.2 TNT模型做法分析

TNT由外部Transformer和内部Transoformer组成,其中:

  • 外部Transformer与VIT的做法一样

  • 内部把每个patch组成多个超像素(4个像素点),把重组的序列继续做Transformer。

以16*16为例,序列的长度就是256了,太长了太慢了效率低,且通常一个像素点也不能表达什么信息。至少也是4个点。因此内部将每个patch拆分成很多个4*4的小块,即分成更多个batch,然后重组。

以内部的一个16*16*3的patch为例,拆分成4*4的超像素,结果就是每一个超像素,每一个小patch上特征的个数。

\frac{16*16*3}{4*4}=48

之前一个点上有3个channel的信息,而现在一个点上有48个。patch变小了但浓缩了。

 把这些小patch整合在一起,全连接,之后的Transformer与前面一样。

 如上,每个patch经过外部Transformer计算得到向量,每个patch又拆分成小patch后全连接,经过内部Transformer得到同样维度的输出向量。两个向量加在一起,作为最后的输出结果。

5.4 TNT模型位置编码

实验证明,内外Transormer都进行位置编码效果更好。

5.5 TNT效果

上方是DeiT,就当作是VIT把,下面是TNT。

显而易见TNT特征提取得更鲜明,效果更好,更细腻。

右图可见TNT点更发散些,说明特征更发散些,更好区分。

相关文章:

Transformer在计算机视觉中的应用-VIT、TNT模型

上期介绍了Transformer的结构、特点和作用等方面的知识,回头看下来这一模型并不难,依旧是传统机器翻译模型中常见的seq2seq网络,里面加入了注意力机制,QKV矩阵的运算使得计算并行。 当然,最大的重点不是矩阵运算&…...

快速入门Zookeeper技术.黑马教程

快速入门Zookeeper技术.黑马教程一、初识 Zookeeper二、ZooKeeper 安装与配置三、ZooKeeper 命令操作1.Zookeeper 数据模型2.Zookeeper 服务端常用命令3.Zookeeper 客户端常用命令四、ZooKeeper JavaAPI 操作五、ZooKeeper JavaAPI 操作1.Curator 介绍2.Curator API 常用操作2.…...

网易C++实习一面

说下C11新特性 auto有没有效率上的问题?为什么?发生在什么时候? 说下单例模式 什么时候需要加锁,什么时候不需要加锁? 像printf这样的函数,自己本身不修改数据,但是其他人会修改数据&#x…...

进程和线程的区别和联系

进程和线程的区别和联系1. 认识线程2. 进程和线程的关系3. 进程和线程的区别4. 线程共享了进程哪些资源1. 上下文切换2. 线程共享了进程哪些资源1.代码区2. 数据区3. 堆区1. 认识线程 线程是进程的一个实体,它被包含在进程中,一个进程至少包含一个线程,一个进程也可以包含多个…...

Java学习笔记——集合

目录集合与数组的对比集合体系结构Collection——常见成员方法Collection——迭代器基本使用Collection——迭代器原理分析Collection——迭代器删除方法增强for——基本格式增强for——注意点Collection——练习集合与数组的对比 package top.xxxx.www.CollectionDemo;import …...

差分运放公式推导-运算放大器

不知道大家有没遇到这种情况,在计算电路的时候,有时候会突然的忘记一些公式啊啥的,需要回去翻看笔记或者查资料,知其然而不知其所以然。今天跟大家一起来一起推导一遍差分运放的计算过程。 计算过程其实归根结底还是根据运放的虚…...

金丹二层 —— 字符串长度求解的四种方法

前言: 1.CSDN由于我的排版不怎么好看,我的有道云笔记比较美观,请移步有道云笔记 2.修炼必备 1)入门必备:VS2019社区版,下载地址:Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 (m…...

深入剖析Linux——进程信号

致前行的人: 要努力,但不着急,繁花锦簇,硕果累累都需要过程! 目录 1.信号概念 1.1生活角度的信号 2. 技术应用角度的信号 3.Linux操作系统中查看信号 4.常用信号发送 4.1通过键盘发送信号 4.2调用系统函数发送信号 4.3…...

API-Server的监听器Controller的List分页失效

前言 最近做项目,还是K8S的插件监听器(理论上插件都是通过API-server通信),官方的不同写法居然都能出现争议,争议点就是对API-Server的请求的耗时,说是会影响API-Server。实际上通过源码分析两着有差别&am…...

jupyter notebook 进阶使用:nbextensions,终极避坑

jupyter notebook 进阶使用:nbextensions,终极避坑吐槽安装 jupyter_contrib_nbextensions1. Install the python package(安装python包)方法一,PIP:方法二,Conda(推荐)&…...

C 语言编程 — Doxygen + Graphviz 静态项目分析

目录 文章目录目录安装配置解析Project related configuration optionsBuild related configuration optionsConfiguration options related to warning and progress messagesConfiguration options related to the input filesConfiguration options related to source brows…...

Mybatis报BindingException:Invalid bound statement (not found)异常

一、前言 本文的mybatis是与springboot整合时出现的异常,若使用的不是基于springboot,解决思路也大体一样的。 二、从整合mybatis的三个步骤排查问题 但在这之前,我们先要知道整合mybatis的三个重要的工作,如此才能排查&#x…...

HttpRunner3.x(1)-框架介绍

HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。主要特征继承的所有强大功能requests ,只需以人工方式获得乐趣即可处理HTTP&#xf…...

pytest学习和使用20-pytes如何进行分布式测试?(pytest-xdist)

20-pytes如何进行分布式测试?(pytest-xdist)1 什么是分布式测试?2 为什么要进行分布式测试?2.1 场景1:自动化测试场景2.2 场景2:性能测试场景3 分布式测试有什么特点?4 分布式测试关…...

三、Python 操作 MongoDB ----非 ODM

文章目录一、连接器的安装和配置二、新增文档三、查询文档四、更新文档五、删除文档一、连接器的安装和配置 pymongo: MongoDB 官方提供的 Python 工具包。官方文档: https://pymongo.readthedocs.io/en/stable/ pip安装,命令如下&#xff1…...

求最大公约数和最小公倍数---辗转相除法(欧几里得算法)

目录 一.GCD和LCM 1.最大公约数 2.最小公倍数 二.暴力求解 1.最大公约数 2.最小公倍数 三.辗转相除法 1.最大公约数 2.最小公倍数 一.GCD和LCM 1.最大公约数 最大公约数(Greatest Common Divisor,简称GCD)指的是两个或多个整数共有…...

音视频开发_获取媒体文件的详细信息

一、前言 做音视频开发过程中,经常需要获取媒体文件的详细信息。 比如:获取视频文件的总时间、帧率、尺寸、码率等等信息。 获取音频文件的的总时间、帧率、码率,声道等信息。 这篇文章贴出2个我封装好的函数,直接调用就能获取媒体信息返回,copy过去就能使用,非常方便。…...

Springboot集成Swagger

一、Swagger简介注意点! 在正式发布的时候要关闭swagger(出于安全考虑,而且节省内存空间)之前开发的时候,前端只用管理静态页面, http请求到后端, 模板引擎JSP,故后端是主力如今是前…...

Vue全新一代状态管理库 Pinia【一篇通】

文章目录前言1. Pinia 是什么?1.1 为什么取名叫 Pinia?1.2. 为什么要使用 Pinia ?2. 安装 Pinia2.1.创建 Store2.1.1. Option 类型 Store2.1.2 Setup 函数类型 Store2.1.3 模板中使用3. State 的使用事项(Option Store )3.1 读取 State3.2 …...

STM32 -4 关于STM32的RAM、ROM

一 stm32 的flash是什么、有什么用、注意事项、如何查看 一 、说明 它主要用于存储代码,FLASH 存储器的内容在掉电后不会丢失,STM32 芯片在运行的时候,也能对自身的内部 FLASH 进行读写,因此,若内部 FLASH 存储了应用…...

第一个 Qt 程序

第一个 Qt 程序 “hello world ”的起源要追溯到 1972 年,贝尔实验室著名研究员 Brian Kernighan 在撰写 “B 语言教程与指导(Tutorial Introduction to the Language B)”时初次使用(程序),这是目前已 知最早的在计算机著作中将…...

Spring注解驱动开发--AOP底层原理

Spring注解驱动开发–AOP底层原理 21. AOP-AOP功能测试 AOP:【动态代理】 指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式; 1、导入aop模块:Spring AOP,(Spring-aspects) 2、定义一个业务逻辑类(Ma…...

对象的动态创建和销毁以及对象的复制,赋值

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C​​​​​​​ 🔥座右铭:“不要等到什么都没有了,才…...

JVM调优,调的是什么?目的是什么?

文章目录前言一、jvm是如何运行代码的?二、jvm的内存模型1 整体内存模型结构图2 堆中的年代区域划分3 对象在内存模型中是如何流转的?4 什么是FULL GC,STW? 为什么会发生FULL GC?5 要调优,首先要知道有哪些垃圾收集器及哪些算法6 调优不是盲目的,要有依据,几款内…...

docker部署zabbix监控

docker部署zabbix监控 1、环境说明 公有云ubuntu22.04 系统->部署docker环境zabbix-server 6.4 2、准备docker环境 更新apt以及安装一些必要的系统工具 sudo apt-get update sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-co…...

C语言刷题(6)(猜名次)——“C”

各位CSDN的uu们你们好呀,今天,小雅兰还是在复习噢,今天来给大家介绍一个有意思的题目 题目名称: 猜名次 题目内容: 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果: A选…...

两年外包生涯,感觉自己废了一半....

先说一下自己的情况。大专生,17年通过校招进入湖南某软件公司,干了接近2年的点点点,今年年上旬,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了五年的功能测试…...

【python】喜欢XJJ?这不得来一波大采集?

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 俗话说的好:技能学了~就要用在自己喜欢得东西上!! 这我不得听个话~我喜欢小姐姐,跳舞的小姐姐 这不得用python把小姐姐舞采集下来~嘿嘿嘿 完整源码、素材皆可点击文章下方名片…...

公司测试员用例写得乱七八糟,测试总监制定了这份《测试用例编写规范》

统一测试用例编写的规范,为测试设计人员提供测试用例编写的指导,提高编写的测试用例的可读性,可执行性、合理性。为测试执行人员更好执行测试,提高测试效率,最终提高公司整个产品的质量。 一、范围 适用于集成测试用…...

LeetCode 热题 HOT 100【题型归类汇总,助力刷题】

介绍 对于算法题,按题型类别刷题才会更有成效,因此我这里在网上搜索并参考了下 “🔥 LeetCode 热题 HOT 100” 的题型归类,并在其基础上做了一定的完善,希望能够记录自己的刷题历程,有所收获!具…...

现代风格装修效果图/重庆seo排名

一、当没有使用过滤器的时候: 二、当使用过滤器时: 三、具体思路: 1.先新建一个filter: 2.使用过滤器时一定要先进行配置,否则不能实现对字符WebFilter解码的功能 对过滤器的配可以不用在xml文件里进行,可以…...

六安网红水坝/南宁seo手段

北国之春(4.10.) 北国三月日方长,四月杨柳吐嫩黄。 桃杏枝头粉变白,迎春花放遍野香。 转载于:https://www.cnblogs.com/ysx4221/p/4324434.html...

徐州哪家公司做网站水平好/百度快速收录接口

作为WEB前端开发者,jQuery和CSS3肯定用得也比较多,那么下面就分享一些由jQuery和CSS3制作成的特效,希望大家会喜欢。1、基于jQuery和CSS3的圆盘抽奖这个小程序可以让你在网站上轻松的添加一个抽奖应用,应用是基于jQuery和CSS3开发…...

政府网站建设经验交流/东莞网站制作外包

从旅游行业的网站经常使用出色的拍摄和有吸引力的的设计。当然,一个有吸引力的网站,可以帮助尽可能吸引的人可能会在访问感兴趣的网站的主题。在这篇文章中,我们将展示30网站很棒的网站 VisitPhilly.com The Cardiff Apartment Grand Island …...

如果建设网站/竞价推广价格

大数据时代下电力企业面临挑战。我国原有电力企业实行垂直一体化管理,2000年后我国电力企业实行更全面更深刻的改革。就目前的现状来看,电力企业包括独立的发电厂、五大发电公司、两大独立核算的电网经营企业,以及电力建设公司等其他独立核算…...

mvc架构购物网站开发/学网络运营在哪里学比较好

P2781 传教 题意很简单&#xff0c;就是要求你写一个数据结构&#xff0c;支持区间加法和区间查询 显然&#xff0c;线段树模板嘛。。。 不过$n<10^9$&#xff0c;惊呆世人&#xff0c;啊哈&#xff0c;灵光一现&#xff0c;分块貌似可做&#xff0c;emmmm有感觉不行&#x…...