この記事は
colaboratoryでAIっぽいことしたいっていうミーハーな人
GPU持ってないけどstyle変換試したいっていう人
向けです
chainer-goghとは
本家はここにあります
一言でいえば,特徴量を入れ替える学習法でしょうか
CNNでは形状の特徴を強く捉えるため,それ以外の色合いや質感といった特徴の
情報量が少なくなります.
こういった情報量の少ない層を,別の画像のものに置き換えていく.
こうして画風を保ったまま違う絵を描けるようになります.
colaboratoryについて
Googleが提供しているやつです笑
AWSとかAzureとかとかとは違って,Jupyter Notebookで機械学習を頑張るためのサービスです.
Notebook形式でGPU使えます.
詳しくはここ!
別に誰かの回し者とかじゃないです.
個人的にはNotebook形式なのでコーディングがちょっと...
いざ
コーディング変更部分
大事なのは2点,細かいのが2点です.
その1.generate_image関数Variableの引数volatileが廃止されているので,それを削除
mid_orig = nn.forward(Variable(img_orig, volatile=True))
style_mats = [get_matrix(y) for y in nn.forward(Variable(img_style, volatile=True))]
↓ こうです
mid_orig = nn.forward(Variable(img_orig))
style_mats = [get_matrix(y) for y in nn.forward(Variable(img_style))]
その2.caffeモジュールをfunctionsからじゃなくてlinksから呼ぶ
from chainer.functions import caffe
↓ こうです
from chainer.links import caffe
次の2点は趣味でどうぞ◎
その3.generate_image関数の出力を消す
if i%100==0:
print(i,l,L1.data,L2.data)
↓ こうです
# if i%100==0:
# print(i,l,L1.data,L2.data)
その4.save_image関数の画像出力先を変える
Image.fromarray(im).save(args.out_dir+"/im_%05d.png"%it)
↓ こうです
Image.fromarray(im).save("im_%05d.png"%it)
colab.側
入出力関係はここ参考にしました.
いざ
chainerのインストール
まずはchainerをインストールしましょう.
cupyもしれっといれます.
!apt -y install libcusparse8.0 libnvrtc8.0 libnvtoolsext1
!ln -snf /usr/lib/x86_64-linux-gnu/libnvrtc-builtins.so.8.0 /usr/lib/x86_64-linux-gnu/libnvrtc-builtins.so
!pip install -q cupy-cuda80 chainer
!pip install cupy --no-cache-dir -vvvv
ファイルのアップロード
.pyファイルと.pngファイルをそれぞれのアップロード
chainer-gogh.py
models.py
input.png
style.png
をアップロードする
inputはベースの画像,styleはマネしたい画風の画像です.
from google.colab import files
uploaded = files.upload()
!ls
実行
VGGモデルで実行します.
ランタイム→ランタイムのタイプを変更→ハードウェアアクセラレータ→GPUを忘れずに!!
!python chainer-gogh.py -m vgg_chainer -i input.png -s style.png -o output_dir -g 0 --width 256
!ls
可視化
出力はこんな感じででます.
load model... vgg_chainer
('image resized to: ', (1, 3, 256, 256))
('image resized to: ', (1, 3, 128, 256))
chainer-gogh.py im_01100.png im_02300.png im_03500.png im_04700.png
im_00000.png im_01200.png im_02400.png im_03600.png im_04800.png
im_00100.png im_01300.png im_02500.png im_03700.png im_04900.png
im_00200.png im_01400.png im_02600.png im_03800.png input.png
im_00300.png im_01500.png im_02700.png im_03900.png models.py
im_00400.png im_01600.png im_02800.png im_04000.png models.pyc
im_00500.png im_01700.png im_02900.png im_04100.png output_dir
im_00600.png im_01800.png im_03000.png im_04200.png sample_data
im_00700.png im_01900.png im_03100.png im_04300.png style.png
im_00800.png im_02000.png im_03200.png im_04400.png
im_00900.png im_02100.png im_03300.png im_04500.png
im_01000.png im_02200.png im_03400.png im_04600.png
で,可視化のコードはこれ
from IPython.display import Image,display_png
display_png(Image('im_04900.png'))
im_04900の数字を変えて変遷を楽しめます.
ダウンロード
生成画像をダウンロードしましょう
左側の>マークでメニューを呼びます
上のタブをファイルに切り替えます.
あとはファイルを右クリック→ダウンロードです.
ふぅ
無事ダウンロードできたでしょうか?
一応Gitにポイしておきました
画像処理ってわかりやすくていいですよね
以上です.お疲れ様でした笑
変なところあったら教えて下さい.