ml-stable-diffusionの不具合対応

前回まで

  1. ml-stable-diffusionの準備
  2. アニメ風画像を生成

今回は不具合への対応を行う。

長いプロンプトを入れるとエラーになる問題対策

オリジナルのプログラムでは、プロンプトを出力フォルダ名として画像を書き出すため、プロンプトが長すぎるとフォルダ作成に失敗してエラーになる。それも画像生成処理が完了し、いざファイルを保存するぞという最後の最後でエラーになるという極悪仕様

プロンプトの代わりに作成日時をフォルダにするように修正する。修正対象のファイルはpython_coreml_stable_diffusion/pipeline.py

7行目あたりに追加

  import argparse
+ from datetime import datetime

524行目を以下のように置き換え

- out_folder = os.path.join(args.o, "_".join(args.prompt.replace("/", "_").rsplit(" ")))
+ out_folder = os.path.join(args.o, datetime.now().strftime("%Y%m%d%H%M%S")

これでOK

黒い画像になる問題対策

stable diffusionはsafety checkerという仕組みでエッチな画像を生成すると真っ黒な画像に変換するようになっている。このsafety checkerはアニメ風画像に対する誤検出率が非常に高く、エロ要素が皆無でもかなりの高確率で黒塗りになってしまう。

というわけでsafety checkerを無効化する。

python_coreml_stable_diffusion/pipeline.pyの552行目を以下のように変更

      pytorch_pipe = StableDiffusionPipeline.from_pretrained(args.model_version,
-                                                             use_auth_token=True)
+                                                             use_auth_token=True,
+                                                             safety_checker=None)

これだけでOK

おまけ

全く同じプロンプトとseedでモデルを変えて出力したもの、上がSakuraMix-v2、下がEmiphaV4というモデルを使用している。

最近、イラスト界隈ではAI絵師という言葉で揉めているらしい。AIで出力するだけの人間は絵師と呼べるのかという話で、まあ、AI使いと絵描きの矜持のぶつかり合いで私には関係ないっちゃ関係ない話なのだが私見を述べさせていただく

上の2つの出力結果の差異を見ればわかるように出力される絵の画風・絵柄はモデルに大きく左右される。

私はこの意見に賛成で、もしAI絵師という言葉があるのなら、少なくとも自分の絵柄と言えるもの=自分好みに調整した自分専用のモデルを持って初めて名乗れる類のものだと思う。他人の作ったモデルやLoRAを使って出力するだけの人間が絵師と名乗るのはナシだな、というのが私の意見。

あとAI使って絵を出力してる人たちのコミュニティを見てみたのだが、多くのイラストレータたちの成果を使わせていただいているという自覚がなくリスペクトが皆無で、私は彼らを好意的な目で見ることはできなかった。こんな人たちに絵師を名乗って欲しくないという思いも少なからずある。