編集中
図1. 赤色のオリジナル画像と水との合成
図2. 青のビロードと、黒のビロードの合成
図3. イラストの海と、写真の海を合成
図4. ダリアと桜の合成
図5. 化物語の阿良々木暦とその声優の神谷さん
図5. 夏の森に桜
Adobeっぽい
コードが色々あれ
- パラメータの連結にstr(foo) + “ bar “ + str(alice) + “bob” みたいなことやりまくっててなんだかよくわからない
- Matlabを使用していることもあり、プロプライエタリ万歳な空気を感じる(Octave対応には別途、書き換える必要があり、とにかく遅い)
出力した画像が非常に美しい
- 全く別の分野から画像を持ってきて合成することができるので、とても流麗な画像を作ることができる
- 幾つか私が実験して作成した映像を添付する
改修点
- Python3でbatchを実行できるように変更
- バッチで全部処理するプログラムから、一個一個config.jsonを読んで処理するスタイルへ変更
- GPUを指定できるように変更
- Matlab, Octave双方に対して対応
- iterationの回数を指定可能
ノウハウ
step2の学習の収束が独自のデータの学習の収束が失敗することがあり、いくつか成功させる方法を編み出した
どうやら画像の収束に失敗する場合、画像の大きさや、画像に含まれている情報が関連するらしく、いくら小さくしても、情報量を削ってもうまくいかない。
非常にバカっぽいが、成功が約束されているサンプルのinput画像に変更したい画像を組み込むことでうまくいくことがわかった。
この方法では、最終的な出力物から、目的以外のデータを削って削除する必要があるがある程度安定して、画像の変換ができる。
Octaveのラプラシアンの作成の遅さについて
壊滅的に遅いので、じっと忍耐強く待つ(5分くらい)のみである。dispという、consoleにステータスを表示するコマンドもうまく動作しない。
実験レベルを超えて実務で使用する必要がある場合は、迷わずmatlab買ったほうが良いような気がしたが、OSSしか認めない人もいるので、判断はおまかせ。
Makefileのハック
torch7がインストールされている必要があり、include fileやlib fileが読み込めなかったので、以下のように変更する
PREFIX := $(HOME)/torch/install
NVCC_PREFIX := /usr/local/cuda/bin
CFLAGS := -I$(PREFIX)/include/THC -I$(PREFIX)/include/TH -I$(PREFIX)/include -I$(HOME)/torch/install/include/ -I$(HOME)/torch/install/include/THC -I$(HOME)/torch/install/include/TH/
LDFLAGS_NVCC := -L$(PREFIX)/lib -Xlinker -rpath,$(PREFIX)/lib -lluaT -lTHC -lTH -lpng
all: libcuda_utils.so
libcuda_utils.so: cuda_utils.cu
$(NVCC_PREFIX)/nvcc -arch sm_35 -O3 -DNDEBUG --compiler-options '-fPIC' -o libcuda_utils.so \
--shared cuda_utils.cu \
$(CFLAGS) $(LDFLAGS_NVCC) \
-L/home/gimpei/torch/install/lib/
clean:
find . -type f | xargs -n 5 touch
rm -f libcuda_utils.so ```
結構膨大なGPUメモリが必要
- GPUのメモリは8GByte以上あったほうが鉄板っぽいので、GTX1070, GTX1080, GTX1080Ti以上ほしい
収束に失敗したら、別のGPUを使うとうまくいくことがある
- 闇すぎる
python3 gen.py --gpu 1 -> 0にしてみるとか