neural style论文解读
相关的代码都在Github上,请参见我的Github,https://github.com/lijingpeng/deep-learning-notes
敬请多多关注哈~~~
概述
在艺术领域,艺术家可以通过风格和内容的相互交融来创作不同的画作,现阶段,在深度神经网络的帮助下,计算机可以轻易的识别画作中的物体或者内容。但是,风格是一个比较抽样的概念,计算机其实无法像人类那样识别一个画作或者艺术家的风格。这篇文章主要介绍深度神经网络将画作中的风格和内容本身进行分离,并将风格做迁移,应用到另一个图片内容之中,最终达到一个风格迁移的工作。其实这很像Photoshop中的滤镜,然而滤镜毕竟是人为设定好的一系列动作处理集合,只能针对特定风格的图片,对于不同特征的图片,需要选择不同的滤镜,因此是比较机械和人工的。
卷积神经网络在图像识别领域应用广泛,并且实践证明有很好的效果。它通过一个多层的网络结构来对图像进行特征表达,如果我们把输入图像称之为网络的底层,则随着网络层次的加深,高层的网络关注图片的高级特征,例如图像的内容或者物体的排列,而底层的信息则重点关注图像像素级别的特征。为了将图像的风格和内容分离并进行迁移,我们需要做两部分工作:
- 图像内容的重建
- 风格的重建
同时在合成是要同时考虑内容重建造成的loss和风格重建造成的loss。
内容重建
内容重建和风格重建都使用了VGG网络,VGG-16的网络结构图参见下图,详情图来自于这里.
对于内容重建来说,只使用了前5层的网络‘conv1 1’ (a), ‘conv2 1’ (b), ‘conv3 1’ (c), ‘conv4 1’ (d) and ‘conv5 1’ (e),即图2中的a、b、c、d、e。VGG 网络主要用来做内容识别,在实践中作者发现,使用前三层a、b、c已经能够达到比较好的内容重建工作,d、e两层保留了一些比较高层的特征,丢失了一些细节。
风格重建
与内容重建有所区别的是,作者使用各个卷基层的组合来进行重建,具体使用的网络结构如下:
- ‘conv1_1’ (a)
- ‘conv1_1’ and ‘conv2_1’ (b)
- ‘conv1_1’, ‘conv2_1’ and ‘conv3_1’ (c)
- ‘conv1_1’, ‘conv2_1’, ‘conv3_1’ and ‘conv4_1’ (d)
- ‘conv1_1’, ‘conv2_1’, ‘conv3_1’, ‘conv4_1’
and ‘conv5_1’ (e)
这样构建的网络能够识别图像的风格信息,而忽略图像中的内容。
风格与内容的权衡
这篇文章的主要发现是我们可以通过CNN将图像的内容和风格进行分离,然后通过和其他图像内容、风格的重组来创作风格迁移的图像。
当然,风格和内容并不是完全可以分离开的,在图像的分离和重建时,我们要权衡更看重内容重建还是风格的重建,如果注重风格重建,则新生成的图像风格上会更符合我们的要求,但是内容上可能丢弃的内容比较多。同理,如果注重内容重建,则新的图像内容上是清晰可辨识的,但是风格上可能达不到我们的要求。图3是权衡风格和内容不同的比例得到的结果:

