建设通网站是什么网站,wordpress保存远程图片,两学一做注册网站吗,红色经典ppt模板免费下载提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读#xff1a;带有超令牌采样的视觉转换器1、研究背景2、方法提出3、优势4、实验5、贡献 二、StokenAttention代码学习 摘要
本周主要阅读了CV… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读带有超令牌采样的视觉转换器1、研究背景2、方法提出3、优势4、实验5、贡献 二、StokenAttention代码学习 摘要
本周主要阅读了CVPR文章带有超令牌采样的视觉转换器。该论文提出了一个名为SViT的方法这是一种基于Transformer的模型SViT主要由以下几个关键组件构成卷积位置嵌入CPE、卷积FFNConvFFN及空间注意力STA模块通过在Transformer中引入卷积层使得模型能够更好地利用局部信息同时保持了Transformer对全局信息的建模能力。除此之外还学习学习了StokenAttention的注意力模块代码的学习。
Abstract
This week, I mainly read the CVPR article on a visual transformer with super-token sampling. The paper proposes a method called SViT, which is a Transformer-based model. SViT mainly consists of the following key components: convolutional position embedding CPE, convolutional FFN ConvFFN, and spatial attention STA module. By introducing convolutional layers into the Transformer, the model can better utilize local information while maintaining the Transformer’s ability to model global information. In addition, I also learned the attention module code of StokenAttention. 文献阅读带有超令牌采样的视觉转换器
Title Vision Transformer with Super Token Sampling AuthorHuaibo Huang Xiaoqiang ZhouJie Cao Ran He Tieniu Tan From2023 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)
1、研究背景
Transformer在许多视觉任务上取得了令人印象深刻的性能比如Vision TransformerViT。然而它可能在捕捉浅层特征时遭受高冗余使用自注意力机制其计算复杂度与输入序列的长度平方成正比在处理高分辨率图像时计算成本较高。因此使用局部自注意力或早期卷积但牺牲了捕捉长距离依赖的能力。然后出现了一个挑战能否在神经网络的早期阶段获得高效和有效的全局上下文建模
2、方法提出
文中提出了一个名为SViT的方法这是一种基于Transformer的模型SViTSpatially Variant Transformer是一种针对图像分割任务的基于Transformer的模型。它主要由以下几个关键组件构成
卷积位置嵌入CPECPE用于在特征中添加位置信息这对于Transformer模型来说至关重要。CPE通过将位置编码与原始特征进行逐元素相加使得模型能够捕捉到不同位置的信息。实验结果显示CPE能提高模型的性能因为它更加灵活适用于任意分辨率的输入。卷积FFNConvFFNConvFFN是一种用于增强局部特征的模块。它通过使用3x3卷积核对特征进行处理从而提取更丰富的局部信息。此外ConvFFN中还使用了shortcut连接有助于提高最终的性能。空间注意力STA模块STA模块用于提取全局上下文表示。它通过高效地探索和充分利用长范围依赖关系使得模型能够更好地理解图像中的全局上下文信息。
3、优势
Spatially Variant TransformerSVT和Vision TransformerViT都是基于Transformer架构的视觉模型但它们在处理图像数据时具有不同的特点和优势。以下是Spatially Variant Transformer相比ViT的一些潜在优势
融合局部和全局信息SViT结合了卷积神经网络CNN和Transformer的优点能够同时捕捉局部和全局上下文信息。它通过在Transformer中引入卷积层使得模型能够更好地利用局部信息同时保持了Transformer对全局信息的建模能力。空间变化性SViT通过引入空间变化性使得模型能够更好地适应不同场景中的空间变化。这使得模型在处理具有复杂结构和多样性的图像时具有更好的鲁棒性。高效的注意力机制SViT采用了 deformable attention机制这是一种可变形的注意力机制能够以更高效的方式建模图像中的长距离依赖关系。这使得模型在处理具有复杂结构的图像时具有更高的效率。如下图所示相比其他模型SViT能更好地捕捉注意力信息。结构简单且易于实现SViT的结构相对简单易于实现和优化。相比于其他复杂的Transformer架构SViT具有更高的计算效率和更少的参数数量。
4、实验
文中进行了广泛的视觉任务上的实验包括在ImageNet-1K 上进行图像分类在COCO 2017 [28]上进行物体检测和实例分割以及在ADE20K 上进行语义分割。除此之外还进行了消融研究以检查每个组件的作用。 图像分类在ImageNet-1K数据集上进行图像分类实验与现有最先进的模型进行比较。实验结果表明我们的Super Vision TransformerSViT在准确度方面具有竞争力同时拥有22%更少的浮点运算次数FLOPs和两倍的速度。这说明SViT在图像分类任务中表现出色并且计算效率较高。 目标检测和实例分割在COCO 2017数据集上进行目标检测和实例分割实验。实验结果进一步验证了我们方法的有效性表明SViT不仅在图像分类任务中表现良好而且在目标检测和实例分割任务中也有较好的性能。 Ablation Study我们进行了消融研究以检查SViT每个组件的作用。实验结果表明超级令牌super tokens具有不同的模式从而降低了局部冗余。提出的超级令牌注意力super token attention将原始全局注意力global attention分解为乘法有助于提高目标检测的准确性。这说明SViT的关键组件对于提高模型性能具有重要影响。
5、贡献
文章的贡献主要在于提出了一种新的图像分割方法——SViT。该方法通过将图像分割成固定大小的不重叠块并将每个块展平成一个向量然后利用Transformer对这些向量进行处理从而实现在全局范围内的上下文建模。实验结果表明SViT在多个图像分割任务中均取得了优于现有方法的性能证明了其有效性。此外文中还进行了详细的消融实验探究了SViT中各组件的作用和效果。
二、StokenAttention代码学习 clike
class StokenAttention(nn.Module):def __init__(self, dim, stoken_size, n_iter1, num_heads8, qkv_biasFalse, qk_scaleNone, attn_drop0.,proj_drop0.):Args:dim (int): 特征维度。stoken_size (tuple): stoken的尺寸格式为 (height, width)。n_iter (int): 迭代次数默认为1。num_heads (int): 注意力头的数量默认为8。qkv_bias (bool): 是否允许查询、键和值的偏置。qk_scale (float or None): 查询和键的缩放因子默认为None。attn_drop (float): 注意力得分的dropout率默认为0.0。proj_drop (float): 用于投影的dropout率默认为0.0。super().__init__()# 初始化参数self.n_iter n_iterself.stoken_size stoken_sizeself.scale dim ** - 0.5# 定义展开unfold和折叠fold操作self.unfold nn.Unfold(3)self.fold nn.Fold(3)# 定义用于精细化stoken的注意力模块self.stoken_refine Attention(dim, num_headsnum_heads, qkv_biasqkv_bias, qk_scaleqk_scale,attn_dropattn_drop, proj_dropproj_drop)def stoken_forward(self, x):执行图像处理中stoken的前向传播。Args:x (torch.Tensor): 输入图像张量尺寸为 (B, C, H, W)其中B为批大小C为通道数H为高度W为宽度。Returns:torch.Tensor: 处理后的图像张量。B, C, H0, W0 x.shapeh, w self.stoken_size# 计算填充数量pad_l pad_t 0pad_r (w - W0 % w) % wpad_b (h - H0 % h) % h# 执行填充操作if pad_r 0 or pad_b 0:x F.pad(x, (pad_l, pad_r, pad_t, pad_b))_, _, H, W x.shapehh, ww H // h, W // w# 提取stoken特征和像素级特征stoken_features F.adaptive_avg_pool2d(x, (hh, ww)) # (B, C, hh, ww)pixel_features x.reshape(B, C, hh, h, ww, w).permute(0, 2, 4, 3, 5, 1).reshape(B, hh * ww, h * w, C)# 计算关联矩阵with torch.no_grad():for idx in range(self.n_iter):stoken_features self.unfold(stoken_features) # (B, C*9, hh*ww)stoken_features stoken_features.transpose(1, 2).reshape(B, hh * ww, C, 9)affinity_matrix pixel_features stoken_features * self.scale # (B, hh*ww, h*w, 9)affinity_matrix affinity_matrix.softmax(-1) # (B, hh*ww, h*w, 9)affinity_matrix_sum affinity_matrix.sum(2).transpose(1, 2).reshape(B, 9, hh, ww)affinity_matrix_sum self.fold(affinity_matrix_sum)if idx self.n_iter - 1:stoken_features pixel_features.transpose(-1, -2) affinity_matrix # (B, hh*ww, C, 9)stoken_features self.fold(stoken_features.permute(0, 2, 3, 1).reshape(B * C, 9, hh, ww)).reshape(B, C, hh, ww)stoken_features stoken_features / (affinity_matrix_sum 1e-12) # (B, C, hh, ww)# 更新stoken特征stoken_features pixel_features.transpose(-1, -2) affinity_matrix # (B, hh*ww, C, 9)stoken_features self.fold(stoken_features.permute(0, 2, 3, 1).reshape(B * C, 9, hh, ww)).reshape(B, C, hh, ww)stoken_features stoken_features / (affinity_matrix_sum.detach() 1e-12) # (B, C, hh, ww)# 对stoken特征进行精细化stoken_features self.stoken_refine(stoken_features)# 折叠stoken特征得到像素级特征stoken_features self.unfold(stoken_features) # (B, C*9, hh*ww)stoken_features stoken_features.transpose(1, 2).reshape(B, hh * ww, C, 9) # (B, hh*ww, C, 9)pixel_features stoken_features affinity_matrix.transpose(-1, -2) # (B, hh*ww, C, h*w)pixel_features pixel_features.reshape(B, hh, ww, C, h, w).permute(0, 3, 1, 4, 2, 5).reshape(B, C, H, W)# 去除填充if pad_r 0 or pad_b 0:pixel_features pixel_features[:, :, :H0, :W0]return pixel_featuresdef direct_forward(self, x):执行直接处理的前向传播。Args:x (torch.Tensor): 输入张量。Returns:torch.Tensor: 处理后的张量。B, C, H, W x.shapestoken_features xstoken_features self.stoken_refine(stoken_features)return stoken_featuresdef forward(self, x):执行前向传播。Args:x (torch.Tensor): 输入张量。Returns:torch.Tensor: 处理后的张量。if self.stoken_size[0] 1
---# 总结
本周主要阅读了CVPR文章带有超令牌采样的视觉转换器。该论文提出了一个名为SViT的方法这是一种基于Transformer的模型SViT主要由以下几个关键组件构成卷积位置嵌入CPE、卷积FFNConvFFN及空间注意力STA模块通过在Transformer中引入卷积层使得模型能够更好地利用局部信息同时保持了Transformer对全局信息的建模能力。除此之外还学习学习了StokenAttention的注意力模块代码的学习。下周继续努力