見出し画像

そうだ!AI画像生成をちゃんと勉強しよう💡7章:CFGスケールとシード値とか

※勉強しているのは、Stable Diffusion、SeaArt系になります。

ここ数日新しいことを学びすぎて脳みそがパンクしないか心配です😇
一度では覚えきれないのは分かっているので、後で何回も見返せるように、将来の自分のために頑張って記事を書いていこうと思いますw

ついでに誰かの役に立つ記事になってればいいな~と欲張っちゃったりもしてます😫

今日は、「CFGスケール」「シード値」「画像サイズ」「バッチカウント・バッチ数」を勉強します!

それでは本日も等身大の私でいきますよろしくお願いします( • ̀•́ )✧




CFGスケールについて

CFGは「Classifier-Free Guidance」の略で、画像を生成する際にどれだけテキストプロンプトに忠実に従うかを調整するためのパラメータです。

どうやって働くの?

CFGスケールは通常、1から20くらいの範囲で設定します。この数値が低いと、生成される画像はプロンプトにあまり忠実ではなく、逆に高いと非常に忠実になります。

  • 低いCFGスケール(例えば、1や5):

    • モデルはプロンプトにあまり縛られず、より自由に画像を生成します。

    • 生成される画像がプロンプトと少し違っているかもしれません。

    • 想像力が働きやすく、予想外の結果が得られることもあります。

  • 高いCFGスケール(例えば、15や20):

    • モデルはプロンプトに非常に忠実に従います。

    • 生成される画像はプロンプトの内容に非常に近いものになります。

    • 指示通りの正確な画像を生成したい場合に有効です。


CFGスケールの使用例

例えば、「雪が降る森の風景」を生成したいとします。

・CFGスケールが低い場合 :
モデルは「雪が降る森の風景」というプロンプトに対して、森の風景はあるけど雪が降っていない画像を生成するかもしれません。または、雪が降っているけど森ではない風景になるかもしれません。

CFGスケールが高い場合 :
モデルは「雪が降る森の風景」というプロンプトに非常に忠実に従い、確かに雪が降る森の風景が生成されます。プロンプトの内容に非常に近い画像が得られます。


まとめ

CFGスケールは、テキストプロンプトにどれだけ厳密に従うかを調整するためのものです。
低いスケールでは自由度が高く、予測できない画像が生成されることがありますが、高いスケールではプロンプト通りの正確な画像が生成されます。
このスケールを調整することで、生成される画像の自由度や正確さをコントロールできます。



シード値について

「シード値を固定すると同じ画像が生成できる」っていうのは聞いたことあったからやってみたことはあるけど、詳しくは知らないので掘っていきます。

シード値は、画像を生成するための「スタート地点」を決める数値です。
この数値を使うことで、同じテキストプロンプトを使っても、異なるシード値を使うと異なる画像が生成されます。

シード値の役割

  • 乱数のスタート地点 : シード値は、コンピューターが乱数を生成するときの「スタート地点」を決めます。乱数は、一見ランダムなように見えますが、シード値が同じなら、同じ順番で同じ乱数を生成します。

  • 再現性 : 同じシード値を使うことで、同じテキストプロンプトを使っても毎回同じ画像を生成することができます。逆に、シード値を変えると違う画像が生成されます。

ChatGPTくんに聞いたけど難しい…乱数ってなんだよ…
これも聞いてみよう!

乱数ってなに?…

乱数とは、特定のパターンがなく、予測できないような数字のことです。
例えば、サイコロを振ったときに出る目のように、どの数字が出るかはわかりません。

コンピューターは完全にランダムな数を生成するのが難しいため、特定の計算方法(アルゴリズム)を使って「擬似乱数」というものを作ります。
擬似乱数は見た目はランダムですが、実は決まった計算手順に従って生成されています。


シード値を例を使って説明1

