Cross Attention实战:用QKV机制增强老照片修复模型(Python版)
当你在处理一张泛黄的老照片时,是否注意到某些关键区域(如人物面部)需要特别精细的修复,而背景区域则可以相对简化处理?这正是注意力机制在计算机视觉中的核心价值——让模型学会"看重点"。本文将带你深入实现一个基于Cross Attention的老照片修复增强方案,通过QKV机制让传统CNN模型获得"选择性关注"的能力。
1. 老照片修复的痛点与注意力解决方案
老照片修复任务面临几个典型挑战:
- 全局一致性:需要保持整张照片的风格统一
- 局部精细度:关键区域(如面部五官)需要像素级修复
- 噪声分布不均:霉变、划痕等损伤往往集中在特定区域
传统CNN模型在处理这类任务时存在明显局限:
- 卷积核的感受野固定,难以自适应关注不同大小的重要区域
- 深层网络会平等处理所有区域特征,缺乏重点强化机制
- 特征融合时简单拼接或相加,无法体现区域重要性差异
# 传统CNN修复模型的典型特征处理方式
def forward(self, x):
low_level = self.encoder1(x) # 浅层特征
mid_level = self.encoder2(low_level)
high_level = self.encoder3(mid_level) # 深层特征
# 简单的特征拼接融合
combined = torch.cat([low_level, mid_level, high_level], dim=1)
return self.decoder(combined)
Cross Attention的QKV机制为解决这些问题提供了新思路:
| 修复需求 | QKV对应解决方案 |
|---|---|
| 动态关注重点区域 | Query向量定位需要强化的特征 |
| 保持全局一致性 | Key/Value存储整图特征作为参考基准 |
| 自适应感受野 | 注意力权重自动学习不同区域的重要性分布 |
2. Cross Attention核心原理解析
2.1 QKV三元组的角色分工
在Cross Attention中,三个核心向量各司其职:
- Query(查询):来自需要修复的区域特征,相当于"我想知道这些位置应该如何修复"
- Key(键):来自参考特征(如整图的编码表示),相当于"我可以提供这些位置的特征参考"
- Value(值):实际用于特征重建的加权信息,相当于"根据相关性,你应该这样组合这些特征"
# QKV生成的线性变换层
self.to_q = nn.Linear(query_dim, inner_dim, bias=False)
self.to_k = nn.Linear(context_dim, inner_dim, bias=False)
self.to_v = nn.Linear(context_dim, inner_dim, bias=False)
2.2 注意力权重的计算过程
注意力机制的核心是计算Query与Key的相似度,然后对Value进行加权:
- 相似度计算:Q与K的点积衡量特征关联度
- 缩放处理:除以√d_k防止梯度消失(d_k是Key的维度)
- Softmax归一化:将相似度转换为概率分布
- 加权求和:用注意力权重对Value进行加权
$$ \text{Attention}(Q,K,V) = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V $$
def attention(q, k, v, mask

298

被折叠的 条评论
为什么被折叠?



