【论文整理】风格迁移中格拉姆矩阵(Gram Matrix)的使用


1、格拉姆矩阵的定义

1) 什么是格拉姆矩阵:

在内积空间中,一组向量[v1, v2, … , vn]的格拉姆矩阵(Gram Matrix)是内积的埃尔米特矩阵,其元素由 G i j = ⟨ v i , v j ⟩ G_{ij}=\langle v_i,v_j \rangle Gij=vi,vj给出。

对于一个给定的矩阵 A A A我问题的出发点是图像处理),矩阵 A T A A^TA ATA是列向量的格拉姆矩阵,矩阵 A A T AA^T AAT是行向量的格拉姆矩阵。

2)格拉姆矩阵具有什么样的作用

按照我的理解,使用格拉姆矩阵就是对于一个向量,去计算与其转置向量的内积,从而得到该向量的格拉姆矩阵,而这个格拉姆矩阵具有的特点就是:对称。一个 n n n维的向量可以得到 n ∗ n n*n nn维的格拉姆矩阵,其中每一个元素都可以表示为特征 i i i与特征 j j j的相关性(特征 i i i的出现与特征 j j j的出现是否存在关联,是否成正比?),而矩阵对角线上的元素可以表示为某个特征 i i i在整个图像中的强度(特征 i i i是否在图像中占据了主导因素)。


2、风格迁移的任务描述

1)什么是风格迁移
当我们同时得到两张图片,一张是风格图片 style image,另一张是内容图片 content image,现在需要得到一张风格化图片 stylized image。风格化图片的特点就在于,它具有内容图片的主要内容(比如人物特征、景物等),但是具有风格图片的美术风格。

在我所调研的几篇论文中,因为都将CNN网络应用到了风格迁移任务,所以要介绍一下CNN网络中是怎么定义内容风格的。

【2】内容:如果说两张图片在内容上是近似的,这指的是,在使用CNN网络进行图片识别的时候,图片的深层特征 high-level features 在欧氏距离上接近;
【2】风格:如果说两张图片在风格上是近似的,这指的是,在使用CNN网络进行图片识别的时候,图片的浅层特征 low-level features 在欧氏距离上接近;
输入图片自上而下,分别为风格图片和内容图片
【1】上图是一个很明显可以反映出“浅层特征”和“深层特征”不同特点的图片。这里采用了图片重构的方法,将输入图片经过CNN网络,再从不同网络层的输出信息来重构图片。从图片中可以看出,上半部分为风格图片,下半部分为内容图片。随着网络卷积层的不断深入,特征也逐渐从“浅层特征”变成了深层特征。明显可以观察到,自左而右,在重构房屋图片的过程中,一开始可以高精度、几乎无损失还原出房屋的图片,在深层网络的适合,大量局部的细节丢失,但是房屋轮廓结构信息得到很好的保留;而在风格图片的重构过程中,一开始的重构图片完全看不出任何细节内容(没有月亮的形态、没有古堡),主要都是图片的颜色纹理,但是随着网络的深入,可以看出原图所具有的城堡、月亮的形态。

2)风格迁移常见的网络架构

从我调研的论文中,选择两个经典的“风格迁移”网络架构进行介绍。
结构一

  • 9
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Python格拉姆角场(Grammian)通常用于处理线性代数的特征值问题,特别是矩阵的秩和奇异值分解(SVD)。格拉姆矩阵是由原矩阵与其转置相乘得到的,而角场则涉及到矩阵的秩变化情况。以下是一个简单的示例,展示了如何在Python计算并可视化一个矩阵格拉姆角场: ```python import numpy as np from scipy.linalg import svd import matplotlib.pyplot as plt def gram_schmidt_field(matrix, num_points=100): # 计算格拉姆矩阵 gram = matrix @ matrix.T # SVD分解 u, s, vh = svd(gram) # 创建网格 x, y = np.meshgrid(np.linspace(-1, 1, num_points), np.linspace(-1, 1, num_points)) xy = np.stack([x.flatten(), y.flatten()]) # 将二维点映射到特征向量空间 projected_points = u @ xy # 检查每个点对应的秩 ranks = np.linalg.matrix_rank(projected_points, tol=1e-6, hermitian=True) # 归一化并绘制 scaled_ranks = (ranks - ranks.min()) / (ranks.max() - ranks.min()) plt.imshow(scaled_ranks.reshape(num_points, num_points), cmap='hot', extent=(-1, 1, -1, 1)) plt.xlabel('Column Index') plt.ylabel('Row Index') plt.title('Gauss-Newton Field for Matrix') plt.colorbar() plt.show() # 示例用法 matrix = np.random.rand(10, 10) # 假设这是一个10x10的随机矩阵 gram_schmidt_field(matrix) ``` 这个代码首先计算给定矩阵格拉姆矩阵,然后通过奇异值分解(SVD)找到它的左奇异向量。之后,它将二维坐标点映射到这些奇异向量的空间,并计算每个点对应的小秩区域,最终可视化为热力图。 相关问题: 1. SVD在格拉姆角场起到了什么作用? 2. 如何理解矩阵秩在格拉姆角场的意义? 3. 在实际问题使用格拉姆角场有什么应用场景?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值