西川和久の不定期コラム
次世代Stable Diffusion(SDXL)をWindows上で一発で使用可能にする「Fooocus」
2023年8月16日 06:13
Stable Diffusionを扱えるWeb UIはいろいろあるが、インストールや設定が難しそうで、CUDAが使えるPCはあるものの、二の足を踏んでる方も多いのではないだろうか。そこに登場したのが「run.bat」一発で起動でき、簡単操作のSDXL専用「Fooocus」。手元で動かしてみたので試用レポートをお届けしたい。
SDXLを使う方法はいろいろあるけれど……
今年(2023年)、2023年7月26日に次世代Stable DiffusionであるStable Diffusion XL(以降SDXL)のリリースとなった。現在最もポピュラーなStable Diffusion 1.5(以降SD 1.5)のリリースが2022年10月20日なので、1年待たずしての登場だ。
SD 1.5とSDXLの大きな違いはざっくり、学習ベースが512×512ドットから1,024×1,024へ。1pass式からbase+refinerの2pass式になった……という2点。理屈はともかくとして、学習ベースの解像度が上がっているので、出力画像の大幅クオリティアップが期待できる。
本連載でも何度か扱ったが、専門のクラウドサービスを除いてAI画像生成を扱うのに一般的なのは「AUTOMATIC1111 / stable-diffusion-webui」だろうか。ただし、SD 1.5とSDXLで構造が違うためアプリ側の対応が必要。リリース直後は少しバタついたものの、今は多くのアプリで問題なく生成可能だ。
以下、SDXLが扱えるアプリ、代表的な3つの起動直後の画面を並べてみた。いかがだろうか? マニアックな感じでなかなかカッコいいが、一般やビギナーにはハテナだらけの画面になっている。筆者も当初は随分手間取った。参考までにStableSwarmUIはStability AIつまり本家の作ったWeb UI。まだα版で機能は揃っていないが、本家だけに今後期待したいアプリとなる。
そこに登場したのが今回ご紹介するLvmin Zhang氏作、Fooocus。ほかアプリのようにSD 1.5 + SDXL対応を追加したパターンではなく、SDXL専用版だ。彼はControlNetの論文およびStabule Diffusionの拡張機能も公開しているなかなかの切れ者@スタンフォード大学。仕上がり具合にも期待できる。まず起動直後の画面をご覧いただきたい。
下にAdvancedのチェックボタンはあるものの、基本はPromptを入力して[Generate]ボタンを押すだけと激簡単操作となっている。「簡単過ぎるので出てくる画像は大したことないのでは?」っと思ってしまうが、GitHubのReadmeにある「Portrait of the father」を入れるとご覧の通り。凄まじいばかりの画像が出来あがる。
GitHubにあるReadmeによるとFooocusの開発経緯は、
Fooocus is an image generating software.
Fooocus is a rethinking of Stable Diffusion and Midjourney’s designs:
・Learned from Stable Diffusion, the software is offline, open source, and free.
・Learned from Midjourney, the manual tweaking is not needed, and users only need to focus on the prompts and images.
Fooocus has included and automated lots of inner optimizations and quality improvements. Users can forget all those difficult technical parameters, and just enjoy the interaction between human and computer to "explore new mediums of thought and expanding the imaginative powers of the human species"
つまり、Midjourneyのようにユーザーはプロンプトと画像に集中するだけで済むよう、多くの内部最適化と品質向上を自動化したということらしい。
「こんな凄い絵が出るならインストールが大変なのでは!?」と勘ぐってしまうが、Windowsだと激簡単。Fooocusをダウンロードして適当なフォルダへ解凍(7zなのがちょっと難点)、そこにあるrun.batをPowerShellから起動すれば終わり。加えてアップデートも自動なのでメンテナンスフリーだ。
システム要件は、CUDA@NVIDIAが動きVRAM 4GB以上(メモリは8GB以上)。とは言え、フルに使うにはVRAM 8GBは必要そうだ。今のところ、CUDAでLinuxは対応しているが、AMD RadeonやIntel Arc、Mac M1|M2などには対応していない(予定にはある)。
なおGoogle Colabは対応しているので、ローカルに該当するPCがなくても大丈夫。ここからNotebookを開き、実行すれば後は同じだ。
Windowsならrun.batで一発起動!
では実際にインストールしてみる。GitHub自体はここにあるが、具体的には以下の通り。
- このファイルをダウンロード
※ 後に変わるかもしれないので、こちらで確認 - Fooocus_win64_1-1-10.7zを適当なフォルダに展開
- 展開するとrun.batがあるので、それをPowerShellで実行
たったこれだけだ。後は必要なCheckpointやPythonおよびライブラリなどを自動的にダウンロード、環境設定し、準備ができるとアプリとともにWebブラウザが起動する。Checkpointは1本6.5GBほどあり(baseとrefinerで2本必要)、初回起動するまでは結構な時間がかかるが、2回目以降はすぐに起動する。
作動確認はPromptに英語で何か入れれば、画像が2枚生成されるはずだ。SDXLをこんなに簡単に使えるとは、いろいろ触ってきた筆者でさえも驚きのアプリとなる。
なお、生成された画像は[Fooocusホームフォルダ]/outputsに日付のフォルダが作られ、そこにpngで入っている。
ちょうど執筆中に--listen --share --portのオプションが追加された。--listenはLAN上のほかのPCからhttp://xxx.xxx.xxx.xxx:7860/でアクセス可能に、--shareはGradioのグローバルurlで外部からもアクセス可能に、--portはデフォルトの7860を変更できる。run.batにこんな感じで追記すれば使用可能だ。
run.bat
.\python_embeded\python.exe -s Fooocus\entry_with_update.py --listen
Advancedをチェックすると……
「Advanced」にチェックを入れると右にパネルが現れ、3つのタブで別れている。1つは「Setting」。ここは生成する時のパフォーマンスや解像度を指定する。パフォーマンスは速度優先(デフォルト)とクオリティ優先で後述するstep数などが異なる。解像度のデフォルトは1,152×896ドット。並んでいる解像度は一見多そうだが、縦位置と横位置で2倍になっているだけだ。各々の解像度はSDXLで最適とされているもの。SD 1.5では512×512や512×768だったので、一回り大きくなっているのが分かる。
次に一度に生成する枚数。デフォルトは2。Seedはこれを固定すると、ほかの設定を変えなければ同じ絵になる。-1はランダム。そしてNegative Promptは手足が3本以上だったり、出てほしくないものを記述する。デフォルトはなし。
余談になるが、Promptに見えているlike a K-POP idolは、Japanese beautiful womanだけだと割と普通の子が出るため、可愛い子を出すための呪文だ(笑)。もちろんJ-POP idolでも固有名詞(効く場合がある)などでもOK。お好みで……と言ったところ。
2つ目はStyle。詳細は後述するが、ここで生成したい絵柄を選ぶことができる。上からなし、シネマティック(デフォルト)、3Dモデル、アナログフィルム、アニメ……っと言った感じに並んでいる。先のPortrait of the fatherはデフォルトのシネマティックだったが、ここでは試しにsai-photographicを選んでみた。普通のデジイチで撮った感じの仕上がりとなる。
Styleに関してはSemon氏と彼の仲間が、Googleシートに一覧をまとめてあるので、興味のある人はご覧頂きたい。全部で105種類にも及ぶため作るのは大変だったのではないだろうか。
3つ目のAdvancedは、SDXLのbase Checkpoint、refiner Checkpoint、LoRA(アドオンの小型モデル)の設定となる。LoRAはほかのWeb UIと少し違っており、通常はPormpt内に<lora:xxxx:0.5>などと書くが(xxxxはLoRA名)、Fooocusではこのように最大5つまでを指定する。数字は重み。大きくするほど効きが強くなる。負の値も可能。デフォルトでsd_xl_offset_example-lora_1.0が入っているが、これは0.5以下の場合、なしよりも常に良い結果が得られるとのこと。
またbaseとrefinerの関係だが、baseで絵柄を作り、refinerで細部をチューンする感じになっている。動きを見ているとパフォーマンス:速度優先の時は、30step中20をbase、10をrefiner。クオリティ優先の時は、60step中40をbase、20をrefinerに割り当てている。筆者のRTX 4070Ti(12GB)で、前者が11秒、後者が20秒。約2倍の差がある。
本来refinerの効き具合を調整できるのだが、今のところFooocusでは該当項目が見当たらず、被写体によってはちょっとまずいことになるケースも。それは強目にrefinerを通した時、顔が結構(それも悪い方へ)変わってしまうのだ。
これもあり、Checkpointを美女系に切り替え、グラビアっぽいのを出す時にはrefinerをnoneに設定している。この場合、step全てがbase側に割り当てられる。SDXL標準のCheckpointよりそれっぽいのになっているのがお分かり頂けるだろうか。
なお、SDXL専用のCheckpointやLoRAはcivitaiにかなり上がっているので、興味のある人はダウンロードして試して欲しい。ダウンロードしたファイルは[Fooocusホームフォルダ]/models/checkpointsかlorasにそれぞれ入れれば良い。
簡単高画質の仕掛けは?
SD 1.5やSDXLをほかのWeb UIで触ったことのある人なら「え! これでだけでこんな絵が!?」と思うだろう。というのも、通常Promptにはたとえば「Portrait of the father」の他に、画質改善の呪文だったり、絵柄の呪文だったり、Negative Promptへも出てほしくないものを色々書く。それが一切ないのになぜ? となる。
これはStyleに仕掛けがある。[Fooocusホームフォルダ]/modules/sdxl_styles.pyの中を見ると以下のような記述がある。つまり{prompt} に入力した部分をはめ込んでいるのだ。先に書いた画質改善や絵柄、Negative Promptはプリセットで既に設定済み、と言うわけだ。
たとえばsai-analog filmではvintage, Kodachromeの記述があるが、sai-photographicにはない。Negative Promptはどちらにもpaintingがある。sai-animeにはanime artworkと書かれており、Negative Promptにはphotoの記述がある。StyleのNoneは入力したものがそっくりそのままPromptになる。
modules/sdxl_styles.py
styles = [
{
"name": "None",
"prompt": "{prompt}",
"negative_prompt": ""
},
{
"name": "sai-analog film",
"prompt": "analog film photo {prompt} . faded film, desaturated, 35mm photo, grainy, vignette, vintage, Kodachrome, Lomography, stained, highly detailed, found footage",
"negative_prompt": "painting, drawing, illustration, glitch, deformed, mutated, cross-eyed, ugly, disfigured"
},
{
"name": "sai-photographic",
"prompt": "cinematic photo {prompt} . 35mm photograph, film, bokeh, professional, 4k, highly detailed",
"negative_prompt": "drawing, painting, crayon, sketch, graphite, impressionist, noisy, blurry, soft, deformed, ugly"
},
{
"name": "sai-anime",
"prompt": "anime artwork {prompt} . anime style, key visual, vibrant, studio anime, highly detailed",
"negative_prompt": "photo, deformed, black and white, realism, disfigured, low contrast"
},
なおこれはComfyUIのsdxl_prompt_stylerまんま取り込み+αといった構造になっている。
そしてもう1つは、冒頭のComfyUIの画面を思い出してほしいが、このアプリは、ノードを組み合わせ独自の処理を可能にする(通常Workflowと呼ばれている)、かなりマニアックな構成になっている。civitaiには独自のWorkflowがそれなりに上がっているので(Filter: Other、SDXL 1.0)、試してみると面白い。
コードを全部見たわけではないので、あくまでも推測だが、ComfyUIのrepositoriesがまんま入っていることがあり、ベースにしていることは間違いなさそうだ。ただ独自のWorkflowではなく、ComfyUIの利用可能なパーツを直接叩いている感じだろうか。このあたりはControlNetを作った氏ならでは、といったところ。とにかくこれまで試したSDXL対応Web UIの中ではあっさりしている割に出来がいいので驚いている。
以上のようにFooocusは、SDXLをrun.bat一発で使えるようになるWeb UIだ。特に得意な被写体であれば凄まじい画像を生成。もはや実写と見分けがつかない。
そして機能は日に日にリクエストに答え増加中(笑)。commitもかなり頻繁に行なわれている。既に初期版にはなかったCheckpointの切替とLoRAは対応済なので個人的には画像にMeta情報保存(これがないともう一度同じ絵を出したくてもできない)、Seedのリサイクル(左に同じ)、CFG Scale/refinerの強弱設定、そしてUpscale対応……これだけあればAUTOMATIC1111で普段使う部分とほぼ同等になる。後はControlNetが使えるようになれば完璧だが、シンプルがコンセプトなだけにさすがにそこまではしないだろう(多分)。
いずれにしても今後が非常に楽しみなFooocus。SD 1.5で物足らなかったり、AI画像生成に興味のある方はぜひ一度試してほしい。