在计算机视觉任务中,当图像被划分为多个小块(patches)时,每个 patch 的关联性可以通过不同的方法来计算。具体取决于使用的模型和任务,以下是一些常见的计算 patch 关联性的方法:
1. Vision Transformer (ViT) 的自注意力机制
在 ViT 模型中,图像被分割成多个 patches,然后通过自注意力机制来计算每个 patch 之间的关联。自注意力机制的核心是查询(Query)、键(Key) 和 值(Value) 的计算。
自注意力计算步骤:
-
将图像分割成 patches:通常将图像分割成固定大小的 patches,并将每个 patch 转换为向量表示。
-
线性变换:将每个 patch 的向量表示通过线性层分别映射为查询向量 QQQ、键向量 KKK、和值向量 VVV。
-
计算关联性(注意力权重):通过计算查询向量 QQQ 和键向量 KKK 之间的点积,得到每个 patch 与其他 patches 的关联程度。具体公式如下:
-
加权求和值:通过注意力权重矩阵 AAA 和值向量 VVV 进行加权求和,得到每个 patch 的新的表示:
2. Swin Transformer 中的局部自注意力
Swin Transformer 是一种层次化的 Transformer 结构,它使用滑动窗口机制,将自注意力计算限制在局部窗口内。局部窗口中的 patches 会通过自注意力机制计算关联性,而跨窗口的关联通过层次化结构逐步融合。
具体计算过程与 ViT 相似,只是将自注意力限制在每个局部窗口中,减少了计算复杂度。
3. CNN 中的卷积操作
在卷积神经网络(CNN)中,patch 之间的关联性通常是通过卷积核计算的。卷积核滑动到图像的每个位置时,它会捕获局部邻域的信息,从而将相邻 patches 之间的信息进行融合。
卷积的计算:
对于每个卷积窗口,卷积操作通过以下公式计算关联:
4. 基于邻域特征的关联计算
除了基于注意力机制的模型外,还可以通过一些邻域特征的方法计算 patch 之间的关联性。比如:
- 欧氏距离:通过计算相邻 patch 向量的欧氏距离来衡量它们的相似度,距离越小表示关联越强。
- 余弦相似度:计算两个 patch 向量之间的夹角,余弦值越接近 1 表示它们之间的关联性越强。
5. 基于图的关联性计算
在一些方法中,图像可以被表示为图结构,其中每个 patch 是图中的一个节点,节点之间的边表示 patch 之间的关联性。这种情况下,关联性可以通过图中的边权重计算,常用方法包括图卷积网络(GCN) 或基于图的聚类算法。
总结
- ViT 和 Swin Transformer 使用自注意力机制计算 patches 之间的关联,通过查询、键、值的点积来表示关联性。
- CNN 通过卷积操作,在局部邻域内捕捉 patch 之间的关联。
- 欧氏距离、余弦相似度等相似性度量可以直接计算 patches 之间的相似度。
- 图模型可以通过图结构中的边权重表示 patches 之间的关联。