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

作者: Seeker_zz | 来源:发表于2017-12-13 23:40 被阅读231次

    简介

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

    嗯…作者所在组比较咸鱼,挑选了一篇相对比较简单的论文,但是实际效果还是挺不错的,如下: 论文中的效果图 自己测试最终效果

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


    内容参考图 风格参考图

    参考

    原论文

    Image Style Transfer Using Convolutional Neural Networks.pdf

    论文分析及代码详解

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

    相关知识

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

    VGG网络

    先看看网络结构图


    VGG16网络

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

    卷积核

    卷积核

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

    Max Pooling

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

    结构

    VGG16网络
    比较令人困惑的一点就是224*224*3到224*224*64,为什么图片数量(厚度)增多了?这是怎么实现的?
    这个问题可以追溯到LeNet这个比较早的模型,同样的问题出现在了S2到C3这里,其解释可以参考
    卷积神经网络 LeNet-5各层参数详解,C3里的图层是对S2各图层的组合,也就是说,将原有特征图层混合成了新的特征图层。
    LeNet

    内容处理

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

    提取

    CNN

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

    训练

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

    内容损失

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


    内容损失的导数

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

    风格处理

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


    Gramm矩阵

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


    风格训练流程
    然后训练参数,减小这个损失。

    总体流程

    总体流程

    实验

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

    内容层级的选择

    选择红框中的哪一个作为内容参考对结果有印象

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


    不同层级的效果

    初始化方式的不同

    白噪声初始

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


    白噪声初始化的训练
    内容初始化的训练

    疑问

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

    图片大小影响

    100*100 224*224 VGG网络训练时的输入大小 360*280

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


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

    后tu记cao

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

    相关文章

      网友评论

      本文标题:机器学习小项目(1)图片风格转移

      本文链接:https://www.haomeiwen.com/subject/ojhtwxtx.html