LoginSignup
1
3

More than 5 years have passed since last update.

chainer-goghをgoogle colaboratoryで動かしてみた話

Last updated at Posted at 2018-09-10

この記事は

colaboratoryでAIっぽいことしたいっていうミーハーな人
GPU持ってないけどstyle変換試したいっていう人
向けです

chainer-goghとは

本家はここにあります
一言でいえば,特徴量を入れ替える学習法でしょうか
CNNでは形状の特徴を強く捉えるため,それ以外の色合いや質感といった特徴の
情報量が少なくなります.
こういった情報量の少ない層を,別の画像のものに置き換えていく.
こうして画風を保ったまま違う絵を描けるようになります.

colaboratoryについて

Googleが提供しているやつです笑
AWSとかAzureとかとかとは違って,Jupyter Notebookで機械学習を頑張るためのサービスです.
Notebook形式でGPU使えます.
詳しくはここ
別に誰かの回し者とかじゃないです.
個人的にはNotebook形式なのでコーディングがちょっと...

いざ

コーディング変更部分

大事なのは2点,細かいのが2点です.
その1.generate_image関数Variableの引数volatileが廃止されているので,それを削除

chainer-gogh.py
mid_orig = nn.forward(Variable(img_orig, volatile=True))
style_mats = [get_matrix(y) for y in nn.forward(Variable(img_style, volatile=True))]

 ↓ こうです

chainer-gogh.py
mid_orig = nn.forward(Variable(img_orig))
style_mats = [get_matrix(y) for y in nn.forward(Variable(img_style))]

その2.caffeモジュールをfunctionsからじゃなくてlinksから呼ぶ

model.py,chainer-gogh.py,chainer-gogh-multi.py
from chainer.functions import caffe

 ↓ こうです

model.py,chainer-gogh.py,chainer-gogh-multi.py
from chainer.links import caffe

次の2点は趣味でどうぞ◎

その3.generate_image関数の出力を消す

chainer-gogh.py
if i%100==0:
    print(i,l,L1.data,L2.data)

 ↓ こうです

chainer-gogh.py
# if i%100==0:
#     print(i,l,L1.data,L2.data)

その4.save_image関数の画像出力先を変える

chainer-gogh.py
Image.fromarray(im).save(args.out_dir+"/im_%05d.png"%it)

 ↓ こうです

chainer-gogh.py
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の数字を変えて変遷を楽しめます.

ダウンロード

生成画像をダウンロードしましょう
左側の>マークでメニューを呼びます
左.png

上のタブをファイルに切り替えます.
あとはファイルを右クリック→ダウンロードです.
保存.png

ふぅ

無事ダウンロードできたでしょうか?
一応Gitにポイしておきました
画像処理ってわかりやすくていいですよね
以上です.お疲れ様でした笑

変なところあったら教えて下さい.

1
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
1
3