传媒建设网站,西安医疗网站建设,做的新网站到首页又下去了,海珠区建网站公司Patch Window 在Swin Transformer中#xff0c;不同层级的窗口内部的补丁数量是固定的#xff0c;补丁内部的像素数量也是固定的#xff0c;如上图的红色框就是不同的窗口#xff08;Window#xff09;#xff0c;窗口内部的灰色框就是补丁#xff08;Patch#…Patch Window 在Swin Transformer中不同层级的窗口内部的补丁数量是固定的补丁内部的像素数量也是固定的如上图的红色框就是不同的窗口Window窗口内部的灰色框就是补丁Patch如果输入图像的宽W、高H增加到原来的两倍那么输入图像的总面积总像素数量就增加到原来的四倍2H * 2W 4HW在ViT中由于窗口是固定的且就是整个输入图片所以当我们将输入图片分割成很多个尺寸为16 * 16 的patch时如果输入图像的总面积增加到原来的四倍那么patch的数量也会变成原来的四倍那么计算复杂度 O ( N 2 ⋅ d ) O( N^2 · d) O(N2⋅d)就变成了 O ( ( 4 N ) 2 ⋅ d ) O ( 16 N 2 ⋅ d ) O( (4N)^2 · d) O( 16N^2 · d) O((4N)2⋅d)O(16N2⋅d)其中d是每个patch的维度N是patch的数量。因此对于ViT来说计算复杂度是跟图像增加的大小成平方关系在Swin Transformer中由于窗口不是固定的但是窗口内部的补丁数量是固定的补丁的尺寸也是固定的所以当我们将输入图片的总面积增加到原来的四倍那么只有窗口的数量增加到原来的四倍那么计算复杂度 O ( M 2 ⋅ N ⋅ d ) O( M^2 · N · d) O(M2⋅N⋅d)就变成了 O ( M 2 ⋅ 4 N ⋅ d ) O( M^2 · 4N · d) O(M2⋅4N⋅d)其中M是每个窗口内补丁的数量N是窗口的数量d是每个补丁patch的维度。虽然每个patch的维度都不一样这里先不管了
Swin Transformer
Swin Transformer 提出ViT具有两个缺点 1. 没有多尺度特征 不能生成多尺度的特征图传给FPN (检测) \ U-Net (分割)从而对于不同大小的物体都能进行良好感知 3. 全局计算自注意力浪费资源并且计算复杂度跟图像增加的大小成平方关系 对于以上缺点Swin Transformer给出了以下的解决方法
不同于ViT—在整张输入图片上进行自注意力计算。Swin Transformer是在窗口内进行自注意力计算的同时这个窗口又是包含固定数量的patch每个patch的尺寸也是固定的。由于在图像领域中同一个物体的不同部位、或语义相似的不同物体大概率会出现在相邻的地方所以没必要像ViT那样–对整张图进行自注意力操作其实可以借鉴CNN卷积的局部性的归纳偏置在一个小的局部窗口内进行自注意力计算也是差不多够用的。所以Swin Transformer使用了尺寸不一的窗口来避免序列长度过大从而节约计算资源。不同于ViT— 在每个Transformer Encoder Block上都是做相同尺寸的自注意力操作得到的也是相同尺寸的特征。Swin Transformer在不同尺寸的窗口内做自注意力操作从而得到不同尺寸的特征图也就是多尺度的特征图。在Swin Transformer中这叫做patch merging。这跟CNN的池化操作很类似CNN通过池化Pooling来增大每一个卷积核能看到的感受野从而使每次池化后的卷积核能够抓住不同尺寸的物体。 在Swin Transformer中灰色的格子叫patch是最小的计算单元尺寸为4 * 4红色的格子叫window是中等的计算单元最小的窗口里有7 * 7个patch通过将整张图分成不同的窗口只计算窗口内的自注意力可以极大程度的减小序列长度减小计算复杂度。shifted window是指先将左侧图中的分割线往右下移动两个patch然后将左上角变大后的窗口重新按中心分割成四个窗口再将分割线往左上移动两个patch就变成右图的样子。shifted window 和 patch merging的好处如下 当我们进行注意力计算的时候只在Swin Transformer的局部窗口内进行局部自注意力计算相比ViT的全局窗口来说可以减少序列长度节省内存加快计算。因为自注意力都是只在窗口内进行所以如果不进行shift那么某个窗口内的patch就永远无法注意到其他窗口内patch的信息这就违背了Transformer的初衷—更好的理解上下文掌握全局信息。但是经过shift之后比如中间的窗口就是由之前四个窗口的patch组成的也就表示中间窗口进行自注意力计算后可以关注到其他窗口的信息窗口和窗口之间可以进行交互Cross-Window Connection再加上之前的patch merging那么在不断合并的时候每个patch可以注意到很多其他窗口的patch信息即每个patch的感受野会不断增大因此虽然我们计算的是每个窗口内的局部自注意力但是实际上它近似等于一个全局的自注意力。
池化 如果使用卷积核大小为1 * 2具体为 [1 , -1]由于卷积操作对位置很敏感所以对最左侧的输入进行卷积之后得到的结果只有一列是1即边缘会检测不准如果当图片发生微小改变后边缘经过卷积都会发生变化。所以卷积对于位置的敏感性不是一个很好的事。因此最好能具有一定程度的平移不变性即当图片发生微小的改变卷积结果不会发生改变。 所以往往在卷积之后加入池化操作以上是二维最大池化的示意过程 通过二维最大池化的结果可以看出池化的操作近似于模糊化在卷积输出的值附近出现多次同样的值。池化层和卷积层类似都有填充和步幅但是池化层没有可学习的参数直接从输入中选取值了池化层的输出通道数等于输入通道数即在每个输入通道应用池化层来获得相对应的输出通道。由于卷积层可以改变通道而池化层往往是跟在卷积层后面所以池化层就不需要改变通道数了