Gram Matrices理解

本文详细解释了Gram矩阵的概念及其在计算视觉中的应用。通过实例说明如何从特征映射中计算Gram矩阵,并探讨其如何反映图像风格。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看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/

### MATLAB 中实现最小二乘互信息 在MATLAB中,可以通过自定义函数来实现最小二乘互信息(Least Squares Mutual Information, LSMI)。LSMI是一种估计互信息的方法,特别适用于高维数据。下面是一个简单的示例代码,展示了如何在MATLAB中实现这一算法。 #### 实现步骤说明: 为了简化问题并提供清晰的理解,这里假设输入的数据集 `X` 和 `Y` 是两个二维矩阵,每一列代表一个样本点。目标是计算这两个数据集之间的互信息。 ```matlab function I = least_squares_mutual_information(X, Y) % X and Y are input data matrices where each column is a sample point. % Number of samples n_samples = size(X, 2); % Kernel width parameters (can be tuned based on the dataset) sigma_x = median(pdist(X')) / sqrt(2); % Median heuristic for kernel bandwidth sigma_y = median(pdist(Y')) / sqrt(2); % Compute Gram matrices using Gaussian kernels Kx = exp(-pdist2(X', X') ./ (sigma_x^2)); Ky = exp(-pdist2(Y', Y') ./ (sigma_y^2)); % Centering matrix H H = eye(n_samples) - ones(n_samples)/n_samples; % Apply centering to both Gram matrices Ckx = H * Kx * H; Cky = H * Ky * H; % Estimate mutual information via trace operation I = sum(sum(Ckx .* Cky)) / n_samples; end ``` 这段代码首先计算了核宽度参数 `sigma_x` 和 `sigma_y` ,这些参数决定了Gaussian核的带宽大小。接着构建Gram矩阵 `Kx` 和 `Ky` 来描述每一对样本间的相似度。之后应用中心化操作得到新的协方差矩阵形式 `Ckx` 和 `Cky` 。最后通过迹运算估算出互信息值 `I` [^1]。 请注意,在实际应用中可能需要调整内核宽度的选择策略以及考虑更复杂的正则化项以提高数值稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值