
【画像生成AI】 Negative Prompt は必要か? AI の創造性を解き放つ!
はじめに
こんにちは、きまま / Easygoing です。
今日は 画像生成AI の Negative Prompt について考えます。
お題:夜のスナップショット
今回のお題は、夜のスナップショットです。

町を歩いている時に、ふとした瞬間に見かけた表情を切り取ってみます。
AI はプロンプトをどう再現する?
私たちは、AI で生成したい画像のイメージしながら プロンプトを入力しています。

赤:目的の画像
緑:Conditioning(プロンプトを入れると生成される画像)
入力したプロンプトを実際の画像と関連付けるのが CLIP で、その結果生成されるのが Conditioning と呼ばれる画像です。
プロンプトの効果が足りない
CLIP は画像と言語のキャプション付けで訓練されていますが、その精度はあまり高くありません。
多くの場合、入力したプロンプトの効きは 私たちが期待するよりも不足 しています。
そのため、画像生成AI ではプロンプトの効果を増強する何らかの方法が必要になってきます。
CFG scale でプロンプトを増強する!
プロンプトの効果を増強するときに、最初に使われるのが CFG scale です。

CFG scale:Classifier-Free Diffusion Guidance scale
分類器なし(外部モデルを使わない)拡散誘導スケール
CFG scale は入力した数値に従って、プロンプトの効果を倍増させています。
基準が大切!
CFG scale を使うとき、その基準となる点が大切です。
画像生成AI は、どの AI でも学習段階や計算処理の過程で様々なノイズを発生しています。

もしプロンプトを入力せずに画像を生成した場合でも、こうしたノイズの影響を受けるので生成される画像は 本来のゼロ点とは異なってきます。
Unconditioning を基準にする!
そこで、プロンプトを入力しないで生成した画像を Unconditioning と呼び、これを基準として利用します。
画像を生成する時、Unconditioning から Conditioning に向かって矢印を描き、さらに CFG scale を掛けることでプロンプトの効果を増強します。

図を見ると、CFG scale を使うことで生成される画像が前よりも目標に近づいていることが分かります。
Negative Prompt で基準をずらす!
さらに、この仕組みを応用して考案されたのが Negative Prompt です。
先ほど見てきたように、Unconditioning は本来はプロンプトを空で入力します。

これに対して、Negative Prompt は Unconditioning にもプロンプトを入力することで、基準そのものをずらして いきます。
右側の図では、Negative Prompt を使ってうまく基準をずらすことにより矢印の向きが変わり、先ほどより目的の画像に近づいていることが分かります。
Negative Prompt は影響が大きい!
Negative Prompt はそもそもの基準点をずらすので、イラスト全体にかなり大きな影響 を与えます。
Negative Prompt には一般的に生成したくないものを入力しますが、その影響は単に特定のものを描写しないようにするだけではありません。

現在の 画像生成AI はたくさんの設定項目があるので、Negative Prompt で大きく基準をずらすと 自分の立ち位置を見失なう 危険もあります。
Negative Prompt を使う時は、常にそのバランスを意識しながら 最低限の利用 を心がける必要があります。
Negative Prompt が有効なケース
それでは、Negative Prompt はどのような場合に有効なのでしょうか?
Stable Diffusion 1 はプロンプトの再現性が低かった
Stable Diffusion 1 の時代は、CLIP の制限からプロンプトの再現性があまり良くありませんでした。

Stable Diffusion 1 に搭載された CLIP-L は、理解できる単語数が少なく、また学習に使われたデータも限られていました。
Stable Diffusion 1 でプロンプトの再現性を上げるには、CFG scale を大きく 設定するとともに、Negative Prompt を多く入力 して Unconditioning を負の方向に引っ張り、少しでも目標に近付ける必要がありました。
カスタムモデルに使用が明記されているケース
その後に登場した SDXL でも、Negative Prompt が有効なケースがあります。
それは、カスタムモデルに Negative Prompt の使用が明記されている 場合です。