例えば、「シード値が1234」の場合と「シード値が5678」の場合で「猫の画像」を生成するとします。

  • シード値が1234の場合:

    • テキストプロンプト「猫」を入力し、シード値1234を使うと、特定の猫の画像が生成されます。

  • シード値が5678の場合:

    • 同じテキストプロンプト「猫」を入力しても、シード値を5678に変えると、異なる猫の画像が生成されます。

  • 再現性:

    • また、再度シード値1234を使って「猫の画像」を生成すると、最初に生成された猫の画像と全く同じ画像が得られます。


シード値を例を使って説明2

例:友達と同じゲームをプレイ

  1. シード値を決める: 例えば、友達と一緒に同じシード値(例えば42)を使ってゲームを始めるとします。

  2. 同じシード値、同じ結果: シード値が同じなら、ゲームの中で出てくるランダムなイベント(宝箱の中身や敵の出現場所など)はいつも同じになります。だから、友達と同じ体験を共有できます。

  3. 異なるシード値、異なる結果: もし、別のシード値(例えば99)を使ったら、同じゲームでもランダムなイベントの結果が変わるため、異なる体験ができます。

まとめ

シード値は、同じテキストプロンプトで異なる画像を生成したり、同じ画像を再生成したりすることができます。
シード値をうまく使うことで、画像生成の再現性や多様性をコントロールすることができます。


なんとなく分かったきた気がする。
ランダムにしたかったら-1、同じ画像を出したかったら同じシード値を使えばいいんですね。

CFGスケールとシード値の近くにあるので、
WidthとHeight、Batch countとBatch sizeについても学んじゃおうと思います。



画像サイズ(WidthとHeight)について

生成される画像のサイズを変更する時にここの値を変えます。
デフォルトは512×512の正方形になっています。

Widthが横幅でHeightが縦幅です(そんなこと知ってるよ常識でしょって思う人もいるかもだけど、私はこの辺りまで確認しないと安心できないという…w)

横長の画像を作りたいときは 768×512
縦長の画像を作りたいときは 512×768

などにします。コンピュータ的に8の倍数がいいみたいです。


画像サイズを大きくすることのデメリット

画像のサイズを大きすぎるとパソコンへの負荷が高くなったり、
以下のようなデメリットがあります。

1. 計算リソースの増加

  • メモリ使用量:

    • 画像の解像度が高くなると、生成するために必要なメモリ量が増加します。高解像度の画像は、ピクセル数が多いため、各ピクセルに対する計算が増え、メモリの消費も増加します。

    • メモリ不足が原因で、計算が途中で停止したり、クラッシュすることがあります。

  • 計算時間の増加:

    • 画像サイズが大きくなると、それに比例して生成にかかる計算時間も増加します。これは、各ステップで処理するデータ量が増えるためです。

    • 大きな画像を生成するためには、より長い時間が必要となり、特に低速なハードウェアでは顕著です。

2. モデルの性能への影響

  • 品質の低下:

    • モデルが大きな画像を生成する際、特定のディテールやクオリティが犠牲になることがあります。高解像度の画像を生成するためには、モデルがより多くの細部を学習する必要があり、それがうまくいかない場合、全体の品質が低下することがあります。

    • 特に訓練データが高解像度に対応していない場合、生成される画像のディテールがぼやけたり、不自然なアーティファクトが発生する可能性があります。

3. ストレージの消費

  • ファイルサイズの増加:

    • 高解像度の画像はファイルサイズが大きくなるため、ストレージの消費が増加します。これにより、保存や転送が困難になることがあります。

    • 特に大量の高解像度画像を生成する場合、ストレージの管理が問題となります。

4. 実用性の低下

  • 表示や編集の難易度:

    • 高解像度の画像は、表示や編集が難しくなることがあります。高性能なディスプレイや編集ソフトウェアが必要となり、一般的なデバイスではスムーズに扱えない場合があります。

    • ウェブページやアプリケーションに組み込む際、ロード時間が長くなるため、ユーザーエクスペリエンスが低下することがあります。


意外にも画像サイズを大きくすることによるデメリットがたくさんありますね。
大きな画像にしたい場合は、小さく作ってアップスケールなどの方法を使のが一般的みたいです。
アップスケールについても追々勉強しますっ。



