チャイムノート

【機械学習】GPUを使って画風変換で遊ぼう[chainer-gogh]

f:id:chime-n:20190521203714j:plain
 

リベンジの時,来たる.

 

この前,chainer-goghで画風変換をやりましたが,CPUだけでは限界がありました.

今回はGPUを使えたので,より綺麗な画風変換を体験しましょう.

 

前回はこちら

 

 

前回のお話

前回の記事では

・インストール方法

ソースコード書き換え

・実行結果

を書きました.

 

私はGPUを有していないので,前回はCPUでやってみました.

でも,CPUだけではなかなかうまくいかずにほんのり画像が浮き出てくるみたいになってしまいました.

例えばこんな感じです. 

f:id:chime-n:20190520223834p:plain

いや,わからんて.

ちなみに,猫の画像に桜の画像の画風変換してます.

 

ここで,サンプルを見ていただこう.

f:id:chime-n:20190520224018p:plain

全然違うじゃん!!

こっちは輪郭がくっきりしてますね.

 

ということで,前回はGPUを持っていないという悲しみの中,記事を書きました.

ただ,今回はGPUを使うことができたので綺麗な画風変換を体験したいです.

 

実行

基本的なことは前回の記事に書いてありますので,使い方とかはそちらをみてください.

今回違うのはGPUを使うところだけです.

コマンドは

>>>  python chainer-gogh.py -m vgg_chainer -i main.png -s sub.png -o output_dir -g 0

 

前回同様,画像の名前は適宜変えてもらうとして,変更点はモデルとGPU番号が変わっただけです.

"vgg_chainer"の部分は"vgg"でもできます.

"vgg"の場合は学習モデルをダウンロードする必要があります.

> ILSVRC-2014 model (VGG team) with 16 weight layers · GitHub

"vgg_chainer"の場合はモデルのダウンロードは必要ありません.

その代わりに実行すると一回目だけダウンロードが行われて時間がかかります.

二回目以降は爆速で読み込みます.

 

結果

二回目で書くことないので,もう結果です.

まず,前回の3つをやってみました.

f:id:chime-n:20190420200943p:plain
                 f:id:chime-n:20190520224805g:plain

 

f:id:chime-n:20190420201131p:plain

                 f:id:chime-n:20190520224837g:plain

 

f:id:chime-n:20190420201246p:plain

                 f:id:chime-n:20190520224951g:plain

とても綺麗!

前回全くできなかった紅葉がすごい良い感じです.

ちなみに,gif形式で載せていますが本来の出力はpngです.

pngを8fpsで150エポック毎に3600エポックまで表示するmp4を作成して,gifに変換しています.)

 

せっかくなので他にもやってみました.

f:id:chime-n:20190520225919p:plain

                 f:id:chime-n:20190520225948g:plain

 

f:id:chime-n:20190521202629j:plain

                 f:id:chime-n:20190521202648g:plain

 

f:id:chime-n:20190521202733j:plain

                 f:id:chime-n:20190521202755g:plain


サンプルに新聞みたいな文字入りのやつがあってかっこよかったので真似してみましたが,やはり良いですね.

ペンギンとハリネズミは学習が進むにつれて浮き出てきておしゃれです.

 

総括

リベンジ成功!

今回はGPUを使って画風変換をやりました.

正直,前回は微妙だなーと思いましたが考えを改めることになりました.

今回の記事を見て,たくさんの人に触れてほしい技術だと思います.

 

最後の一言

機械学習するならGPUは人権装備.

 

以上!

 

【機械学習】二次元イラストの画像補完で遊ぼう[DeepCreamPy]

 

f:id:chime-n:20190518182205j:plain

 

画像補完ってすごくない? いや,すごい.

画像補完は画像の一部を隠しても,何かしらの方法でその部分を推測する技術です.

今回はそんな画像補完の中でもDeepCreamPyをやってみます.

