图像风格迁移算法学习总结

article/2025/9/18 8:43:03

目录

一、简要说明

二、具体实施步骤

2.1综述

2.2基本思路

2.3核心思路        

2.4基本问题处理

三、代码的简要描述

四、成果展示


一、简要说明

本次学习的图像风格迁移算法是基于一个2015年由Gatys等人发表的文章A Neural Algorithm of Artistic Style_的一个代码复现

写这篇文章主要是做一下学习记录。

二、具体实施步骤

2.1综述

输入一张随机噪声构成的底图,通过计算Style Loss和Content Loss,迭代更新target,风格上与Style图像类似,内容上与原照片相似。正常的训练过程是通过loss反向传播更新网络参数,论文中则是用一个已经训练好的VGG16作为backbone,锁住参数,更新输入的底图。类比画家作画的话,随机噪声就是画家的画纸,网络提取更新的内容特征相当于画家打的线稿,风格特征则是画家写真的风景对象(晴天,雨天,雪天等等各种风格)。

具体说,论文用 Gram 矩阵来对图像中的风格进行建模和提取,再利用慢速图像重建方法,让重建后的图像以梯度下降的方式更新像素值,使其 Gram 矩阵接近风格图的 Gram 矩阵(即风格相似),然后,用VGG网络提取的高层feature map来表征图像的内容信息,通过使 VGG 网络对底图的提取的高层feature map接近目标图高层的feature map来达到内容相似,实际应用时候经常再加个总变分 TV 项来对结果进行平滑,最终重建出来的结果图就既拥有风格图的风格,又有内容图的内容。

Gram矩阵是论文的核心思想,是一种基于统计分布的参数化纹理建模方法,使用Gram矩阵可以很好的提取图像风格。

在进行图像内容特征提取的过程中,这里使用VGG网络高层特征表达目标图像的内容特征。得益于对神经网络黑盒特性的不断研究,学者们发现,神经网络的中间层提取到的图像特征是不一样的,越靠近输入层的中间层提取到的特殊是浅层特征(即,点,线,色块等低级特征);越靠近输出层的中间层提取到的特征是高级特征(例如,边,角,轮廓等)。因此,图像的内容信息可以使用神经网络提取到的高级特征来表达(实际上,Gram矩阵是对神经网络提取的浅层特征做变换得到的,用来表示风格)。

2.2基本思路

其实代码的核心思想并不复杂,就是利用CNN提取内容图片的内容和风格图片的风格,然后输入一张新的图像。对输入的图像提取出内容和风格与CNN提取的内容和风格进行Loss计算,Loss的度量可以使用MSE,然后逐步对Loss进行优化,使Loss值达到最理想,将被优化的参数进行输出,这样输出的图片就达到了风格迁移的目的。

2.3核心思路        

       1、使用现成的识别网络,提取图像不同层级的特征。

        (该项目使用的现成的识别网络是VGG19模型。)

        2、低层次响应描述图像的风格,高层次响应描述图像的内容。

        3、使用梯度下降方法,可以调整输入响应,在特定层次获得特定的响应。

        4、多次迭代之后,输入响应即为特定风格和内容的图像。

2.4基本问题处理

             1、内容损失(conten loss):对输入的content图像与生成的target目标图像进行欧式距离计算任取一张图像,将其输入到分类网络中,其中第L卷积层的响应记为,尺寸为HL*WL*NL。对于目标target图像,同样送入该网络,可以得到该层的响应,若希望内容相似,我们则需要最小化如下的二范数误差:

                                ​​​​​​​        ​​​​​​​        ​​​​​​​        

          这一误差可以对本层响应的每一元素求导:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

           其中h=1,2……H,w=1,2……W,k=1,2,3……N

           进一步,利用链式法则,可以求得误差对输入图像的每一元素的导数。这一步就是神经网络经典的back-propagation方法。利用来更新,可以获得一个新的输入图像,其在第L层的响应更接近目标图像的响应。也就是说,可以目标target图像的内容更加接近。

                2、风格损失(style loss)使用Gram矩阵代表图像的风格

                        引入一个的特征矩阵

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

                                                        i=1,2……N,j=1,2,3……N

