首页IT科技特斯拉感应是什么(Tesla AI day中感知部分的详细解析(一)——Transformer在图像领域的应用)

特斯拉感应是什么(Tesla AI day中感知部分的详细解析(一)——Transformer在图像领域的应用)

时间2025-05-03 05:05:58分类IT科技浏览5548
导读:前言 最近针对特斯拉AI day2022内容进行了初步的了解,三个小时的发布会涵盖了方方面面的内容,其中基于纯视觉和深度学习的BEV感知升级版Occupancy Network形成的3D感知系统着实让人惊艳,而想要了解Occupancy Network,必须先了解其前身BEV感知,而其中...

前言

最近针对特斯拉AI day2022内容进行了初步的了解             ,三个小时的发布会涵盖了方方面面的内容                   ,其中基于纯视觉和深度学习的BEV感知升级版Occupancy Network形成的3D感知系统着实让人惊艳       ,而想要了解Occupancy Network      ,必须先了解其前身BEV感知                   ,而其中一大关键点是参考了Transformer的网络结构对不同时空的数据输入进行处理             ,本系列文章主要针对相关技术从源头开始解析      ,由于个人技术能力有限                   ,不可能面面俱到             ,仅当作抛砖引玉了            。

由于之前很长一段时间主要在做SLAM相关工作,自YOLOv4后对于深度学习这块的内容没及时跟踪了                   ,外加Transfomer在相当长时间主要应用在NLP领域                   ,因此这段时间从原始Transformer出发,到对于视觉领域影响较大的Swin Transformer及相关论文和资料进行了阅读和学习             ,这里先简要记录相关要点                   ,并予以解析和对比                    。

Transformer

论文:Attention Is All You Need

代码:jadore801120/attention-is-all-you-need-pytorch

参考文章:

Transformer 模型的 PyTorch 实现

一文教你彻底理解Transformer中Positional Encoding

The Illustrated Transformer

关于Transformer的解析文章太多了       ,参考文章都讲的很好了             ,本文不会事无巨细的讲解所有细节                   ,这里主要针对模型一些点做解析       。

以上就是Transformer的核心架构       ,左边是Encoder部分      ,右边是Decoder部分                   ,理论上可以随意扩展             ,原版采用6个Encoder和6个Decoder            。从架构中可以看到      ,其实主要的组成包括Input Embedding            、(Masked)Multi-Head Attention                    、Positional Encoding                   ,其它部分例如类似Resnet的跨层直连都是其它网络中比较常用的方法             ,这里就不赘述了                   。

Input Embedding

在Encoder部分,直接把原始输入经过一个线性层转化到对应的输入维度;在Decoder层                   ,可以清晰看到                   ,第二层的Attention模块的输入分别来自于上一层以及Encoder的输出       。

(Masked)Multi-Head Attention

整个Transformer的核心,自注意力机制的具体实现             ,根本上就是在评估各个输入间的关系                   ,并针对性给出输出       ,结构参考下图:

输入原始的语句             ,将每个单词转换为一个固定维度的向量x(默认为512维)                   ,x经过三个线性层得到三个向量query,key,value       ,前两者用于计算权重不同输入的权重      ,然后针对每个单词加权求和得到输出z                   ,参考下图:

更多的细节参考文章中讲得很详细             ,至于Multi-Head的解释      ,实际上就是将以上部分进行了多次                   ,例如一个单词生成Embedding             ,基于这个Embedding生成多个q,k                   ,v                   ,分别进行以上过程,得到多层的z      。这个过程内涵的原理就是通过多层的注意力机制             ,让不同层关注输入中不同的内容                   。

Sequence mask

在Decoder中针对这个模块额外做了一些工作                   ,主要是考虑到在做解码时       ,我们能够利用的信息一般只有句子中已经出现出现的单词             ,例如一个10个单词的句子                   ,在解析第5个单词时       ,我们能够利用的其实只有第0-4个单词      ,因为一般而言都是按顺序解析一个句子                   ,这一块是利用sequence mask来实现的             ,这里具体讲一下:

先不考虑Multi-Head      ,一个有N个单词的句子                   ,经过Attention第一阶段计算得到N个q,k,v             ,对于任一单词,会用自己的q与其它所有单词的k点乘得到N维的权重向量                   ,针对N个单词就会得到N*N的权重矩阵                   ,如下图:

不增加mask的情况下,直接对每一行计算softmax得到归一化的权重             ,然后乘以V矩阵得到最终输出Z;考虑sequence mask时                   ,以第一个单词为例       ,根据上文提到的原则             ,第一个单词用到的信息只有自己                   ,因此在第一行中       ,除第一列其它所有权重加上一个极小值      ,这样经过softmax之后其它权重几乎为0                   ,对于第二个单词             ,则是除第一列和第二列其它所有权重加上一个极小值      ,因此                   ,将权重矩阵加上一个充满极小值的对角阵即可完成上述工作:

使用加上mask的权重矩阵与V矩阵相乘得到最终结果             。

Positional embbedings

关于位置编码可以参考一文教你彻底理解Transformer中Positional Encoding

在LSTM或者RNN中             ,输入单词按顺序一个个丢进网络中的,天然就带入了位置的概念;而在以上结构中                   ,明显丢失了重要的位置信息                   ,因此,在输入时             ,额外增加了positional embedding这个东西                   ,也就是针对输入的位置编码       ,这个编码需要满足以下特性: 反应不同输入的绝对位置 反应不同输入的相对位置 能够适用于长度不同的输入句子

由于网络中处理还需要考虑输入分布和幅值问题             ,位置编码与输入编码相加后不能完全覆盖掉原始输入信息                   ,因此文中采用了一种特殊的编码格式       ,其公式如下:

位置编码的维度与输入维度一致(默认为512维      ,512维中偶数部分由第一式计算得到                   ,奇数由第二式计算得到)             ,其中pos代表单词在句子里的位置      ,i表示维度      。

直接看这个公式是比较晦涩的                   ,参考文章用二进制来举例的方式非常贴切             ,这里借用一下:

可以看到,对于二进制表示来看                   ,随着实际数值增大(0-15)                   ,高位上的数据变化频率慢,但代表的实际数值很大;低位上的数据变化频率快             ,但代表的实际数值很小;再看看上面的公式                   ,i越小       ,三角函数波长越短             ,频率越高;i越大                   ,三角函数波长越长       ,频率越低;整体和二进制表示非常类似      ,只是在进位上有很大区别                   。

至于这种编码方式是否是最优的                   ,以及能不能完美满足以上几个要求             ,这个需要进一步讨论             。

Swin Transformer

论文:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

代码:microsoft/Swin-Transformer

参考文章:

Swin Transformer 论文详解及程序解读

近几年Transformer开始侵入到图像领域      ,在最初的应用中                   ,存在许多问题             ,例如如何处理输入,如何处理输入的位置信息                   ,如何处理不同尺寸的图像等等                   ,Swin Transformer在借鉴了前人的经验基础上,加入基于Windows和Shifted-Windows的Self-attention概念             ,取得了不错的结果。

先上网络框架:

虽然最核心的模块都是一个叫Swin Transformer Block的东西                   ,但整体的特征提取部分仍旧参考了传统CNN架构       ,随着深度加深             ,特征图分辨率下降                   ,channel增多       ,如下图:

可以认为主要是由Swin Transformer Block取代了传统的CNN来作特征提取      ,下面针对具体的每个部分进行解析                   。

Input

将Transformer从NLP领域应用到CV领域比较大的一个区别在于输入的处理                   ,目前主流的做法是对图像进行分块(patch)             ,针对每一个块进行编码并加入位置编码      ,然后输进Attention模块                    。在Swin Transformer中                   ,每个patch包括4*4的像素区域             ,每个像素3个通道,展开为一维就是48                   ,因此输入转换为h/4*w/4*48的矩阵                   ,再经过一个线性层增加一倍通道,对应上图中第一层;之后每次将输入喂入Swin Transformer Block前             ,会将输出进行一次patch merging                   ,使其分辨率下降一倍       ,通道增多一倍。

Swin Transformer Block

整个网络架构的核心             ,其核心思想仍然遵循Tranformer中attention模块                   ,实现细节略有不同            。

