Cross ViT

GPT-oss:20b

GPT-oss:20b

图文对话
Gpt-oss

GPT OSS 是OpenAI 推出的重量级开放模型,面向强推理、智能体任务以及多样化开发场景

1、为什么要用Multi-Scale的ViT?

patch大小会影响ViT的准确性和复杂性;具有细粒度的patch大小,ViT性能更好,但会导致更高的FLOPs和显存消耗。例如,patch大小为16的ViT比patch大小为32的ViT好6%,但前者需要更多4×的FLOPs。

受此启发,作者提出的方法是利用来自更细粒度的patch大小的优点,同时平衡复杂性。更具体地说,作者首先引入了一个双分支ViT,其中每个分支处理不同patch大小的特征,然后采用一个简单而有效的模块来融合分支之间的信息。

此图为Cross-Attention Multi-Scale Vision Transformer,即CrossViT的网络结构。模型主要由K个多尺度Transformer编码器组成,其中每个编码器由两个分支组成:

L-Branch :

大分支利用粗粒度的patch大小(Pl),更多的Transformer编码器和更大的embedding维度。

S-Branch :

小分支对细粒度的patch大小(Ps))进行操作,具有更少的编码器和更小的embedding维度。

两个分支的输出特征在Cross-Attention中融合L次,利用末端的两个分支对CLS token进行预测。对于两个分支的每个token,作者还在多尺度Transformer编码器之前添加了一个可学习的位置embedding,以学习位置信息。

2、多尺度特征融合:

有效的特征融合是学习多尺度特征表示的关键。在本文中作者探索了四种策略:

(a)All-Attention Fusion是简单地concat来自两个分支的所有token,而不考虑每个token的属性。因为所有的token都是通过自注意模块计算的,其时间复杂度也是跟输入特征大小呈二次关系

(b)Class Token Fusion只将 CLS Token 融合,因为它可以被视为一个分支的全局表示。

(c)Pairwise Fusion成对融合,根据它们的空间位置将它们合并。其中相对应空间位置的 Token 融合在一起,CLS Token 则分别融合。但是,这两个分支处理不同大小的patch,因此具有不同数量的patch token。因此作者首先执行插值操作来对齐空间大小,然后以成对的方式融合两个分支的patch token。

(d)Cross-attentions Fusion交叉注意力,将来自一个分支的 CLS Token 和来自另一个分支的 Patch Token 融合在一起。为了更有效地融合多尺度特征,作者首先利用每个分支的CLS token作为代理,在另一个分支的patch token之间交换信息,然后将其投影到自己的分支。

由于CLS token已经学习了自己分支中所有patch token之间的抽象信息,因此与另一个分支中的patch token的交互有助于融合不同尺度的信息。与其他分支token融合后,CLS token在下一层Transformer编码器上再次与自己的patch token交互,在这一步中,它又能够将来自另一个分支的学习信息传递给自己的patch token,以丰富每个patch token的表示。

您可能感兴趣的与本文相关的镜像

GPT-oss:20b

GPT-oss:20b

图文对话
Gpt-oss

GPT OSS 是OpenAI 推出的重量级开放模型,面向强推理、智能体任务以及多样化开发场景

在视觉Transformer(ViT)中,Cross-Frame Interaction即跨帧交互指的是在处理视频序列时,不同帧之间进行信息交流和融合的过程。ViT最初主要用于图像分类任务,其核心思想是将图像分割成多个patch,然后将这些patch通过线性投影转换为特征向量,并输入到Transformer架构中进行处理。而在视频处理场景下,由于视频是由一系列连续的帧组成的,为了捕捉视频中的动态信息和时间依赖关系,就需要引入跨帧交互机制。 跨帧交互在ViT中有多种实现方式。一种常见的方法是在Transformer的编码器中引入跨帧注意力机制。传统的自注意力机制主要关注同一帧内的patch之间的关系,而跨帧注意力机制则允许模型关注不同帧之间的patch关系。例如,在计算注意力分数时,不仅考虑当前帧内的patch,还考虑其他帧中对应位置或相关位置的patch。这样可以帮助模型捕捉目标在不同帧之间的运动轨迹、姿态变化等信息。 以下是一个简单的伪代码示例,展示了如何在ViT中实现跨帧注意力机制: ```python import torch import torch.nn as nn class CrossFrameAttention(nn.Module): def __init__(self, dim, num_heads): super().__init__() self.num_heads = num_heads self.head_dim = dim // num_heads self.scale = self.head_dim ** -0.5 self.qkv = nn.Linear(dim, dim * 3) self.proj = nn.Linear(dim, dim) def forward(self, x): # x shape: (batch_size, num_frames, num_patches, dim) batch_size, num_frames, num_patches, dim = x.shape x = x.flatten(0, 1) # (batch_size * num_frames, num_patches, dim) qkv = self.qkv(x).reshape(batch_size * num_frames, num_patches, 3, self.num_heads, self.head_dim).permute(2, 0, 3, 1, 4) q, k, v = qkv[0], qkv[1], qkv[2] # make torchscript happy (cannot use tensor as tuple) attn = (q @ k.transpose(-2, -1)) * self.scale attn = attn.softmax(dim=-1) out = (attn @ v).transpose(1, 2).reshape(batch_size * num_frames, num_patches, dim) out = self.proj(out) out = out.reshape(batch_size, num_frames, num_patches, dim) return out ``` 跨帧交互在ViT中的应用可以提升模型在视频相关任务中的性能,如视频分类、目标检测、动作识别等。通过捕捉不同帧之间的信息,模型能够更好地理解视频中的动态内容,从而做出更准确的预测。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值