机器学习小项目(1)图片风格转移

简介

这学期开始上《机器学习》相关的课,老师要求每个组都阅读一篇最近发表的关于机器学习的论文,并做展示,其中有很多有趣的小项目,就在这里分享一下。

嗯…作者所在组比较咸鱼,挑选了一篇相对比较简单的论文,但是实际效果还是挺不错的,如下:
《机器学习小项目(1)图片风格转移》 论文中的效果图
《机器学习小项目(1)图片风格转移》 自己测试最终效果

两张用到的参考图片如下:

《机器学习小项目(1)图片风格转移》 内容参考图
《机器学习小项目(1)图片风格转移》 风格参考图

参考

原论文

Image Style Transfer Using Convolutional Neural Networks.pdf

论文分析及代码详解

基本都是参考这篇文章做出来的
知乎 keras示例程序解析(2):图像风格转移

相关知识

深度学习、图像分类入门,从VGG16卷积神经网络开始
如何用简单易懂的例子解释格拉姆矩阵/Gram matrix

VGG网络

先看看网络结构图

《机器学习小项目(1)图片风格转移》 VGG16网络

图中这些啥convolution,maxpooling都是啥啊?

卷积核

《机器学习小项目(1)图片风格转移》 卷积核

可以通俗理解为特征提取的一个模版,一个图像经过这个卷积核之后便能提取出只包含对应特征的图像。
注意不要忘了后面还接上了一个ReLU函数,用来引入非线性。

Max Pooling

《机器学习小项目(1)图片风格转移》 池化

很多翻译把这个称为池化… 感觉很不靠谱。在这里起到的是进一步缩小图片尺寸的作用。

结构

《机器学习小项目(1)图片风格转移》 VGG16网络

比较令人困惑的一点就是224*224*3到224*224*64,为什么图片数量(厚度)增多了?这是怎么实现的?

这个问题可以追溯到LeNet这个比较早的模型,同样的问题出现在了S2到C3这里,其解释可以参考

卷积神经网络 LeNet-5各层参数详解,C3里的图层是对S2各图层的组合,也就是说,将原有特征图层混合成了新的特征图层。即C3有16个通道,每个通道都和上一步的6个通道相连接,由6个通道的组合构成新的通道。在图中,可以想象这个卷积核是可以穿透各个层的。

《机器学习小项目(1)图片风格转移》 LeNet

如图,每个卷积核也是有3个channel的。这里是输出了一个8*8*1的图像,像上面的LeNet一样输出16个channel的话,就用16个5*5*3的卷积核就好啦。

《机器学习小项目(1)图片风格转移》

内容处理

本部分建议参考对应代码及解析
Keras:neural_style_transfer.py
知乎 keras示例程序解析(2):图像风格转移

提取

《机器学习小项目(1)图片风格转移》 CNN

内容就是采用CNN的某一层或者某几层来表示,层级越高,表示就越抽象。如图,低层的响应是纹理和细节的相应,高层的响应是语义信息的响应。

训练

这里是本论文一个新颖的地方,平常接触到的都是给一堆图片,训练CNN的参数;在这里则是给一个经过ImageNet训练好的CNN(训练好代表它已经可以提取生活中常见的物体的特征),反过来训练出一个图片。训练的是什么参数呢?

《机器学习小项目(1)图片风格转移》 内容损失

p: 原始内容图片
x: 生成图片(初始一个白噪声图片)
Pl: 原始图片在CNN中第l层的内容表示(就是某一层网络的输出 详细理解请参考代码)
Fl: 生成图片在CNN中第l层的内容表示
Flij: 第l层第i个filter上位置j处的激活值
其导数为

《机器学习小项目(1)图片风格转移》 内容损失的导数

来对比一下:
传统梯度下降:参数=原参数-学习率*(Loss对参数的导数)更新参数 即可实现Loss减小
这篇论文中:对内容损失求导,更新参数F(F由X得到,即更新X)使得内容损失减小,使得X在内容上越来越趋近于P

风格处理

和内容类似,首先看风格是如何描述的,

《机器学习小项目(1)图片风格转移》 Gramm矩阵

然后对比每一个生成图片的风格G和参考图片风格A的差异E,加权平均每一层的差异得到总的风格损失Lstyle

《机器学习小项目(1)图片风格转移》 风格训练流程

然后训练参数,减小这个损失。

总体流程

《机器学习小项目(1)图片风格转移》 总体流程

实验

这些是论文中提到的一些实验现象。

内容层级的选择

《机器学习小项目(1)图片风格转移》 选择红框中的哪一个作为内容参考对结果有印象

层级越高,内容越抽象,融合度越好

《机器学习小项目(1)图片风格转移》 不同层级的效果

初始化方式的不同

《机器学习小项目(1)图片风格转移》 白噪声初始

待生成图片一开始是什么样的?风格图片、内容图片亦或是白噪声,最终效果都差不多,只是白噪声训练时间可能长一些。

《机器学习小项目(1)图片风格转移》 白噪声初始化的训练

《机器学习小项目(1)图片风格转移》 内容初始化的训练

疑问

这是我在实验过程中遇到的疑问。

图片大小影响

《机器学习小项目(1)图片风格转移》 100*100
《机器学习小项目(1)图片风格转移》 224*224 VGG网络训练时的输入大小
《机器学习小项目(1)图片风格转移》 360*280

可以看出100*100效果最好,然而这个VGG网络不是针对ImageNet 224*224的图片提取特征的吗,效果理应最好啊?

《机器学习小项目(1)图片风格转移》

大概是本来应该在第二层被提取的特征在第一层就被提取,相当于深度增加,而层级越深效果越好,所以100*100的反而最好。

后tu记cao

大概是一个月之前搞的展示了…完成这篇论文的阅读加上实验用了两周,很多不太懂的地方看了代码就比较清楚了。最关键的是效果很有趣,所以网上参考资料很多,别的组选了一些高深的题目,比如3D物体空间位置重构这种东西- -,也就需要自己开荒了。

    原文作者:Seeker_zz
    原文地址: https://www.jianshu.com/p/691a15196e81
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