Gram矩阵+Gram矩阵和协方差矩阵的关系

news2024/9/24 19:21:28

目录

  • Gram矩阵简介
  • 协方差矩阵
  • Gram矩阵 和 协方差矩阵的关系
  • Gram Matrix代码

Gram矩阵简介

gram矩阵是计算每个通道 i 的feature map与每个通道 j 的feature map 的内积
gram matrix的每个值可以说是代表 i 通道的feature map和 j 通道的 feature map的互相关程度。
参考博客

G = A T A = [ a 1 T a 2 T ⋮ a n T ] [ a 1 a 2 ⋯ a n ] = [ a 1 T a 1 a 1 T a 2 ⋯ a 1 T a n a 2 T a 1 a 2 T a 2 ⋯ a 2 T a n a n T a 1 a n T a 2 ⋯ a n T a n ] G=A^{T} A=\left[\begin{array}{c} \mathbf{a}_{1}^{T} \\ \mathbf{a}_{2}^{T} \\ \vdots \\ \mathbf{a}_{n}^{T} \end{array}\right]\left[\begin{array}{llll} \mathbf{a}_{1} & \mathbf{a}_{2} & \cdots & \mathbf{a}_{n} \end{array}\right]=\left[\begin{array}{cccc} \mathbf{a}_{1}^{T} \mathbf{a}_{1} & \mathbf{a}_{1}^{T} \mathbf{a}_{2} & \cdots & \mathbf{a}_{1}^{T} \mathbf{a}_{n} \\ \mathbf{a}_{2}^{T} \mathbf{a}_{1} & \mathbf{a}_{2}^{T} \mathbf{a}_{2} & \cdots & \mathbf{a}_{2}^{T} \mathbf{a}_{n} \\ & & & \\ \mathbf{a}_{n}^{T} \mathbf{a}_{1} & \mathbf{a}_{n}^{T} \mathbf{a}_{2} & \cdots & \mathbf{a}_{n}^{T} \mathbf{a}_{n} \end{array}\right] G=ATA=a1Ta2TanT[a1a2an]=a1Ta1a2Ta1anTa1a1Ta2a2Ta2anTa2a1Tana2TananTan
上面的 a i \mathbf{a}_{i} ai均为列向量, i = 1 , 2... n i=1,2...n i=1,2...n

对于上面的矩阵,就是一个矩阵自己的转置乘以自己。

协方差矩阵

建议先看懂这一篇:一文读懂 协方差矩阵
协方差矩阵的求解步骤是:
1.对于 X n × d X_{n\times d} Xn×d ,先求每一列的均值
2.然后对应列减去此列的均值,得矩阵 C n × d C_{n\times d} Cn×d
3. C O V d × d = 1 n − 1 C n × d T C n × d = 1 n − 1 ( C T ) d × n C n × d COV_{d\times d}=\frac{1}{n-1}C_{n\times d}^{T}C_{n\times d}=\frac{1}{n-1}(C^{T})_{d\times n}C_{n\times d} COVd×d=n11Cn×dTCn×d=n11(CT)d×nCn×d
也就是说协方差矩阵是先求均值,然后减去均值(作了一个中心化处理,白化),再求协方差矩阵(除以 1 n − 1 \frac{1}{n-1} n11,即进行了标准化)

Gram矩阵 和 协方差矩阵的关系

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

这样,Gram所表达的意义和协方差矩阵相差不大,只是没有白化,标准化处理,显得比较粗糙。两个向量的协方差表示两个向量之间的相似程度,协方差越大越相似。对角线的元素值越大,表示其所代表的向量或者说特征越重要。

参考博客

参考博客

Gram Matrix详细解读

Gram Matrix代码

# Gram matrix格拉姆矩阵,是矩阵的内积运算,
# 在运算过后输入到此矩阵的特征图中的大的数字会变得更大,
# 这就相当于图片中的风格被放大了,放大的风格再参与损失计算,
# 能够对最后的合成图片产生更大的影响

