AIGC系列之:Vision Transformer原理及论文解读

目录

相关资料

模型概述

Patch to Token

Embedding

Token Embedding

Position Embedding

ViT总结


相关资料

论文链接:https://arxiv.org/pdf/2010.11929.pdf

论文源码:https://github.com/google-research/vision_transformer

PyTorch实现代码: pytorch_classification/vision_transformer

Tensorflow2实现代码:tensorflow_classification/vision_transformer

在bilibili上的视频讲解:https://www.bilibili.com/video/BV1Jh411Y7WQ

博客讲解:https://blog.csdn.net/qq_375410

https://juejin.cn/post/7254341178258489404

模型概述

        在Transformer Encoder架构的启发下,Google推出了VIT(Vision Transformer):一个和Bert几乎一致,同时不添加任何卷积结构的图像分类模型。VIT在Transformer上的成功,证明了可以用统一的模型,来处理不同领域(语言/图像/视频)的任务,进而开启了多模态模型研究的新篇章。今天就和大家一起学习一下ViT的相关知识~

        VIT的训练:把图片分成多个patch,送入Transformer Encoder,然后拿<cls>对应位置的向量,经过一个softmax多分类模型,去预测原始图片中描绘的物体类别。

左边部分:

  • Patch:对于输入图片,首先将它分成几个patch(如图中分为9个patch),每个patch就类似于NLP中的一个token。

  • Position Embedding:每个patch的位置向量,用于指示对应patch在原始图片中的位置。和Bert一样,这个位置向量是learnable的,而并非原始Transformer中的函数式位置向量。

  • Input: 最终传入模型的Input = patching_emebdding + position embedding,同样,在输入最开始,我们也加一个分类符<cls>,在bert中,这个分类符是作为“下一句预测”中的输入,来判断两个句子是否真实相连。VIT中,这个分类符作为分类任务的输入,来判断原始图片中物体的类别

右侧部分:

        给出了Transformer Encoder层的架构,它由L块这样的架构组成。

Patch to Token

        224*224*3的原始图像切分成196个16*16*3大小的patch,每个patch对应着一个token,将每个patch展平则得到输入矩阵X,其大小为(196,768),也就是每个token是768维。通过这样的方式可以将图像数据处理成自然语言的向量表达方式。patch to token 有两个优点:1.减少模型计算 2. 图像数据带有较多冗余信息,不需细粒度计算。

        对于每一个16*16*3的图像patch,需要将其拉平成1*768维的向量,ViT采用CNN进行特征提取,采用768个16*16*3尺寸的卷积核,stride=16,padding=0。这样我们就能得到14*14*768大小的特征图。如同所示,特征图中每一个1*1*768大小的子特征图,都是由卷积核对第一块patch做处理而来,因此它就能表示第一块patch的token向量。

Embedding

        在Bert(及其它NLP任务中):输入 = token_embedding(将单个词转变为词向量) + position_embedding(位置编码,用于表示token在输入序列中的位置) + segment_emebdding( 非必须,在bert中用于表示每个词属于哪个句子)。VIT中,同样存在token_embedding和postion_emebedding

Token Embedding

        Token embedding为一个(768,768)的矩阵,图像的每个patch尺寸为(196, 768),则经过token embedding后的结果为:XTE=XE=(196,768)∗(768∗768)=(196,768),转换为token_embedding后就可以参与主体模型的梯度更新。

Position Embedding

        在NLP任务中,位置向量的目的是让模型学得token的位置信息。在VIT中也是同理,需要让模型知道每个patch的位置信息。位置向量为E_pos,则它是一个形状为(196,768)的矩阵,表示196个维度为768的向量,每个向量表示对应token的位置信息

