StableDiffusionをローカルで動かしてみた
初めに
この記事は、本題の通り「StableDiffusionをローカル環境で動かして、画像生成してみた」というものです。ついでに、WaifuDiffusionも実行出来たので、そちらも試してみました。
準備
といっても、ここで詳しい説明はしません。というのも、下記サイトで詳しく説明されていますし、私も下記サイトと同じ方法でやっているからですね。
WaifuDiffusionに関しては、下記サイトをご覧ください。
じゃあ、この欄は何なのかというと、個人的に勘違いした点や、補足説明を入れておきたい点を記述します。
- Hugging Faceから学習モデルファイルをダウンロード
- 「stable-diffusion-webgui-mater」直下に置くのではなく、「~master/models」内に置きます
- このせいで、数日放置してました(笑)
- GFPGANのダウンロード
- ダウンロードした状態だと「GFPGAN~」となっていると思います
- 名前を「GFPGAN」に変更したうえで、「stable-diffusion-webgui-mater」直下にフォルダーごと配置します
- 正直、これに関しては元の記事が曖昧だったので、正解なのかは分からないですが、とりあえず出来たのでOKです
実行
後は「webui-user.bat」を実行して、バッチファイル内のURLをChromeにコピペするだけです。これで画像と同じような画面が表示されれば成功です。
1点注意点があるのですが、実行画面が表示された後にバッチファイルを消さないようにしてください。実行画面自体はあくまでGUIで、本体はバッチファイル側です。つまり、バッチファイルを消してしまうと、一切処理が実行できなくなります。
ローカルネットワークを使って、バッチファイルとのやり取りをしているわけですね。まあ、詳しくは知りませんが...。
やり方
txt2img
これは有名ですが、テキスト(prompt)から画像を生成するモードです。
img2img
インプットした画像を基にして、テキストに沿った画像を生成するモードです。
Extras
インプットした画像を高解像度化するモード?だと思っています。これについてはよく分かっていません。
出力
どうでしょうか?割と正確度高めの博麗霊夢が出来ている気がします。
色々いじってみる
次に、色々組み合わせて博麗霊夢の絵を作成してみました。
まず、通常通りに絵を描いてもらいます。因みに、キャラ名(英語)を何度も書くと、精度が上がる気がします。
腕を上げていたので、御幣の代わりに棒を持たせてみます。
棒だとしっくりこなかったので、棒をボールに変更した上で、両手を使って持ちます。
陰陽玉を別途で作成し、GIMPを使っていい感じに配置します。何故か、陰陽玉が上手い感じに生成されなかったので、手動で合成しました。違和感はあると思いますが、もうどうすればいいのか分からないので、妥協しました。
因みに、手が明らかにおかしかったので、InPaint機能を使い、手の部分のみ上手い感じに修正しました。
半分忘れていましたが、背景を追加します。まあ、普通は博麗神社ですけど、写っている範囲での表現は厳しそうだったので、別途作成した桜の絵にしました。それを、Gimp上で重ねて、境目を綺麗にして、ノイズをかけました。違和感は相変わらずありますが、気にしてはいけません。
最後に、好みが分かれるのですが、Extrasの機能を使って解像度を上げます。見ての通り、一部の「ぼやけ」が消えてしまいます。設定が悪いのかもしれませんが、う~ん。
兎にも角にも、一切絵を描かず、調整のみで正確度高めの博麗霊夢が出来上がりました
比那名居天子を描いてもらいたい
私の最推しキャラの比那名居天子を描いてほしい訳ですが、残念ながら博麗霊夢ほどの知名度が無いので、直ぐには描いてくれません。
といった感じに、完全に別人です。「誰だよ」案件です。流石に、もう少し詳しくプロンプトを書いたほうがいいですね。
色々、プロンプトだけをいじってやったものが上図になります。メモするのを忘れていたのですが、確かプロンプトは
「1 Girl, hinanawi_tenshi, touhou project, smile, Long light blue hair, anime, kawaii, peach on black hat, red eye, white clothing, wear a big red bow tie on clothes, full body, hinanawi_tenshi, hinanawi_tenshi, hinanawi_tenshi, hinanawi_tenshi, hinanawi_tenshi, hinanawi_tenshi, hinanawi_tenshi, hinanawi_tenshi」
こんな感じだったはずです。正直、何もしなくても十分綺麗です。が...折角なので弄っていきたいと思います。
今回はこの絵から弄っていきます。
右上のリボン?をInpaint機能を使って、桃と葉っぱに変更します。天子といえば帽子の上に桃ですよね。
右端にある謎の物体を削除した上で、右腕を外側に伸ばします。
次に、左腕も同じく外側に伸ばします。髪もいい感じに腕にかける感じが、個人的には好きですね。
それぞれの袖の長さを調整します。長さ調整が中々難しく、無駄に時間がかかりました。
最後に背景を付け加え、解像度を上げて終了です。自分なりには割と綺麗に出来たかなぁと思います。「すしざんまい!」ポーズに見えるのは気のせいです。
折角なので、もう一回試しにやってみます。
今回はこの画像から始めていきます。
やっぱり、特徴である桃を帽子の上に乗っけます。
余り変わっていないので、アクセントに鞄を左肩に付けて、ボタンも服に付けます。
最後に背景を付けた上で、解像度を4倍に上げます。以上で完成とします。テーマは「学生服を着ておしゃべり中の(巨乳の)比那名居天子」です。
背景を色々作成したのですが、いい感じの画像が来なかった...。というより、後半が若干適当になったのは内緒です。
最後に
以前から東方絵をAIに描かせているのですが、「それっぽい」絵しか出力出来ていなかったので、今後も頑張って正確度を上げていきたいですね。
ローカル環境で出来るようになったので、かなり快適にAI絵の生成生活が進みます。因みに、1枚当たり5~10秒で生成出来ますね。設定でかなり変わりますが...。
個人的には、WaifuDiffusionで人物を作成し、StableDiffusionで背景・絵の一部部品などを生成するという使い分けです。後、画像同士を上手い感じに合成してくれる画像生成AIが欲しいですね...。やはり、手動で合成すると違和感が凄いです。
今回生成するにあたって、コツ?を共有しておきます。
- キャラ再現をする場合は、キャラ名を何度も出すと精度が上がる
- 全身絵はあまり生成されずらい
- ほぼ顔か、上半身が限界な気がします...何でだろう?
- 基本的にはシンプルなテーマで絵を描かせるのが正解な場合が多い
- 参考にする画像をシンプルな方が良い気もします
- 体の一部分を変更する場合、最初に大まかな(雑い)絵を出力させて、それを洗練していく方法が有効
- 例えば、腕が中途半端にバッサリ切れていたとしても、割と問題ありません
- InPaintの機能は便利ですが、「変更」が得意で「新規」は不得意です
- 他には、何も無いところの服の上にボタンを付けようとすると、上手くいきません
- なので、運良くボタンっぽいのが生成されたらそれを採用、その画像を使って再度画像を生成すると、ボタンが増える事があります
- ボタンが増えた画像を使うと、よりボタンに近い画像が生成されます
- 例えば、腕が中途半端にバッサリ切れていたとしても、割と問題ありません
- 基本的には「運ゲー」
- 上手い絵(しっくりくる絵)が来るまで絵出力ガチャをぶん回しましょう
- もしくは、プロンプトをいじりまくりましょう
- 最近はDeepLといったような、翻訳アプリがあります
- プロンプトが「単語の組み合わせ」だけでも十分生成可能です。
- シンプルな方が上手くいく事もありますし、逆に細かく書いたほうが上手くいく場合もあります
- そこそこ上手い絵の構図が出来たら、一部分修正に入る前に、img2imgを使って、再度同じプロンプトを使って再生成してください
- 似ている構図の絵が生成されますので、正解の絵が来る可能性が高くなります
- 妥協も大事
- 絵が描けない場合、細かい点を直すのは、ほぼほぼ不可能です
- 妥協として、別で絵を出力して、手動で重ねるといった事も必要かなと思います
- GIMPオススメです
- 違和感が残りますが、仕方ありません
- もしかして、複数の絵同士を上手く合わせて出力してくれる「AI」ってありますかね?
前回の東方絵関連の記事です↓
珍しく、海外の方が東方絵を生成していた動画があったので共有しておきます。ちなみに、今回の画像は割と下の動画を参考にしていたりします。