由第L 层的响应计算而来,但是消除了响应的位置信息,可以看做对于风格的描述。ij位置的元素描述第i通道响应和第j通道响应的相关性。对于目标图像相应层的风格,最小化如下误差可以使的风格近似:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

可以求得误差对本层响应的导数:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

同样可以通过back-propagation求得 ,进而更新使其风格接近

                3、总损失:将style loss 与content loss 进行相加。

                4、图像中的信息:

                使用分类网络中卷积层的响应来表达图像的风格和内容

                5、为什么Gram矩阵能够定义图像的风格?

                因为CNN卷积过后提取了图像的特征图,每个数字就是原图像的特性大小,而Gram矩阵是矩阵的内积运算,运算过后特征图中越大的数字会变得更大,这就相当于对图像的特性进行了缩放,使得特征突出了,也就相当于提取到了图片的风格。

三、代码的简要描述

  1. 获取VGG19模型中的features部分        
  2. 冻结所有VGG参数
  3. 判断是否有GPU,如果有GPU则使用GPU来处理代码,否则使用CPU来执行
  4. 导入content图片和style风格图片,并且要求图片的参数为400*400像素(图片过大会影响效率,所以要处理一下)
  5. 加载content图像和style风格图像
  6. 在形成目标图像之前,只获取一次内容和样式特征
  7. 计算样式表示的每一层的gram矩阵
  8. 设置迭代参数
  9. 在VGG的基础上迭代构建我们自己的CNN网络

迭代内容:

   1、获取目标图像target的特征

    2、计算内容损失(content图像与target图像的距离)

    3、初始化风格损失(style图像与target图像之间的距离)

    4、迭代计算风格损失

    5、计算总的损失

    6、更新target图像

    7、保存中间图像并打印损失

(其中还需编写函数方法实现计算Gram矩阵、获取图像特征features、tensor格式到图像的转换)

四、成果展示

 

 

 

 

        


http://chatgpt.dhexx.cn/article/Znp1316c.shtml

相关文章

【数字图像处理】图像风格迁移

代码和实验报告下载:http://download.csdn.net/detail/jsgaobiao/9523313 【作业要求】 设计自己的算法完成一个附图所示的图像风格迁移算法(基于matlab的快速实现)(很可能用到,并且鼓励使用)基于频率域…

图像风格迁移 CycleGAN原理

CycleGAN是一种很方便使用的用于进行图像风格转换的模型。它的一大优势就在于不需要成对的数据集就可以进行训练。比如我们只需要随便一大堆真人图像和随便另一大堆动漫图像,就可以训练出这两类风格互相转换的模型。 CycleGAN进行风格转换的原理是这样的&#xff1a…

Python实现基于深度学习的图像风格迁移

目录 一、选题意义与背景介绍 3 1.1背景介绍 3 1.2选题意义 3 二、相关方法介绍 4 2.1纹理建模 4 2.2图像重建 4 2.3图像风格迁移 4 2.3.1基于在线图像优化的慢速图像风格化迁移算法 4 2.3.2基于离线模型优化的快速图像风格化迁移算法 5 2.4图像风格迁移效果评估 6 三、具体方法…

图片风格迁移

##将图片进行风格迁移,将第一幅图片的均值平均差换成第二幅图的均值平方差。第三张是生成的图片 from numpy.lib.type_check import _imag_dispatcher from builtins import print from os import pread import sys from PIL import Image,ImageStat import numpy …

图像风格迁移及代码实现

图像风格迁移其实非常好理解,就是将一张图像的“风格”(风格图像)迁移至另外一张图像(内容图像),但是这所谓的另外一张图像只是在“风格”上与之前有所不同,图像的“内容”仍要与之前相同。Luan…

(一)图像风格迁移

图像风格迁移即把图像A的风格和图像B的内容按照一定比例结合,输出具备图像A风格和图像B内容的图像C. [github传送门1]https://github.com/anishathalye/neural-style [github传送门2]https://github.com/Quanfita/Neural-Style/tree/master/examples 系列文章 (二)快速图像风格…

图像风格迁移与快速风格迁移的对比(感知损失)

最近一段时间要写数字图像处理的文献综述,《深度学习在图像风格迁移中的原理与应用综述》。只能感慨自己一时选题不审,导致期末火葬场啊…… 这个问题我纠结了一天,看了N多篇文献(全是英文的…),结果还是没…

