gram矩阵_Gram矩阵的理解

1、Gram矩阵的定义

c91f4c5c8f3ec5111fc09234b0ee4d53.png

2、意义

格拉姆矩阵可以看做feature之间的偏心协方差矩阵(即没有减去均值的协方差矩阵),在feature map中,每个数字都来自于一个特定滤波器在特定位置的卷积,因此每个数字代表一个特征的强度,而Gram计算的实际上是两两特征之间的相关性,哪两个特征是同时出现的,哪两个是此消彼长的等等,同时,Gram的对角线元素,还体现了每个特征在图像中出现的量,因此,Gram有助于把握整个图像的大体风格。有了表示风格的Gram Matrix,要度量两个图像风格的差异,只需比较他们Gram Matrix的差异即可。

总之, 格拉姆矩阵用于度量各个维度自己的特性以及各个维度之间的关系。内积之后得到的多尺度矩阵中,对角线元素提供了不同特征图各自的信息,其余元素提供了不同特征图之间的相关信息。这样一个矩阵,既能体现出有哪些特征,又能体现出不同特征间的紧密程度。

3、计算实例

1451d8f0afcd9ec06d1c8d5774e285a6.png

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

风格损失函数(Gram矩阵)理解

95f0c930e1e29daa26743ba786676d2a.png
f88fc9a1dcb869a79970e58d26114c88.png

当我们获取了gram矩阵,实际上就是把握住了这幅作品,不同特征之间的关系与联系,比如哪一种特征的量比较多,哪些特征和出现比较多的这个特征正相关or负相关,从而得出了这个作品的风格, 而进一步通过style图片和generate图片的gram矩阵之间的计算出相应的风格损失函数,就可以比较出两者在风格之间的差异

tensorflow keras 代码表述如下:# 将一个 nD 张量变成一个 第 0 维相同的 2D 张量。换句话说,它将批次中的每一个样本展平。# keras.backend.batch_flatten(x)# 重新排列张量的轴。# keras.backend.permute_dimensions(x, pattern)def gram_matrix(x): features = keras.backend.batch_flatten(K.permute_dimensions(x,(2,0,1))) gram = keras.backend.dot(features,K.transpose(features)) return gram

参考:

https://blog.csdn.net/dcrmg/article/details/81231044

https://blog.csdn.net/tunhuzhuang1836/article/details/78474129

https://blog.csdn.net/Hi_maxin/article/details/84979580

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值