"二次元イラストのモザイクを取ることができる!"という謳い文句によってあまり記事もないし,敬遠されてそうですが普通にすごい技術です.

検索しても使い方があまり出てこないので,この記事では丁寧に書いていきます.

 

Pythonとかは入ってる前提です.

今回は珍しくWindowsでやったので,Python入ってない人はこれを参考にしてインストールしてみてください.

 

あくまで技術を体験しようって感じなので,変な画像は使いません.

 

***追記***

2019年 8月現在,v2.0.0がリリースされました.

この記事はv2.0.0以前のものです.

 

 

DeepCreamPyとは?

DeepCreamPyは画像補完してくれるAIです.

この画像がサンプルとしてありました. 

f:id:chime-n:20190517215926p:plain

左側画像の緑色の部分を補完したのが右側画像ですね.

DeepCreamPyでは緑色に塗った部分をAIが補完してくれるみたいです.

なんか元々の画像と思えるほど高精度です.

 

DeepCreamPyはソースコードを実行するものと,実行ファイルになっているものの2つがあるみたいです.

今回は前者のソースコードを用います.

DeepCreamPyを説明する数少ないサイトでは実行ファイルを使っているものが多そうですが,ソースコードの方が安心感ありますから.

 

***追記***

DeepCreamPyは以下のことができます.

1.緑色に塗った部分を補完する

ー>緑色部分の周りの色等から緑色部分がどんな色で塗られていたかを補完します.上の画像はこれです.

2.緑色に塗った部分にあるモザイクを補完する.

ー>緑に塗った画像に加えて元の画像も入力し,モザイクも判断材料に使います.

つまり,前者(1)は緑色部分をゼロの状態から補完し,後者(2)は緑色はただのマスクでモザイクをとります.

この記事では,1つ目の緑部分をそのまま補完する方しかやってません.

 

ダウンロード

***追記***

v2.0.0ではこのやり方だと学習済みモデルをダウンロードできません.

この記事はv1.3.0のものなのでgithubからv1.3.0のものをダウンロードすればこの記事の通りにできるはずです.

v1.3.0をダウンロードするにはリンク先にある緑色の”Clone or download”というボタンから見て一番左にある”Branch:master”をクリックします.

その後,Tagsを押し,v1.3.0-betaを選択すれば以降は記事の通りできます.

その代り,最新バージョンではなくなってしまいます.

暇があったら最新バージョン対応版も書くかもしれません.

 

GitHubからダウンロードしましょう.

> GitHub - deeppomf/DeepCreamPy: Decensoring Hentai with Deep Neural Networks

f:id:chime-n:20190518165108p:plain 

ZIPをダウンロードしたら解凍してください.

解凍が済んだら,学習モデルをダウンロードします.

"models"内にある,いかにもダウンロードしろよってファイルを開きましょう. 

f:id:chime-n:20190518165320p:plain

   ↓↓↓↓↓↓↓↓↓↓

f:id:chime-n:20190518165332p:plain

開くとエラーが出ますがダウンロードを選び続けてください.

f:id:chime-n:20190518165529p:plain

  ↓↓↓↓↓↓↓↓↓↓

f:id:chime-n:20190518165559p:plain

ダウンロードが完了したら解凍し,元々いた"models"の中に"model.h5"を移します.

f:id:chime-n:20190518165636p:plain

これでDeepCreamPyのダウンロードは終了です.

 

入力画像を作成

