作为一个脱离了低级趣味的码农,春节假期闲来无事,决定做一些有意思的事情打发时间,碰巧看到这篇论文: 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_1conv4_1conv5_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层示意图:

那么,迭代10万次是什么样子的呢?

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

【迭代10万次】

画面朝着两极化趋势发展,灰色区域更加暗淡,彩色区域更加明亮,两者之间的界限更加分明,失去了过渡。

【原创】梵高油画用深度卷积神经网络迭代10万次是什么效果? A neural style of convolutional neural networks的更多相关文章

  1. 【原创】梵高油画用深度卷积神经网络迭代十万次是什么效果? A neural style of convolutional neural networks

    作为一个脱离了低级趣味的码农,春节假期闲来无事,决定做一些有意思的事情打发时间,碰巧看到这篇论文: A neural style of convolutional neural networks,译作 ...

  2. DeepLearning.ai学习笔记(四)卷积神经网络 -- week2深度卷积神经网络 实例探究

    一.为什么要进行实例探究? 通过他人的实例可以更好的理解如何构建卷积神经网络,本周课程主要会介绍如下网络 LeNet-5 AlexNet VGG ResNet (有152层) Inception 二. ...

  3. [DeeplearningAI笔记]卷积神经网络3.10候选区域region proposals与R-CNN

    4.3目标检测 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.10 region proposals候选区域与R-CNN 基于滑动窗口的目标检测算法将原始图片分割成小的样本图片,并传入分 ...

  4. 优化基于FPGA的深度卷积神经网络的加速器设计

    英文论文链接:http://cadlab.cs.ucla.edu/~cong/slides/fpga2015_chen.pdf 翻译:卜居 转载请注明出处:http://blog.csdn.net/k ...

  5. 基于theano的深度卷积神经网络

    使用了两个卷积层.一个全连接层和一个softmax分类器. 在测试数据集上正确率可以达到99.22%. 代码参考了neural-networks-and-deep-learning #coding:u ...

  6. 深度卷积神经网络用于图像缩放Image Scaling using Deep Convolutional Neural Networks

    This past summer I interned at Flipboard in Palo Alto, California. I worked on machine learning base ...

  7. Deep Learning 19_深度学习UFLDL教程:Convolutional Neural Network_Exercise(斯坦福大学深度学习教程)

    理论知识:Optimization: Stochastic Gradient Descent和Convolutional Neural Network CNN卷积神经网络推导和实现.Deep lear ...

  8. 深度学习——卷积神经网络 的经典网络(LeNet-5、AlexNet、ZFNet、VGG-16、GoogLeNet、ResNet)

    一.CNN卷积神经网络的经典网络综述 下面图片参照博客:http://blog.csdn.net/cyh_24/article/details/51440344 二.LeNet-5网络 输入尺寸:32 ...

  9. 深度学习之卷积神经网络(CNN)详解与代码实现(二)

    用Tensorflow实现卷积神经网络(CNN) 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10737065. ...

随机推荐

  1. SQLSERVER 分区表实战

    背景:对NEWISS数据库创建分区表T_SALES的SQL.按照日期来进行分区步骤:1:创建文件组2:创建数据文件3:创建分区函数4:创建分区方案5:创建表及聚集索引6:导入测试数据(此处略),并查询 ...

  2. YYYY-mm-dd HH:MM:SS大小写解释

    d               月中的某一天.一位数的日期没有前导零.    dd             月中的某一天.一位数的日期有一个前导零.    ddd           周中某天的缩写名 ...

  3. systemd 之 journalctl

    Systemd 日志系统 一.前言 昨天写了一篇文章,内容为:Systemd 常规操作与彩蛋,参考了 ArchLinux 官方文档并结合培训中的思路进行了部分修改补充.如果你懂得了基础的管理,那必然还 ...

  4. Vue以CDN方式调用Swiper轮播异常

    问题概览: 有一个小型单页应用项目,嫌用组件式调用vue-swiper麻烦,因此以CDN的方式调用swiper,结果轮播的图不动了! 爬了半天百度和谷歌都无解决方案,最后曲线救国的方式解决了问题. 解 ...

  5. DevExpress12、DocumentManager

    DocumentManager控件 你用过Photoshop吗?里面每打开一个照片,就有一个小窗体承载这个照片,你可以在这些小窗体间切换,最小化.最大化.排列窗体, 这些操作都在Photoshop的大 ...

  6. beta冲刺————第三天(3/5)

    完善的具体内容: 前端: (1)可以进行修改文字大小背景 其中,金色的文字个人觉得很好看,点赞.(我很满意啊) (2)可以改变成夜间模式(也很不错啊) 后端: 尝试将本地的后端war文件,以及数据库传 ...

  7. PyQt5--QCheckBox

    1 # -*- coding:utf-8 -*- ''' Created on Sep 20, 2018 @author: SaShuangYiBing Comment: ''' import sys ...

  8. ModuleNotFoundError No module named urllib2

    ModuleNotFoundError No module named urllib2?那么在进行编辑的来进行代码上开发,那就会出现的来代码的上错误,也是版本的上差异导致的问题.   工具/原料   ...

  9. 将替代ListView的RecyclerView 的使用(一)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/by317966834/article/details/36205923 RecyclerView 是 ...

  10. 【[AHOI2013]差异】

    这个题一看就是为后缀家族设计的 我们看到我们要求的这个柿子 \[\sum_{i=1}^n\sum_{j=i+1}^nT_i+T_j-2\times lcp(T_i,T_j)\] 显然的是前面的那些东西 ...