序章
最近、様々な大御所がAIを使って生成した神絵をあちこちで見かけるようになったので、単純にネット上からデータを集めて展開し、AI絵の魅力を体験してみました。この記事では、huggingface API に基づいて colab 上に AI ペイントを構築します。
使用手順
1.Huggingface の元の環境アドレス
2. colab GPU リソースを構成する
右上隅の[接続]
。初期化が完了したら、ここをクリックして GPU リソースを割り当てます。
ここで環境が初期化されます。!nvidia-smi を実行して、割り当てられた GPU 構成を表示します。通常、K80、T4、 P100、V100。幸運にも V100 マシンに割り当てられれば、画像の生成ははるかに高速になります。
3. サードパーティのライブラリをインストールする
ディフューザー、scipy、ftfy、transformers などの関連する依存ライブラリをインストールし、アクセラレーションします。
4. モデルをロードする
主流のモデルは次のとおりです。
CompVis/stable-diffusion-v1-4
runwayml/stable-diffusion-v1-5
stackingai/stable-diffusion-2-1-base
statusai/stable-diffusion-2-1
各モデルを読み込むことができます構成を変更することによって。生成された画像の複数のセットを比較すると、V2 バージョンの全体的な効果は V1 よりも優れており、生成された画像の品質も優れていますが、リソースの消費量は比較的高くなります。
モデルロードcuda。
5. 画像生成
プロンプトを変更して必要な画像を生成します
6. 複数の画像の生成
同じテキスト プロンプトに対して複数の画像を生成する場合は、同じテキストを複数回入力するだけです。テキストのリストをモデルに送信できます。複数の画像を表示するヘルパー関数を作成しましょう
from PIL import Image
def image_grid(imgs, rows, cols):
assert len(imgs) == rows*cols
w, h = imgs[0].size
grid = Image.new('RGB', size=(cols*w, rows*h))
grid_w, grid_h = grid.size
for i, img in enumerate(imgs):
grid.paste(img, box=(i%cols*w, i//cols*h))
return grid
num_images = 3
prompt = ["a photograph of an astronaut riding a horse"] * num_images
images = pipe(prompt).images
grid = image_grid(images, rows=1, cols=3)
grid
n*m 個の画像を生成することもできます。
num_cols = 3
num_rows = 2
prompt = ["a photograph of an astronaut riding a horse"] * num_cols
all_images = []
for i in range(num_rows):
images = pipe(prompt).images
all_images.extend(images)
grid = image_grid(all_images, rows=num_rows, cols=num_cols)
grid
7. パラメータの設定
ランダムシード
上記のセルを複数回実行すると、毎回異なる画像が表示されます。決定的な出力が必要な場合は、ランダム シードをパイプラインに渡すことができます。同じシードを使用すると、毎回同じ画像結果が得られます。
import torch
generator = torch.Generator("cuda").manual_seed(1024)
image = pipe(prompt, generator=generator).images[0]
image
反復
推論ステップの数は、num_inference_steps パラメーターで変更できます。一般に、使用するステップが多いほど、結果は良くなります。最新モデルの 1 つである Stable Diffusion は、比較的少ないステップ数でうまく動作するため、デフォルト値の 50 が推奨されます。より迅速な結果が必要な場合は、より小さい数値を使用できます。
import torch
generator = torch.Generator("cuda").manual_seed(1024)
image = pipe(prompt, num_inference_steps=15, generator=generator).images[0]
image
生成される画像の高さと幅
生成される画像のサイズは、高さと幅によって制御されます。
import torch
image = pipe(prompt, height=512, width=512).images[0]
image
ガイダンス_スケール
条件付き信号 (この場合はテキスト) への準拠性とサンプル全体の品質を高める方法。簡単に言えば、分類子を使用しないガイダンスにより、より適切な一致キューの生成が強制されます。デフォルト値は 7.5 です。あまりに大きな数を使用すると、画像は良く見えますが、種類は減ります。
import torch
image = pipe(prompt, guidance_scale=7.5).images[0]
image
サンプル表示
東アフリカの風景、非常に詳細な、デジタルペインティング、コンセプトアート、シャープフォーカス、映画のような照明、ファンタジー、複雑な、エレガント、リアルな、フォトリアリスティック、図、滑らかな
ファイナルファンタジー 3DS のレフィア、窓から少し悲しそうに見つめるレフィア、非常に詳細なデジタル絵画、8k 解像度の
ヨーロッパとアメリカの美しさ、良い姿、とても美しい、魅力的、8k
のかわいいミニメカ、ちび、ディズニースタイル、マンガスタイル、 UHD、HDR、4K、8K
キュートで愛らしい漫画のふわふわの赤ちゃんレア、ファンタジー、夢のような、シュールレアリズム、超かわいい、artstation のトレンド、8k
以上。