【原创】梵高油画用深度卷积神经网络迭代十万次是什么效果? A neural style of convolutional neural networks
作为一个脱离了低级趣味的码农,春节假期闲来无事,决定做一些有意思的事情打发时间,碰巧看到这篇论文: A neural style of convolutional neural networks,译作卷积神经网络风格迁移。 这不是“暮光女”克里斯丁的研究方向吗?!连好莱坞女星都开始搞人工智能发paper,真是热的可见一斑!
这篇文章中讲述了如何用深层卷积神经网络来将一张普通的照片转化成一幅艺术风格的画作(比如梵高的星夜),可以看做是DL(deep learning)在NPR(非真实渲染non photography rendering)领域的一次革命(不难想象以后DL这种跨领域的革命会越来越多)。
论文地址:A Neural Algorithm of Artistic Style
项目地址:https://github.com/muyiguangda/neural-style
算法解析
(对算法不感兴趣的童鞋,可以直接跳过这一部分,看最终实验结果)
【总流程】
如上,a有个别名是conv1_1
,b是conv2_1
,依次类推,c,d,e对应conv3_1
,conv4_1
,conv5_1
;输入图片有风格图片style image
和内容图片content image
,输出的是就是合成图片,然后用合成图片为指导训练,但是训练的对象不像是普通的神经网络那样训练权值w
和偏置项b
,而是训练合成图片上的像素点,以达到损失函数不断减少的效果。论文使用的是随机的噪声像素图为初始合成图,但是使用原始图片会快一点。
首先他定义了两个loss,分别表示最终生成的图x和style图a的样式上的loss,以及x和content图p的内容上的loss,α,β是调节两者比例的参数。最终的loss function是两者的加和。通过optimize总的loss求得最终的x。
所用的CNN网络是VGG-19,利用了它16个卷积层和5个pooling层来生成feature。实际指的是Conv+ReLU的复合体。
当然,使用其他pre-trained的model也是完全可以的,比如GoogLet V2,ResNet,VGG16 都是可以的(作者这哪是以VGG19为例)。
【内容损失函数】
- l代表第l层的特征表示,
p
是原始图片,x
是生成图片。 - 假设某一层得到的响应是Fl∈RNl∗Ml,其中Nl为l层filter的个数,Ml为filter的大小。Flij表示的是第l层第i个filter在位置j的输出。
- 公式的含义就是对于每一层,原始图片生成特征图和生成图片的特征图的一一对应做平方差
求内容损失函数梯度下降如下:
【风格损失函数】
F
是生成图片的特征图。上面式子的含义:Gram第i行,第j列的数值等于把生成图在第l
层的第i
个特征图与第j
个特征图分别拉成一维后相乘求和。
- 上面是风格损失函数,
Nl
是指生成图的特征图数量,Ml
是图片宽乘高。a
是指风格图片,x
是指生成图片。G
是生成图的Gram矩阵,A
是风格图的Gram矩阵,wl
是权重。
【总损失】
实验结果
下面是原图,风格图,以及迭代10次,100次,500次,1000次,10000次,10万次的计算结果及分析:
【原图】
原图片如果尺寸过大,导致input层的batch size过大,会大大增加程序计算量(从而延长计算时间),容易引起程序不稳定,而对最终效果并没有明显提升,因此建议把图片尺寸尽量缩小(在像素不失真的前提下),推荐值:800 ppi x 600 ppi.
【风格图】
风格图不需要和内容图尺寸一致。可以适当裁剪,保留风格最突出的部分。
【迭代10次】
由于原始的输入是一张白噪声图片,因此,在迭代次数较少时,仍然没有形成内容图的轮廓。
【迭代100次】
天安门的轮廓初现
【迭代500次】
已经基本接近最终效果,既能看到天安门的形状,又有梵高“星夜”的线条风格和颜色搭配。
【迭代1000次】
500次到1000次,画面构成的变化已经不剧烈,基本趋于平稳。
【迭代500次,重复执行三次】
重复计算了三次,使用相同的图片,相同的卷积神经网络模型,相同的迭代次数(500次),却得到了区别明显的三张结果图。这是非常有意思的地方!
(a) (b) (c)
最近看完一本书,叫《随机漫步的傻瓜》,主要讨论随机性这个概念,随机性中隐藏着不可预测的风险,也蕴含着无限的可能性。没有随机变异,生物进化可能还处在单细胞阶段。
如果计算机只是一个工具,让它解一个方程组,如果已知数确定,计算条件确定,无论计算多少次,结果都是同一个。
这个例子中,结果出现了差异,说明这个系统中一定有随机的成分存在。
机器学习中随机性出现的部分通常如下:1. 训练样本的乱序操作;2. 随机梯度下降;3. 模型随机赋初始值。
本例中还多一条:初始输入的白噪声图像是随机生成的。
【迭代10000次】
可以看到画面右上部分,内容渐渐丢失,呈现灰色化。
推测原因:由于卷积神经网络中的若干pooling层,实际是对图像进行了均值处理,导致了边缘细节的丢失。
pooling层示意图:
那么,迭代100000次是什么样子的呢?
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
【迭代十万次】
画面朝着两极化趋势发展,灰色区域更加暗淡,彩色区域更加明亮,两者之间的界限更加分明,失去了过渡。
【原创】梵高油画用深度卷积神经网络迭代十万次是什么效果? A neural style of convolutional neural networks的更多相关文章
- 【原创】梵高油画用深度卷积神经网络迭代10万次是什么效果? A neural style of convolutional neural networks
作为一个脱离了低级趣味的码农,春节假期闲来无事,决定做一些有意思的事情打发时间,碰巧看到这篇论文: A neural style of convolutional neural networks,译作 ...
- DeepLearning.ai学习笔记(四)卷积神经网络 -- week2深度卷积神经网络 实例探究
一.为什么要进行实例探究? 通过他人的实例可以更好的理解如何构建卷积神经网络,本周课程主要会介绍如下网络 LeNet-5 AlexNet VGG ResNet (有152层) Inception 二. ...
- 优化基于FPGA的深度卷积神经网络的加速器设计
英文论文链接:http://cadlab.cs.ucla.edu/~cong/slides/fpga2015_chen.pdf 翻译:卜居 转载请注明出处:http://blog.csdn.net/k ...
- 基于theano的深度卷积神经网络
使用了两个卷积层.一个全连接层和一个softmax分类器. 在测试数据集上正确率可以达到99.22%. 代码参考了neural-networks-and-deep-learning #coding:u ...
- 深度卷积神经网络用于图像缩放Image Scaling using Deep Convolutional Neural Networks
This past summer I interned at Flipboard in Palo Alto, California. I worked on machine learning base ...
- 深度学习——卷积神经网络 的经典网络(LeNet-5、AlexNet、ZFNet、VGG-16、GoogLeNet、ResNet)
一.CNN卷积神经网络的经典网络综述 下面图片参照博客:http://blog.csdn.net/cyh_24/article/details/51440344 二.LeNet-5网络 输入尺寸:32 ...
- SIGAI深度学习第九集 卷积神经网络3
讲授卷积神经网络面临的挑战包括梯度消失.退化问题,和改进方法包括卷积层.池化层的改进.激活函数.损失函数.网络结构的改 进.残差网络.全卷机网络.多尺度融合.批量归一化等 大纲: 面临的挑战梯度消失问 ...
- Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.2
3.Spark MLlib Deep Learning Convolution Neural Network(深度学习-卷积神经网络)3.2 http://blog.csdn.net/sunbow0 ...
- Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.3
3.Spark MLlib Deep Learning Convolution Neural Network(深度学习-卷积神经网络)3.3 http://blog.csdn.net/sunbow0 ...
随机推荐
- CSS的继承性和层叠性
1.继承性 比不是所有的属性都能继承,只有一些文本的属性才能被继承.比如:color,text-开头的,line-开头的,font-开头的.这几种属性才能被继承. 其余的关于盒子,定位,布局的都不能被 ...
- fixed定位与absolute定位
相同点: 1.fixed定位和absolute定位都是绝对定位 2.fixed定位和absolute定位都脱离了标准文档流, 3.未设置偏移量时,都定位在父元素的左上角 tip:元素设置相对定位或绝对 ...
- ios 中在容器中移除单个控件的两个方法Subview
我们知道[parentView removeFromSuperView]; 会把全部的view都移除.以下我们可以通过给subView设一个tag,然后遍历所有的subView,找到目标subVie ...
- Unity3d之协程自实现测试
using UnityEngine; using System.Collections; public class TestStartCoroutine : MonoBehaviour { IEnum ...
- HAProxy 7层 负载均衡
系统 CentOS 5.8 x64 wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.26.tar.gz cd haproxy-1.3.2 ...
- php --with-mysql=mysqlnd
1.什么是mysqlnd驱动? PHP手册上的描述: MySQL Native Driver is a replacement for the MySQL Client Library (libmys ...
- iOS 简易环形进度条
demo下载地址:https://github.com/haozheMa/LoopProgressDemo/tree/master ViewController中的代码 #import "V ...
- 《玩转Bootstrap(基础)》笔记
基本的HTML模板 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- bzoj 4002: [JLOI2015]有意义的字符串
这个题... #include <bits/stdc++.h> #define rep(i, a, b) for (int i = a; i <= b; i++) #define d ...
- 一个php开发的用于路由器的小功能
最近接到一个需求,假设有A.B.C 三台主机.现A主机要访问C主机上的一个脚本,并且根据A传递的参数给C主机,同时接受C主机返回来的数据.但是现在A主机不能直接通过url.IP访问C主机,需要借由主机 ...