深度学习--风格迁移 原理以及实现--84

news/2025/3/16 19:24:31/文章来源:https://www.cnblogs.com/cavalier-chen/p/18233821

目录
  • 1. 简介
  • 4. 损失函数

参考链接:https://blog.csdn.net/ssshyeong/article/details/127092354

1. 简介

Image Style Transfer Using Convolutional Neural Networks:Gram矩阵(CVPR2016)
链接

Texture Synthesis Using Convolutional Neural Networks
图像经过卷积层后得到的特征图的协方差矩阵可以很好地表征图像的纹理特征,但是会损失位置信息。
纹理特征--风格特征

不过在风格迁移的任务中,我们可以忽略位置信息损失这个缺点,只需要找到一个方法可以表征图像的纹理信息,并把它这些纹理信息迁移到需要被风格迁移的图像中,完成风格迁移的任务;
而现在,利用协方差矩阵可以得到纹理信息,我们就可以完成风格迁移。

协方差是一个二阶的统计信息,这里使用Gram matrix来代替协方差矩阵----(其实就是没有减去均值的协方差矩阵)

理解(重点):假设图片经过某层卷积层后得到了[height, width, channel]的特征图,为了进行Gram matrix的操作,需要将特征图进行flatten,
得到 F=[heightwidth, channel] 的特征图,那么这里的G=F.transpose F, 得到size为[channel, channel]的G矩阵,表达特征图里面的自相关。

Gram matrix 的表达式:

从直观上理解 记录了特征图的值,
如果两列都是比较大的值(风格特征明显),那么相乘之后的响应也会变大(即风格得到了放大);
相反则是比较小的值,根本不需要管,于是我们的G就记录了图片的风格信息。


上面的图片是风格图,下面的是内容图,各自作为输入,经过VGG19网络(或者VGG16网络),得到各层卷积层的特征图,

从下半部分看到,层数越浅,记录内容图的特征图越具体,越深则越抽象;
从上半部分(风格图)角度来说,越浅层的特征图则记录着颜色纹理等信息,而越深的层得到的特征图则会记录更高级的信息。

Gram matrix这个过程:越浅层的特征图,得到的风格表示矩阵的size非常小,是因为还没有经过很多卷积操作,还没有将特征图的通道数增加,而我们的结论是Gram matrix最后的size表示为[channel, channel],这就与我们的结论一致。

为了实现风格迁移,我们需要得到内容图和风格图各自经过VGG网络后得到的各层特征图,这将是计算损失函数的重要参考。

4. 损失函数

内容损失:

内容图(content),生成图(target)经过卷积层生成的特征图,

把他们两个作差并平方求和(不仅记录一层卷积层特征图的差异),使生成图的特征图越接近于内容图的特征图,这样就可以保留内容信息。
一般来说,可选择比较浅的层数但别选第一层得到的特征图,因为这样会过于保留内容导致风格信息无法融入到特征图中。
一般也只是选择两到三层作为内容损失函数。内容损失并没有用到Gram matrix。

风格损失:

生成图和风格图经过卷积层得到的特征图、然后自相关得到的Gram matrix。一样用平方误差作为损失函数来使两者接近。

生成图的size和内容图的size一致(因为风格是要迁移到内容图上),生成图初始化是一个高斯白噪声的图片,它经过VGG网络后同样也生成了特征图,它既要与内容图生成的特征图计算内容损失,也要和风格图生成的Gram matrix计算风格损失,而每次前向传播得到的loss,终将反馈到它自身,然后它开始变化、接近于我们想要的结果,
即这个风格迁移的网络其实并不需要训练网络结构内的任何权重参数,需要训练的是生成图里面的元素(在tensorflow里就是tf.Variable初始化的是生成图,而不是任何weight)。

得到生成图的过程时间花费长,训练过程就是生成过程,跟以往的神经网络不太一样——一般是训练好之后网络模型可以立即投入使用,
所以2017年又有新的一篇文章描述快速风格迁移:Perceptual Losses for Real-Time Style Transfer and Super-Resolution。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Body AdvancedBrep Geometry

Body AdvancedBrep Geometry Body Brep Geometry是通过边界表示模型(包括NURBS)表示产品的三维形状。应使用保持该几何表示的IfcShapeResentation的以下属性值:IfcShapeRepresentation.RepresentationIdentifier = Body IfcShapeRepresentation.RepresentationType = Advanc…