ViT总结

  • 证明了一个统一框架在不同模态任务上的表现能力。在VIT之前,NLP的SOTA范式被认为是Transformer,而图像的SOTA范式依然是CNN。VIT出现后,证明了用NLP领域的SOTA模型一样能解图像领域的问题,同时在论文中通过丰富的实验,证明了VIT对CNN的替代能力,同时也论证了大规模+大模型在图像领域的涌现能力。

  • 虽然VIT只是一个分类任务,但在它提出的几个月之后,立刻就有了用Transformer架构做检测(detection)和分割(segmentation)的模型。而不久之后,GPT式的无监督学习,也在CV届开始火热起来。

  • 工业界上,对大部分企业来说,受到训练数据和算力的影响,预训练和微调一个VIT都是困难的,但是这不妨碍直接拿大厂训好的VIT特征做下游任务。


http://www.niftyadmin.cn/n/5219379.html

相关文章

JOSEF 综合继电器 HJZZ-32/2 AC220V 合闸延时整定0.02-9.99S

系列型号&#xff1a; HJZZ-91分闸、合闸、电源监视综合装置&#xff1b; HJZZ-92/1分闸、合闸、电源监视综合装置&#xff1b; HJZZ-92/2分闸、合闸、电源监视综合装置&#xff1b; HJZZ-92/2A分闸、合闸、电源监视综合装置&#xff1b; HJZZ-92/3分闸、合闸、电源监视综…

Ubuntu18.04磁盘取证-中难度篇

涉及的镜像文件&#xff1a; sdb.vhd uac.tar ubuntu.20211208.mem 需要利用的工具&#xff1a; volatility3 volatility2.6.1 FTK/Autopsy Strings 题干 容器是一个Ubuntu Linux 蜜罐&#xff0c;用来观察利用 CVE-2021-41773 的漏洞攻击者想要做什么。 您将看到一个 cr…

羊大师早餐小贴士

羊大师早餐小贴士 早餐是一天中最重要的一餐&#xff0c;它为我们提供了所需的能量和营养。许多人喜欢搭配牛奶&#xff0c;但你知道吗&#xff1f;羊奶也是一个很好的选择&#xff01;羊奶富含蛋白质、钙和维生素B12&#xff0c;而且容易消化&#xff0c;适合各个年龄段的人饮…

【多线程】-- 04 静态代理模式

多线程 3 静态代理 这里以一个现实生活中的例子来解释并实现所谓的静态代理模式&#xff0c;即结婚者雇用婚庆公司来帮助自己完成整个婚礼过程&#xff1a; package com.duo.lambda;interface Marry {void HappyMarry();//人生四大乐事&#xff1a;久旱逢甘霖&#xff1b;他…

【古诗生成AI实战】之一——实战项目总览

[1] 总览 【古诗生成AI实战】系列共五篇文章&#xff1a; 【古诗生成AI实战】之一——实战项目总览   【古诗生成AI实战】之二——项目架构设计   【古诗生成AI实战】之三——任务加载器与预处理器   【古诗生成AI实战】之四——模型包装器与模型的训练   【古诗生成AI…

【JavaScript】3.2 JavaScript性能优化

文章目录 1. 避免全局查找2. 避免不必要的属性查找3. 使用快速的JavaScript方法4. 避免不必要的DOM操作5. 使用Web Workers进行后台处理总结 性能优化是任何编程语言的重要组成部分&#xff0c;JavaScript也不例外。在这个章节中&#xff0c;我们将探讨如何优化JavaScript代码&…

详解如何使用VSCode搭建TypeScript环境(适合小白)

搭建Javascript环境 因为TypeScript不能直接在浏览器上运行。它需要编译器来编译并生成JavaScript文件。所以需要首先安装好javascript环境&#xff0c;可以参考文章&#xff1a; 详解如何使用VS code搭建JavaScript环境&#xff08;适合小白&#xff09;_vscode配置javascri…

Couchdb 命令执行漏洞复现 (CVE-2017-12636)

Couchdb 命令执行漏洞复现 &#xff08;CVE-2017-12636&#xff09; 1、下载couchdb.py 2、修改目标和反弹地址 3、Python3调用执行即可 couchdb.py文件下载地址: https://github.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/exp.py ‍ 在VULFocus上开启环境 …