サンプルで示した通り,補完したい部分を緑色(#00ff00)で塗った画像が必要になります.

緑色を塗るためにペイントツールをインストールしましょう.

私は"GIMP"を使用しました.

> 「GIMP」無料で高機能な画像編集・処理ソフト - 窓の杜

PCにデフォルトで入ってる"ペイント"を使ってもいいんですが,線が細すぎるのでオススメはしません.

一応どっちもやり方書きます.

どちらにせよDeepCreamPyはPNGにしか対応していないので,保存形式はPNGにしてください.

 

・ペイントでやる場合

ペイントの場合はデフォルトでは緑色がないので作ります.

f:id:chime-n:20190518165958p:plain

        ↓↓↓↓↓↓↓↓↓↓

f:id:chime-n:20190518170041p:plain

"これ"を選択するか,右下の赤緑青のうち,緑だけを255にすると緑色(#00ff00)が作成できます.

この色で塗ってください.

 

GIMPでやる場合

起動したら,塗りたい画像をドラックアンドドロップします.

早速,緑色を作ります.

f:id:chime-n:20190518170237j:plain

     ↓↓↓↓↓↓↓↓↓↓

f:id:chime-n:20190518170405p:plain

Gだけ100にするか,HTML表記を#00ff00にすれば完成です.

 

塗るときはこの鉛筆で塗ってください.

f:id:chime-n:20190518170604j:plain

横のブラシで塗ると線の中に緑(#00ff00)でない部分ができてしまいます.

太さはサイズで調整しましょう.

 

GIMPの場合,保存の仕方に注意点があります.

塗り終わったら,"ファイル" > ”名前をつけてエクスポート”を選択します.

ここで,PNGにしてエクスポートしようとすると以下の画面が出てきます.

f:id:chime-n:20190518171235p:plain

この全部のチェックを外してエクスポートしましょう.(RGBαのα(透過率)があるとダメだからです.)

これで入力画像作成は終了です.

 

実践

入力画像を移動させます.

移動先は"DeepCreamPy-master"の"decensor_input"です.

中にサンプルが入っていますが消して大丈夫です.

また,入力画像は一枚だけに限定されていないので複数入れておけば全部やってくれます.

 

後は"decensor.py"を実行するだけです.

コンソール画面で"DeepCreamPy-master"の階層まで行き,以下を実行してください.

>>>   python decensor.py

 

実行結果はこんな感じになると思います.

f:id:chime-n:20190518171641j:plain

Press...が出たら,Enter押せば終了です.

結果は"decensor_output"に出ます.

 

結果

 

AnimeEffectsのときに頑張って書いたやつでやってみると

f:id:chime-n:20190518172450p:plain

なんか絵がショボすぎる

 

ということで,ネットからフリー素材を拾ってやってみました.

f:id:chime-n:20190518172521j:plain

パッとみて補完したことがわからないレベルですね

 

次は,色があまりないと難しいのではないかと踏んでカラフルでない画像で挑戦!

注意書きには白黒画像は無理ですって書いてますがどうなるか? 

f:id:chime-n:20190518172550p:plain

すごいです.

むしろ補完したところ全然わかんなくない?

 

さらに,同じ絵の目とヘッドホンを隠してみました. 

f:id:chime-n:20190518172614j:plain

さずがに左目は全部隠したので厳しそうですね.

右目はいい感じに補完してくれてます.

ヘッドホンは耳にあたる部分の隠す領域が大きすぎたのか少し変になってしまいました.

 

次は,人じゃない画像でも試してみました.

学習には人物イラストを多めに入れてそうですがいかに?

f:id:chime-n:20190518172833p:plain

普通に補完してますね.

 

最後に,なんとなく実写の人間でやってみよう. 

f:id:chime-n:20190518172906p:plain

は!?一番すごいじゃん!!

二次元イラストの画像補完じゃなかったのですか??

NVIDIAが公開してるやつ(Inpainting Demo)ぐらいすごい.

 

総括

画像補完をやってみました.

確かにすごい技術ですが,なかなか使い道が難しそうですね.

写真なら消したい物体を消すことができますが,イラストならそもそも書くなって話ですから.

 

ちなみに,最後にちょっと書いたNVIDIAのやつは写真の画像補完で,目や口など全部消しても補完できます.

学習は海外の人でやっているので外人っぽくなります.

サイト上で簡単にできるのでこっちでも遊んでみてください.

 

最後の一言

画像系の機械学習は結果がわかりやすくて楽しい!

 

以上!

 

 

【機械学習】オフラインでも自動線画着色サービスで遊ぼう[PaintsChainer]

f:id:chime-n:20190513211134j:plain

 

今回は一時大注目された線画の自動着色をやりましょう.

名前はPaintsChainerです.

Web上でもできるんですがオフラインでやっていきます. 

 

pythonとかは入ってる前提です.

Windowsでのpythonopencvの入れ方はこちらで.

 

なんか,いつも一昔前の技術をやってるので,時代遅れ感ある.

 

 

PaintChainerについて

PaintsChainerは線画を入力すると着色されて出力されるサービスです.

なんかいろんな賞とか受賞しているみたいです.

> PaintsChainer -線画自動着色サービス-

 

f:id:chime-n:20190513205030p:plain

これサンプルなんですけど,すごすぎない?

 

Web上でやる人はサイト行けばすぐできます.

というか,わざわざオフラインでやる必要性はないです

しかも,UIも機能もWebサイトの方が良いです

オフラインの方がいつでも遊べていいかなと思ったのですが,UIや機能がWebサービスと異なるのは想定外でした.

 

ダウンロードする

このサイトからダウンロードします.

> GitHub - taizan/PaintsChainer: line drawing colorization using chainer

右にある緑色のボタンで"Download ZIP"で保存して解凍しましょう.

 

機械学習されたモデルもダウンロードします.

> PaintsChainer

下にある三つの

 ・liner_f

 ・unet_128_standard

 ・unet_512_standard

をダウンロードします.

そしたら,PaintsChainerフォルダ内のmodelsフォルダへこの三つを移してください.

 

実行する

PaintsChainerの起動の仕方は server.py を実行するだけです.

ただ,cpuだけでやるか,gpuも使うかでコマンドは変わります.

モデルを使うだけなのでcpuだけで全然大丈夫です.

コンソール画面で,PaintsChainerまで移動します."cd"とtabを使いこなしましょう.

cpuだけのコマンドはこちら.

>>> python server.py -g -1

 

次に,Webブラウザchromesafariとか)を立ち上げます.

プロキシがあるとできませんので切るか例外にしてください.(意味がわからない人はプロキシ設定してないと思うので無視して大丈夫です.)

URLを打ち込むところ(一番上にあるやつ)に以下を入力するか,そのままクリックしてください.

>>> http://localhost:8000 

 

画面出てくれば成功です.

 

遊ぶ

入力には線画が必要になります.

絵を描かない人は線画ないと思いますが,ネット上で探せば結構出てくると思います.

また,カラーのイラストを線画にする方法とかも出てきます.

私は後者でやりましたが,ソースコード丸コピしたので詳細は省きます.

 

記事に載せるためにフリーイラストを線画にしてやってみました.

f:id:chime-n:20190503221928p:plain

左が線画,右が着色後です.

妖精っぽくてかわいい画像です.絵が上手い人羨ましいです.

着色した結果は怖い感じになっちゃいました.

 

しかし,心配ご無用!

かるーく色指定すれば,ぽい感じで塗ってくれます.

f:id:chime-n:20190503221935p:plain

水彩画っぽくてかっこいい!!

 

ちなみにサイト上で色指定なしでやってみるとこんな感じ.

f:id:chime-n:20190503221940p:plain

f:id:chime-n:20190503221952p:plain

f:id:chime-n:20190503221956p:plain

うん.

みんな!サイトでやろう!

 

総括 

自動着色で遊びました.

こんなに簡単にできるなんてすごいです.

しかも,しっかり色付けしてくれましたし,作者さんは天才ですね!

オフラインでも同じ感じでできるようになることを祈りつつ,今回はここまでです.

 

最後の一言

記事のためにフリー素材を見つけるのが大変

 

以上!