node.js + mysql实现基本的增删改查功能(保姆级教程---2优化版)

node.js + mysql实现基本的增删改查(保姆级教程---2优化版)上一个实现对增删改查功能都写在同一个文件里,代码过于冗余,我认为可以优化,分开写在不同文件里面,使得更加直观。废话不多说,直接进入主题:对之前的代码进行抽离:db.js文件(用于数据库的连接,并导出连接供…

虚幻中实现本地双人的输入设备分别控制需要的Pawn

想要实现双人成行游戏中的双输入设备(双输入设备指的是一个键鼠和一个手柄,或者两个手柄)分别控制玩家1和玩家2,同时可以动态插拔设备切换对应的Pawn的控制权;本文是对探索并实现此功能的一个解决思路记录。1、前期准备和知识点梳理 1.1 本地多玩家 LocalPlayer 平常我们运…

HiPPO: Recurrent Memory with Optimal Polynomial Projections

目录概Motivation代码Gu A., Dao T., Ermon S., Rudra A. and Re C. HiPPO: Recurrent memory with optimal polynomial projections. NIPS, 2021.概 看下最近很火的 Mamba 的前身. 本文其实主要介绍的是一个如何建模历史信息在正交基上的稀疏的变化情况.Motivation对于一个函数…

存储引擎及特点、约束条件、严格模式、基本字段类型(整型、浮点型、字符串、日期时间、枚举和集合)

【一】存储引擎在平常我们处理的文件格式有很多,并且针对不同的文件格式会有对应不同的存储方式和处理机制 针对不同的数据应该有对应不同的处理机制 存储引擎就是不同的处理机制。# 查看所有引擎 show engines;四种主要的存储引擎 (1)Innodb引擎是MySQL5.5版本之后的默认存…

sickos1.1-cms

sickos1.1-cms主机发现和nmap扫描 nmap -sn 192.68.56.0/24靶机ip:192.168.56.105 nmap -sT --min-rate 10000 192.168.56.105PORT STATE SERVICE 22/tcp open ssh 3128/tcp open squid-http 8080/tcp closed http-proxynmap -sT -sV -sC -O -p22,3128,8080 192.16…

自动化类级别前后置和函数级别前后置的区别

一、函数级别的前后置,格式如下: 二、类函数级别的前后置如下: 三、总结: 1、函数级别的用例执行一个用例时,都会执行一遍;类级别的前后置不管用例是多少个,只在执行用例时执行一次。 2、所以根据用例的需要,适当的选择是类级别的前后置还是函数级别的前置后。

Linux容器架构

1.Iaas:基础设施即服务 Infrastructure-as-a-Service Paas:平台即服务 Platform-as-a-Service Saas:软件即服务 Software-as-a-Service Caas:容器即服务 介于IAAS和PAAS IAAS,PAAS,SAAS这些服务,用于帮助人们更快实现目标(搭建环境,使用产品) 从左到右,人们需要管理与维护的地方…

内网穿透教程

内网穿透教程 本文介绍如何使用 FRP(Fast Reverse Proxy)工具实现内网穿透,包括配置 Azure 公网 IP、安装 Docker 和 FRP,以及在内网服务器上配置和运行 FRP 客户端。 一、配置公网 IP 1. 申请 Azure 公网 IP登录到 Azure 门户。 创建一个新的虚拟机实例,建议使用1G内存的…

CFAR检测

目标检测:1幅海上SAR图像和1幅近海光学图像,选择其中一幅检测出图像上的舰船(包括停靠码头)目标。 检测步骤图像裁剪:把原图裁剪成 448 * 640 的 patch,检测每个小 patch 中的舰船目标。读取图像:读取每个图像,并将其转换为灰度图。为了方便处理边缘区域,用补零的方式对…

内网穿透详细教程

内网穿透详细教程 本文介绍如何使用 FRP(Fast Reverse Proxy)工具实现内网穿透,包括配置 Azure 公网 IP、安装 Docker 和 FRP,以及在内网服务器上配置和运行 FRP 客户端。 一、配置公网 IP 1. 申请 Azure 公网 IP登录到 Azure 门户。 创建一个新的虚拟机实例,建议使用1G内…