Core ML Stable Diffusion

2023年6月22日

少し使い方が分かってきました。

モデルの生成は,README.md 通りにすれば良いのですが,画像生成時のオプションの指定を間違えていました。

というのは,画像生成時で指定する -i オプションは,モデルの場所だけであって,それしか指定しないと,デフォルトの「stable-diffusion-v1-4」が読まれちゃう。

そのため,–model-version オプションで,使いたい,生成したモデルを指定しなきゃいけない。

例えば,「stable-diffusion-2-1-base」を使う場合は,下のようになる。

お題「富士山頂で交響曲を演奏するプロのオーケストラ/Professional orchestra playing symphony at the top of Mt.」

python -m python_coreml_stable_diffusion.pipeline --prompt "Professional orchestra playing symphony at the top of Mt." -i stable-diffusion-2-1-base/ --model-version stabilityai/stable-diffusion-2-1-base -o output --compute-unit CPU_AND_GPU --num-inference-steps 90 --seed 72

私のプロンプトが馬鹿なせいで,良く分からない絵が生成されました。

同様に「trinart_characters_19.2m_stable_diffusion_v1」を使う場合も次のような形になる。

お題「自動車を走って追い越す高校生男子/High school boy running and passing an automobile」

python -m python_coreml_stable_diffusion.pipeline --prompt "High school boy running and passing an automobile" -i trinart_characters_19.2m_stable_diffusion_v1 --model-version naclbit/trinart_characters_19.2m_stable_diffusion_v1 -o output --compute-unit CPU_AND_GPU --seed 92 --num-inference-steps 100

「走りながら,車を追い越す男子」という馬鹿な図が欲しかったのですが,どこにも高校生いないですね。

プロンプト変えてみましょう。

High school students who running on the way then passing automobiles

なんだこの車高。そして,学生がいない(車の中か?)。

プロンプトを単純に。

High school students who running on the road

そこそこうまく生成できたかなと思ったら,左手,なんかえらいことになってない?!(複雑骨折)

ネガティブプロンプトを設定して再生成。

python -m python_coreml_stable_diffusion.pipeline -i trinart_characters_19.2m_stable_diffusion_v1 --model-version naclbit/trinart_characters_19.2m_stable_diffusion_v1 -o output --compute-unit CPU_AND_GPU --seed 113 --num-inference-steps 100 --prompt "High school students who running on the road" --negative-prompt "lowres (bad hands fewer digits bad anatomy mutated limbs extra limbs:1.4)"

寄生獣で,後藤さんが車追いかけてくるシーンを思い出しました。

なんだこれ。ネガティブプロンプト効いてないですね。

そこで,ネガティブプロンプトをカンマ区切りに変更。

足は普通(?)になった。ただ,やっぱ左の子の手が赤いのと,顔が潰れているのが気になる(顔は解像度の問題もあるのか?)。

ネガティブプロンプトに「不明瞭な顔」を追加。

python -m python_coreml_stable_diffusion.pipeline -i trinart_characters_19.2m_stable_diffusion_v1 --model-version naclbit/trinart_characters_19.2m_stable_diffusion_v1 -o output --compute-unit CPU_AND_GPU --seed 113 --num-inference-steps 100 --prompt "High school students who running on the road" --negative-prompt "lowres, (bad hands, fewer digits, bad anatomy, mutated limbs, extra limbs:1.4, Unclear face)"

浮遊してる子がいますが,顔の描画が不明瞭になるのは避けれそう(顔書いてないですね)。

顔を描画させてみましょう。

python -m python_coreml_stable_diffusion.pipeline -i trinart_characters_19.2m_stable_diffusion_v1 --model-version naclbit/trinart_characters_19.2m_stable_diffusion_v1 -o output --compute-unit CPU_AND_GPU --seed 113 --num-inference-steps 100 --prompt "Faces of students on the road" --negative-prompt "lowres, (bad hands, fewer digits, bad anatomy, mutated limbs, extra limbs:1.4, Unclear face)"

怖い。ホラーだ。顔のそれぞれのパーツがある分,ホラー差が増している。左手はなぜ赤い。

プロンプトを変える。

python -m python_coreml_stable_diffusion.pipeline -i trinart_characters_19.2m_stable_diffusion_v1 --model-version naclbit/trinart_characters_19.2m_stable_diffusion_v1 -o output --compute-unit CPU_AND_GPU --seed 113 --num-inference-steps 100 --prompt "A Femal High-School Student, On the Road, Face is Clearly, Beatiful." --negative-prompt "lowres, (bad hands, fewer digits, bad anatomy, mutated limbs, extra limbs:1.4, Unclear face)"

ここまでの流れがあるから,「あ,こいつ,かつて車だった何かしらに腰掛けてるな」って思うけど,ほんと意味不明な絵を生成しますね。

元凶だろう,On the Road を外します。

んー,マシになってきたかと思ったら,右手,どうなってんでしょうね。

もっと具体的なプロンプトじゃないといけないのか。

Girl sitting on a chair, in a classroom at noon, book in her right hand, shoes on, looking up, face in focus

左手が2つと,足が3つありますね。どうなってんだ。

限りなく単純にする(ネガティブプロンプトはそのまま)

Girl sitting on a chair

無難。

ぱっと見,そこまでの違和感はなさそう(服の赤・青がどうなってるのかが気になるけど)。

とりあえず,ここまで。

参考:

Core ML Stable Diffusion

[CoreML] Core ML Stable Diffusionを使ってみる


 カテゴリ一覧

 雑談(171)
アニメ(19)/ゲーム(12)/ドラマ(3)/パソコン(36)/小説(3)/広島東洋カープ(16)/映画(11)/漫画(33)/音楽(61)
 製作記(89)
AI(4)/CakePHP(3)/CentOS(4)/JavaScript(JS)(9)/Nuxt.js(4)/Vue.js(18)/WordPress(23)/料理(10)