Mac でも NovelAI っぽい絵を出力したい
画像生成 AI、stable diffusion はめちゃ楽しいんだけど、Mac だと出力が遅いのが困りもんだった。あとインストールもけっこう面倒くさい。
が、この界隈の進化のスピードには目覚ましいものがある。
いまや、M1、M2 Mac の GPU を利用できる、stable diffusion のフロントエンドがあるのだ。
InvokeAI がそれである。InvokeAI は Mac だけでなく、Windows や Linux でも使える。
InvokeAI のインストール
InvokeAI のインストールは、以前と比べたら格段に簡単になったとはいえ、コマンドラインでの操作に慣れていないとキツいのは変わらない。それでも、シェルスクリプトで一発である。
準備として、
- Hagging Face のトークンの取得
- python、pip の準備
- SSD 容量の空き
あたりが必要となる。
Hagging Face のトークン
画像生成AI「Stable Diffusion」を低スペックPCでも無料かつ待ち時間なしで使う方法まとめ – GIGAZINE
上述の GIGAZINE さまの記事の前半に詳しいやり方が書いてあるので、事前にトークンを発行しておく。
python、pip の準備
InvokeAI のインストーラを適切に動かすには、python 3.9 以上と、python 3.9 以上に由来する pip3 が必要だ。
> python --version
ターミナルで上記のコマンドを実行し、 Python 3.9.15
などと出てくれば OK。
3.8 とか、2.x とかの場合は、 which python3.9
などとやってみて、なかったら homebrew 等でインストールしなくてはならない。
仮に python@3.9 をインストールしたとする。 python
コマンドだけで python3.9 を呼び出すには、zshrc にエイリアスを設定する。
筆者の場合、python3.9 と pip3.9 のインストール場所は、
> which python3.9
/opt/homebrew/bin/python3.9
> which pip3.9
/opt/homebrew/bin/pip3.9
となっている。
> open -a CotEditor ~/.zshrc
などと .zshrc を開き、
alias python=/opt/homebrew/bin/python3.9
alias pip=/opt/homebrew/bin/pip3.9
と書きこんで書類を保存する。 source ~/.zshrc
で設定を反映できる。
> python --version
Python 3.9.15
> pip --version
pip 22.3.1 from /opt/homebrew/lib/python3.9/site-packages/pip (python 3.9)
SSD 容量の空き
InvokeAI のインストールの際、大量のデータがダウンロードされる。
フルでダウンロードすると、たぶん、20 GB くらいいく。高速回線と容量の余裕が必須だ。
データは、invokeai フォルダ以下にダウンロードされるようだ。
インストール
以上が準備できたら、いよいよインストールとなる。
上記ページから、InvokeAI-Installer-xxx-mac.zip をダウンロードして、zip を展開すると install.sh があるので、それを実行する。
> cd ~/Downloads/InvokeAI-Installer
> ./install.sh
途中、インストールする場所を尋ねられる。「/Users/USERNAME/」とか返せば、ホームフォルダにフォルダが作成され、すべてのデータがそこにダウンロードされる。
あと、NSFW(18 禁フィルタ)をデフォルトにするか、みたいなことも聞かれるので、質問に答えながら進めていく。
Hagging Face のトークンは、このインストールの途中で勝手に入力される。
実行してみる
InvokeAI の実行は、作成された invokeai フォルダ内の invoke.sh で行う。
> cd ~/invokeai
> ./invoke.sh
Do you want to generate images using the
1. command-line
2. browser-based UI
3. open the developer console
Please enter 1, 2, or 3:
コマンドラインでの操作か、web UI での操作か選べるわけだ。3 番目のコンソールっていうのは正直よくわからない。2 の web-UI を選択してエンターキーを押すと、モデルデータがロードされる。
>> Started Invoke AI Web Server!
>> Default host address now 127.0.0.1 (localhost). Use --host 0.0.0.0 to bind any address.
>> Point your browser at http://127.0.0.1:9090
と表示されたら、 http://127.0.0.1:9090
へブラウザでアクセスする。
web-UI はこんな感じ。
プロンプトで作成画像の内容を指示して、「Invoke」を押す。筆者の環境(M2 MacBook Air、16 GB)だと 1 分半くらいで画像が生成された。
Text to Image だけでなく、Image to Image、Out-painting(Unified Canvas)などが使える。特に Unified Canvas が凄い。
使い方については動画を見ていただくのが早いと思う。英語だけどだいたいわかる。
終了のやり方は、ブラウザのタブを閉じて、ターミナルのほうは ctrl + c でいいんだと思う、たぶん。
stable diffusion は工夫しだいで凄いポテンシャルを発揮するのだが、アニメっぽい絵だけはめっためたに弱い。それを補う waifu-diffusion-1.3、trinart_characters-1.0 などのモデルもあるのだが、ここはひとつ、豪勢に Anything-V3 をインポートしてみたい。
Anything のインポート
Anything-V3 はアニメっぽいイラストに強い学習済みモデルである。一説によると、NovelAI のモデルが流用されているとかで、けっこうグレーに近い、という話がある。
そういうものだと思って、注意しつつ使っていくのが良いだろう。
データは Hagging Face でダウンロードできる。
Linaqruf/anything-v3.0 at main
ここから「Anything-V3.0.ckpt」(7.7 GB)と、「Anything-V3.0.vae.pt」(823 MB)というふたつのファイルをダウンロードする。たぶん、HaggingFace のアカウントが必要になってくると思う。
丸をつけた下矢印がダウンロードのリンクだ。
ダウンロードしたファイルを、~/invokeai/models/ldm/stable-diffusion-v1
へと移動する。別の場所でも大丈夫だと思うけど、一応ここに。
そしたら、sh invoke.sh
で invokeAI を起動、1 のコマンドラインでの操作を選択する。
invoke>
というプロンプトが出てきたら、以下を実行。
!import_model models/ldm/stable-diffusion-v1/Anything-V3.0.ckpt
すると対話式でインポートできるようになる。
short name
は通称みたいなもんだろう、「Anything」とした。
description
は概要みたいな感じだと思う。適当に書いた。
Configuration file
はデフォルトのまま。これを別の書類にも出来るらしい。
VAE autoencoder file
で、ダウンロードした「Anything-V3.0.vae.pt」ファイルのパスを指定する。
画像の縦横のサイズはデフォルトのまま。
このモデルを通常で使用するか、を y とした。
これでエンターキーを押すと、最終確認を表示してきて、インポートするか聞いてくるので、y でいくことにする。
invoke> !import_model models/ldm/stable-diffusion-v1/Anything-V3.0.ckpt
>> Model import in process. Please enter the values needed to configure this model:
Short name for this model: Anything
Description of this model: Anything Model
Configuration file for this model: configs/stable-diffusion/v1-inference.yaml
VAE autoencoder file for this model [None]: models/ldm/stable-diffusion-v1/Anything-V3.0.vae.pt
Default image width: 512
Default image height: 512
Make this the default model? [n] y
>> New configuration:
Anything:
config: configs/stable-diffusion/v1-inference.yaml
default: true
description: Anything Model
height: 512
vae: models/ldm/stable-diffusion-v1/Anything-V3.0.vae.pt
weights: models/ldm/stable-diffusion-v1/Anything-V3.0.ckpt
width: 512
OK to import [n]? y
しばらくするとモデルがロードされる。
Keep model loaded? [y]、と聞かれるので、これも y。
再度 invoke>
のプロンプトが出てくるので、girl
とだけテキストを入力してテストした。
1 分 30 秒くらいで画像が生成される。
ガール、とぶっきらぼうに注文しただけで、このクオリティ。
コマンドラインによる操作
ここからは勉強のつもりで、コマンドラインで操作してみる。
といっても invoke>
に呪文を入力してリターンキーを押すだけだ。[h] + [return] でヘルプ、[q] + [return] で終了となる。
プロンプト
プロンプトは、NovelAI で使われるテクニックが役に立つ。筆者は下記のブログさまを参考にさせていただいた。
【NovelAI】 エロもいける!最強プロンプト(呪文)辞典 | ゲス顔イオナズン
作成したい絵をイメージして、上から順番に単語を書きこみ、カンマで区切っていく。
{{{masterpiece}}}, 1 girl, character focus, full body, from above, pigeon toed, face focus, blue eyes, heart shaped pupils, looking up at viewer, makeup, medium breasts, cleavage, curvy, blush, incoming kiss, closed eyes, in heat, wearing cropped shirt, wearing denim shorts, torn clothes,
なんか、こんな感じ。あまり長すぎるとエラーで終了してしまう。
{{{masterpiece}}}
のように、強調したい単語を {}
や ()
で囲むと反映されやすい、とされている。二重三重に囲めばさらに効果が高いらしい。特に masterpiece は必須というひともいる。
正直このへんの効果、本当にあるのかまだ実感していない。
ネガティブ・プロンプト
逆に避けたい表現を []
で囲むと AI が理解してくれる。
[bad anatomy, bad hands]
のように、複数指定してもいけるようだ。
また、ネガティブ・プロンプトは、プロンプトとは別に単語数を数えているらしく、わりと長めに入力してもエラーにならない。
ネガティブ・プロンプトの例文はググれはたくさん出てくる。筆者はこんな感じにした。
[multiple angle, blurry, longbody, lowres, bad anatomy, bad hands, missing fingers, pubic hair, extra digit]
オプション
InvokeAI のオプションは、下記のページで説明されている。
InvokeAI/CLI.md at main · invoke-ai/InvokeAI · GitHub
代表的なものは、
オプション | 意味 |
---|---|
-o ~/Pictures | 出力先の指定 |
-W 1024 | 幅の指定 |
-H 512 | 高さの指定 |
-n 3 | 作成する枚数 |
-s 50 | steps の指定 |
-C 7.5 | cfg_scale の指定 |
-S 0000000 | seed の指定 |
-A k_lms | sampler の指定 |
-s
の steps は 25 ぐらいでも画像生成してくれる。出力が早くなる分、描きこみの量が下がる。
ただ、steps は増やせば絵が良くなる、というわけでもないようだ。
-S
の seed 値は、画像の生成とともに「-S 2161187662」という形でターミナルに出力される。同じプロンプト、同じ seed 値でパラメータも同じにすると、まったく同じ画像が生成される。プロンプトをちょっと変えると、同じキャラクターの別ポーズが出力されやすい、とされている。
seed 値は、画像の出力先に生成される「invoke_log.md」でも確認できる。invoke_log.md は作成履歴をたどれて便利だ。
README.md · Linaqruf/anything-v3.0 at main を見ると、sampler に ddim を、cfg_scale を 12 にしているので、真似してみる。
{{{masterpiece}}}, 1 girl, character focus, full body, from above, pigeon toed, face focus, blue eyes, heart shaped pupils, looking up at viewer, makeup, medium breasts, cleavage, curvy, blush, incoming kiss, closed eyes, in heat, wearing cropped shirt, wearing denim shorts, torn clothes, [multiple angle, blurry, longbody, lowres, bad anatomy, bad hands, missing fingers, pubic hair, extra digit] -H 1024 -A ddim -C 12.0
ここまで書いて、やっと実行。高さを 1024 ピクセルにしたので、出力に 5 分くらいかかる。
いいじゃない。
ターミナルに seed 値が表示されるので、同じ seed で別のプロンプトを試してみる。
いいじゃない。エロいじゃない。
steps や sampling、scale については NovelAI 5ch wiki が詳しいかと思う。
steps を上げると、同一 seed でも顔とか服装とか変わってくる。
パラメータを変更することで、いろいろなバリエーションが出てくる。
ちなみに、NovelAI のデフォルトは、steps 28、cfs_scale 11 らしい。
他にも
他にも InvokeAI では、Hentai-Diffusion version1.7 や、EimisAnimeDiffusion 1.0v というモデルをインポートできる。
GitHub – Delcos/Hentai-Diffusion: The official place for the best A.I.
eimiss/EimisAnimeDiffusion_1.0v at main
ダウンロードは上記のリンク先で出来る。
特に Hentai-Diffusion は妙に整った絵を出してくれる。
えちぃねぇ。
インポートの際、vae ファイルを指定しなくても問題ないのだが、configs/models.yaml 書類をエディタで編集して、vae: models/ldm/stable-diffusion-v1/vae-ft-mse-840000-ema-pruned.ckpt
という具合に、stable-diffusion 1.5 などが使ってる vae を指定すると、画像がくっきりする。
これはこれでいいけど、vae なしの曇った感じも味がある。
なので、vae を使用した「Hentai」と、vae を使用しない「Hentai-notvae」のふたつを models.yaml に書いておいて、使いわけるのがいいかもしれない。
ちなみにモデルの交換は、!switch
でおこなう。
invoke> !switch Hentai
Hentai の部分は、インポートの際に記入した Short name だ。
なお、Hentai-Diffusion とモデルのインポートのやり方は、下記のブログさまで勉強させていただきました。ありがとうございます。
今日もInvokeAIで遊ぶ – Smile Peace〜かなうなら全ての人に笑顔と安らぎを〜
プロンプトについては、こういう便利なサイトもある。
それにしても面白すぎる
こんなオモロいのなんで。
ひとは、それほどまでに絵を描きたかったんだろうか。絵を描きたいんだけど、労力は惜しみたかったんだろうか。筆者の場合はそうだったんだろう、たぶん。
ひとつに、必ずしも思っていた通りの絵が出来るわけじゃない、というところにゲーム性みたいなものがあるんだと思う。ガチャ、的な。望んでいた以上の物が出来て、驚かされるときもあるし。
いずれにせよ、もっと遊びたおしながら勉強してみたい気がした。
最近のコメント