Batch count(バッチ数)とBatch size(バッチサイズ)について

この2つのパラメータを調整することで、Stable Diffusionで生成される画像の総数や、各バッチで処理される画像の数を制御することができます。
ChatGPTくんにわかりやすい例を考えてもらいました!

Batch count(バッチカウント)

  • 意味: 何回バッチ処理を繰り返すかを指します。

  • 例え: すべてのパンケーキを焼くためにフライパンで何回繰り返して焼くか。

  • 具体例: 全部で12枚のパンケーキを焼くために、フライパンで3回焼くとします(1回で4枚ずつ)。これがバッチカウント3です。

Batch size(バッチサイズ)

  • 意味: 一度に処理される画像の数を指します。

  • 例え: フライパンの上に同時に焼くパンケーキの枚数。

  • 具体例: フライパンに一度に4枚のパンケーキを焼くとします。これがバッチサイズ4です。


バッチ処理とは…

一度に複数のデータをまとめて処理する方法のことです。これは、コンピューターが仕事を効率よくこなすための手法です。


パンケーキでの具体的なバッチ処理の例


例1: 小さなバッチ

  1. 設定:

    • バッチカウント = 3

    • バッチサイズ = 2

  2. 説明:

    • フライパンに一度に2枚のパンケーキを焼きます(バッチサイズ2)。

    • これを3回繰り返します(バッチカウント3)。

  3. 結果:

    • 合計で6枚のパンケーキが焼けます(3回 × 2枚 = 6枚)。


例2: 大きなバッチ

  1. 設定:

    • バッチカウント = 2

    • バッチサイズ = 5

  2. 説明:

    • フライパンに一度に5枚のパンケーキを焼きます(バッチサイズ5)。

    • これを2回繰り返します(バッチカウント2)。

  3. 結果:

    • 合計で10枚のパンケーキが焼けます(2回 × 5枚 = 10枚)。

まとめ

  • Batch count(バッチカウント): すべてのパンケーキを焼くために何回繰り返すか(フライパンで焼く回数)。

  • Batch size(バッチサイズ): 一度に何枚のパンケーキを焼くか(フライパンに一度に乗せるパンケーキの数)。


この例を使って、Batch sizeとBatch countの違いとそれぞれの役割が理解しやすくなると思います。
パンケーキの焼き方を変えることで、一度に焼ける枚数や全体の作業回数を調整できるように、Stable Diffusionでもこれらの設定を使って効率的に画像を生成できます。

ChatGPTくんのおかげで理解できました。
あと、パンケーキが食べたくなりました。

一度に生成する画像を多くするには高スペックが求められそうなので、私は1枚ずつの生成になるでしょう。



またよくわからなかったパラメータのことを知ることができました!
まだまだ沢山あるけどがんばっていこうと思います(*⩌⩊⩌*)

おなじみのお世話になっているガイドブックです👇



今日のサムネ生成過程(ChatGPT,DALL-E 3)

私「「そうだ!AI画像生成をちゃんと勉強しよう💡7章:CFGスケールとシード値とか」というタイトルのnote記事を書きました。 このタイトルに合うような画像を作ってください。 要望は、夏服を着たロングヘアーの美少女、日本の少女漫画のようなタッチで、水彩画のようなカラーリングで16:9で描いてください。」

ChatGPTくん「こちらが「そうだ!AI画像生成をちゃんと勉強しよう💡7章:CFGスケールとシード値とか」のタイトルに合うイラストです。ご確認ください。」

私「どうもありがとう!」

以上。



おまけの成果ギャラリーvol.7

Stable Diffusion導入

LeonardAIやSeaArtだと1日に生成できる画像数に限りがあるので練習するには足りない位でした。
(言語化が上手くなくて失敗が多いため)
そこで無課金でどうにか大量に画像生成できないものかと探し回った結果Stable Diffusionにたどり着きました。
それと同時にCivitaiも知りました。

初めはモデルとかよくわからないので一覧から気になるやつを入れてみた気がします。


この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?