欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:論文閱讀——CMT

柚子快報邀請碼778899分享:論文閱讀——CMT

http://yzkb.51969.com/

論文閱讀——CMT

目標:優(yōu)化transformer模型,使其復(fù)雜度低于transformer且性能優(yōu)于高性能卷積模型。

創(chuàng)新點

1、提出了一種新穎的 CMT(CNNs meet transformers)架構(gòu)用于視覺識別 2、 提出了局部感知單元(LPU)和反向殘差前饋網(wǎng)絡(luò)(IRFFN)

Introduction

Transformer在視覺任務(wù)中性能出色,但是性能低于同等大小下的CNN。原因有三:1)在ViT 和其他基于Transformer的模型中,將圖像分成patch,它忽略了基于序列的NLP任務(wù)和基于圖像的視覺任務(wù)之間的根本區(qū)別,即在每個patch分塊中的2維結(jié)構(gòu)和空間局部信息。 2)由于patch大小的固定,Transformer難以明確提取低分辨率和多尺度的特征,這給檢測和分割等密集的預(yù)測任務(wù)帶來了很大的挑戰(zhàn)。 3)與基于CNN的O(NC^2) 相比Transformer中自注意力模塊的計算和存儲成本是輸入分辨率的平方倍(O(NC^2),使用Transformer來處理這些圖像將不可避免地會導(dǎo)致GPU內(nèi)存不足和計算效率低的問題。

輸入圖像首先經(jīng)過stem進行細粒度特征提取,然后將其送入CMT塊堆棧進行表示學(xué)習(xí)。具體而言,引入的CMT塊是變壓器塊的改進變體,其局部信息通過深度卷積增強。相比于ViT,CMT第一階段生成的特征可以保持更高的分辨率,即H/4×W/4/ViT中的H/16×W/16,此外,采用了類似于cnn的分階段架構(gòu)設(shè)計,采用步長為2的4個卷積層,逐步降低分辨率(序列長度),靈活增加維數(shù)。分階段設(shè)計有助于提取多尺度特征,減輕高分辨率帶來的計算負擔。CMT塊中的局部感知單元(LPU)和反向殘差前饋網(wǎng)絡(luò)(IRFFN)可以同時捕獲中間特征中的局部和全局結(jié)構(gòu)信息,提高網(wǎng)絡(luò)的表示能力。最后,利用平均池化代替ViT中的cls token,獲得更好的分類效果。 給定一個輸入圖像,可以得到四個不同分辨率的層次特征圖,類似于典型的cnn。利用上述特征圖的輸入步幅分別為4、8、16和32,我們的CMT可以獲得輸入圖像的多尺度表示,并可以很容易地應(yīng)用于目標檢測和語義分割等下游任務(wù)。

相關(guān)工作

CNN

網(wǎng)絡(luò)特點LeNet-AlexNet & VGGNet & GoogleNet & InceptionNet-ResNet增強泛化能力SENet自適應(yīng)地重新校準通道特征響應(yīng)

Vision Transformer

網(wǎng)絡(luò)特點ViT將NLP中的Transformer引入到CV領(lǐng)域DeiT蒸餾的方式,使用teacher model來指導(dǎo)Vision Transformer的訓(xùn)練T2T-ViT遞歸的將相鄰的tokens聚合成為一個,transformer對visual tokens進行建模TNTouter block建模patch embedding 之間的關(guān)系,inner block建模pixel embedding之間的關(guān)系PVT將金字塔結(jié)構(gòu)引入到 ViT 中,可以為各種像素級密集預(yù)測任務(wù)生成多尺度特征圖。CPVT和CvTcnn引入到transformer之中

CMT

整體結(jié)構(gòu) CMT stem(減小圖片大小,提取本地信息) Conv Stride(用來減少feature map,增大channel) CMT block(捕獲全局和局部關(guān)系)

CMT模型的核心是CMT Block,其主要由以下幾個模塊構(gòu)成:

1)Local Perception Unit(局部感知單元)

