qwenvl 代码中的attention pool 注意力池如何理解,attention pool注意力池是什么?

qwenvl 中的attention pool如何理解,其实这就是一个概念的问题

看qwenvl的huggingface的代码的时候,发现代码里有一个Resampler 以及attn_pool,这和之前理解的连接池 线程池 表示资源复用的意思不太一样,查了一下:
注意这里的pool 和 线程池 连接池里面的pool 不一样:

  • 深度学习中的池化:池化在深度学习中主要指通过滑动窗口对特征图进行下采样,提取最重要的特征,减少计算量并提高鲁棒性。它的目的是压缩数据的空间尺寸,减少不必要的信息。

  • 传统池化(连接池、内存池等):资源池化指的是通过复用已有资源来减少重复的创建和销毁操作,提高系统性能。

由于这里面是采用cross attention 进行压缩的,因此就叫attention pool了
查看qwenvl的文章,里面有一个

Position-aware Vision-Language Adapter:
为了缓解长图像特征序列带来的效率问题,Qwen-VL引入了一个压缩图像特征的视觉语言适配器。该适配器包括一个随机初始化的单层交叉注意模块。该模块使用一组可训练向量(Embeddings)作为query向量,并使用视觉编码器的图像特征作为交叉注意操作的关键。该机制将视觉特征序列压缩为256的固定长度。

下面是文章原文:
Position-aware Vision-Language Adapter: To alleviate the efficiency issues arising from long image feature sequences, Qwen-VL introduces a vision-language adapter that compresses the image features. This adapter comprises a single-layer cross-attention module initialized randomly. The module uses a group of trainable vectors (Embeddings) as query vectors and the image features from the visual encoder as keys for crossattention operations. This mechanism compresses the visual feature sequence to a fixed length of 256.

下面是qwenvl的架构图,Vision-Language Adapter 就是里面cross attention的部分。
在这里插入图片描述

### Convolutional Block Attention Module (CBAM)中的注意力机制 在卷积块注意模块(CBAM)[^1]中,注意力图谱用于增强模型对输入图像重要区域的关注度。具体来说: #### 通道注意力机制( ChannelAttention ) 通过计算每个通道的重要性权重来调整特征图。该过程涉及两个化操作——最大化和平均化,随后连接这些化的结果并传递给一个多层感知器(MLP),最终得到一个缩放因子向量。此向量决定了哪些通道应该被放大或抑制。 ```python class ChannelAttention(nn.Module): def __init__(self, channel, reduction=16): super(ChannelAttention, self).__init__() self.max_pool = nn.AdaptiveMaxPool2d(1) self.avg_pool = nn.AdaptiveAvgPool2d(1) self.fc = nn.Sequential( nn.Linear(channel, channel // reduction), nn.ReLU(inplace=True), nn.Linear(channel // reduction, channel) ) def forward(self, x): b, c, _, _ = x.size() max_out = self.fc(self.max_pool(x).view(b,c)).unsqueeze(-1).unsqueeze(-1) avg_out = self.fc(self.avg_pool(x).view(b,c)).unsqueeze(-1).unsqueeze(-1) out = torch.sigmoid(max_out + avg_out) return x * out.expand_as(x) ``` #### 空间注意力机制(SpatialAttention) 空间注意力则聚焦于定位图片内的显著位置。它同样依赖于两种类型的化:沿通道维度的最大化与均值化。接着将这两个张量叠加在一起并通过7×7的卷积核处理以生成单通道的空间掩码。这个掩码用来重新加权原始特征映射上的像素级响应。 ```python class SpatialAttention(nn.Module): def __init__(self, kernel_size=7): super(SpatialAttention, self).__init__() assert kernel_size in (3, 7), 'kernel size must be 3 or 7' padding = 3 if kernel_size == 7 else 1 self.conv = nn.Conv2d(2, 1, kernel_size, padding=padding, bias=False) self.bn = nn.BatchNorm2d(1) def forward(self, x): avg_out = torch.mean(x, dim=1, keepdim=True) max_out, _ = torch.max(x, dim=1, keepdim=True) scale = torch.cat([avg_out, max_out], dim=1) scale = self.conv(scale) scale = self.bn(scale) scale = torch.sigmoid(scale) return x * scale ``` 当上述两部分组合起来形成完整的CBAM结构时,先应用通道注意力再施加空间注意力,从而能够更有效地捕捉视觉模式并提高性能[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值