图3中,从第一列到第四列风格与内容的权重比例由高到低,第一列表示我们更看重风格,可以看到,我们看到的图像基本就是艺术风格,根本分不清建筑物,随着比例由高到低,建筑物逐渐变得清晰起来,第五列基本达到了我们想要的效果。
Methods
实践中发现,使用average pooling比max pooling效果要好一点。具体来说,对于内容重建和风格重建,分别构建Loss。对于内容重建来说,利用一张白噪音图片去拟合原始图像中的内容,定义Loss为:
其中F为白噪音图像在L层的数据表示,P为原始数据在L层的表示,Loss为square loss。
对于风格重建,和Content Loss类似,不过如之前讨论,最后的Loss是之前各层的Loss之和。
其中G为白噪音图像在L层的数据表示,A为原始数据在L层的表示。
最后,为了将图像风格和内容进行迁移,我们定义最后的Loss为Content loss 和 style loss之和,权重分别为alpha何beta,如公式3所示:
neural style论文解读的更多相关文章
- Neural Style论文笔记+源码解析
引言 前面在Ubuntu16.04+GTX1080配置TensorFlow并实现图像风格转换中介绍了TensorFlow的配置过程,以及运用TensorFlow实现图像风格转换,主要是使用了文章A N ...
- ImageNet Classification with Deep Convolutional Neural Networks 论文解读
这个论文应该算是把深度学习应用到图片识别(ILSVRC,ImageNet large-scale Visual Recognition Challenge)上的具有重大意义的一篇文章.因为在之前,人们 ...
- NIPS2018最佳论文解读:Neural Ordinary Differential Equations
NIPS2018最佳论文解读:Neural Ordinary Differential Equations 雷锋网2019-01-10 23:32 雷锋网 AI 科技评论按,不久前,NeurI ...
- 注意力论文解读(1) | Non-local Neural Network | CVPR2018 | 已复现
文章转自微信公众号:[机器学习炼丹术] 参考目录: 目录 0 概述 1 主要内容 1.1 Non local的优势 1.2 pytorch复现 1.3 代码解读 1.4 论文解读 2 总结 论文名称: ...
- 论文解读(KP-GNN)《How Powerful are K-hop Message Passing Graph Neural Networks》
论文信息 论文标题:How Powerful are K-hop Message Passing Graph Neural Networks论文作者:Jiarui Feng, Yixin Chen, ...
- 论文解读(DAGNN)《Towards Deeper Graph Neural Networks》
论文信息 论文标题:Towards Deeper Graph Neural Networks论文作者:Meng Liu, Hongyang Gao, Shuiwang Ji论文来源:2020, KDD ...
- 论文解读(LA-GNN)《Local Augmentation for Graph Neural Networks》
论文信息 论文标题:Local Augmentation for Graph Neural Networks论文作者:Songtao Liu, Hanze Dong, Lanqing Li, Ting ...
- 论文解读(GraphSMOTE)《GraphSMOTE: Imbalanced Node Classification on Graphs with Graph Neural Networks》
论文信息 论文标题:GraphSMOTE: Imbalanced Node Classification on Graphs with Graph Neural Networks论文作者:Tianxi ...
- 论文解读(soft-mask GNN)《Soft-mask: Adaptive Substructure Extractions for Graph Neural Networks》
论文信息 论文标题:Soft-mask: Adaptive Substructure Extractions for Graph Neural Networks论文作者:Mingqi Yang, Ya ...
随机推荐
- Linux常用命令之 查找命令 find(一)
我们都知道在Linux中有着上千条的命令,而常用命令不过百条. 我们也知道在Linux里面“一切皆文件”,那么如何能够快速的找到你想要找的东西就显得尤为重要. find是Linux里面最重要的命令之一 ...
- Keil IDE指南.
Keil IDE指南(转载) 熟悉Keil C 51的朋友对于Keil MDK上手应该比较容易,毕竟界面是很像的.但ARM内核毕竟不同于51内核,因此无论在设置上还是在编程思想上,都需要下番功夫研究的 ...
- PropertyGird( 属性表格) 组件
本节课重点了解 EasyUI 中 PropertyGird(属性表格)组件的使用方法,这个组件依赖于 DataGrid(数据表格)组件. 一. 加载方式 //class 加载方式<table i ...
- Js遍历Josn对象(内容对比页实现思路)
更好的遍历Josn的方法,利用jquery的each方法: var arr1 = [ "one", "two", "three", &quo ...
- eclipse频繁崩溃退出
1.出现下面的崩溃情况,并且改变内存大小都没有用,而且总是生成下面两个错误日志文件: 解决: 在eclipse.ini文件里面添加一行 -XX:-UseLoopPredicate 2.eclipse崩 ...
- Android开发:碎片Fragment完全解析fragment_main.xml/activity_main.xml
Android开发:碎片Fragment完全解析 为了让界面可以在平板上更好地展示,Android在3.0版本引入了Fragment(碎片)功能,它非常类似于Activity,可以像 Activi ...
- poj 1080 dp
基因配对 给出俩基因链和配对的值 求配对值得最大值 简单dp #include<iostream> #include<stdio.h> #include<string ...
- POJ3484 Showstopper (二分+字符串处理)
POJ3484 Showstopper 题目大意: 每次给出三个数x,y,z,用这三个数构成一个等差数列,x为首项,y是末项,z是公差 总共给出n组x,y,z( n待定),求这n组数列中出现次数为奇数 ...
- 类 this指针 const成员函数
C++ Primer 第07章 类 7.1.2 Sales_data类的定义如下: #ifndef SALES_DATA_H #define SALES_DATA_H #include <st ...
- javascript各种专业名词
刚开始学javascript经常看到各种专业名词,在此整理一下个人的学习笔记: 直接量 直接量——就是程序中直接使用的数据值,如:88 //数字(String)"hello world ...