计算量

首先       ,ViT中对所有的patch进行Self-attention计算      ,随着图像尺寸增大                   ,计算量呈平方上升             ,假设图像包含

h

×

w

h\times w

h×w

个patch      ,输入通道数为C                   ,具体计算如下:

1       、计算每个patch的Q            、K                   、V             ,直接使用线性层计算,输入输出维度相同                   ,单个patch计算量为

C

2

C^2

C2
                   ,所有patch三个量计算量为

3

h

w

C

2

3hwC^2

3hwC2

                   。

2       、计算所有patch相互之间的

Q

K

T

Q*K^T

QKT
,Q      、K维度与输入一致             ,单个计算量为C                   ,所有计算量为

(

h

w

)

2

C

(hw)^2C

(hw)2C
;得到

h

w

×

h

w

hw\times hw

hw×hw
的权重矩阵X(忽略softmax计算)       ,使用X与所有V构成的

h

w

×

C

hw\times C

hw×C
维矩阵相乘             ,计算量也为

(

h

w

)

2

C

(hw)^2C

(hw)2C
                   ,因此总计算量为

2

(

h

w

)

2

C

2(hw)^2C

2(hw)2C
3                   、使用使用多头注意力机制       ,在融合时会增加

h

w

C

2

hwC^2

hwC2

的计算量       。

总计算量为:

4

h

w

C

2

+

2

(

h

w

)

2

C

4hwC^2+2(hw)^2C

4hwC2+2(hw)2C

而Swin Transformer中增加了Windows的概念      ,将图像分为多个Windows                   ,每个Window包含M*M个patches             ,只在WIndow内部进行Self-attention计算      ,这样在图像尺寸增大时                   ,计算量呈线性上升             ,具体计算如下:

1             、Q      、K                   、V以及多头融合计算与前面相同,为

4

h

w

C

2

4hwC^2

4hwC2

            。

2             、self-attention只在window内部计算                   ,参考前文                   ,单个window计算量为

2

M

4

C

2M^4C

2M4C
,一张包含

h

×

w

h\times w

h×w
个patch的图像有包含

h

M

×

w

M

\frac h M\times \frac w M

Mh×Mw
个windows             ,总计算量为:

2

M

2

h

w

C

2M^2hwC

2M2hwC

                   。

总计算量为:

4

h

w

C

2

+

2

M

2

h

w

C

4hwC^2+2M^2hwC

4hwC2+2M2hwC
可以明显看到计算量的区别       。

相对位置偏移

Swin Transformer中的位置编码跟原始Transformer有比较大的差别                   ,其并非在输入时直接加入位置编码       ,而是在计算

Q

K

T

Q*K^T

QKT

后加上一个称为相对位置偏移B的量             ,而这个量是可以被学习的                   ,如下公式:

B具体解释起来比较复杂       ,参考文章有详细的图文解析      ,这里不细讲了                   ,主要提几个重要的点:

1、所有的相对位置偏移量都存在一个

2

M

1

×

2

M

1

×

n

u

m

_

o

f

_

h

e

a

d

s

2M-1\times 2M-1\times num\_of\_heads

2M1×2M1×num_of_heads
维度的表中             ,计算时根据索引取值      ,关于维度为什么不是

M

×

M

M\times M

M×M

                   ,是因为相对位置存在重复             ,例如[0,0]与[1,1]的相对位置和[1,1]与[2,2]的相对位置是相同的,应该取同一个偏移量加入计算;

2                   、patch与patch之间根据其相对位置偏移计算的是相对位置编码索引                   ,这个索引值反应了两个patch的相对位置      。

SW-MSA

为了节省计算量                   ,将Self-attention计算局限在了window内部,然而这样会造成感受野比较小且分块的问题             ,因此在Swin Transformer中增加了Shifted-MSA的概念                   ,即将window的划分按固定步长进行平移       ,以使得在多层MSA时能够接收到更大范围的信息             ,如图所示:

layer1正常计算                   ,layer2起到将layer1中不同window链接的作用                   。实际的计算过程非常巧妙       ,在移位前对每个patch打上index      ,构造一个mask矩阵                   ,移位后不同index的计算位置填充-100             ,通过bias的方式加到权重矩阵上      ,具体实现的解析参考文章图文并茂讲的非常详细了                   ,这里不重复赘述了             。

Deformable DETR

论文:Deformable DETR

代码:fundamentalvision/Deformable-DETR

关于DETR的细节这里不做详细解析             ,其主要工作针对Transformer在目标检测任务中的应用,与本系列主要内容相关性不太大;这里主要对Deformable DETR中的一个点Deformable Attention进行解析                   ,它对于后续的应用起到了较为关键的作用                   ,这个东西来自于Deformable CNN,熟悉Deformable CNN的可以很容易理解             ,这里先看下不同注意力机制的主要公式      。

多头注意力机制:

公式对应前文讲过的Transformer多头注意力计算标准公式                   ,M代表多头的个数       ,

Ω

k

\Omega _k

Ωk
表示所有的输入             ,

x

k

x_k

xk
表示第k个输入                   ,A即

Q

×

K

T

Q\times K^T

Q×KT
并经过softmax得到的权重       ,中括号里面的部分就是对应前文的加权和的部分                   。

Deformable Attention:

与第一个公式对比可以发现      ,主要多了

Δ

p

m

q

k

\Delta p_{mqk}

Δpmqk

这个东西                   ,其实它就是一个位置偏移             ,是一个与输入Q以及可学习参数有关的东西;此外K并不代表所有输入      ,是一个可以预先设定的参数             。

数学上的解释论文讲的很详细                   ,这里抽象来理解下             ,原版多头注意力考虑每个输入与其他所有输入的关系,其关系强弱由权重决定                   ,这样计算量大收敛慢                   ,好处是收敛后不会漏掉任何的关联关系;Deformable Attention只考虑某个输入与固定数量输入的关系,至于具体考虑哪些输入             ,由网络学习到的参数和输入的Q一起决定。

考虑多层feature map输入的Deformable Attention:

理解了Deformable Attention                   ,那么这个公式也很好理解       ,此时的输入扩展到多层不同分辨率的feature map             ,与上式对比主要增加了针对多层和多分辨率的处理                   。

针对多层                   ,我们先假设每层分辨率一样       ,那么在计算某个输入与其他固定数量个输入的关系时      ,不能再局限在这个输入所在的feature map                   ,而是会扩展到多个feature map去寻找关联关系             ,公式中的L代表所有的feature map数量      ,不同的

l

l

l
代表在不同的feature map上寻找输入并进行加权计算                   ,例如权重计算A增加了层的维度             ,输入x也增加了层的维度; 针对不同分辨率,这个就更简单了                   ,将位置p进行归一化                   ,结合每个feature map展开即可,例如原来只有一张图             ,分辨率100*100                   ,针对一个位置(50,50)进行处理       ,现在有两张图             ,分辨率为100*100和50*50                   ,针对一个位置(0.5       ,0.5)进行处理      ,实际取值时                   ,用归一化的位置乘分辨率得到真正的索引再取值就好                    。

总结

本文从原版Transformer出发             ,解析了其涉及的几个关键点      ,同时对比图像领域影响较大的Swin Transformer的改进点                   ,以及针对后面会用到的一项关键技术Deformable Attention进行了相应的解析             ,为后面Transformer在自动驾驶感知中的应用打下基础,其实从Deformable Attention的分析中已经可以初步窥见应用Transformer处理多维度数据输入的端倪了                   ,当然在实际的应用中还包含很多基于工程的设计和考虑                   ,后面再慢慢分析。

声明:本站所有文章,如无特殊说明或标注             ,均为本站原创发布            。任何个人或组织                   ,在未征得本站同意时       ,禁止复制                    、盗用、采集            、发布本站内容到任何网站                    、书籍等各类媒体平台                    。如若本站内容侵犯了原著者的合法权益             ,可联系我们进行处理       。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
aicharger application(教你体验目前最火AI – 在craft AI assistant 使用chatGPT) 网站seo推广是干嘛(掌握SEO网站推广的基础工作,让你的网站腾飞)