1.1引入

在绘画方面,艺术大师将内容和风格完美结合从而画出一幅能给人以美感的作品,美的定义还很模糊,是人们的一种主观感受,但 能轻易发觉,一幅画美不是特定于哪个景物美,而是整幅画都给人以美的印象,即通常所说的画风。像宫崎骏等一样的艺术家们都有自己独特的画风, 在熟悉画风后几乎能在欣赏作品的0.3秒内知道作画者是谁, 的脑内分析的是如此的优秀,这肯定是大脑以一套自己的方法来处理,受深层神经网络在人脸识别方面表现优秀的启发, 可以利用深层神经网络来创建特定画风的图像。

1.2 卷积神经网络(CNN)

1.2.1 简介

在图像处理任务中,最强大的深层神经网络被称为卷积神经网络(Convolutional Neural Networks)。先说一下卷积神经网络。卷积神经网络(CNN)是一种前馈神经网络,了解机器学习中人工神经网络的话应该对这个概念不陌生。神经网络中的感知器模型如下图所示。

输入神经元与其各自权重相乘再相加得到z,利用激活函数g(z)进行变换得到神经元y。输入层神经元与其权重相乘再相加的过程可以用矩阵相乘相乘来表示,这点在下面的卷及神经网络里可以看到。神经网络里输入层和输出层中间的是隐藏层。

在卷积神经网络里,网络结构一般是由多个卷积层、非线性化层、池化层以及最后的全连接层组成。卷积层对输入进行卷积计算,得到的结果经过非线性化层的激活函数,再经过池化层进行采样,最后是全连接层。

先介绍卷积操作。假设输入图片是二维矩阵,每个像素值都是输入层的一个神经元,权值也用矩阵来表示,这个权值矩阵叫做卷积核,也可以成为滤波器,卷积核代表了你看这个图像时的感受野。不过卷积核是与输入图片的二维矩阵滑动计算的,这里涉及到了权值共享的问题。计算的过程如下图所示。

图中黄色部分为3x3卷积核,绿色的为5x5输入矩阵。卷积核在输入矩阵上滑动计算,每次都计算相应位置的乘积再相加,得到卷积后的矩阵中的新的元素。每次滑动的一格代表步长(stride)为1,也可以为其它值。然后再对右面矩阵的每一个得到的元素的值通过激励函数进行非线性化处理,一般是用的ReLU函数。如下图所示。

池化层进行下采样,目的是减小特征图,池化规模一般为2×2。常用的池化方法之一是最大池化(Max Pooling),即取4个点的最大值,如下图所示,非常简单。

它由不同的层组成,每一层都可以理解为一组图像滤波器(image filters),每一层都从输入图像提取特定特征。通过给定层输出就可以得到特征图(feature maps)。

1.2.2 卷积神经网络应用于物体识别的启发

当卷积神经网络被训练在物体识别上时,随着网络层次的增加,输入图像被转化为越来越关注图片的实际内容,而不是具体的像素值。图一就是每层图像可视化的演示。因此, 可以将网络中高层的特征响应作为图像的内容表示。

1.3 获取和可视化风格表达

1.3.1图像风格

以目前的深度学习技术,如果给定两张图像,完全有能力让计算机识别出图像具体内容。而图像的风格是一种很抽象的东西,人眼能够很有效地的辨别出不同画家不同流派绘画的风格,而在计算机的眼中,本质上就是一些像素,多层网络的实质其实就是找出更复杂、更内在的特性(features),所以图像的风格理论上可以通过多层网络来提取图像里面可能含有的一些有意思的特征。

根据一篇论文中提出的方法,风格迁移的速度非常慢的。在风格迁移过程中,把生成图片的过程当做一个“训练”的过程。每生成一张图片,都相当于要训练一次模型,这中间可能会迭代几百几千次。从头训练一个模型相对于执行一个已经训练好的模型来说相当费时。现在根据前面第二篇论文提出的另一种模型,使得把生成图片当做一个“执行”的过程,而不是一个“训练”的过程。

快速风格迁移的网络结构包含两个部分。一个是“生成网络”(Image Transform Net),一个是“损失网络”(Loss Network)。生成网络输入层接收一个输入图片,最终输出层输出也是一张图片(即风格转换后的结果)。模型总体分为两个阶段,训练阶段和执行阶段。模型如图所示。 其中左侧是生成网络,右侧为损失网络。

训练阶段:选定一张风格图片。训练过程中,将数据集中的图片输入网络,生成网络生成结果图片y,损失网络提取图像的特征图,将生成图片y分别与目标风格图片ys和目标输入图片(内容图片)yc做损失计算,根据损失值来调整生成网络的权值,通过最小化损失值来达到目标效果。

执行阶段:给定一张图片,将其输入已经训练好的生成网络,输出这张图片风格转换后的结果。

