江ノ島を描く ~Neural Style~ [TensorFlowでDeep Learning 14]

([目次はこちら](http://qiita.com/kumonkumon/items/6fd05963df92e9eec8c0))

# はじめに

Deep Learning / Deep Neural Networksの人気と有用性の高さから、GPUが必須の時代となりました。

AWS EC2のp2インスタンスをよく使いますがやっぱり高い。潤沢にインスタンスの在庫があるわけではなさそうなので、スポットインスタンスも実質使えない。

でも、CPUのインスタンスでは時間がもったいない。なので仕方なく、多くの人がオンデマンドで使っているのかと思います。

クリスマス前から年明けまで1週間PCに全く触れずにいましたが、ふと、スポットインスタンスの価格を見てみると、p2インスタンスだけ、顕著な変化が！安定して安い！（$0.25/h）

![image.png](https://qiita-image-store.s3.amazonaws.com/0/127038/ee23ad98-b1cb-fb6d-fe32-cf63134259be.png)

これは、p2インスタンスをサービスに使っているのではなく、いろいろと実験的に何かを学習させているということなんでしょう。

せっかくなので、何かをやろうと思い、いまさらですが、Neural Styleを。

# Neural Styleとは??
[A Neural Algorithm of Artistic Style](https://arxiv.org/abs/1508.06576) というタイトルの論文で発表された、画風を置き換えるアルゴリズムで、 [CVPR2016](http://cvpr2016.thecvf.com/) でも、[Image Style Transfer Using Convolutional Neural Networks](http://www.cv-foundation.org/openaccess/content_cvpr_2016/html/Gatys_Image_Style_Transfer_CVPR_2016_paper.html) として発表されています。

CNNのパラメータを固定して、入力画像側の値を調整するという面白い発想。

その出力の面白さから、[DEEPART.io](https://deepart.io/) や、[Prisma](http://prisma-ai.com/) やら、で使われているようです。

僕の、素朴なアイコンが、アートになります。

|Original|Output1|Output2|Output3|
|:----:|:----:|:----:|:----:|
|![me.png](https://qiita-image-store.s3.amazonaws.com/0/127038/49bc1c1a-2e78-513a-0d06-587666a0fe23.png)|![o74hqwl26eyswgxf.jpeg](https://qiita-image-store.s3.amazonaws.com/0/127038/b61e9305-2836-8e7f-7578-2e9366803985.jpeg)|![iwhxczteglnrnudb.jpeg](https://qiita-image-store.s3.amazonaws.com/0/127038/4601a894-5a94-eab1-6b30-2eb7efd1c64f.jpeg)|![3njso9avqiohuaw1.jpeg](https://qiita-image-store.s3.amazonaws.com/0/127038/c8599c5d-a1ee-8d2f-2d7e-59563bcc076e.jpeg)|

# Neural Style in Tensorflow

Neural StyleのTensorflowでの実装はこちらに。
https://github.com/anishathalye/neural-style

高速化された実装はこちら、
https://github.com/lengstrom/fast-style-transfer
で、CPUでも、数秒で結果が得られるのは素晴らしい。
ですが、事前にstyleの学習が必要（結構時間かかる）なので、前者を使う。

# Christian Riese Lassen が描く江ノ島
ラッセンに江ノ島を描いてもらうことにしました。

|Original|Output1|Output2|Output3|
|:----:|:----:|:----:|:----:|
|![eno_c2.jpg](https://qiita-image-store.s3.amazonaws.com/0/127038/25eb7e1f-b77a-2043-522a-ebee221e1aff.jpeg)|![eno2000.jpg](https://qiita-image-store.s3.amazonaws.com/0/127038/66d3fe88-8bd1-d64d-f770-61b8917dfc3b.jpeg)|![eno2_2000.jpg](https://qiita-image-store.s3.amazonaws.com/0/127038/36394411-03fb-3459-22e2-8943e5715f1c.jpeg)|![eno3_1000.jpg](https://qiita-image-store.s3.amazonaws.com/0/127038/4da35316-2c9f-3bf3-3121-2d962c36d92d.jpeg)|

波の感じとか、江ノ島の高さの空の感じとかはとても素敵。

styleとの相性があるのだろうか、Output1とOutput2では、元画像で、のっぺりとした部分（空と浜辺）がうまく表現できていない。

カテゴリ認識を目的としたCNNでは微分値がゼロに近い部分では、情報がないものとして扱われるような気がするので、それが影響しているのだろうか。

# Claude Monet が描く江ノ島
せっかくなので、モネにも江ノ島を描いてもらうことにしました。

|Original|Style|Output|
|:----:|:----:|:----:|
|![eno_c2.jpg](https://qiita-image-store.s3.amazonaws.com/0/127038/25eb7e1f-b77a-2043-522a-ebee221e1aff.jpeg)|![mone2.jpg](https://qiita-image-store.s3.amazonaws.com/0/127038/bc1826d4-f601-a2a5-9cea-8498cfeaac01.jpeg)|![eno4_800.jpg](https://qiita-image-store.s3.amazonaws.com/0/127038/bb8b7066-2a16-87e4-05f4-d74388e2cff2.jpeg)

モネだ！
やっぱり、のっぺりとした部分がイマイチ。

# あとがき

他にもいろいろと試しましたが、話題性が高いのが非常によくわかる。とても面白い。
今回、のっぺりとした部分に課題があったように、常に想像通りの出力が得られるわけではないので、今後も面白い研究が進んで行くことに期待します。