class Gram_matrix(nn.Module):
    def forward(self, input):
        batch, channel, height, weight = input.size()
        M = input.view(batch * channel, height * weight)
        gram = torch.mm(M, M.t())
        return gram.div(batch * channel * height * weight)

# 代码来源: 深度学习之PyTorch实战计算机视觉  Chapter8

代码过程解释如下:
在这里插入图片描述
如上图所示:每个batch有3张图片,每张图片经过cnn后得到feature map的channel=6,把每个channel的图片给展平成一个向量,则一共有batch*channel个向量,即得到矩阵 M b ∗ c , h ∗ w M_{b*c, h*w} Mbc,hw,矩阵M中的每一行就表示一个特征图展成的特征向量,每一列就代表一个feature map的总的像素个数.

torch.mm(M, M.t())的过程如下:
在这里插入图片描述

上面的是 M ∗ M T M*M^{T} MMT,而协方差矩阵中是 1 n − 1 ( C T ) d × n C n × d \frac{1}{n-1}(C^{T})_{d\times n}C_{n\times d} n11(CT)d×nCn×d,其实是一样的:因为M的每一行表示的是feature,即有b*c个feature variable. 而 ( C T ) d × n (C^{T})_{d\times n} (CT)d×n的每一行也表示feature,即 ( C T ) d × n (C^{T})_{d\times n} (CT)d×n有d个feature variable

也就是说:其实这里的M是对应着一文读懂协方差矩阵中的方法2。

看到这里,再去理解:

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

Gram Matrix的对角线元素提供了不同特征图(a1,a2 … ,an)各自的信息,其余元素提供了不同特征图之间的相关信息。

于是,在一个Gram矩阵中,既能体现出有哪些特征,又能体现出不同特征间的紧密程度。论文中作者把这个定义为风格。

Gram矩阵被用于表征图像的风格。在图像修复问题中,很常用的一项损失叫做风格损失(style loss),风格损失正是基于预测结果和真值之间的Gram矩阵的差异构建的。
参考博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/56849.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小程序开发---02认识宿主环境

小程序依赖于微信提供宿主环境 小程序可以借助宿主环境提供的能力,可以完成许多普通网页无法完成的功能,如:微信扫码,微信支付,微信登录,定理定位,etc…等 小程序宿主环境包含以下内容&#xf…

关闭不同型号的 ESP 芯片的 ROM Code 上电启动日志的流程

【说明】 芯片 ROM Code 上电启动日志,不会对应用固件产生任何影响。通过 ROM Code 上电日志能够判断芯片启动模式是处于什么状态。若关闭此日志打印,当芯片进入下载模式或进入 Flash 启动模式等都不会有任何日志提示,不利于检查芯片状态&am…

操作系统学习笔记(V):设备管理

目录 1 设备 1.1 设备的概念 1.2 设备的分类 2 I/O控制器 2.1 I/O控制器 1.定义 2.功能 3.组成 2.2 I/O控制方式 1.程序直接控制方式 2.中断驱动方式 3.DMA方式 4.通道控制方式 5.对比 2.3 I/O软件层次结构 1.用户层软件 2.设备独立性软件 3.设备驱动程序 4…

Windows ssh免密访问Linux服务器

文章目录1.在Windows上生成公钥和私钥2.将公钥中的内容复制到linux服务器3.确认linux服务器开启了允许SSH免密登录4.确认免密登录配置成功ssh提供了安全的身份认证的策略,在免密登录之前,首先需要一对公钥和私钥。客户端拿着私钥,服务端拿着公…

【计算机网络】超详细——华为eNSP的安装教程

网络工程师小白或初次接触计算机网络的学生,网络相关的书本学习起来枯燥乏味,这时需要仿真模拟器来加深对网络知识的理解。目前提供网络仿真平台有cisco、华为等,若您英语基础薄弱建议选华为,英语阅读能力较强的直接上cisco的模拟…

redis我记不住的那些命令(五)

背景:我记不住那么多命令,又是Linux命令,又是Git命令,又是kubernetes的命令,又是maven命令,又是redis命令。所谓好记性不如烂笔头,记下来吧。 一、set集合 集合的特点是 无序且各不相同的元素…