为了获得输入图像风格的表示,使用了一种最初设计用来捕捉纹理信息的特征空间(feature space)。这个特征空间是在网络的每一层的滤波器(filters)的响应之上构建的,它包含了不同的过滤器响应在特征图(feature maps)的空间范围内的相关性(见方法细节)。通过包含多个层的特征关联, 获得了一个静态的、多层的输入图像的风格表达,它捕捉了图像的纹理信息,而不是全局的排列。

1.3.2生成网络

 

  对于生成网络,本质上是一个卷积神经网络,这里的生成网络是一个深度残差网络,不用任何的池化层,取而代之的是用步幅卷积或微步幅卷积做网络内的上采样或者下采样。这里的神经网络有五个残差块组成。除了最末的输出层以外,所有的非残差卷积层都跟着一个空间性的instance-normalization,和RELU的非线性层,instance-normalization正则化是用来防止过拟合的。最末层使用一个缩放的Tanh来确保输出图像的像素在[0,255]之间。除开第一个和最后一个层用9x9的卷积核(kernel),其他所有卷积层都用3x3的卷积核。

1.3.3损失网络

  损失网络φ是能定义一个内容损失(content loss)和一个风格损失(style loss),分别衡量内容和风格上的差距。对于每一张输入的图片x我们有一个内容目标yc一个风格目标ys,对于风格转换,内容目标yc是输入图像x,输出图像y,应该把风格ys结合到内容x=yc上。系统为每一个目标风格训练一个网络。

为了明确逐像素损失函数的缺点,并确保所用到的损失函数能更好的衡量图片感知及语义上的差距,需要使用一个预先训练好用于图像分类的CNN,这个CNN已经学会感知和语义信息编码,这正是图像风格转换系统的损失函数中需要做的。所以使用了一个预训练好用于图像分类的网络φ,来定义系统的损失函数。之后使用同样是深度卷积网络的损失函数来训练我们的深度卷积转换网络。

这里的损失网络虽然也是卷积神经网络(CNN),但是参数不做更新,只用来做内容损失和风格损失的计算,训练更新的是前面的生成网络的权值参数。所以从整个网络结构上来看输入图像通过生成网络得到转换的图像,然后计算对应的损失,整个网络通过最小化这个损失去不断更新前面的生成网络权值

1.3.4感知损失

对于求损失的过程,不用逐像素求差构造损失函数,转而使用感知损失函数,从预训练好的损失网络中提取高级特征。在训练的过程中,感知损失函数比逐像素损失函数更适合用来衡量图像之间的相似程度。

(1)内容损失

上面提到的论文中设计了两个感知损失函数,用来衡量两张图片之间高级的感知及语义差别。内容的损失计算用VGG计算来高级特征(内容)表示,因为VGG模型本来是用于图像分类的,所以一个训练好的VGG模型可以有效的提取图像的高级特征(内容)。计算的公式如下:

找到一个图像 y使较低的层的特征损失最小,往往能产生在视觉上和y不太能区分的图像,如果用高层来重建,内容和全局结构会被保留,但是颜色纹理和精确的形状不复存在。用一个特征损失来训练我们的图像转换网络能让输出非常接近目标图像y,但并不是让他们做到完全的匹配

(2)风格损失

内容损失惩罚了输出的图像(当它偏离了目标y时),所以同样的,我们也希望对输出的图像去惩罚风格上的偏离:颜色,纹理,共同的模式,等方面。为了达成这样的效果,一些研究人员等人提出了一种风格重建的损失函数:让φj(x)代表网络φ的第j层,输入是x。特征图谱的形状就是Cj x Hj x Wj、定义矩阵Gj(x)为Cj x Cj矩阵(特征矩阵)其中的元素来自于:

如果把φj(x)理解成一个Cj维度的特征,每个特征的尺寸是Hj x Wj,那么上式左边Gj(x)就是与Cj维的非中心的协方差成比例。每一个网格位置都可以当做一个独立的样本。这因此能抓住是哪个特征能带动其他的信息。梯度矩阵可以很高效的计算,通过调整φj(x)的形状为一个矩阵ψ,形状为Cj x HjWj,然后Gj(x)就是ψψT/CjHjWj。风格重建的损失是定义的很好的,甚至当输出和目标有不同的尺寸是,因为有了梯度矩阵,所以两者会被调整到相同的形状。