图像风格迁移【老版】

深度学习目前为止最有用的东西是图像处理,我们可以用它在极早期判断癌症, 也可以用它在茫茫人海里寻找犯人,但是要我说你能写一个小程序取悦女朋友, 你就不一定能信, 这一招叫艺术风格变换,就是你点击一下&…

图像风格迁移-DSTN

样式传输的目的是从参考图像中再现具有样式的内容图像。现有的通用风格转换方法成功地以艺术或照片逼真的方式将任意风格传递给原始图像。然而,现有作品所定义的“任意风格”的范围由于其结构限制而在特定领域内受到限制。具体而言,根据预定义的目标域来…

学习笔记:图像风格迁移

所谓图像风格迁移,是指利用算法学习著名画作的风格,然后再把这种风格应用到另外一张图片上的技术。著名的国像处理应用Prisma是利用风格迁移技术,将普通用户的照片自动变换为具有艺术家的风格的图片。这篇文章会介绍这项技术背后的原理&#…

图像风格迁移实战

最近看了一些基于深度学习的Style Transfer, 也就是风格迁移相关的paper,感觉挺有意思的。 所谓风格迁移,其实就是提供一幅画(Reference style image),将任意一张照片转化成这个风格,并尽量保留原照的内容(Content)。之前比较火的…

Pytorch实现图像风格迁移(一)

图像风格迁移是图像纹理迁移研究的进一步拓展,可以理解为针对一张风格图像和一张内容图像,通过将风格图像的风格添加到内容图像上,从而对内容图像进行进一步创作,获得具有不同风格的目标图像。基于深度学习网络的图像风格迁移主要有三种类型,分别为固定风格固定内容的风格…

毕设 深度学习图像风格迁移 - opencv python

文章目录 0 前言1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这…

图像风格迁移

文章目录 前言一、传统的图像风格迁移(Traditional style transfer)1.1计算机图形学领域和计算机视觉领域(Computer Graphics&Computer Vision)1.2非真实感图形学(Non-photorealistic graphics)和纹理迁…

ARM SMMU的原理与IOMMU

首先放一个社区iommupatch的网址:https://lore.kernel.org/linux-iommu/ 1: arm smmu的原理 1.1: smmu 基本知识 如上图所示,smmu 的作用和mmu 类似,mmu作用是替cpu翻译页表将进程的虚拟地址转换成cpu可以识别的物理地址。同理,sm…

ARM SMMU学习笔记

1. 什么是SMMU? SMMU(system mmu),是I/O device与总线之间的地址转换桥。 它在系统的位置如下图: 它与mmu的功能类似,可以实现地址转换,内存属性转换,权限检查等功能。 2. 为什么需要SMMU? 了解…

SMMU架构手册之数据结构和转换流程(1)

SMMU使用内存中一组数据结构来放置转换数据。寄存器指向初始根结构STE的基地址。STE包含stage2转换表基地址指针,同时也指向stage1的配置结构,该配置结构包含转换表基指针。CD表示stage1转换,STE表示stage2转换。 因此SMMU使用两组明确的结构…

SMMU架构手册之数据结构和转换流程(2)

STE包含每个stream的配置: 是否使能来之设备的流量;是否是stage1转换;是否是stage2转换哪个数据结构定位到stage1的转换表 若使用stage1,STE使用域STE.S1ContextPtr来指示内存中的一个或多个CD的地址。 CD关联起streamID和stage1…

ARM_SMMU_上

本篇参考 arm 官网公开材料 和 小崔的linux 专栏 https://zhuanlan.zhihu.com/p/105005488 宋宝华老师MMU介绍 armv8-armv9 MMU深度学习 MMU简介 MMU是Memory Management Unit的缩写,中文名是内存管理单元。它是一种负责处理中央处理器(CPU)…

SMMU架构手册之数据结构和转换流程(3)

3. 配置和转换的查找 图中 描述了配置查找和转换查找所涉及的相关概念。 正如3.3.2中所描述的,传入的事务首先受配置查找的约束,而SMMU决定怎样开始进行事务的转换。这涉及到找到合适的STE,如果有必要也需要CD。 配置的查找不依赖于输入的地址…