読者です 読者をやめる 読者になる 読者になる

Itsukaraの日記

最新IT技術を勉強・実践中。最近はDeep Learningに注力。

DL使った線画自動着色がCPUでも動くようにしました

機械学習 人工知能 Python

DL使った線画自動着色の件、下記記事を書いた後で、CPUだけでも動くように修正し、pull requestを出させていただきました。幸い、conflictsは無いようです。

itsukara.hateblo.jp

修正内容ですが、元々CPUで使う場合は"python server.py -g -1"とすれば動くはずなのですが、"cgi_exe.py"で "self.gpu >= 0" か判定して処理を分ける部分が抜けていたので、追加したものです。

ちなみに、トレーニングと異なり判定だけなので、CPUでも十分に速いです。お試しサイトはアクセスが集中して処理が重くなっており着色に1分以上かかるので、お試しサイトの負荷を減らす意味でも、ローカル環境を作って試しましょう!

何よりも、CPUだけでもローカル環境の方がお試しサイトよりもずっと速いです。具体的には、CPUだけも15秒程度で着色が完了します*1。これに対して、お試しサイトはアクセス集中のため1分ぐらい待たされます。

merge前にCPUで試したい方は下記をお使いください。
https://github.com/Itsukara/PaintsChainer.git

GPUメモリ不足時の画面

f:id:Itsukara:20170129073057p:plain

CPUに切替後の画面

f:id:Itsukara:20170129072921p:plain

追記

当初、GPUを使って動くようにするために、下記記事を見てVisual Studioを入れたり、CUDA8.0を入れたりと、1時間以上掛かり、確かにMNISTは10倍くらい速くなったのですが、結局、GPUメモリ不足で一部しか動かず、残念でした。
qiita.com

ちなみに、CPUで動かすだけなら、chainerを"pip install chainer"で入れるだけであり、とても簡単です。(当然ながら、Pythonの事前インストールも必要ですが、これは、Anacondaをインストールして実行するだけなので、これも簡単です。また、opencvも必要ですが、これは"pip install opencv"で大丈夫でした)。

追記2 (Windowsでの簡単なインストール方法)

一応、Windowsでのインストール手順書いておきます。

# (1) Anacondaをインストール
# ・下記からexeをダウンロードして実行(管理者権限で実行)
#  ・https://www.continuum.io/downloads
# ・DOS窓で"python --version"を実行し、エラーにならないことを確認
#  ・エラーになる場合、"Anaconda Windows インストール方法"でググり、自己対応願います。
# (2) 以下を、DOS窓で実行
> conda upgrade pip
> pip install chainer
> conda install opencv
# (3) paintschainer (CPUで実行可能版)をインストール
# ・下記からzipをダウンロードし解凍(github知らなくてもOK)
#  ・https://github.com/Itsukara/PaintsChainer/archive/master.zip
# ・解凍してできたフォルダは、下記のように名前を変更
#  ・PaintsChainer-master => PaintsChainer
# ・下記フォルダを作成
#   ・PaintsChainer\cgi-bin\paint_x2_unet\models
# ・下記サイトにある学習済データを上記フォルダにダウンロード
#   ・http://paintschainer.preferred.tech/downloads/
# (4) フォルダPaintsChainerでSHIFTキーを押しながら右クリックし、
#   「コマンドウィンドウをここで開く」でDOS窓を開き、下記を実行
>python server.py -g -1
GPU: -1
start
load model
serving at localhost : 8000
# (4) ブラウザで下記を開く
# ・http://localhost:8000/static/

*1:CPUはCore i7-4770Kです。なお、大きな画像だと時間が25秒ぐらいに延びますね。通常、Neural Network部分の入力サイズは一定なので処理時間は関わらないはずですが... もしかしたら、Neural Network以外の部分(画像処理とか)で時間が掛かっているのかもしれません。pythonのプロファイルを採ればハッキリすると思います。どなたか試されるてはいかがでしょう。