cnn图像风格转换原理论文整理(一)相关推荐

  1. 计算机视觉系列-图像风格转换

    计算机视觉系列-图像风格转换 目录 图像风格转换论文 论文链接 图像风格转换网络 论文复现代码 运行结果 图像风格转换论文 以不同的方式呈现图像的语义内容样式是图像处理中的一个难点.以前方法的限制因素 ...

  2. 基于深度学习的图像风格转换

    距离上次写博客已经好久好久好久了,真是懈怠的生活节奏,整天混吃等死玩游戏,前些日子做毕业设计时总算又学了点新东西.学了一点深度学习和卷积神经网络的知识,附带着详细学习了一下前段时间我觉得比较有意思的图 ...

  3. 每周「Paper + Code」清单:句子嵌入,文本表示,图像风格转换

    在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后的探索和思考. 在这个栏目里,你会快速 get 每篇精选论文的亮点和痛点,时刻紧跟 AI 前沿成果. 点击本文底部的「阅读原文」即刻加入社区 ...

  4. 【图像风格转换】项目参考资料总结

    实现图像风格转换.神经风格图像的一些资料和实现. 1.原理篇 A.A Neural Algorithm of Artistic Style,风格迁移开山之作实现,对将固定风格迁移到固定内容上: B.P ...

  5. PyTorch 1.0 中文官方教程:使用 PyTorch 进行图像风格转换

    译者:bdqfork 作者: Alexis Jacq 简介 本教程主要讲解如何实现由Leon A. Gatys,Alexander S. Ecker和Matthias Bethge提出的 Neural ...

  6. (二)快速图像风格转换

    快速图像风格迁移是在"原始"图像风格迁移基础上的一种"高效"转换方案. [github传送门]https://github.com/hzy46/fast-neu ...

  7. 基于paddlehub的图像风格转换

    基于paddlehub的图像风格转换 产生背景 模型概述 安装模型版本 代码实现 效果展示 作为宝可梦迷,先展示一波最爱的皮卡丘 玩图片嘛,少不了特朗普 换个风格试试? 我们对风景图试试看效果吧~ 个 ...

  8. 深度学习-卷积神经网络实现图像风格转换

    盛夏,闲鱼式的生活也越发充满味道.烈日,在高高的天上散发着火炉的气息.小浪怀念着在海边度假的日子,但是内心的使命感把他拉回了现实. 卷积神经网络可以实现图像风格的转换.小浪也来写个程序,实现下这个功能 ...

  9. Notebook系列第10期:图像风格转换

    Part 01:课程准备 打开Notebook,来到第212分享章节中,这里已经为大家准备好了图像风格转换的应用. 图像风格转换,顾名思义,就是输入一张标准的图片,模型会自动为我们将其转化为不同的风格 ...

  10. 调用百度API实现图像风格转换

    目录 1.作者介绍 2.基本概念 2.1 人工智能云服务与百度智能云 2.2 图像风格转换 3.调用百度API实现图像风格转换 3.1 配置百度智能云平台 3.2 环境配置 3.3 完整代码实现 3. ...

最新文章

  1. active set + serving cell
  2. shell 脚本 文件夹扫描获取文件
  3. stm32中用到的实时系统_适合STM32的三大嵌入式操作系统。
  4. 《转》八大算法详细讲解
  5. STM32 基础系列教程 21 - NVIC
  6. nginx(No such file or directory与invalid PID number)
  7. optee:kernel space调用user space进程时候的硬件行为
  8. 你对Java网络编程了解的如何?Java NIO 网络编程 | Netty前期知识(二)
  9. (十)boost库之多线程
  10. java timezone id_java.util.TimeZone.setID()方法实例
  11. Jupyter notebook应用总结
  12. python 返回函数 闭包_python中闭包Closure函数作为返回值的方法示例
  13. 《剑指offer》面试题18——树的子结构(C++)
  14. 学计算机专业工作总结,计算机专业学生个人实习工作总结范文
  15. android 离线音乐播放器,5款顶级Android离线音乐播放器,哪款才是你的菜?
  16. chrome浏览器升级导致无法手动设置cookie,设置无法保存
  17. 软件研发落地实践,要从设计就开始
  18. 粗糙集理解之一:基本概念
  19. ----已搬运----【总章程】SSRF完全学习,,什么都有,,,原理,绕过,攻击
  20. python身份证号码共18位_18位身份证校验

热门文章

  1. 计算机主机的拆卸的注意事项,拆解笔记本注意事项及技巧!
  2. Nginx反向代理(解决纯前端项目部署到服务器上无法访问接口数据)
  3. 2011黑帽大会:由黑客操控的世界
  4. DevOps - (1)Terraform+阿里云实现云资源的CI/CD
  5. 计算机有哪些知识,电脑基本操作知识有哪些
  6. X61的intel wireless 3945abg 不再掉线了
  7. 刘元普双生贵子(但行好事,莫问前程)
  8. Android Dialog之间的层级设置(WindowManager.LayoutParams)
  9. vscode 使用beautify插件格式化.vue文件
  10. Android 替换应用内so文件避免每次都要重新打包的麻烦