CV领域 交叉注意力(Cross Attention)中QKV的含义理解

交叉注意力公式:

注意力的输入:

(1)K=V:图像的全局特征

(2)Q:告诉attention需要关注哪些重要特征

公式计算过程理解:

(1):Q和K相乘,对应Query和Key进行点积运算,得到的是Query和Key之间的相似性

(2):再用Key向量的维度进行scaling,即将计算得到的相似度矩阵维度,缩放到与K=V相同尺度

(3):对相似度权重矩阵进行归一化

### 计算机视觉中的交叉注意力机制 #### 概念 交叉注意力机制是一种用于增强模型理解不同模态数据之间关系的技术。通过引入查询(Query)、键(Key)和值(Value),该方法允许网络关注输入特征的不同部分,从而提高多模态融合的效果。具体来说,在处理图像与文本等异构信息时,交叉注意力可以有效地捕捉两者间的关联。 #### 应用场景 - **跨域目标检测**:当训练样本不足时,利用源领域已有的标注数据来辅助目标领域的学习过程。 - **视频描述生成**:结合帧间运动信息及时序上下文线索,生成更加连贯自然的语言表达[^2]。 - **立体视觉重建**:基于双目或多视角图像构建三维环境表示,其中涉及视差估计等问题求解。 #### 实现方式 为了更好地展示如何在实践中运用这一技术,下面给出一段简单的PyTorch代码片段作为例子: ```python import torch.nn.functional as F from torch import nn class CrossAttention(nn.Module): def __init__(self, dim_model=512, num_heads=8, dropout_rate=0.1): super(CrossAttention, self).__init__() assert dim_model % num_heads == 0 self.num_heads = num_heads self.d_k = int(dim_model / num_heads) self.q_linear = nn.Linear(dim_model, dim_model) self.kv_linear = nn.Linear(dim_model, dim_model * 2) self.out_proj = nn.Linear(dim_model, dim_model) self.dropout = nn.Dropout(dropout_rate) def forward(self, query, key_value_input): Q = self.split_heads(self.q_linear(query)) K,V = tuple(map(lambda t: self.split_heads(t), self.kv_linear(key_value_input).chunk(2,dim=-1))) scores = torch.matmul(Q,K.transpose(-2,-1)) / math.sqrt(self.d_k) weights = F.softmax(scores,dim=-1) context = torch.matmul(weights,V) output = self.combine_heads(context) final_output = self.out_proj(output) return self.dropout(final_output) def split_heads(self,x): N,B,L,D = x.size() return x.view(N,B,L,self.num_heads,int(D/self.num_heads)).transpose(2,3).contiguous().view(N*B*self.num_heads,L,int(D/self.num_heads)) @staticmethod def combine_heads(x): T,H,E = x.shape[-3:] B = x.shape[:-3] x = x.reshape(*B,T*H,E) return x.permute(list(range(len(B))) + [-2,-1]).reshape(*B,T//H,H*E) ``` 此模块实现了基本形式下的交叉注意计算流程,并可通过调整参数适应不同的应用场景需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值