質の悪いAI生成画像でStable Diffusion XLをより賢くした実験
(minimaxir.com)- Stable Diffusion XL 1.0は1024x1024画像を標準で生成できるオープンソースモデルであり、diffusers対応とrefinerモデルのおかげで個人実験の参入障壁が下がっている
- Dreambooth LoRAはモデル全体を再学習せず、小さなアダプターだけを学習することで、特定の概念を素早く追加でき、共有もしやすい方式である
- 中核となる実験は、SDXLが作った歪んだ低品質画像を
wrongに結び付けて学習させた後、それをnegative promptとして入れ、生成結果が改善するかを比較したもの wrongLoRAは複数のプロンプトで、照明、質感、レイアウト、手や腕の表現、プロンプト忠実度を、素のSDXLや単純なwrongnegative promptより良くした事例を示した- 悪い画像を選び、モデルが避けるべき方向を学習させるという点で、negative LoRAやRLHFに近いアプローチであり、データ生成と学習時間にはまだ改善の余地がある
SDXL 1.0と実験環境
- Stability AIは先月、Stable Diffusion XL 1.0を公開し、オープンソースとして配布した
- SDXLは、別の回避策なしで1024x1024解像度の画像を標準生成できるオープンソースモデルの1つで、より多くのディテールを出せる
- モデルは2つの部分で構成される
- base model: 基本の画像生成を担当
- refiner model: ディテールを大きく改善し、速度オーバーヘッドもないため、可能なら併用が推奨される構成
- Hugging FaceのdiffusersはSDXLと性能最適化をサポートしており、サンプルコードを少し変えるだけで実験できる
- 実験はGoogle Cloud PlatformのSpot instanceでNVIDIA L4 GPUを使って行われた
- コストは1時間あたり合計**$0.24**
- 1024x1024画像1枚の生成に約22秒
- 中級クラスのGPUでは一度に画像1枚しか生成できない
- より低い解像度では高速になるが、結果はかなり悪くなるため推奨されない
diffusersのプロンプト重み付けとDreambooth LoRA
- diffusersは、従来のStable Diffusion実験では使っていなかった2つの機能をサポートする
- プロンプト重み付け
- Dreambooth LoRAの学習と推論
- プロンプト重み付けはcompelを活用し、単語やフレーズの重要度をより数学的に調整する
- 単語に
+または-を複数付けて、結果の埋め込みにおける重要度を上げたり下げたりする - フレーズを括弧で囲み、
San Francisco landscape by Salvador Dali, (oil on canvas)+++のように特定の媒体表現を強められる
- 単語に
- テストでは、この方式によってStable Diffusion 2.0以降で難しくなったプロンプト調整の大半が緩和された
- デフォルトの
guidance_scaleは7.5 - Max Woolfは13を好み、この記事のLoRA例もすべて
guidance_scale13を使っている
- デフォルトの
- Dreamboothは、少数の元画像とトリガーキーワードでStable Diffusionに特定の概念を学習させる手法である
- LoRAはStable Diffusionモデル全体ではなく、視覚モデル向けの小さなアダプターだけを学習する
- 単一の低価格GPUで約10分で学習可能
- 最終的なモデル+LoRAの品質はフルファインチューニングとほぼ同等
- 小さなバイナリファイルとして保存され、共有しやすい
- 一般にStable Diffusionのファインチューニングと呼ばれる作業は、LoRA生成であることが多い
- 同時に有効化できるLoRAは1つで、複数LoRAのマージは可能だが繊細な作業になる
Ugly Sonic LoRAで確認したSDXLの潜在力
- LoRAが広く使われる前は、textual inversionでテキストエンコーダーに概念を学習させていたが、学習に時間がかかり、結果の扱いが難しいこともあった
- 以前、Stable Diffusionの元データセットに存在しなかったミームキャラクターUgly Sonicをtextual inversionで学習させたが、結果はまちまちだった
- SDXLの可能性を確認するため、Ugly SonicをLoRAで再学習した
- Hugging Faceのtrain_dreambooth_lora_sdxl.py scriptを使用
- 一部パラメータは調整したが、基本的にはそのままで動作した
- 学習済みのUgly Sonic LoRAは、さまざまなプロンプトで以前よりはるかに良く、一貫した画像を生成した
wrong LoRA実験の設計
- 以前のnegative prompt関連のtextual inversion実験をSDXL LoRAで再実施し、歪んで品質の低い画像を
wrongプロンプトに結び付けて学習させた - 目的は、
wrongをnegative promptとして使ったとき、モデルがそのような画像から離れ、より歪みの少ない画像を作れるかを確認することだった - synthetic
wrong画像はSDXL自体で生成した- wrong image generator Jupyter Notebookを作成
blurry、bad handsのような悪い画像タイプをより明確に出すため、さまざまなプロンプト重み付けを使った- 高解像度の低品質画像を作るために、再びSDXLを使う必要があった
- 生成された
wrong画像は、2000年代のパンクロックのアルバムカバーのように見えたり、一見正常でもよく見ると不快なuncanny valley特性を持っていたりする - sdxl-wrong-loraはSDXL base modelに読み込まれる
- refinerにはLoRAは不要
- 比較用のJupyter Notebookも公開されている
比較方法と代表的な結果
- 比較対象は3つである
- LoRAなしのbase + refinerパイプライン
- LoRAなしで
wrongをnegative promptとして入れたパイプライン wrongLoRAを適用し、wrongをnegative promptとして入れたパイプライン
- すべての生成は同じseedを使って写真の構図を近く保ち、
wrongnegative promptとLoRAの影響を比較しやすくした A wolf in Yosemite National Park, chilly nature documentary film photography- ベースモデルに
wrongを入れると、森の画像に葉や奥行きが一部追加される - LoRAは照明、影、葉のディテールをさらに改善し、オオカミがカメラを見る構図に変えた
- ベースモデルに
An extreme close-up of a wolf in Yosemite National Park, chilly nature documentary film photography- LoRAの結果は質感、生き生きとした印象、鮮明さでより良い
- 単に
wrongプロンプトを追加するだけでも視点が変わる
a large delicious hamburger (in the shape of five-dimensional alien geometry)++++, professional food photography- いくつものプロンプトエンジニアリングの試みにもかかわらず、5次元エイリアン幾何学ハンバーガーはうまく処理できなかった
- ベースSDXLは
alienを想定以上に文字通りに受け取ったような結果を出す - LoRAは、人が食べにくい「エイリアン」ハンバーガーと、よりきらびやかな演出を作る
lossless PDF scan of the front page of the January 2038 issue of the Wall Street Journal featuring a cover story about (evil robot world domination)++- テキストの可読性はStable Diffusion 2.0より改善されたが、3条件とも似通っている
- LoRAは、より現代的な紙面構成、多様な記事レイアウト、見出しの相対的なフォントの太さを改善する
- ベースモデルは
wrongnegative promptを入れても、紙面が単調で古い茶色の紙のように見える
USA President Taylor Swift (signing papers)++++, photo taken by the Associated Press- ベースSDXLでは右腕が非常に非現実的で、
wrongだけを追加するとさらに悪化する - LoRAでは腕の問題が修正され、ジャケットの色も黄みがかった白ではなく、よりはっきりした白に近づく
- ただしSDXL 1.0で人物を作るのは依然として難しく信頼しづらく、手は細かく見ない方がいいという含みもある
- ベースSDXLでは右腕が非常に非現実的で、
追加例で見られた変化
realistic human Shrek blogging at a computer workstation, hyperrealistic award-winning photo for vanity fair- 手や照明がより良くなり、服のディテールや背景もより興味深くなる
pepperoni pizza in the shape of a heart, hyperrealistic award-winning professional food photography- ペパロニのディテールや熱で生じた泡がよりよく見え、縁の過剰なペパロニが減り、クラストがよりカリッとして見える
presidential painting of realistic human Spongebob Squarepants wearing a suit, (oil on canvas)+++++- Spongebobに鼻が戻り、スーツのボタンが増える
San Francisco panorama attacked by (one massive kitten)++++, hyperrealistic award-winning photo by the Associated Press- LoRAは、実際にプロンプトに従おうとする試みを示す
hyperrealistic death metal album cover featuring edgy moody realistic (human Super Mario)++, edgy and moody- Marioの比率がゲームキャラクターにより近づき、キャラクターの照明がより鋭く陰鬱になる
公開資料と再現方法
wrongLoRAはHugging Faceで公開されている- diffusers以外のインターフェースでは効果は保証できない
- 画像生成に使用したノートブックはGitHub repositoryで公開されている
- 一般的なSDXL 1.0 + refiner +
wrongLoRA用のColab Notebookは無料のT4 GPUで実行できる - 記事で使われた生成画像の高解像度版はpost source codeで見られる
なぜwrong LoRAは機能したのか
- 当初の予想は、
wrongLoRAが単純に画像品質や鮮明さを高めるというものだったが、実際の結果は、SDXLがプロンプトの意図により忠実に振る舞う方向に近かった - 技術的には、negative promptは拡散過程が始まる潜在空間の領域を設定する
- LoRAなしで
wrongnegative promptを使う場合 - LoRAを適用して
wrongnegative promptを使う場合 - この2つのケースの開始領域は同じである
- LoRAなしで
- 直感的には、LoRAが高次元潜在空間の望ましくない領域を開始領域により近い形へ再形成し、通常の生成がその領域に到達する可能性を下げ、結果を改善したと解釈できる
- 悪い画像でSDXLを学習させて改善する方法は、技術的にはRLHFの一形態と見なせる
- OpenAIはポジティブなユーザー相互作用でモデルを改善し、ネガティブな振る舞いを暗黙的に減らしている
- この実験は、ユーザーが悪いと選んだ画像を使ってポジティブな振る舞いを暗黙的に増やす方向である
- Dreambooth LoRAは、大規模言語モデルほど多くの入力データを必要としない
残る開発余地と次の実験
- negative LoRAにはまだ改善すべき点が多い
- synthetic dataset生成パラメータをさらに磨ける
- LoRAをより長く学習できる
- 他のLoRAとマージして性能を高められるかもテスト対象である
- 特に
wrongLoRAとUgly Sonic LoRAの組み合わせが例として挙げられている
- 特に
- SDXLはControlNet用diffusersモデルもサポートする
- ControlNetは生成画像の全体形状や構図を強く制御できる
- ControlNetもLoRAと一緒に使える
- AI画像生成の品質改善研究の理由として、透明性のあるAIジャーナリズムが強調されている
- 再現可能なプロンプトとJupyter Notebookの公開が含まれる
- 現在のベンチャーキャピタル環境では、業界の新しいAI画像生成改善が公開されない可能性があると見ている
- プロのアーティストをAIで置き換えることを支持も容認もしないという立場も併せて示している
1件のコメント
Hacker News の意見
パーソナライズされた RLHF という概念は本当に興味深い
特定の生成AIシステムとのやり取りが増えれば、個人の好みに寄せて出力を意味のある形で調整できるだけのインタラクションデータが蓄積されそう。UIが改善されて、このプロセスができるだけ透明になるとよい
製品化の観点では、生成されたすべての画像に「いいね/よくない」フィードバックを付け、
wrongを上書きする任意のテキストラベルを追加する程度なら簡単に見える。十分な人間のフィードバックが蓄積されるか、毎晩バッチ処理を回して新しい LoRA を個人の好みに合わせて再学習できるプロンプトから候補画像をN枚作り、1枚を選んで詰めていく暗黙的なツリー探索からも、人間のフィードバックを収集できる。より明示的には、バッチを素早く順位付け/採点するUIや、反復的な改善ステップごとに気に入らない画像を捨てるゴミ箱を用意し、後からプロジェクト別/全体のLoRA更新に否定的フィードバックをまとめて反映することもできる
画像生成直後にキー入力で反応する、ごく短いフィードバックループを作ると、最短の反復周期がどこまで行けるのかも気になる。数時間デバイスに張り付いて、1秒に1件ずつ約1万件の好みを集めれば、モデルは個人的に好みそうな画像をはるかにうまく出せるようになるのだろうか? ただ、かなり強烈で『時計じかけのオレンジ』のような感じもする
記事では
wrong画像の数を見つけられなかったが、コードをざっと見るとキーワード13個に対して各キーワード6枚程度で、多くはなさそう。約100件のフィードバックだけでモデルをここまで調整したのだとしたら、驚くほど少ない量だAI Horde はボランティアが提供したGPUで運用されるオープンソースの分散クラスターで、Stability.ai が一部GPUリソースを提供してA/Bテストを回している
AI Horde のUIである Lucid Creations や、自作の ArtBot からSDXLモデルで画像をリクエストすると、画像を2枚受け取る。片方は SDXL v1.0、もう片方は更新されたモデルで生成されるが、どちらなのかは分からない
ユーザーは2枚のうち気に入った方を選ぶだけでよく、結果は Stability.ai に戻され、分析されて将来の画像モデルに反映される
さらに AI Horde と LAION も同様に協力し、ユーザー定義の美的評価を同じ目的に提供している
https://aihorde.net/
https://dbzer0.com/blog/stable-diffusion-xl-beta-on-the-ai-h...
https://dbzer0.itch.io/lucid-creations
https://tinybots.net/artbot
https://laion.ai/blog/laion-stable-horde/
ただし、一部はあまり有用ではない。例えば「random text」は、ときどき古いSMSアプリのような結果を出すようだ
LoRAはうまく機能し、画像4〜5枚でも足りるが、それはより古く小さい Stable Diffusion での話だった。なのでSDXLでは画像をより多く使い、LoRAも少し長めに学習させた。比較すると、Ugly Sonic LoRA は約14枚を使っていて、おそらく過学習していたと思う
まだ初期段階だが、中心的な洞察は、テキストであれ画像であれ、単一モデルであれモデルチェーンであれ、多くの生成AIフローは何らかのフィードバック信号に合わせて調整される必要があるため、それを支援する基本インフラを作るのは理にかなっている、ということだ。初期デモの1つがまさにこのようなフローで、実際のモデル重みの調整の代わりに、安価な代替手段として プロンプト改善 を使っていた
大まかには、ほぼネイティブなPythonでフローを簡単に記述し、評価者のような「人間コンポーネント」の実行まで含めて生成フローの実行を追跡できる、Pythonレベルの中核インフラを作ろうとしている。タイムトラベル/巻き戻し/再実行、自動gradio UI、FastAPIもサポートしているが、後ろの2つはまだ非常に実験的だ
中期的には、どんな生成フローでも「人間評価」フローで包み、APIやgradio UIとして自動デプロイしたうえで、RLHF、ファインチューニング、生成サブコンポーネントのA/Bテストといった複数の手法で調整しやすくしたい
今は「骨組み」をきちんと固めることに集中しているが、クイックスタート文書 https://github.com/agentic-ai/enact/blob/main/examples/quick... と README https://github.com/agentic-ai/enact/tree/main#why-enact を見ると、方向性はかなり分かるはず。試してくれる人や貢献してくれる人を探している
こうしたシステムはすでに、人間のフィードバックに応じて、良いものは高く、悪いものは低く採点するよう学習されているのではないか?
Mom testに似ていて、人に評価してくれと尋ねると、その質問自体が評価に影響する
アップスケールのフローは使えるが、DiscordベースのMidjourneyのように制限される必要はない。フルサイズの画像をすべて表示し、ユーザーがコピー/保存/右クリックしたかといった行動も検出できる
Stable Diffusionでアートを作るのが本当に楽しい趣味になった
SD 1.5/2.0とSDXLの差はものすごく、品質がこんなに速く良くなっているのは印象的
まだSDXLは使っていないけれど、1.5はかなり使ってきた
これまでは、より高い解像度と、より高い「品質」くらいに理解していたけど、realistic vision 3を長く使っていて品質面で困ったことはなかった。アップスケーリングを使えば、より高い解像度も必要なかった
5年ほど前、一部のデータサイエンティストの間でPCの全キーストロークの記録を残すのが流行ったけれど、今になってそのデータが実際かなり役に立つようになったのを見ると少しうらやましい
好きなアニメ画像3万枚のコレクションがあって、5年前に美的スコアで競争形式のランキングまで付けていたので、こういう用途にはかなり使えそう
すごくいい。近いうちにこのアイデアを自分でも回してみるつもり。自分も少し科学者なので :)
数日前に面白いことをやってみた。SDXL Base ModelをDiffusersで使い、いろいろなスタイルのプロンプトを混ぜて画像を生成し、その画像でLoRAを学習させてから、このLoRAと学習セット生成に使ったプロンプトでもう一度生成した
結果として効果がさらに強まり、よりグリッチっぽく、より奇妙で、高解像度感のあるものになった
結果はhttps://imgur.com/gallery/vUobKPKにある
当然、この生成物でもう一つ別のLoRAを学習させ、この過程を繰り返す予定
考えてみると、Diffusersの77トークン制限を回避し、はるかに多くのスタイルを開発するかなり良い方法だ
LoRAはhttps://replicate.com/galleri5/nammehで試せる。GitHubアカウントが必要
近いうちにCivitAIにも上げる予定
LoRAをcivitai.comとStable Diffusion Redditにも上げてくれるとうれしい
結果はかなり良さそうで、試すのが楽しみ。生成画像の熱が冷めたとは知らなかったけど、自分は今も定期的に使っているので、ずっと話題になっているように感じる
CivitaiがLoRAを取り込んで公開してくれた: https://civitai.com/models/128708/sdxl-wrong-lora
SDXLにあまり興奮しなかったとしたら、画像品質がものすごく跳ね上がったという感じがなかったからだ。サイズが2倍になったのは良いが、いつも1024x1024の画像を生成したいわけではないので、それは問題にもなる
いまだにサードパーティが学習したSD 1.5モデルを使っているが、出力は本当に良く、アップスケーリング方法も5つほどあって、少なくとも1つは拡大しながら新しいディテールを追加してくれる
少し関連する話として、理由はまだよく分からないけれど、自分がStable Diffusion XL向けに作ったLoRAは、ごく一般的なネガティブプロンプトを入れたときだけうまく動く
自分の顔写真6枚でファインチューニングしたのだが、ポジティブプロンプトだけを使うと、生成されたキャラクターは自分にあまり似ない。ところが「low quality」のような一般的なネガティブ語を追加すると、突然自分の顔の描写がほぼ正確になる
複数のモデルを学習してみたし、さまざまな学習率や学習エポック数でもずっと同じだった
結局この現象は、何らかの形でこの記事でminimaxirが観察したことを生み出す原因とつながっている気がする
生成画像AIの熱が冷めて、SDXLのリリースが全体として静かに過ぎたという話には同意しない
自分が話した人たちの範囲では理由は2つあった。第一に、より高いVRAMと計算要件。第二に、特化型のSD1.5モデルより結果の品質が低いと見なされていること
どちらか一つでも違っていれば、はるかに人気が出ていたはずだと確信している
ただ結局のところ、ほとんどの人は特化型SDXLモデルが特化型1.5モデルを実際に超えられるのか見守っているところ
軽く触っただけの大半の人にとっては、ちょっといじるおもちゃに近いと思う。熱心なSDファンは……おそらくハードコアなものを作っているのだろう
XLはポルノに弱い。Stabilityは自分たちが作ったものに怖くなり、「安全」側にヘッジしようとした。Kate MiddletonやEmma Watsonのポルノがあまりにもそれらしくなってはいけないから
人々はより良いものが出るまで、特にポルノでより良いものが出るまで1.5を使い続けるだろう
この概念は新しくない。civit.aiには、手や悪い解剖構造を直すためにネガティブプロンプトに入れるnegative embeddingsがたくさんある
今回の記事は、技術的なレベルでは同じ仕組みで動作しないnegative LoRAについてのもの
90年代の「カウンターカルチャー vs 同じくカウンターカルチャーだがMTVに出ているカウンターカルチャー」という矛盾した場の中で育った影響なのか、プロンプトが「award winning photo for vanity fair」のようなタグ参照で終わっているのを見ると、この生成画像の波に加わりたくないという深い欲求が湧いてくる
こうした記事でプロンプト作成者が使う標準的なタグ接尾辞が何であれ、似たように感じる
「LoRAは一度に1つしか有効化できない」という話は、少なくともauto1111ではまったく事実ではない