位置編碼會破壞卷積中的平移不變性,忽略了patch之間的局部信息和patch內(nèi)部的結(jié)構(gòu)信息。LPU來緩解這個問題。

2)Lightweight Multi-head Self-attention(輕量級的多頭注意力機制)

使用深度卷積來減少KV的大小,加入相對位置偏置,構(gòu)成了輕量級的自注意力計算。

3)Inverted Residual Feed-forward Network(反向殘差前饋網(wǎng)絡(luò))

深度卷積增強局部信息的提取,殘差結(jié)構(gòu)來促進梯度的傳播能力。 1)Local Perception Unit(局部感知單元) 本質(zhì)就是,將輸入圖片信息,與 3*3 的卷積操作后相加,旨在增加了空間信息,可以和 ViT 的絕對位置編碼的對應(yīng)理解。 2)Lightweight Multi-head Self-attention (輕量級的多頭注意力機制) 在原始的self-attention模塊中,輸入 X 被線性變換為 query、key、value 再進行計算,運算成本高。

此模塊主要功能就是使用深度卷積計算代替了 key 和 value 的計算,從而減輕了計算開銷。 在這里插入圖片描述 3)Inverted Residual Feed-forward Network (反向殘差前饋網(wǎng)絡(luò)) 向殘差前饋網(wǎng)絡(luò)(IRFFN)類似于反向殘差塊,由擴展層、深度卷積和投影層組成。具體來說,我們改變了快捷方式連接的位置,以獲得更好的性能。 其中,省略了激活層。深度卷積用于提取局部信息,而額外的計算成本可以忽略不計。插入快捷方式的動機與經(jīng)典的殘差網(wǎng)絡(luò)相似,可以提高梯度跨層的傳播能力。

代碼

LPU

class LocalPerceptionUint(nn.Module):

def __init__(self, dim, act=False):

super(LocalPerceptionUint, self).__init__()

self.act = act

# 增強本地信息的提取

self.conv_3x3_dw = ConvDW3x3(dim)

if self.act:

self.actation = nn.Sequential(

nn.GELU(),

nn.BatchNorm2d(dim)

)

def forward(self, x):

if self.act:

out = self.actation(self.conv_3x3_dw(x))

return out

else:

out = self.conv_3x3_dw(x)

return out

IRFFN

class InvertedResidualFeedForward(nn.Module):

def __init__(self, dim, dim_ratio=4.):

super(InvertedResidualFeedForward, self).__init__()

output_dim = int(dim_ratio * dim)

self.conv1x1_gelu_bn = ConvGeluBN(

in_channel=dim,

out_channel=output_dim,

kernel_size=1,

stride_size=1,

padding=0

)

self.conv3x3_dw = ConvDW3x3(dim=output_dim)

self.act = nn.Sequential(

nn.GELU(),

nn.BatchNorm2d(output_dim)

)

self.conv1x1_pw = nn.Sequential(

nn.Conv2d(output_dim, dim, 1, 1, 0),

nn.BatchNorm2d(dim)

)

def forward(self, x):

x = self.conv1x1_gelu_bn(x)

out = x + self.act(self.conv3x3_dw(x))

out = self.conv1x1_pw(out)

return out

LMHSA

class LightMutilHeadSelfAttention(nn.Module):

"""calculate the self attention with down sample the resolution for k, v, add the relative position bias before softmax

Args:

dim (int) : features map channels or dims

num_heads (int) : attention heads numbers

relative_pos_embeeding (bool) : relative position embeeding

no_distance_pos_embeeding (bool): no_distance_pos_embeeding

features_size (int) : features shape

qkv_bias (bool) : if use the embeeding bias

qk_scale (float) : qk scale if None use the default

attn_drop (float) : attention dropout rate

proj_drop (float) : project linear dropout rate

sr_ratio (float) : k, v resolution downsample ratio

Returns:

x : LMSA attention result, the shape is (B, H, W, C) that is the same as inputs.

"""

def __init__(self, dim, num_heads=8, features_size=56,

relative_pos_embeeding=False, no_distance_pos_embeeding=False, qkv_bias=False, qk_scale=None,

attn_drop=0., proj_drop=0., sr_ratio=1.):

