LoginSignup
3
3

More than 3 years have passed since last update.

平成最後の日に我が家の猫ちゃんを変身させます。

Posted at

はじめに

最初にご報告があります。我が家の猫ちゃんは非常に可愛いです!!!普段もよく写真を撮っています。
neko.jpg

そして今日、平成最後の日において、この子に関する記事を書こうと思いました。

ということで、今回は我が家の猫ちゃんの写真で遊べるNeural Style Transfer(NST)について記事を書きます。

あくまでも個人の趣味なので、間違いがあったらご容赦ください。

NSTの歴史

調べてみたところ、Qiita上にすでにDeNA社のエンジニアによる素晴らしいまとめ記事が存在します。非常にわかりやすく書いてあります。良かったらチェックしてみてください。

NSTの発展はGatys et al.から始まり、キーアイディアは、pre-trainedの画像認識用の内部のConv層の出力であるfeature mapの統計情報(平均、分散など)が画像の画風を表現できるということです。

最初はoptimizationベースの手法が多いでしたが、その後、Feed-forward networkを生成器として使った研究が主流となりました。その中の代表的な手法とそれらの説明はDeNA社の記事に書いてあるので、ここでは詳しく比較しません。

今回はその中で割と簡単なAdainを実装したので、ここでは簡単に補足説明します。

Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization

この手法はAdaptive instance normalization/Adainを使うのが特徴です。Adainを理解するには、まずInstance normalizationを理解しなければなりません。

しばしば, Instance normalizationとBatch normalizationがよく比較されますが、一体どういう違いがあるでしょう?

一般的なCNNの中間層の出力を考えます。そのサイズは(b, c, h, w)としましょう。では各Normalization手法はどういうところで正規化し、どういう平均と分散が得られるかをまとめてみましょう。

  • BN

    • (b, c, h, w)のb, h, wに対し、平均と分散を計算します。
    • shape=cの平均と分散のベクトルが得られます。
  • IN

    • (b, c, h, w)のh, wに対し、平均と分散を計算します。
    • shape = (b, c)の平均と分散の行列が得られます。
  • LN(ついでにLayer Normalizationも説明しましょう)

    • (b, c, h, w)のc, h, wに対し、平均と分散を計算します。
    • shape = bの平均と分散のベクトルが得られます。

この論文の提案手法は何をしたかというと、真ん中にAdain層が存在するVGGベースのAutoEncoderを学習させます。Conten画像とStyle画像をそれぞれEncoderに入力して、ここでは、それぞれの出力のfeature mapをC_feature, S_featureと呼びましょう。それぞれに対して、IN手法のように、C_featureとS_featureの平均と分散を計算します。最後に、C_featureをC_featureの平均と分散で正規化して、S_featureの平均と分散で逆正規化します。言い換えると、C_featureの平均と分散をS_featureのものに変えます。なぜかというと、Gatys et al. による、feature mapの統計情報が画風を表せるという理由からです。

元論文の実装はTorchでやってましたが、今回はAdainをPytorchで一から実装しました。CodeはGithub上に載せておきます。よろしければチェックして、スターをください。

結果

結果図をいくつか載せておきます。また、画風の具合を調整する機能も実装したのですが、よろしければぜひそれも試してください。

res1.gif

res3.gif
res6.gif

まあまあって感じですかね。

我が家の猫ちゃんはどうなるの?

さて、本題に入りますが、今回のお遊びは我が家の猫ちゃんを他のスタイルの猫ちゃんに変えることなので、一体どうなるでしょう?

neko_antimonocromatismo_demo.jpg

neko_antimonocromatismo_demo.jpg
neko_contrast_of_forms_demo.jpg
neko_sketch_demo.jpg
neko_mondrian_demo.jpg
neko_hosi_demo.jpg

画風の定義が難しいと思いますが、まあまあできているからいいやと思いました。

ということで、もし面白い画風の画像があったら、連絡していただきたいですね。何ができるか気になります。

これから

一応、DeNA社の記事を沿って、とUniversal Style Transfer via Feature TransformsFast Patch-based Style Transfer of Arbitrary StyleAvatar-Net: Multi-scale Zero-shot Style Transfer by Feature Decorationも実装していくつもりです。興味のある方は私に声をかけてください。仲間も大歓迎です。一緒に遊びましょう。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3