Help us understand the problem. What is going on with this article?

Magentaのdocker imageをmacbookで動かして画像変換したら真っ黒な画像が出てきた場合の対処法

More than 1 year has passed since last update.

やりたいこと

Magentaのプリセットで用意されているモデルを使って、モネ風の画像に変換する。

出来上がったもの

マシンスペックの関係で大きいファイルだと変換ができなかったので、以下の通り画像の一部分だけ切り取って変換しました

変換前
IMG_1337 2.jpg

変換後
all_monet_styles_0_100_1_100_2_100_3_100_4_100_5_100_6_100_7_100_8_100_9_100.png

すごい!完全にモネ!
これを実現するためにハマったポイントが以下の通りです。

ハマった現象

何度トライしても真っ黒な画像が出力されてしまいました。
実行時にエラーも出ず、心が折れてしまいそうになりました。

原因はCPUでTensorFlowを動かしていたから

ググると以下のissueにたどり着きました

Image stylization example only produces black images when run on CPU #570

MagentaはTensorFlowをバックエンドに使用しています。
TensorFlowは基本的にGPUの使用を前提にしているのですが、オプションとしてCPU上だけで処理をすることができます。
しかしMagentaのdocker imageの最新版( 0.1.13 )ではそのbug fix対応版が入っておらず、正常に動作しなかった結果、真っ黒な画像が出力されていました。

古いバージョンのdocker imageなら動かせた

私が動作させることができたバージョンは 0.1.6 でした。
操作手順は以下の通りです。

docker imageの取得と起動

$ docker pull tensorflow/magenta:0.1.6
$ docker run -it -p 6006:6006 -v /tmp/magenta:/magenta-data tensorflow/magenta:0.1.6

フォルダ構成

magenta-data
└── img
    ├── original ← ソースとなる画像ファイル置き場
    └── generated ← 生成された画像が吐き出されるディレクトリ

画像変換コマンド

$ image_stylization_transform \
      --num_styles=10 \
      --checkpoint=/magenta-models/multistyle-pastiche-generator-monet.ckpt \
      --input_image=/magenta-data/img/original/IMG_1337.jpg \
      --which_styles="{0:0.1,1:0.1,2:0.1,3:0.1,4:0.1,5:0.1,6:0.1,7:0.1,8:0.1,9:0.1}" \
      --output_dir=/magenta-data/img/generated/ \
      --output_basename="all_monet_styles"

ポイントとしては --checkpoint パラメータでプリセットのモデルファイルを指定すること、 --which_styles パラメータで、用意されているモデルのどれをどのくらいの割合で使うかという指定です。
詳しくはこちらの解説がわかりやすかったです。

参考

magenta/magenta/models/image_stylization at master · tensorflow/magenta
TensorFlowのMagentaで高速に画風変換してみた
写真をモネ風タッチに変換する(magenta image_stylization)

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away