super(LightMutilHeadSelfAttention, self).__init__()

assert dim % num_heads == 0, f"dim {dim} should be divided by num_heads {num_heads}"

self.dim = dim

self.num_heads = num_heads

head_dim = dim // num_heads # used for each attention heads

self.scale = qk_scale or head_dim ** -0.5

self.relative_pos_embeeding = relative_pos_embeeding

self.no_distance_pos_embeeding = no_distance_pos_embeeding

self.features_size = features_size

self.q = nn.Linear(dim, dim, bias=qkv_bias)

self.kv = nn.Linear(dim, dim*2, bias=qkv_bias)

self.attn_drop = nn.Dropout(attn_drop)

self.proj = nn.Linear(dim, dim)

self.proj_drop = nn.Dropout(proj_drop)

self.softmax = nn.Softmax(dim=-1)

self.sr_ratio = sr_ratio

if sr_ratio > 1:

self.sr = nn.Conv2d(dim, dim, kernel_size=sr_ratio, stride=sr_ratio)

self.norm = nn.LayerNorm(dim)

if self.relative_pos_embeeding:

self.relative_indices = generate_relative_distance(self.features_size)

self.position_embeeding = nn.Parameter(torch.randn(2 * self.features_size - 1, 2 * self.features_size - 1))

elif self.no_distance_pos_embeeding:

self.position_embeeding = nn.Parameter(torch.randn(self.features_size ** 2, self.features_size ** 2))

else:

self.position_embeeding = None

if self.position_embeeding is not None:

trunc_normal_(self.position_embeeding, std=0.2)

def forward(self, x):

B, C, H, W = x.shape

N = H*W

x_q = rearrange(x, 'B C H W -> B (H W) C') # translate the B,C,H,W to B (H X W) C

q = self.q(x_q).reshape(B, N, self.num_heads, C // self.num_heads).permute(0, 2, 1, 3) # B,N,H,DIM -> B,H,N,DIM

# conv for down sample the x resoution for the k, v

if self.sr_ratio > 1:

x_reduce_resolution = self.sr(x)

x_kv = rearrange(x_reduce_resolution, 'B C H W -> B (H W) C ')

x_kv = self.norm(x_kv)

else:

x_kv = rearrange(x, 'B C H W -> B (H W) C ')

kv_emb = rearrange(self.kv(x_kv), 'B N (dim h l ) -> l B h N dim', h=self.num_heads, l=2) # 2 B H N DIM

k, v = kv_emb[0], kv_emb[1]

attn = (q @ k.transpose(-2, -1)) * self.scale # (B H Nq DIM) @ (B H DIM Nk) -> (B H NQ NK)

# TODO: add the relation position bias, because the k_n != q_n, we need to split the position embeeding matrix

q_n, k_n = q.shape[1], k.shape[2]

if self.relative_pos_embeeding:

attn = attn + self.position_embeeding[self.relative_indices[:, :, 0], self.relative_indices[:, :, 1]][:, :k_n]

elif self.no_distance_pos_embeeding:

attn = attn + self.position_embeeding[:, :k_n]

attn = self.softmax(attn)

attn = self.attn_drop(attn)

x = (attn @ v).transpose(1, 2).reshape(B, N, C) # (B H NQ NK) @ (B H NK dim) -> (B NQ H*DIM)

x = self.proj(x)

x = self.proj_drop(x)

x = rearrange(x, 'B (H W) C -> B C H W ', H=H, W=W)

return x

總結(jié)

本文提出了一種新的混合結(jié)構(gòu)CMT,用于視覺識別和其他下游計算機視覺任務(wù),如目標檢測和實例分割,并解決了在計算機視覺領(lǐng)域以野蠻力方式使用變壓器的局限性。所提出的CMT結(jié)構(gòu)利用cnn和變壓器來捕獲局部和全局信息,提高了網(wǎng)絡(luò)的表示能力。

柚子快報邀請碼778899分享:論文閱讀——CMT

http://yzkb.51969.com/

相關(guān)文章

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19152589.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