SpringSecurity(二十二)--OAuth2:实现资源服务器(下)通过redis和缓存实现TokenStore

一、前言 本章将在前面几章基础上进行讲解,所以大家最好尽量先去看一下前几章的内容再来跟进会好很多。那么本章我们将通过redis和本地缓存Caffeine对JdbcTokenStore进行重写,并且讲解资源服务器配置的新方案,使得我们可以不用在资源服务器又…

[附源码]计算机毕业设计springboot校园疫情防范管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

LeetCode 337. 打家劫舍 III(C++)*

该题也是使用动态规划的思路,主要考虑根节点的最大金额和左右子节点的关系,其中分为两种情况:有该结点有没有偷钱,其次要遵守不报警原则。可得到状态转移方程: f为根节点被选中的最大,g为根节点没被选中的最…

Day17-购物车页面-结算-动态计算已勾选商品的数据和选中状态

1.动态渲染已勾选商品的总数量 我的操作: 1》在 store/cart.js 模块中,定义一个名称为 checkedCount 的 getters,用来统计已勾选商品的总数量: 2》在 my-settle 组件中,通过 mapGetters 辅助函数,将需要的…

[附源码]Python计算机毕业设计Django健身房信息管理

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

GIS工具maptalks开发手册(五)01-用JSON载入地图——json格式绘制多个面之基础版

GIS工具maptalks开发手册(五)01-用JSON载入地图——json格式绘制多个面之基础版 效果-json渲染图层基础版 代码 index.html <!DOCTYPE html> <html> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width,…

HTML5期末考核大作业,网站——旅游景点。 学生旅行 游玩 主题住宿网页

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

【网络层】流量控制VS拥塞控制、路由器功能、SDN控制平面

文章目录前言网络层功能流量控制VS拥塞控制拥塞控制路由器功能转发---硬件解决------数据平面---------处理数据各种转发路由选择---软件解决---控制平面----控制网络协议运行-------OSPF、RIP、BGP数据平面控制平面---路由选择传统方法-------每路由器法----------路由选择处理…

[附源码]计算机毕业设计疫苗及注射管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Ubuntu20.04 通过deb包方式安装微信

写在前面 写文时间&#xff1a;2022.12.03 周六 自己的系统是Ubuntu20.04.5&#xff0c;安装的是 weixin_2.1.1_amd64.deb。 安装微信 从优麒麟官网下载微信deb安装包。 下载完成后&#xff0c;直接安装即可 sudo dpkg -i weixin_2.1.1_amd64.deb参考链接 [1] 优麒麟官网…

基于HFSS的线阵综合分析

摘要&#xff1a; 常规的阵列天线方向图综合是基于阵因子分析法&#xff0c;且不考虑单元之间电磁耦合的一种快速分析手段。本次推文则简单阐述一个基于HFSS的线阵综合实例。 HFSS中的直线阵 均匀直线阵的基础知识已在前面的推文中进行了多次阐述举例&#xff0c;这里就不赘…

正则表达式中的元字符,量词:贪婪和非贪婪,转义符: \s: 记得使用-z --null-data: 使用ascii码中空字符来替换新行,分组:““,和‘‘

正则表达式的所有内容&#xff1a;&#xff08;每一个解释下面都带一个样例&#xff09; 1.元字符 \&#xff1a;忽略后面一个字符的特殊含义 [a-b]&#xff1a;对a到b之间的任何字符进行匹配 ^&#xff1a;在每行的开始进行匹配 $ &#xff1a;在每行的末尾进行匹配 . .&…

FFmpeg编译参数分析

config.mak 来传递给 makefile &#xff0c;还会生成 config.h 给 C 程序 include 引入。 由于 configure 脚本的编译参数是非常多的&#xff0c;本文主要讲解一些比较常用的编译参数&#xff0c;一些特殊的编译参数&#xff0c;读者可通过以下命令查询。 configure --help1&…

[附源码]计算机毕业设计springboot小区物业管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…