[MXnet] Neural Art

作者: ToeKnee | 来源:发表于2016-05-18 13:27 被阅读1150次

    MXnet的学习笔记,这次主要是example中Neural Art相关的内容。

    简介


    MXnet的Demo主要集中在基于CNN的各种网络结构在不同数据集上的实现和效果,也有一些RNN(LSTM)和 auto encoder 的部分。CNN的example里面一个比较有意思的例子是Neural Art,基于A Neural Algorithm of Artistic Style by Leon A. Gatys, Alexander S. Ecker, and Matthias Bethge这篇文章实现的一个提取输入图像的“风格”,并将其赋予另一个输入图像以得到风格化的图像输出。就像这样子

    输入:梵高的“星夜”风格和一张风景图片 输出:“星夜”风的风景图

    网络结构


    文章的网络结构选择的是Oxford Visual Geometry Group 这篇 Very deep convolutional networks for large-scale image recognition 文章中描述的vgg网络。

    vgg继承了LeNet以及AlexNet的一些框架,尤其是跟AlexNet框架非常像,vgg也是5个group的卷积、2层Full Connect图像特征、一层Full Connect分类特征,可以看做和AlexNet一样总共8个part。根据前5个卷积group,每个group中的不同配置,论文中给出了A~E这五种配置

    vgg卷积group不同配置列表

    其中最复杂的配置E(即vgg19,根据论文中所述参数个数达到了1.44亿)在ILSVRC2012分类任务上将top-5的错误率降到了7.3%。

    vgg在ILSVRC-2012的结果,vgg19和vgg16分别获得了一、二名

    MXnet example 中的使用方法


    首先在 ~/mxnet/example/neural-art 文件夹下执行

    ./download.sh
    

    查看download.sh文件可以看到,主要是下载了需要的网络参数vgg19.params以及样例输入图片(style对应的starry_night和content)。

    #!/bin/bash
    
    mkdir -p model
    cd model
    wget https://github.com/dmlc/web-data/raw/master/mxnet/neural-style/model/vgg19.params
    cd ..
    
    mkdir -p input
    cd input
    wget https://github.com/dmlc/web-data/raw/master/mxnet/neural-style/input/IMG_4343.jpg
    wget https://github.com/dmlc/web-data/raw/master/mxnet/neural-style/input/starry_night.jpg
    cd ..
    
    mkdir -p output
    

    然后执行

    python run.py
    

    进行训练。

    可能遇到的问题


    如果MXnet只是刚部署好还没有跑过什么应用的话,可能会出现错误:

    ImportError: No module named skimage
    

    缺少scikit-image包,这时只需要执行

    pip install scikit-image
    

    安装即可。
    还有可能会出现

    ValueError: unknown locale: UTF-8
    

    这时需要在 ~/.bash_profile 中添加以下内容

    export LANG="en_US.UTF-8"
    export LC_COLLATE="en_US.UTF-8"
    export LC_CTYPE="en_US.UTF-8"
    export LC_MESSAGES="en_US.UTF-8"
    export LC_MONETARY="en_US.UTF-8"
    export LC_NUMERIC="en_US.UTF-8"
    export LC_TIME="en_US.UTF-8"
    export LC_ALL=
    

    然后执行

    source ~/.bash_profile
    

    即可。

    训练参数的指定


    由于在自己的MacBook Air上实验,MXnet在安装时就默认没有使用GPU,因此在运行时需要指定参数

    python run.py --gpu -1
    

    表示只使用CPU训练。

    训练效果


    只使用CPU训练大概每次迭代需要35秒左右,根据notebook中的介绍,大概在159次迭代的时候两次迭代之间的差距比例才会小于0.005,得到类似于上面的输出结果。
    由于只是初步测试,因此设定最大迭代次数为10

    python run.py --gpu -1 --max-num-epochs 10
    

    10次迭代后最后两次迭代的相对差距为0.120292,训练结果的话……

    10次迭代的结果

    可见迭代次数还是不够啊!

    后来又跑了一次,设定每次迭代都把生成的图片输出,搞了一个gif看看效果

    python run.py --gpu -1 --save-epochs 1
    
    多次迭代的结果

    最后迭代的效果就还不错看

    第148次的迭代结果

    后续


    目前只是把MXnet中Neural Art的example跑通看了一下,因为example中image classification里面实现了非常多的网络结构,但基本上都是MNIST数据在测试,没有多大意思,于是先试了一下这个看起来比较有意思的示例。
    如果还有后续工作的话,应该就是看看代码吧!粗略瞄了一眼也不是很复杂的样子。

    相关文章

      网友评论

      本文标题:[MXnet] Neural Art

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