图像风格迁移算法学习总结
目录
一、简要说明
二、具体实施步骤
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矩阵是矩阵的内积运算,运算过后特征图中越大的数字会变得更大,这就相当于对图像的特性进行了缩放,使得特征突出了,也就相当于提取到了图片的风格。
三、代码的简要描述
- 获取VGG19模型中的features部分
- 冻结所有VGG参数
- 判断是否有GPU,如果有GPU则使用GPU来处理代码,否则使用CPU来执行
- 导入content图片和style风格图片,并且要求图片的参数为400*400像素(图片过大会影响效率,所以要处理一下)
- 加载content图像和style风格图像
- 在形成目标图像之前,只获取一次内容和样式特征
- 计算样式表示的每一层的gram矩阵
- 设置迭代参数
- 在VGG的基础上迭代构建我们自己的CNN网络
2、计算内容损失(content图像与target图像的距离)
3、初始化风格损失(style图像与target图像之间的距离)
(其中还需编写函数方法实现计算Gram矩阵、获取图像特征features、tensor格式到图像的转换)
四、成果展示
图像风格迁移算法学习总结相关推荐
- 基于深度学习的图像风格迁移算法的基本介绍。
基于神经网络的图像风格迁移算法 这个算法还是蛮有趣的,之前就有宣传说让电脑来学习梵高作画,虽然有些夸张,但是实际效果出来还是挺不错的. 接下来,我们要按照以下三个部分来进行介绍,提出,方法以及结论. ...
- 【毕业设计】深度学习图像风格迁移算法研究与实现 - python 卷积神经网络
文章目录 0 简介 1 VGG网络 2 风格迁移 3 内容损失 4 风格损失 5 主代码实现 6 迁移模型实现 7 效果展示 8 最后 0 简介
- 《深度学习之pytorch实战计算机视觉》第8章 图像风格迁移实战(代码可跑通)
上一章<深度学习之pytorch实战计算机视觉>第7章 迁移学习(代码可跑通)介绍了迁移学习.本章将完成一个有趣的应用,基于卷积神经网络实现图像风格迁移(Style Transfer).和 ...
- 图像迁移风格保存模型_CV之NS:图像风格迁移(Neural Style 图像风格变换)算法简介、关键步骤配图、案例应用...
CV之NS:图像风格迁移(Neural Style 图像风格变换)算法简介.过程思路.关键步骤配图.案例应用之详细攻略 目录 图像风格迁移算法简介 图像风格迁移算法过程思路 1.VGG对比NS 图像风 ...
- CV之NS:图像风格迁移(Neural Style 图像风格变换)算法简介、过程思路、关键步骤配图、案例应用之详细攻略
CV之NS:图像风格迁移(Neural Style 图像风格变换)算法简介.过程思路.关键步骤配图.案例应用之详细攻略 目录 图像风格迁移算法简介 图像风格迁移算法过程思路 1.VGG对比NS 图像风 ...
- 图像风格迁移(Neural Style)简史
图像风格迁移科技树 什么是图像风格迁移? 先上一组图. 以下每一张图都是一种不同的艺术风格.作为非艺术专业的人,我就不扯艺术风格是什么了,每个人都有每个人的见解,有些东西大概艺术界也没明确的定义.如 ...
- Pytorch实现图像风格迁移(一)
图像风格迁移是图像纹理迁移研究的进一步拓展,可以理解为针对一张风格图像和一张内容图像,通过将风格图像的风格添加到内容图像上,从而对内容图像进行进一步创作,获得具有不同风格的目标图像.基于深度学习网络的 ...
- 读“基于深度学习的图像风格迁移研究综述”有感
前言 关于传统非参数的图像风格迁移方法和现如今基于深度学习的图像风格迁移方法. 基于深度学习的图像风格迁移方法:基于图像迭代和模型迭代的两种方法的优缺点. 基于深度学习的图像风格迁移方法的存在问题及其 ...
- cnn风格迁移_快速图像风格迁移思想在无线通信中的另类应用:算法拟合
在本文中,并不是介绍最新的一些论文,而是回顾自己在很早(半年前?)读过的几篇文章.[1]Learning to optimize: Training deep neural networks for ...
最新文章
- 机器学习:线性回归简单有效,但是千万不要踩到雷区!
- SpringBoot+Mybatis配置Druid多数据源
- 为什么新来的技术很难接手维护一个系统
- php无极分类非递归_无限极分类算法,对你一定有帮助
- C++下关于XML开源库的使用
- eclipse java jdk_设置Eclipse和Java JDK
- 易助工资总额管控上市说明
- 【GIS风暴】ArcGIS栅格重采样(Resample)方法详解
- html树图制作,d3.js制作树结构图
- UVa 548 Tree(中序遍历+后序遍历)
- ARTS打卡计划第5周-ALGORITHM
- 内网部署GPS定位系统方案
- 官网链接下载QT5 Creator
- 微信小程序(1)-简单答题小程序
- 多元线性回归分析spss结果解读_多重线性回归的结果解读和报告(SPSS实例教程)...
- Redmine安装与入门指南
- Supermap Iserver 安装指南
- c语言中字符后u代表什么意思,C语言中的0U或1U是什么意思?
- 广告竞价-广义第二出价
- 苹果xs还原卡在进度条怎么关机
热门文章
- syslog默认端口_什么是Syslog默认端口和安全端口以及如何配置它?
- 目前工资最高的几家外包公司汇总!(2023最新版)
- Python+Vue计算机毕业设计北理珠青协志愿素拓系统eaa9n(源码+程序+LW+部署)
- 对于 Windows Sever 2019 无法安装AMD RX显卡驱动的解决办法
- Java Web实验(二) JSP应用
- IAR Embedded Workbench 破解方法+工具+授权文件
- linux ab压力测试
- html烟花特效案例,HTML5前端特效库 css3 按钮粒子烟花特效源码
- mac上使用使用rz,sz命令
- 树莓派python控制gpio_树莓派的GPIO控制