例:Animagine-XL 3.1 の推奨 Negative Prompt
nsfw, lowres, (bad), text, error, fewer, extra, missing, worst quality, jpeg artifacts, low quality, watermark, unfinished, displeasing, oldest, early, chromatic aberration, signature, extra digits, artistic error, username, scan,
この場合、カスタムモデルは Negative Prompt を入力することを前提に調整 されているので、Negative Prompt を入力した方が質の高い画像を生成できます。
正攻法は CLIP の改良!
CFG scale と Negative Prompt は、うまく使えばイラストの品質が上がりますが、実際はかなり調整が難しい機能です。
プロンプトの再現性を上げることを考えた場合、正攻法は CLIP の改良 です。

CLIP の性能を上げることにより、Conditioning 自体を目的の方向に近づける ことができ、CFG scale や Negative Prompt を使わなくてもプロンプトの再現性を上げることができます。
SDXL:CLIP-L を大幅に強化した CLIP-G
改良型 CLIP-L:CLIP-G に匹敵する性能の CLIP-L
今までに画質を上げるために様々な方法を試してきましたが、その中でもこの CLIP-L のアップグレード が画質の改善に一番効果があると感じています。
2024.12.31 追記
改良型 CLIP-L の効果を実際の画像で比較してみました。
T5xxl で強力にサポート
プロンプトを再現性を上げるもう一つのアプローチは、T5xxl の導入です。
T5xxl は CLIP とは違って、それ自体は画像認識能力を持ちませんが、高度な文章の理解力をもとに、入力したプロンプトを 最適な形にして CLIP に渡しています。

2024年6月以降に登場した Stable Diffusion 3 と Flux.1 は、この T5xxl を搭載して Conditioning の精度が大きく向上したので、negative prompt は入力する必要がない とアナウンスされています。
AI の創造性とは?
さて、残りの記事では AI の創造性について考えてみます。
私たちからプロンプトを受け取ったあと、AI はどのような画像をイメージしているのでしょうか?

AI の一番自由な表現を考えた場合、Conditioning が AI がプロンプトから思い浮かべたイメージそのもの にあたります。
Conditioning をそのまま出力する
それでは、この Conditioning をそのまま出力してみましょう。
Conditioning を出力するには、次の2つの方法があります。
CFGスケールを1に設定する
先ほどの図から、CFG scale は次のように計算することができます。

生成画像 = Unconditioning + (Conditioning − Unconditioning) × CFG scale
この式を見ると、CFG scaleが 1の時は Unconditioning が打ち消されて無くなる のが分かります。
厳密にはいくらかの誤差が生じるので、完全に無くなるわけではありませんが、それでも CFG scale を 1 にすると Unconditioning の影響を限りなくゼロに近づけることができます。
Positive と Negative に同じプロンプトを入力する
もう一つは、Positive と Negative に 全く同じプロンプトを入力する 方法です。

この場合、Conditioning と Unconditioning は完全に一致するので、Unconditioning の影響を全て排除することができます。
そして、この状態だとプロンプトから感じたイメージをそのまま描写するので、AI は 最大の創造性 を発揮します
Flux.1 はバリエーションが少ない?
Flux.1 と SD 3.5 は、T5xxl の導入によってプロンプトの再現性が大きく改善しました。
2024年8月に登場した Flux.1 は、イラスト生成の失敗が少なく圧倒的に高い完成度を誇っています。

しかし Flux.1 を使っていると、以前目にしてきた 意外性を感じるイラスト を見る機会が減ったように思います。
T5xxl はプロンプトを汲み取るのが優秀な分、場合によっては 気を利かせすぎている のかもしれません。
これついて、SDXL のゆらぎを Flux.1 で再現する試みを今でも続けています。
まとめ:AI の創造性を解き放つ!
CFGスケールは低めにする
negative prompt は最小限で
AI の本来のイラストを見てみよう
画像生成AI をはじめたとき、AI は自分が欲しいイラストを描く手段だと思っていました。
しかし、圧倒的な構図力をはじめとした AI の表現を見ていると、AI 自由にイラストを生成してもらい、完成品ができるように少し誘導する ことが人間の役目だと考えるようになりました。
いろいろ考えて、最近は CFG scale を 1〜2 程度に設定するようにしています。
改良型 CLIP や質の高いモデルが無料で公開されていることに感謝しながら、これからも画像生成を楽しんでいきたいと思います。
最後までお読みいただきありがとうござます!