先看Gram实例
假设输入图像经过卷积后,得到的feature map为[b, ch, h, w]。我们经过flatten和矩阵转置操作,可以变形为[b, ch, h*w]和[b, h*w, ch]的矩阵。再对1,2维作矩阵内积得到[b, ch, ch]大小的矩阵,这就是我们所说的Gram Matrices。 (蓝色条表示每个通道flatten后特征点)
gram矩阵是计算每个通道I的feature map与每个通道j的feature map的内积。
gram matrix的每个值可以说是代表i通道的feature map与j通道的feature map的互相关程度。
具体就是计算某一层,同个源图像得到所有特征图之间的关系(直接对应像素相乘求和),所以最后的形状应该为(b,ch,ch)
Gram定义
Gram意义
格拉姆矩阵可以看做feature之间的偏心协方差矩阵(即没有减去均值的协方差矩阵),在feature map中,每个数字都来自于一个特定滤波器在特定位置的卷积,因此每个数字代表一个特征的强度,而Gram计算的实际上是两两特征之间的相关性,哪两个特征是同时出现的,哪两个是此消彼长的等等,同时,Gram的对角线元素,还体现了每个特征在图像中出现的量,因此,Gram有助于把握整个图像的大体风格。有了表示风格的Gram Matrix,要度量两个图像风格的差异,只需比较他们Gram Matrix的差异即可。
总之, 格拉姆矩阵用于度量各个维度自己的特性以及各个维度之间的关系。内积之后得到的多尺度矩阵中,对角线元素提供了不同特征图各自的信息,其余元素提供了不同特征图之间的相关信息。这样一个矩阵,既能体现出有哪些特征,又能体现出不同特征间的紧密程度。
Gram题目
MATLAB计算程序及结果:
x1=[3,3]',
x2=[4,3]',
x3=[1,1]',
G=[x1'*x1,x1'*x2,x1'*x3;
x2'*x1,x2'*x2,x2'*x3;
x3'*x1,x3'*x2,x3'*x3]
G =
18 21 6
21 25 7
6 7 2
参考文献:
https://blog.youkuaiyun.com/tunhuzhuang1836/article/details/78474129
https://blog.youkuaiyun.com/wangyang20170901/article/details/79037867/